rubyweather 1.1.1 → 1.1.2
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/README +11 -10
- data/lib/weather/forecast.rb +0 -1
- data/lib/weather/service.rb +1 -3
- data/test/examples_test.rb +71 -0
- metadata +5 -3
data/README
CHANGED
@@ -27,8 +27,8 @@ directory:
|
|
27
27
|
=== Examples
|
28
28
|
|
29
29
|
First, we need to find out the weather.com location code for your city.
|
30
|
-
|
31
|
-
string "Toronto":
|
30
|
+
The following code will print out a list of locations and their codes
|
31
|
+
matching the string "Toronto":
|
32
32
|
|
33
33
|
require 'rubygems'
|
34
34
|
require_gem 'rubyweather'
|
@@ -83,10 +83,10 @@ There are a lot of attributes you can fetch for a forecast. Here are just a few:
|
|
83
83
|
+latest_update+:: The datetime when the conditions were last measured/forecast.
|
84
84
|
|
85
85
|
Additionally, most of the attributes for a given day in the raw weather.com xml data are
|
86
|
-
also directly accessible. For example, you can call <tt>forecast.tomorrow.dewp</tt> to get the dewpoint, because
|
87
|
-
contains a <tt>dewp</tt> element for that day. Have a look at <tt>test/test_weather.xml</tt> to see
|
88
|
-
available in the xml file. Note though that raw xml
|
89
|
-
class casting or unit conversion.
|
86
|
+
also directly accessible. For example, you can call <tt>forecast.tomorrow.dewp</tt> to get the dewpoint, because
|
87
|
+
the xml file contains a <tt>dewp</tt> element for that day. Have a look at <tt>test/test_weather.xml</tt> to see
|
88
|
+
what data is available in the xml file. Note though that raw xml element values will be returned as a string, \
|
89
|
+
without any nice class casting or unit conversion.
|
90
90
|
|
91
91
|
Other programmers are encouraged to add more functionality to the <tt>lib/forecast.rb</tt> module to provide better
|
92
92
|
accessor methods for the underlying xml data. See below for how to obtain subversion access to contribute
|
@@ -95,8 +95,9 @@ your changes back to the project.
|
|
95
95
|
=== Caching Forecast Data
|
96
96
|
|
97
97
|
RubyWeather supports data caching using the memcached[http://www.danga.com/memcached/] daemon. This allows for
|
98
|
-
much quicker response time -- especially if you have a lot of clients accessing the weather data -- and
|
99
|
-
just a polite thing to do in regards weather.com's servers.
|
98
|
+
much quicker response time -- especially if you have a lot of clients accessing the weather data -- and it's
|
99
|
+
just a polite thing to do in regards to weather.com's servers.
|
100
|
+
|
100
101
|
If you have a memcached server running, you can turn on data caching as follows:
|
101
102
|
|
102
103
|
s = Weather::Service.new
|
@@ -108,8 +109,8 @@ From now on, any fetch_forecast calls made on this service will cache their data
|
|
108
109
|
server will not be queried again as long as the data is cached.
|
109
110
|
|
110
111
|
You can check if a forecast came from the cache by calling <tt>#from_cache?</tt>, which returns true if this
|
111
|
-
forecast came from the local cache
|
112
|
-
|
112
|
+
forecast came from the local cache. You can also call <tt>#cached_on</tt> to find out when this forecast was entered
|
113
|
+
into the cache or nil if the forecast didn't come from the cache.
|
113
114
|
|
114
115
|
The above requires that a ruby memcache client be installed. RubyWeather has been tested with the
|
115
116
|
Ruby-MemCache[http://www.deveiate.org/projects/RMemCache] implementation which you can install using:
|
data/lib/weather/forecast.rb
CHANGED
data/lib/weather/service.rb
CHANGED
@@ -19,7 +19,7 @@ module Weather
|
|
19
19
|
# Returns the forecast data fetched from the weather.com xoap service for the given location and number of days.
|
20
20
|
def fetch_forecast(location_id, days = 5)
|
21
21
|
|
22
|
-
days = 5 if days.nil? or days
|
22
|
+
days = 5 if days.nil? or days == 0 or days == ""
|
23
23
|
|
24
24
|
# try to pull the partner_id and license_key from the environment if not already set
|
25
25
|
partner_id = ENV['WEATHER_COM_PARTNER_ID'] unless partner_id
|
@@ -44,7 +44,6 @@ module Weather
|
|
44
44
|
|
45
45
|
# default to metric (degrees fahrenheit are just silly :)
|
46
46
|
unit = imperial ? "s" : "m"
|
47
|
-
puts "#{location_id} #{partner_id} #{license_key} DAYS: #{days.inspect}"
|
48
47
|
host = "xoap.weather.com"
|
49
48
|
url = "/weather/local/#{location_id}?cc=*&dayf=#{days}&prod=xoap&par=#{partner_id}&key=#{license_key}&unit=#{unit}"
|
50
49
|
|
@@ -62,7 +61,6 @@ module Weather
|
|
62
61
|
cache.set("#{location_id}:#{days}", doc.to_s, cache_expiry)
|
63
62
|
end
|
64
63
|
end
|
65
|
-
puts xml
|
66
64
|
doc = REXML::Document.new(xml)
|
67
65
|
|
68
66
|
Forecast::Forecast.new(doc)
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#
|
2
|
+
# Author:: Matt Zukowski (http://blog.roughest.net)
|
3
|
+
# Copyright:: Copyright (c) 2006 Urbacon Ltd.
|
4
|
+
# License:: GNU Lesser General Public License v2.1 (LGPL 2.1)
|
5
|
+
#
|
6
|
+
# This test ensures that the examples in the README run without errors.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require File.dirname(__FILE__) + '/../lib/weather/service'
|
11
|
+
|
12
|
+
if not ENV['WEATHER_COM_PARTNER_ID']
|
13
|
+
puts "WARNING: You should set the WEATHER_COM_PARTNER_ID env variable (i.e. export WEATHER_COM_PARTNER_ID=<your weather.com partner id>) before running this test."
|
14
|
+
end
|
15
|
+
|
16
|
+
if not ENV['WEATHER_COM_LICENSE_KEY']
|
17
|
+
puts "WARNING: You should set the WEATHER_COM_LICENSE_KEY env variable (i.e. export WEATHER_COM_LICENSE_KEY=<your weather.com license key>) before running this test."
|
18
|
+
end
|
19
|
+
|
20
|
+
class ServiceTest < Test::Unit::TestCase
|
21
|
+
TORONTO = "CAXX0504"
|
22
|
+
|
23
|
+
# Note that for this test to work the WEATHER.COM_PARTNER_ID and WEATHER.COM_LICENSE_KEY
|
24
|
+
# environment variables must be set!
|
25
|
+
|
26
|
+
def setup
|
27
|
+
@service = Weather::Service.new
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_find_location_example
|
31
|
+
assert_nothing_raised do
|
32
|
+
#require 'weather/service'
|
33
|
+
|
34
|
+
service = Weather::Service.new
|
35
|
+
service.partner_id = ""
|
36
|
+
service.license_key = ""
|
37
|
+
|
38
|
+
locations = service.find_location('Toronto')
|
39
|
+
"Matching Locations: " + locations.inspect
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_forecast_example
|
44
|
+
assert_nothing_raised do
|
45
|
+
forecast = @service.fetch_forecast("CAXX0504", 5)
|
46
|
+
|
47
|
+
"Location: %s" % forecast.location_name
|
48
|
+
|
49
|
+
"Current Temperature: %s" % forecast.current.temperature
|
50
|
+
"Current Windspeed: %s" % forecast.current.wind.speed
|
51
|
+
|
52
|
+
"Tomorrow's High: %s" % forecast.tomorrow.high
|
53
|
+
"Tomorrow's Outlook: %s" % forecast.tomorrow.outlook
|
54
|
+
"Tomorrow's Wind Direction: %s" % forecast.tomorrow.wind.direction
|
55
|
+
|
56
|
+
"High 3 days from now: %s" % forecast.day(3).high
|
57
|
+
"Probability of precipitation 4 days from now: %s" % forecast.day(4).pop
|
58
|
+
|
59
|
+
"Probability of precipitation three nights from now: %s" % forecast.night(3).pop
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_caching_example
|
64
|
+
assert_nothing_raised do
|
65
|
+
s = Weather::Service.new
|
66
|
+
s.enable_cache
|
67
|
+
s.cache_expiry = 60 # cached data will expire after 60 seconds; if omitted, the default is 10 minutes
|
68
|
+
s.cache.servers = ['127.0.0.1:11211']
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rubyweather
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.1.
|
7
|
-
date:
|
6
|
+
version: 1.1.2
|
7
|
+
date: 2007-01-11 00:00:00 -05:00
|
8
8
|
summary: Client library for accessing weather.com's xoap weather data.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- test/service_test.rb
|
41
41
|
- test/forecast_test.rb
|
42
42
|
- test/profiler.rb
|
43
|
+
- test/examples_test.rb
|
43
44
|
- test/test_weather.xml
|
44
45
|
- example/weather_portlet_controller.rb
|
45
46
|
- example/weather_32
|
@@ -97,9 +98,10 @@ files:
|
|
97
98
|
test_files:
|
98
99
|
- test/service_test.rb
|
99
100
|
- test/forecast_test.rb
|
101
|
+
- test/examples_test.rb
|
100
102
|
rdoc_options:
|
101
103
|
- --title
|
102
|
-
- RubyWeather 1.1.
|
104
|
+
- RubyWeather 1.1.2 RDocs
|
103
105
|
- --main
|
104
106
|
- README
|
105
107
|
- --line-numbers
|