noaa-weather 0.1.4 → 0.1.5

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.tar.gz.sig CHANGED
Binary file
@@ -11,12 +11,12 @@ OptionParser.new do |opts|
11
11
  options[:site] = s
12
12
  end
13
13
 
14
- opts.on(:REQUIRED,"-lat","--lattitude","find weather by lat/lng (requires -lng)") do |lt|
15
- options[:lat]=lt
14
+ opts.on(:REQUIRED,"-t","--lattitude","find weather by lat/lng (requires -b)") do |t|
15
+ options[:lat]=t
16
16
  end
17
17
 
18
- opts.on(:REQUIRED,"-lng","--longititude","find wather by lat/lng (requires -lat)") do |lg|
19
- options[:lng]=lg
18
+ opts.on(:REQUIRED,"-g","--longititude","find wather by lat/lng (requires -t)") do |g|
19
+ options[:lng]=g
20
20
  end
21
21
 
22
22
  end.parse!
@@ -55,8 +55,8 @@ class CachedGeocode
55
55
  end
56
56
 
57
57
  class Noaaweather < CachedGeocode
58
- VERSION = '0.1.4'
59
- attr_accessor :lattitude,:longitude, :start_time
58
+ VERSION = '0.1.5'
59
+ attr_accessor :lattitude,:longitude, :start_time, :conditions
60
60
 
61
61
  def initialize(site,as_address=false)
62
62
 
@@ -88,12 +88,28 @@ class Noaaweather < CachedGeocode
88
88
 
89
89
  def current_conditions(ashash=false)
90
90
 
91
- self.fetch unless @fetched
92
- _c = @doc.find('/dwml/data/parameters/weather/weather-conditions/value')[0]
93
- if ashash
94
- {:coverage => _c['coverage'],:weathertype => _c['weather-type']}
91
+ self.forecast if self.conditions.nil?
92
+ if Time.now.strftime("%H").to_i < 6 or Time.now.strftime("%H").to_i > 18
93
+ if ashash
94
+ self.forecast['Tonight']
95
+ else
96
+ @ccond ||= sprintf("%s, High of %i, Low of %i and %s",'Tonight',self.forecast['Tonight'][:high],
97
+ self.forecast['Tonight'][:low], self.forecast['Tonight'][:conditions])
98
+ end
99
+ elsif Time.now.strftime("%H").to_i < 18
100
+ if ashash
101
+ self.forecast['Today']
102
+ else
103
+ @ccond ||= sprintf("%s, High of %i, Low of %i and %s",'Today',self.forecast['Today'][:high],
104
+ self.forecast['Today'][:low], self.forecast['Today'][:conditions])
105
+ end
95
106
  else
96
- @ccond ||= sprintf("%s %s",_c['coverage'],_c['weather-type'])
107
+ if ashash
108
+ self.forecast['Today']
109
+ else
110
+ @ccond ||= sprintf("%s, High of %i, Low of %i and %s",'Today',self.forecast['Today'][:high],
111
+ self.forecast['Today'][:low], self.forecast['Today'][:conditions])
112
+ end
97
113
  end
98
114
  end
99
115
 
@@ -110,6 +126,24 @@ class Noaaweather < CachedGeocode
110
126
  @doc = fetch_from_noaa
111
127
  end
112
128
 
129
+ def forecast
130
+ @forecast = fetch_forecast_from_noaa
131
+ @forecast.find('/dwml/data/time-layout')
132
+ _when = @forecast.find('/dwml/data/time-layout')[2].find('start-valid-time').collect {|x| x['period-name'] }[0..5]
133
+ _daily_maxt = @forecast.find('/dwml/data/parameters/temperature')[0].find('value').collect {|x| x.content }[0..2]
134
+ _daily_mint = @forecast.find('/dwml/data/parameters/temperature')[1].find('value').collect {|x| x.content }[0..2]
135
+ _weather = @forecast.find('/dwml/data/parameters/weather/weather-conditions').collect {|x| x['weather-summary'] }[0..5]
136
+ count = 0
137
+ sub_count = 0
138
+ _dat = {}
139
+ while count < 6
140
+ _dat[_when[count]] = {:high => _daily_maxt[sub_count.floor], :low => _daily_mint[sub_count.floor], :conditions => _weather[count] }
141
+ count += 1
142
+ sub_count += 0.5
143
+ end
144
+ self.conditions = _dat
145
+ end
146
+
113
147
  private
114
148
  def fetch_from_noaa
115
149
 
@@ -125,11 +159,28 @@ class Noaaweather < CachedGeocode
125
159
  par = XML::Parser.string(_dat)
126
160
  @doc = par.parse
127
161
  end
162
+
163
+ def fetch_forecast_from_noaa
164
+ _dat = if File.exists?("/tmp/forecast-#{@site}") && (File.ctime("/tmp/forecast-#{@site}") > (Time.now - (3600 * 8)))
165
+ f = open("/tmp/forecast-#{@site}")
166
+ f.read()
167
+ else
168
+ @soap ||= SOAP::WSDLDriverFactory.new('http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl').create_rpc_driver
169
+ _res = @soap.NDFDgenByDay(self.lattitude,self.longitude,self.start_time,7,'12 hourly')
170
+ f = open("/tmp/forecast-#{@site}","w")
171
+ f.write(_res.to_s)
172
+ f.close()
173
+ _res
174
+ end
175
+ par = XML::Parser.string(_dat)
176
+ @doc = par.parse
177
+ end
128
178
 
129
179
  def cache_to_file(dat)
130
180
  f = open("/tmp/weatherfile-#{@site}",'w')
131
181
  f.write(dat.to_s)
132
182
  f.close()
133
183
  end
184
+
134
185
 
135
186
  end
@@ -57,8 +57,9 @@ describe Noaaweather do
57
57
  it "should report the current conditions as a hash with attributes when passed true" do
58
58
  @w.current_conditions(true).should_not be_nil
59
59
  @w.current_conditions(true).should be_an_instance_of(Hash)
60
- @w.current_conditions(true)[:coverage].should_not be_nil
61
- @w.current_conditions(true)[:weathertype].should_not be_nil
60
+ @w.current_conditions(true)[:high].should_not be_nil
61
+ @w.current_conditions(true)[:low].should_not be_nil
62
+ @w.current_conditions(true)[:conditions].should_not be_nil
62
63
  end
63
64
 
64
65
  it "should report if the data is from a cached store or not" do
@@ -78,4 +79,10 @@ describe Noaaweather do
78
79
  @w.should respond_to(:fetch)
79
80
  @w.fetch.should_not be_nil
80
81
  end
82
+
83
+ it "should respond to forecast and return a Hash" do
84
+ @w.should respond_to(:forecast)
85
+ @w.forecast.should_not be_empty
86
+ @w.forecast.should be_an_instance_of(Hash)
87
+ end
81
88
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noaa-weather
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - kognate
@@ -30,7 +30,7 @@ cert_chain:
30
30
  M36Zgg==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-03-23 00:00:00 -04:00
33
+ date: 2009-03-31 00:00:00 -04:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
metadata.gz.sig CHANGED
Binary file