welements 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +1 -0
- data/README.md +62 -0
- data/lib/welements.rb +25 -0
- data/lib/welements/http_service.rb +12 -0
- data/lib/welements/version.rb +3 -0
- data/lib/welements/welements.rb +146 -0
- data/test/data/4-day.xml +116 -0
- data/test/data/KVAY.xml +52 -0
- data/test/data/welements.xml +749 -0
- data/test/test_helper.rb +11 -0
- data/test/test_http_service.rb +35 -0
- data/test/test_integration.rb +10 -0
- data/test/test_welements.rb +112 -0
- metadata +117 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
class TestHttpService < Welements::TestCase
|
4
|
+
def setup
|
5
|
+
HTTP.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_should_get_parseable_results_for_elements
|
9
|
+
doc = Welements::HttpService.new.get_welements(40.72, -73.99)
|
10
|
+
assert doc.find("/dwml/data/parameters[1]/humidity[1]/value").map.count > 1
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def http_service
|
16
|
+
Welements::HttpService.new(HTTP)
|
17
|
+
end
|
18
|
+
|
19
|
+
module HTTP
|
20
|
+
class << self
|
21
|
+
def reset
|
22
|
+
requests.clear
|
23
|
+
end
|
24
|
+
|
25
|
+
def requests
|
26
|
+
@requests ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def get(uri)
|
30
|
+
requests << uri
|
31
|
+
"<test/>"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
class TestIntegration < Welements::TestCase
|
3
|
+
def test_integration
|
4
|
+
forecast = Welements.welements(34.5, -120)
|
5
|
+
assert(forecast.probability_of_precipitation.length > 3, "make
|
6
|
+
sure we get some number of days of results")
|
7
|
+
assert(forecast.temperature_hourly[0][:value] > -10, "temperature in Santa
|
8
|
+
Barbara should be at least 10 C")
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
class TestForecastParameters < Welements::TestCase
|
3
|
+
XML_DOC = LibXML::XML::Document.file(File.join(File.dirname(__FILE__), 'data', 'welements.xml'))
|
4
|
+
|
5
|
+
def test_starts
|
6
|
+
assert_equal Time.parse('2011-12-16T13:00:00-08:00'), forecast.starts, 'forecast starts at 2011-12-16 1pm'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_ends
|
10
|
+
assert_equal Time.parse('2011-12-23T16:00:00-08:00'), forecast.ends, 'forecast ends at 2011-12-07 4pm'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_probability_of_precipitation
|
14
|
+
pops = forecast.probability_of_precipitation
|
15
|
+
assert_equal({:value => 14, :time => Time.parse('2011-12-16T16:00:00-08:00')}, pops[0])
|
16
|
+
assert_equal({:value => 14, :time => Time.parse('2011-12-17T04:00:00-08:00')}, pops[1])
|
17
|
+
assert_equal({:value => 14, :time => Time.parse('2011-12-17T16:00:00-08:00')}, pops[2])
|
18
|
+
assert_equal({:value => 25, :time => Time.parse('2011-12-23T04:00:00-08:00')}, pops[13])
|
19
|
+
assert_equal 14, pops.length, "14 pop metrics"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_relative_humidity
|
23
|
+
rh = forecast.relative_humidity
|
24
|
+
assert_equal({:value => 64, :time => Time.parse('2011-12-17T01:00:00-08:00')}, rh[0])
|
25
|
+
assert_equal({:value => 64, :time => Time.parse('2011-12-17T04:00:00-08:00')}, rh[1])
|
26
|
+
assert_equal({:value => 53, :time => Time.parse('2011-12-17T07:00:00-08:00')}, rh[2])
|
27
|
+
assert_equal({:value => 65, :time => Time.parse('2011-12-23T16:00:00-08:00')}, rh[37])
|
28
|
+
assert_equal 38, rh.length, "38 RH values"
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_temperature_maximum
|
32
|
+
vals = forecast.temperature_maximum
|
33
|
+
assert_equal({:value => 6, :time => Time.parse('2011-12-17T07:00:00-05:00')}, vals[0])
|
34
|
+
assert_equal({:value => 8, :time => Time.parse('2011-12-23T07:00:00-05:00')}, vals[6])
|
35
|
+
assert_equal 7, vals.length, "7 max values"
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_temperature_minimum
|
39
|
+
vals = forecast.temperature_minimum
|
40
|
+
assert_equal({:value => 2, :time => Time.parse('2011-12-16T19:00:00-05:00')}, vals[0])
|
41
|
+
assert_equal({:value => 3, :time => Time.parse('2011-12-22T19:00:00-05:00')}, vals[6])
|
42
|
+
assert_equal 7, vals.length, "7 min values"
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_temperature_hourly
|
46
|
+
vals = forecast.temperature_hourly
|
47
|
+
assert_equal({:value => 3, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
48
|
+
assert_equal 38, vals.length, "38 values"
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_temperature_dew_point
|
52
|
+
vals = forecast.temperature_dew_point
|
53
|
+
assert_equal({:value => -3, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
54
|
+
assert_equal 38, vals.length, "38 values"
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_temperature_apparent
|
58
|
+
vals = forecast.temperature_apparent
|
59
|
+
assert_equal({:value => 0, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
60
|
+
assert_equal 38, vals.length, "38 values"
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_precipitation_liquid
|
64
|
+
vals = forecast.precipitation_liquid
|
65
|
+
assert_equal({:value => 0.00, :time => Time.parse('2011-12-17T01:00:00-05:00')}, vals[0])
|
66
|
+
assert_equal 11, vals.length, "11 values"
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_precipitation_snow
|
70
|
+
vals = forecast.precipitation_snow
|
71
|
+
assert_equal({:value => 0.00, :time => Time.parse('2011-12-17T01:00:00-05:00')}, vals[0])
|
72
|
+
assert_equal 7, vals.length, "7 values"
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_wind_speed_sustained
|
76
|
+
vals = forecast.wind_speed_sustained
|
77
|
+
assert_equal({:value => 3, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
78
|
+
assert_equal 38, vals.length, "38 values"
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_wind_speed_gust
|
82
|
+
vals = forecast.wind_speed_gust
|
83
|
+
assert_equal({:value => 4, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
84
|
+
assert_equal 22, vals.length, "22 values"
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_wind_direction
|
88
|
+
vals = forecast.wind_direction
|
89
|
+
assert_equal({:value => 300, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
90
|
+
assert_equal 38, vals.length, "38 values"
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_cloud_cover
|
94
|
+
vals = forecast.cloud_cover
|
95
|
+
assert_equal({:value => 59, :time => Time.parse('2011-12-17T04:00:00-05:00')}, vals[0])
|
96
|
+
assert_equal 38, vals.length, "38 values"
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_fire_outlook_from_dry_thunderstorms
|
100
|
+
vals = forecast.fire_outlook_from_dry_thunderstorms
|
101
|
+
assert_equal({:value => 'No Areas', :time => Time.parse('2011-12-16T16:00:00-05:00')}, vals[0])
|
102
|
+
assert_equal 3, vals.length, "3 values"
|
103
|
+
end
|
104
|
+
|
105
|
+
def xml
|
106
|
+
@xml ||= Welements::HttpService.new.get_welements(2, 40, -120)
|
107
|
+
end
|
108
|
+
|
109
|
+
def forecast
|
110
|
+
@forecast ||= Welements::ForecastParameters.from_xml(XML_DOC)
|
111
|
+
end
|
112
|
+
end
|
metadata
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: welements
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Mat Malone
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-02-04 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: nokogiri
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 53
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 9
|
32
|
+
- 7
|
33
|
+
version: 0.9.7
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: geokit
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 3
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 5
|
48
|
+
- 0
|
49
|
+
version: 1.5.0
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
description: Ruby API for National Oceanic and Atmospheric Administration weather data
|
53
|
+
email: m2@innerlogic.org
|
54
|
+
executables: []
|
55
|
+
|
56
|
+
extensions: []
|
57
|
+
|
58
|
+
extra_rdoc_files: []
|
59
|
+
|
60
|
+
files:
|
61
|
+
- lib/welements.rb
|
62
|
+
- lib/welements/http_service.rb
|
63
|
+
- lib/welements/welements.rb
|
64
|
+
- lib/welements/version.rb
|
65
|
+
- test/test_welements.rb
|
66
|
+
- test/test_http_service.rb
|
67
|
+
- test/test_helper.rb
|
68
|
+
- test/data/welements.xml
|
69
|
+
- test/data/KVAY.xml
|
70
|
+
- test/data/4-day.xml
|
71
|
+
- test/test_integration.rb
|
72
|
+
- CHANGELOG
|
73
|
+
- README.md
|
74
|
+
homepage: http://github.com/matmalone/welements
|
75
|
+
licenses: []
|
76
|
+
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options:
|
79
|
+
- --line-numbers
|
80
|
+
- --inline-source
|
81
|
+
- --title
|
82
|
+
- Welements
|
83
|
+
- --main
|
84
|
+
- README
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
hash: 11
|
102
|
+
segments:
|
103
|
+
- 1
|
104
|
+
- 2
|
105
|
+
version: "1.2"
|
106
|
+
requirements: []
|
107
|
+
|
108
|
+
rubyforge_project: welements
|
109
|
+
rubygems_version: 1.8.15
|
110
|
+
signing_key:
|
111
|
+
specification_version: 3
|
112
|
+
summary: Ruby API for the National Weather Service's National Digital Forecast Database (NDFD)
|
113
|
+
test_files:
|
114
|
+
- test/test_helper.rb
|
115
|
+
- test/test_http_service.rb
|
116
|
+
- test/test_welements.rb
|
117
|
+
- test/test_integration.rb
|