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.
@@ -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