ya_yahoo_weather 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,17 +3,26 @@ module YaYahooWeather
3
3
  class Client
4
4
  @@YAHOO_WEATHER_API = "http://weather.yahooapis.com/forecastrss"
5
5
 
6
- def get_weather_conditions_by_woeid(woeid)
6
+ def get_detailed_weather_by_woeid(woeid)
7
7
  begin
8
8
  url = @@YAHOO_WEATHER_API + "?w=" + woeid.to_s + "&u=f"
9
9
  response = do_http_get(url)
10
10
  response_hash = Nori.parse(response)
11
- response_hash['rss']['channel']['item']['yweather:condition']
11
+ # move some specific details to the item level
12
+ item_hash = response_hash['rss']['channel']['item']
13
+ ['yweather:location', 'yweather:wind', 'yweather:atmosphere', 'yweather:astronomy'].each do |key|
14
+ item_hash[key] = response_hash['rss']['channel'][key]
15
+ end
16
+ item_hash
12
17
  rescue => e
13
18
  raise RuntimeError.new("Failed to get weather. woeid => #{woeid.inspect} url => #{url.inspect} e => #{e.inspect}")
14
19
  end
15
20
  end
16
21
 
22
+ def get_weather_conditions_by_woeid(woeid)
23
+ get_detailed_weather_by_woeid(woeid)['yweather:condition']
24
+ end
25
+
17
26
  private
18
27
  def do_http_get(url)
19
28
  Net::HTTP.get_response(URI.parse(url)).body.to_s
@@ -1,3 +1,3 @@
1
1
  module YaYahooWeather
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,6 +1,7 @@
1
1
  require './lib/ya_yahoo_weather'
2
2
 
3
3
  def sample
4
+ # copied from http://developer.yahoo.com/weather/
4
5
  <<END
5
6
  <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
6
7
  <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#">
@@ -51,34 +52,67 @@ END
51
52
  end
52
53
 
53
54
  describe YaYahooWeather::Client do
54
- # copied from http://developer.yahoo.com/weather/
55
55
  describe "#initialize" do
56
56
  it "should instantiate" do
57
57
  client = YaYahooWeather::Client.new
58
58
  end
59
59
  end
60
- describe "#get_weather_conditions_by_woeid" do
60
+ describe "#get_detailed_weather_by_woeid" do
61
61
  context "on success" do
62
- before :each do
63
- @client = YaYahooWeather::Client.new
64
- @client.stub!(:do_http_get).and_return(sample)
62
+ before :each do
63
+ @client = YaYahooWeather::Client.new
64
+ @client.stub!(:do_http_get).and_return(sample)
65
+ @response = @client.get_detailed_weather_by_woeid("mywoeid")
66
+ end
67
+ it "should return non-null result" do
68
+ @response.should_not be_nil
69
+ end
70
+ it "should return conditions" do
71
+ # check this value specifically as a sanity test
72
+ @response['yweather:condition']['@text'].should == 'Mostly Cloudy'
73
+ end
74
+ it "should return the forecast" do
75
+ # check this value specifically as a sanity test
76
+ @response['yweather:forecast'].first['@high'].should == '62'
77
+ end
78
+ it "should return astronomy data" do
79
+ @response['yweather:astronomy']['@sunrise'].should == '7:17 am'
80
+ end
65
81
  end
66
- it "should return non-null result" do
67
- response = @client.get_weather_conditions_by_woeid("mywoeid")
68
- response.should_not be_nil
82
+ context "on error" do
83
+ before :each do
84
+ @client = YaYahooWeather::Client.new
85
+ @client.stub!(:do_http_get).and_raise("Yahoo hates you")
86
+ end
87
+ it "should raise runtime exception" do
88
+ lambda {
89
+ @client.get_weather_conditions_by_woeid("mywoeid")
90
+ }.should raise_exception
91
+ end
69
92
  end
70
- describe "the result" do
93
+ end
94
+ describe "#get_weather_conditions_by_woeid" do
95
+ context "on success" do
71
96
  before :each do
72
- @response = @client.get_weather_conditions_by_woeid("mywoeid")
97
+ @client = YaYahooWeather::Client.new
98
+ @client.stub!(:do_http_get).and_return(sample)
73
99
  end
74
- it "should be a hash" do
75
- @response.instance_of?(Hash).should be_true
100
+ it "should return non-null result" do
101
+ response = @client.get_weather_conditions_by_woeid("mywoeid")
102
+ response.should_not be_nil
76
103
  end
77
- it "should contain the condition code" do
78
- @response['@code'].to_i.should == 28
104
+ describe "the result" do
105
+ before :each do
106
+ @response = @client.get_weather_conditions_by_woeid("mywoeid")
107
+ end
108
+ it "should be a hash" do
109
+ @response.instance_of?(Hash).should be_true
110
+ end
111
+ it "should contain the condition code" do
112
+ @response['@code'].to_i.should == 28
113
+ end
79
114
  end
80
115
  end
81
- end
82
116
  context "on error" do
83
117
  before :each do
84
118
  @client = YaYahooWeather::Client.new
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: ya_yahoo_weather
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - John Hinnegan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-02 00:00:00 -07:00
13
+ date: 2011-06-09 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency