From 06990cc79f8f9ab48d1adc524cf0c6eac1561b28 Mon Sep 17 00:00:00 2001 From: Tom Kruijsen Date: Sat, 18 Jan 2014 09:59:45 +0100 Subject: [PATCH] Get the last numeric data point from RWS data. Fixes #1 --- lib/lib.coffee | 12 +++++++++--- test/dataTest.coffee | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 test/dataTest.coffee diff --git a/lib/lib.coffee b/lib/lib.coffee index b3b82ef..171fc27 100644 --- a/lib/lib.coffee +++ b/lib/lib.coffee @@ -5,7 +5,7 @@ zip = require 'node-zip' xml2js = require 'xml2js' Location = require('./models').Location -Waterdata = +Waterdata = # RWS open data url url: 'http://www.rws.nl/rws/opendata/meetdata/meetdata.zip' @@ -42,12 +42,11 @@ Waterdata = parameterType = 3 name = 1 lastUpdate = 8 - lastValue = 5 for data, index in dataArray metadata = metadataArray[index] if metadata[parameterType].trim() == 'H10' #callback(metadata[name], parseInt data[lastValue]) - res[res.length] = {lokatie: metadata[name].trim(), waarde:parseInt(data[lastValue]), laatstBijgewerkt: metadata[lastUpdate].trim()} + res[res.length] = {lokatie: metadata[name].trim(), waarde:@getLastValue(data), laatstBijgewerkt: metadata[lastUpdate].trim()} return res # Write the new values to the database for storage @@ -69,6 +68,13 @@ Waterdata = # store the data in the database async.each values, @writeToDb, callback + getLastValue: (values) -> + numbers = values.filter (value) -> + value = value.replace(' ','') + value.length > 0 and (value >=0 or value < 0) + return '-' if numbers.length < 1 + parseInt(numbers[numbers.length-1]) + Metadata = getXml: (url, callback) -> http.get url, (res) -> diff --git a/test/dataTest.coffee b/test/dataTest.coffee new file mode 100644 index 0000000..d0c8487 --- /dev/null +++ b/test/dataTest.coffee @@ -0,0 +1,20 @@ +Waterdata = require('../lib/lib').Waterdata +assert = require 'assert' + +describe 'handle rws water data', -> + + it 'should get the last value if it is numeric', -> + result = Waterdata.getLastValue(['0','1','2','3','4','5']) + assert.equal result, 5 + + it 'should return a numeric value if the last one is not', -> + result = Waterdata.getLastValue(['0','1','2','3','4','f']) + assert.equal result, 4 + + it 'should not return an empty string', -> + result = Waterdata.getLastValue(['0','1','2','3','4','']) + assert.equal result, 4 + + it 'should return a dash if there is no numeric value', -> + result = Waterdata.getLastValue(['n','n','n','n','f']) + assert.equal result, '-'