weatherboy 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in weatherboy.gemspec
4
+ gemspec
data/README CHANGED
@@ -10,11 +10,11 @@ All classes in Wetherboy are wrapped inside the Weatherboy namespace. The class
10
10
  == Setup
11
11
  Require the gem like you would any other gem.
12
12
 
13
- Then somewhere in your code, create a new Weatherboy::Core object. The initilize method can take an area code, airport code, localweather station code, a city/state combo, or no arguments. Passing a location into the initilize method sets the location attribute used for all API calls.
13
+ Then somewhere in your code, create a new Weatherboy object. The initilize method can take an area code, airport code, localweather station code, a city/state combo, or no arguments. Passing a location into the initilize method sets the location attribute used for all API calls.
14
14
 
15
- weatherboy = Weatherboy::Core.new(90210)
16
- weatherboy = Weatherboy::Core.new("Indianapolis, IN")
17
- weatherboy = Weatherboy::Core.new
15
+ weatherboy = Weatherboy.new(90210)
16
+ weatherboy = Weatherboy.new("Indianapolis, IN")
17
+ weatherboy = Weatherboy.new
18
18
 
19
19
  You can set/change the location at any time via the location attribute of the object.
20
20
 
@@ -26,16 +26,16 @@ You can set/change the location at any time via the location attribute of the ob
26
26
  The location attribute must be set before you can use any API calls.
27
27
 
28
28
  == Retrieving Weather Information
29
- Now that you've created a Weatherboy::Core instance and set a location for it, you're ready to get some weather information.
29
+ Now that you've created a Weatherboy instance and set a location for it, you're ready to get some weather information.
30
30
 
31
- === get_current
32
- The get_current method retrieves the current weather information in the form of a Weatherboy::Current object. It stores the result in the current attribute of the Core class. get_current returns true on a successful result.
31
+ === current
32
+ The current method retrieves the current weather information in the form of a Weatherboy::Current object.
33
33
 
34
- weatherboy.get_current
35
- => true
36
- weatherboy.current.weather
34
+ w = weatherboy.current
35
+ => #<Weatherboy::Current:0x8c3dfe0...
36
+ w.weather
37
37
  => "Overcast"
38
- weatherboy.current.temp_f
38
+ w.temp_f
39
39
  => "31"
40
40
 
41
41
  === Attributes of the Weatherboy::Current class
@@ -59,14 +59,14 @@ The get_current method retrieves the current weather information in the form of
59
59
  * visibility_km
60
60
 
61
61
 
62
- === get_forecasts
63
- The get_forecasts method retrieves future weather predictions in the form of an array of Weatherboy::Forecast objects. It stores the result in the forecsts attribute of the Core class. get_forecasts returns true on a successful result.
62
+ === forecasts
63
+ The get_forecasts method retrieves future weather predictions in the form of an array of Weatherboy::Forecast objects.
64
64
 
