welements 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,11 @@
1
+ require 'test/unit'
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'welements')
4
+
5
+ module Welements
6
+ class TestCase < ::Test::Unit::TestCase
7
+ def test_blank
8
+ assert true
9
+ end
10
+ end
11
+ end
@@ -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