yahoo_weatherman 0.5 → 0.6

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.
@@ -6,8 +6,13 @@ module Weatherman
6
6
  # We also use this class to do the i18n stuff.
7
7
  #
8
8
  class Response
9
+
9
10
  attr_accessor :document_root
10
11
 
12
+ attr_accessor :language
13
+
14
+ LANGUAGES = {}
15
+
11
16
  def initialize(raw, language = nil)
12
17
  @document_root = Nokogiri::XML.parse(raw).xpath('rss/channel')
13
18
  @language = language
@@ -179,46 +184,43 @@ module Weatherman
179
184
  method == :to_date ? Date.parse(value) : value.send(method)
180
185
  end
181
186
 
182
- def translate!(attribute)
187
+ def translate!(attributes)
183
188
  if i18n?
184
- translate_text! attribute
185
- translate_locations! attribute
189
+ translate_text! attributes
190
+ translate_locations! attributes
186
191
  end
187
- attribute
192
+ attributes
188
193
  end
189
194
 
190
- def translate_text!(attribute)
191
- if attribute['text']
192
- attribute['text'] = language_config[attribute['code']]
195
+ def translate_text!(attributes)
196
+ if attributes['text']
197
+ attributes['text'] = language_translations[attributes['code']]
193
198
  end
194
199
  end
195
200
 
196
- def translate_locations!(attribute)
197
- locations_config = language_config['locations']
201
+ def translate_locations!(attributes)
202
+ locations_translations = language_translations['locations']
198
203
 
199
204
  %w(city country region).each do |key|
200
- next unless attribute[key]
205
+ next unless attributes.key? key
201
206
 
202
- if translated = locations_config[attribute[key]]
203
- attribute[key] = translated
207
+ if translated = locations_translations[attributes[key]]
208
+ attributes[key] = translated
204
209
  end
205
210
  end
206
211
  end
207
212
 
208
- def language_config
209
- if i18n?
210
- @language_config ||= load_language_yaml!(@language)
211
- end
212
- @language_config
213
+ def language_translations
214
+ LANGUAGES[language] ||= load_language_yaml!
213
215
  end
214
216
 
215
- def i18n?
216
- !!@language
217
+ def load_language_yaml!
218
+ stream = File.read(File.join([I18N_YAML_DIR, language + '.yml']))
219
+ YAML.load(stream)
217
220
  end
218
221
 
219
- def load_language_yaml!(language)
220
- stream = File.read(File.join([I18N_YAML_DIR, language + '.yml']))
221
- @language_config = YAML.load(stream)
222
+ def i18n?
223
+ !!@language
222
224
  end
223
225
  end
224
226
  end
@@ -23,6 +23,17 @@ module Weatherman
23
23
  class Client
24
24
  attr_reader :options
25
25
 
26
+ #
27
+ # Accepts a optional hash containing the client options.
28
+ #
29
+ # Options:
30
+ #
31
+ # +unit+: the unit used for the temperature (defaults to Celsius).
32
+ # "f" => Fahrenheight
33
+ # "c" => Celsius
34
+ #
35
+ # +lang+: the language used in the response
36
+ #
26
37
  def initialize(options = {})
27
38
  @options = options
28
39
  end
@@ -45,7 +56,7 @@ module Weatherman
45
56
  end
46
57
 
47
58
  def degrees_units
48
- options[:degrees_units] || 'c'
59
+ (options[:unit] || 'c').downcase
49
60
  end
50
61
 