65
- weatherboy.get_forecasts
66
- => true
67
- weatherboy.forecasts[0].high_f
65
+ f = weatherboy.forecasts
66
+ => [#<Weatherboy::Forecast:0x8c3dfe0...]
67
+ f[0].high_f
68
68
  => "43"
69
- weatherboy.forecasts[0].conditions
69
+ f[0].conditions
70
70
  => "Mostly Cloudy"
71
71
 
72
72
  === Attributes of the Weatherboy::Current class
@@ -81,16 +81,16 @@ The get_forecasts method retrieves future weather predictions in the form of an
81
81
  * text (Full text of forecast)
82
82
 
83
83
 
84
- === get_alerts ===
85
- The get_alerts method retrieves severe weather alerts and special weather statements in the form of an array of Weatherboy::Alert objects. It stores the result in the alerts attribute of the Core class. get_alerts returns true on a successful result.
84
+ === alerts ===
85
+ The alerts method retrieves severe weather alerts and special weather statements in the form of an array of Weatherboy::Alert objects.
86
86
 
87
- weatherboy.get_alerts
87
+ a = weatherboy.alerts
88
88
  => true
89
- weatherboy.alerts.size
89
+ a.size
90
90
  => 1
91
- weatherboy.alerts[0].date
91
+ a[0].date
92
92
  => "3:40 am PST on January 15, 2008"
93
- weatherboy.alerts[0].description
93
+ a[0].description
94
94
  => "Lake Wind Advisory"
95
95
 
96
96
  === Attributes of the Weatherboy::Alert class
@@ -99,16 +99,15 @@ The get_alerts method retrieves severe weather alerts and special weather statem
99
99
  * message (Usually a HUGE wall of text)
100
100
 
101
101
 
102
- === get_media
103
- The get_media method retrieves local weather webcams of the location and stores them in an array of Weatherboy::Webcam objects in the webcams attribute.
104
- It also gets the Weather Underground radar information and stores is as a Weatherboy::Radar object in the radar attribute.
102
+ === media
103
+ The media method retrieves local weather webcams of the location and stores them in a hash containing Weatherboy::Webcam objects and a Weatherboy::Radar object.
105
104
  get_media returns true on a successful result.
106
105
 
107
- weatherboy.get_media
106
+ m = weatherboy.media
108
107
  => true
109
- weatherboy.radar.image_url
108
+ m[:radar].image_url
110
109
  => "http://www.wunderground.com/radar/radblast.asp?ID=IND&region=b4&lat=39.89311981&lon=-86.18370819"
111
- weatherboy.webcams[2].image_url
110
+ m[:webcams][2].image_url
112
111
  => "http://icons.wunderground.com/webcamramdisk/v/e/VeedersburgBear/1/current.jpg?t=1298845906"
113
112
 
114
113
  === Attributes of the Weatherboy::Radar class
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -1,6 +1,75 @@
1
- require 'weatherboy/alert'
2
- require 'weatherboy/forecast'
3
- require 'weatherboy/current'
4
- require 'weatherboy/webcam'
5
- require 'weatherboy/radar'
6
- require 'weatherboy/weatherboy'
1
+ require "weatherboy/version"
2
+ require "weatherboy/current"
3
+ require "weatherboy/alert"
4
+ require "weatherboy/forecast"
5
+ require "weatherboy/webcam"
6
+ require "weatherboy/radar"
7
+
8
+ class Weatherboy
9
+ require 'net/http'
10
+ require 'rexml/document'
11
+
12
+ attr_accessor :location
13
+ # From http://wiki.wunderground.com/index.php/API_-_XML
14
+
15
+ BASE_URL = "http://api.wunderground.com/auto/wui/geo/"
16
+
17
+ def initialize(loc=nil)
18
+ @location = loc
19
+ end
20
+
21
+ def current
22
+ verify
23
+ doc = makeCall(BASE_URL+"WXCurrentObXML/index.xml?query=#{@location}")
24
+ Weatherboy::Current.new(doc)
25
+ end
26
+
27
+ def alerts
28
+ verify
29
+ alerts = []
30
+ doc = makeCall(BASE_URL+"AlertsXML/index.xml?query=#{@location}")
31
+ doc.elements.each('alerts/alert/AlertItem') do |alert_doc|
32
+ alerts << Weatherboy::Alert.new(alert_doc)
33
+ end
34
+ alerts
35
+ end
36
+
37
+ def forecasts
38
+ verify
39
+ forecasts = []
40
+ doc = makeCall(BASE_URL+"ForecastXML/index.xml?query=#{@location}")
41
+ doc.elements.each('forecast/simpleforecast/forecastday') do |forcastday|
42
+ this_forecast = Weatherboy::Forecast.new
43
+ this_forecast.first_pass(forcastday)
44
+ forecasts << this_forecast
45
+ end
46
+ i = 0
47
+ doc.elements.each('forecast/txt_forecast/forecastday') do |forecastday|
48
+ forecasts[i].second_pass(forecastday)
49
+ i = i + 1
50
+ end
51
+ forecasts
52
+ end
53
+
54
+ def media
55
+ verify
56
+ media = {:webcams => [], :radar => nil}
57
+ doc = makeCall(BASE_URL+"GeoLookupXML/index.xml?query=#{@location}")
58
+ doc.elements.each('location/webcams/cam') do |wc|
59
+ media[:webcams] << Weatherboy::Webcam.new(wc)
60
+ end
61
+ media[:radar] = Weatherboy::Radar.new(doc.elements['location/radar'])
62
+ media
63
+ end
64
+
65
+
66
+ private
67
+
68
+ def verify
69
+ raise "Weatherboy: Location not set. Can't make call." if @location.nil?
70
+ end
71
+
72
+ def makeCall(url)
73
+ return REXML::Document.new( Net::HTTP.get_response(URI.parse(url)).body)
74
+ end
75
+ end
@@ -1,4 +1,4 @@
1
- module Weatherboy
1
+ class Weatherboy
2
2
  class Alert
3
3
 
4
4
  attr_reader :description, :date, :message
@@ -1,4 +1,4 @@
1
- module Weatherboy
1
+ class Weatherboy
2
2
  class Current
3
3
 
4
4
  attr_reader :icon, :weather, :temp_f, :temp_c, :relative_humidity, :wind_dir, :wind_mph, :pressure_mb, :pressure_in, :dewpoint_f, :dewpoint_c
@@ -1,4 +1,4 @@
1
- module Weatherboy
1
+ class Weatherboy
2
2
  class Forecast
3
3
 
4
4
  attr_reader :high_f, :high_c, :low_f, :low_c, :conditions, :icon, :pop, :title, :text
@@ -19,5 +19,4 @@ module Weatherboy
19
19
  end
20
20
 
21
21
  end
22
-
23
22
  end
@@ -1,4 +1,4 @@
1
- module Weatherboy
1
+ class Weatherboy
2
2
  class Radar
3
3
 
4
4
  attr_reader :image_url, :url
@@ -9,5 +9,4 @@ module Weatherboy
9
9
  end
10
10
 
11
11
  end
12
-
13
12
  end
@@ -0,0 +1,3 @@
1
+ class Weatherboy
2
+ VERSION = "1.0.2"
3
+ end
@@ -1,6 +1,5 @@
1
- module Weatherboy
1
+ class Weatherboy
2
2
  class Webcam
3
-
4
3
  attr_reader :handle, :camid, :assoc_station_id, :link, :link_text, :organization, :cameratype, :neighborhood, :zip, :city, :state, :country, :updated, :image_url, :widget_url, :cam_url
5
4
 
6
5
  def initialize(doc)
@@ -21,7 +20,5 @@ module Weatherboy
21
20
  @widget_url = doc.elements['WIDGETCURRENTIMAGEURL'].text
22
21
  @cam_url = doc.elements['CAMURL'].text
23
22
  end
24
-
25
23
  end
26
-
27
24
  end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "weatherboy/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "weatherboy"
7
+ s.version = Weatherboy::VERSION
8
+ s.authors = ["Tony Drake"]
9
+ s.email = ["t27duck@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Retrieve weather information from Weather Underground}
12
+ s.description = %q{A Ruby Gem that connects to Weather Underground's XML API feed. Provides current conditions, future forecasts, weather alerts, and links to weather camera images and weather radars.}
13
+
14
+ s.rubyforge_project = "weatherboy"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata CHANGED
@@ -1,76 +1,61 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: weatherboy
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 1
10
- version: 1.0.1
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Tony Drake
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-02-28 00:00:00 -10:00
12
+ date: 2011-10-29 00:00:00.000000000 -04:00
19
13
  default_executable:
20
14
  dependencies: []
21
-
22
- description: A Ruby Gem that connects to Weather Underground's XML API feed. Provides current conditions, future forecasts, weather alerts, and links to weather camera images and weather radars.
23
- email:
15
+ description: A Ruby Gem that connects to Weather Underground's XML API feed. Provides
16
+ current conditions, future forecasts, weather alerts, and links to weather camera
17
+ images and weather radars.
18
+ email:
24
19
  - t27duck@gmail.com
25
20
  executables: []
26
-
27
21
  extensions: []
28
-
29
- extra_rdoc_files:
30
- - README
31
- files:
22
+ extra_rdoc_files: []
23
+ files:
24
+ - .gitignore
25
+ - Gemfile
32
26
  - README
27
+ - Rakefile
33
28
  - lib/weatherboy.rb
34
- - lib/weatherboy/webcam.rb
35
- - lib/weatherboy/weatherboy.rb
36
- - lib/weatherboy/radar.rb
37
- - lib/weatherboy/forecast.rb
38
29
  - lib/weatherboy/alert.rb
39
30
  - lib/weatherboy/current.rb
31
+ - lib/weatherboy/forecast.rb
32
+ - lib/weatherboy/radar.rb
33
+ - lib/weatherboy/version.rb
34
+ - lib/weatherboy/webcam.rb
35
+ - weatherboy.gemspec
40
36
  has_rdoc: true
41
- homepage: https://bitbucket.org/t27duck/weatherboy
37
+ homepage: ''
42
38
  licenses: []
43
-
44
39
  post_install_message:
45
- rdoc_options:
46
- - --main
47
- - README
48
- require_paths:
40
+ rdoc_options: []
41
+ require_paths:
49
42
  - lib
50
- required_ruby_version: !ruby/object:Gem::Requirement
43
+ required_ruby_version: !ruby/object:Gem::Requirement
51
44
  none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- hash: 3
56
- segments:
57
- - 0
58
- version: "0"
59
- required_rubygems_version: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
50
  none: false
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- hash: 3
65
- segments:
66
- - 0
67
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
68
55
  requirements: []
69
-
70
56
  rubyforge_project: weatherboy
71
57
  rubygems_version: 1.5.2
72
58
  signing_key:
73
59
  specification_version: 3
74
60
  summary: Retrieve weather information from Weather Underground
75
61
  test_files: []
76
-
@@ -1,78 +0,0 @@
1
- module Weatherboy
2
- class Core
3
- require 'net/http'
4
- require 'rexml/document'
5
-
6
- attr_reader :current, :alerts, :forecasts, :webcams, :radar
7
- attr_accessor :location, :debug
8
- #From http://wiki.wunderground.com/index.php/API_-_XML
9
-
10
- BASE_URL = "http://api.wunderground.com/auto/wui/geo/"
11
-
12
- def initialize(loc=nil)
13
- @location = loc
14
- end
15
-
16
- def get_current
17
- verify
18
- doc = makeCall(BASE_URL+"WXCurrentObXML/index.xml?query=#{@location}")
19
- @current = Current.new(doc)
20
- true
21
- end
22
-
23
- def get_alerts
24
- verify
25
- @alerts = []
26
- doc = makeCall(BASE_URL+"AlertsXML/index.xml?query=#{@location}")
27
- doc.elements.each('alerts/alert/AlertItem') do |alert_doc|
28
- @alerts << Alert.new(alert_doc)
29
- end
30
- true
31
- end
32
-
33
- def get_forecasts
34
- verify
35
- @forecasts = []
36
- doc = makeCall(BASE_URL+"ForecastXML/index.xml?query=#{@location}")
37
- doc.elements.each('forecast/simpleforecast/forecastday') do |forcastday|
38
- this_forecast = Forecast.new
39
- this_forecast.first_pass(forcastday)
40
- @forecasts << this_forecast
41
- end
42
- i = 0
43
- doc.elements.each('forecast/txt_forecast/forecastday') do |forecastday|
44
- @forecasts[i].second_pass(forecastday)
45
- i = i + 1
46
- end
47
- true
48
- end
49
-
50
- def get_media
51
- verify
52
- @webcams = []
53
- @radar = nil
54
- doc = makeCall(BASE_URL+"GeoLookupXML/index.xml?query=#{@location}")
55
- doc.elements.each('location/webcams/cam') do |webcam|
56
- @webcams << Webcam.new(webcam)
57
- end
58
- @radar = Radar.new(doc.elements['location/radar'])
59
- true
60
- end
61
-
62
-
63
- protected
64
-
65
- def verify
66
- raise "Weatherboy: Location not set. Can't make call." if @location.nil?
67
- end
68
-
69
- def makeCall(url)
70
- return REXML::Document.new( Net::HTTP.get_response(URI.parse(url)).body )
71
- end
72
-
73
- def debugging?
74
- @debug == true
75
- end
76
-
77
- end
78
- end