51
62
  def get(url)
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
2
+ <rss version="2.0" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
3
+ <channel>
4
+
5
+ <title>Yahoo! Weather - Belo Horizonte, BR</title>
6
+ <link>http://us.rd.yahoo.com/dailynews/rss/weather/Belo_Horizonte__BR/*http://weather.yahoo.com/forecast/BRXX0033_f.html</link>
7
+ <description>Yahoo! Weather for Belo Horizonte, BR</description>
8
+ <language>en-us</language>
9
+ <lastBuildDate>Thu, 18 Mar 2010 12:00 am LST</lastBuildDate>
10
+ <ttl>60</ttl>
11
+ <yweather:location city="Belo Horizonte" region="MG" country="Brazil"/>
12
+
13
+ <yweather:units temperature="F" distance="mi" pressure="in" speed="mph"/>
14
+ <yweather:wind chill="66" direction="100" speed="2" />
15
+ <yweather:atmosphere humidity="88" visibility="6.21" pressure="30.15" rising="0" />
16
+ <yweather:astronomy sunrise="5:59 am" sunset="6:08 pm"/>
17
+ <image>
18
+ <title>Yahoo! Weather</title>
19
+ <width>142</width>
20
+ <height>18</height>
21
+ <link>http://weather.yahoo.com</link>
22
+ <url>http://l.yimg.com/a/i/us/nws/th/main_142b.gif</url>
23
+ </image>
24
+ <item>
25
+
26
+ <title>Conditions for Belo Horizonte, BR at 12:00 am LST</title>
27
+ <geo:lat>-19.95</geo:lat>
28
+ <geo:long>-43.93</geo:long>
29
+ <link>http://us.rd.yahoo.com/dailynews/rss/weather/Belo_Horizonte__BR/*http://weather.yahoo.com/forecast/BRXX0033_f.html</link>
30
+ <pubDate>Thu, 18 Mar 2010 12:00 am LST</pubDate>
31
+ <yweather:condition text="Fair" code="33" temp="66" date="Thu, 18 Mar 2010 12:00 am LST" />
32
+ <description><![CDATA[
33
+ <img src="http://l.yimg.com/a/i/us/we/52/33.gif"/><br />
34
+ <b>Current Conditions:</b><br />
35
+ Fair, 66 F<BR />
36
+ <BR /><b>Forecast:</b><BR />
37
+ Thu - Showers. High: 75 Low: 63<br />
38
+ Fri - Scattered Thunderstorms. High: 79 Low: 63<br />
39
+ <br />
40
+ <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Belo_Horizonte__BR/*http://weather.yahoo.com/forecast/BRXX0033_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
41
+ (provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
42
+ ]]></description>
43
+ <yweather:forecast day="Thu" date="18 Mar 2010" low="63" high="75" text="Showers" code="11" />
44
+ <yweather:forecast day="Fri" date="19 Mar 2010" low="63" high="79" text="Scattered Thunderstorms" code="38" />
45
+ <guid isPermaLink="false">BRXX0033_2010_03_18_0_00_LST</guid>
46
+ </item>
47
+
48
+ </channel>
49
+ </rss>
data/spec/spec_helper.rb CHANGED
@@ -6,10 +6,16 @@ require 'fakeweb'
6
6
  require 'yahoo_weatherman'
7
7
  require 'spec'
8
8
 
9
- def fixture
10
- filepath = File.expand_path(File.dirname(__FILE__) + "/files/belo_horizonte.rss")
9
+ def celsius_fixture
10
+ filepath = File.expand_path(File.dirname(__FILE__) + "/files/belo_horizonte_c.rss")
11
+ File.read filepath
12
+ end
13
+
14
+ def fahrenheight_fixture
15
+ filepath = File.expand_path(File.dirname(__FILE__) + "/files/belo_horizonte_f.rss")
11
16
  File.read filepath
12
17
  end
13
18
 
14
19
  FakeWeb.allow_net_connect = false
15
- FakeWeb.register_uri(:get, "http://weather.yahooapis.com/forecastrss?w=455821&u=c", :body => fixture)
20
+ FakeWeb.register_uri(:get, "http://weather.yahooapis.com/forecastrss?w=455821&u=c", :body => celsius_fixture)
21
+ FakeWeb.register_uri(:get, "http://weather.yahooapis.com/forecastrss?w=455821&u=f", :body => fahrenheight_fixture)
@@ -109,4 +109,20 @@ DESCRIPTION
109
109
  @response.forecasts.last['text'].should == 'Tempestades Intermitentes'
110
110
  end
111
111
  end
112
+
113
+ context 'using fahrenheiht as temperature unit' do
114
+
115
+ it 'should return the temperature as fahrenheight' do
116
+ client = Weatherman::Client.new :unit => 'F'
117
+ response = client.lookup_by_woeid 455821
118
+
119
+ response.units['temperature'].should == 'F'
120
+ response.forecasts.first['low'].should == 63
121
+ response.forecasts.last['low'].should == 63
122
+ response.forecasts.first['high'].should == 75
123
+ response.forecasts.last['high'].should == 79
124
+ response.condition['temp'].should == 66
125
+ end
126
+ end
127
+
112
128
  end
@@ -1,13 +1,13 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "yahoo_weatherman"
3
- gem.version = "0.5"
3
+ gem.version = "0.6"
4
4
  gem.authors = ["Dalto Curvelano Junior"]
5
5
  gem.description = "A ruby wrapper to the Yahoo! Weather feed with i18n support."
6
6
  gem.summary = "A ruby wrapper to the Yahoo! Weather feed with i18n support."
7
7
  gem.files = [
8
8
  "yahoo_weatherman.gemspec",
9
9
  "lib/yahoo_weatherman/image.rb", "lib/yahoo_weatherman/response.rb", "lib/yahoo_weatherman.rb",
10
- "i18n/pt-br.yml", "spec/files/belo_horizonte.rss", "spec/spec_helper.rb",
10
+ "i18n/pt-br.yml", "spec/files/belo_horizonte_c.rss", "spec/files/belo_horizonte_f.rss", "spec/spec_helper.rb",
11
11
  "spec/yahoo_weatherman/response_spec.rb", "spec/yahoo_weatherman/yahoo_weatherman_spec.rb"
12
12
  ]
13
13
  gem.homepage = "http://github.com/dlt/yahoo_weatherman"
metadata CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 5
8
- version: "0.5"
7
+ - 6
8
+ version: "0.6"
9
9
  platform: ruby
10
10
  authors:
11
11
  - Dalto Curvelano Junior
@@ -13,7 +13,7 @@ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
15
 
16
- date: 2010-03-17 00:00:00 -03:00
16
+ date: 2010-03-18 00:00:00 -03:00
17
17
  default_executable:
18
18
  dependencies: []
19
19
 
@@ -31,7 +31,8 @@ files:
31
31
  - lib/yahoo_weatherman/response.rb
32
32
  - lib/yahoo_weatherman.rb
33
33
  - i18n/pt-br.yml
34
- - spec/files/belo_horizonte.rss
34
+ - spec/files/belo_horizonte_c.rss
35
+ - spec/files/belo_horizonte_f.rss
35
36
  - spec/spec_helper.rb
36
37
  - spec/yahoo_weatherman/response_spec.rb
37
38
  - spec/yahoo_weatherman/yahoo_weatherman_spec.rb