cinch-forecast 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/README.md +7 -1
  2. data/lib/cinch/plugins/forecast.rb +67 -77
  3. metadata +3 -3
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Gem Version](https://badge.fury.io/rb/cinch-forecast.png)](http://badge.fury.io/rb/cinch-forecast)
2
+ [![Dependency Status](https://gemnasium.com/jonahoffline/cinch-forecast.png)](https://gemnasium.com/jonahoffline/cinch-forecast)
3
+
1
4
  Cinch::Forecast
2
5
  =================
3
6
 
@@ -35,7 +38,7 @@ require 'cinch/plugins/forecast'
35
38
  bot = Cinch::Bot.new do
36
39
  configure do |c|
37
40
  c.server = 'irc.freenode.net'
38
- c.nick = 'Tabin_Pumarejo'
41
+ c.nick = 'Tavin_Pumarejo'
39
42
  c.channels = ['#RubyOnADHD']
40
43
  c.plugins.plugins = [Cinch::Plugins::Forecast]
41
44
  end
@@ -46,6 +49,9 @@ bot.start
46
49
 
47
50
  Enjoy!
48
51
 
52
+ ## Author
53
+ * [Jonah Ruiz](http://www.pixelhipsters.com)
54
+
49
55
  ## Contributing
50
56
 
51
57
  1. Fork it
@@ -8,107 +8,97 @@ module Cinch
8
8
  class Forecast
9
9
  include Cinch::Plugin
10
10
 
11
- API_KEY = ENV['WUNDERGROUND_KEY']
12
- BASE_URL = "http://api.wunderground.com/api/#{API_KEY}/"
13
-
14
-
15
11
  match /forecast (.+)/
16
-
17
- attr_accessor :location, :conditions
18
-
19
12
  def execute(m, query)
20
- @location, @conditions = nil, {}
13
+ ##
14
+ # Gets location using zipcode
15
+ location = geolookup(query)
16
+ return m.reply "No results found for #{query}." if location.nil?
21
17
 
22
- geolookup(query)
23
- get_conditions
18
+ ##
19
+ # Gets the weather conditions
20
+ data = get_conditions(location)
21
+ return m.reply 'Problem getting data. Try again later.' if data.nil?
24
22
 
25
23
  ##
26
- # Reply with the Weather Summary
27
- m.reply(weather_summary)
24
+ # Returns the weather summary
25
+ m.reply(weather_summary(data))
28
26
  end
29
27
 
30
28
  def geolookup(zipcode)
31
- results = open("#{BASE_URL}geolookup/q/#{zipcode}.json").read
32
- data = JSON.parse(results)
33
- @location = data['location']['l']
29
+ location = JSON.parse(open("http://api.wunderground.com/api/#{ENV['WUNDERGROUND_KEY']}/geolookup/q/#{zipcode}.json").read)
30
+ location['location']['l']
34
31
  rescue
35
- "No results found for #{zipcode}"
32
+ nil
36
33
  end
37
34
 
38
- def get_conditions
39
- results = open("#{BASE_URL}conditions#{@location}.json").read
35
+ def get_conditions(location)
36
+ data = JSON.parse(open("http://api.wunderground.com/api/#{ENV['WUNDERGROUND_KEY']}/conditions#{location}.json").read)
40
37
 
41
38
  ##
42
- # Cleanup and store into Hash
43
- clean_up(JSON.parse(results))
44
- rescue
45
- 'No weather data was found.'
46
- end
47
-
48
- def clean_up(data)
49
- ##
50
- # County, State & Country
51
- @conditions.store(:county, data['current_observation']['display_location']['full'])
52
- @conditions.store(:country, data['current_observation']['display_location']['country'])
53
-
54
- ##
55
- # Latitude and Longitude
56
- @conditions.store(:lat, data['current_observation']['display_location']['latitude'])
57
- @conditions.store(:lng, data['current_observation']['display_location']['longitude'])
58
-
59
- ##
60
- # Observation Time
61
- @conditions.store(:observation_time, data['current_observation']['observation_time'])
62
-
63
- ##
64
- # General Weather Information
65
- @conditions.store(:weather, data['current_observation']['weather'])
66
- @conditions.store(:temp_fahrenheit, data['current_observation']['temp_f'])
67
- @conditions.store(:temp_celcius, data['current_observation']['temp_c'])
68
- @conditions.store(:relative_humidity, data['current_observation']['relative_humidity'])
69
- @conditions.store(:feels_like, data['current_observation']['feelslike_string'])
70
- @conditions.store(:uv, data['current_observation']['UV'])
71
-
72
- ##
73
- # Wind Related Data
74
- @conditions.store(:wind, data['current_observation']['wind_string'])
75
- @conditions.store(:wind_direction, data['current_observation']['wind_dir'])
76
- @conditions.store(:wind_degrees, data['current_observation']['wind_degrees'])
77
- @conditions.store(:wind_mph, data['current_observation']['wind_mph'])
78
- @conditions.store(:wind_gust_mph, data['current_observation']['wind_gust_mph'])
79
- @conditions.store(:wind_kph, data['current_observation']['wind_kph'])
80
- @conditions.store(:pressure_mb, data['current_observation']['pressure_mb'])
81
-
82
- ##
83
- # Forecast URL
84
- @conditions.store(:forecast_url, data['current_observation']['forecast_url'])
85
- @conditions.store(:fetched_from, "#{BASE_URL}conditions#{@location}.json")
86
-
87
- @conditions = OpenStruct.new(@conditions)
39
+ # Clean up and return as an OpenStruct
40
+ OpenStruct.new(
41
+ ##
42
+ # County, State & Country
43
+ county: data['current_observation']['display_location']['full'],
44
+ country: data['current_observation']['display_location']['country'],
45
+
46
+ ##
47
+ # Latitude and Longitude
48
+ lat: data['current_observation']['display_location']['latitude'],
49
+ lng: data['current_observation']['display_location']['longitude'],
50
+
51
+ ##
52
+ # Observation Time and General Weather Information
53
+ observation_time: data['current_observation']['observation_time'],
54
+ weather: data['current_observation']['weather'],
55
+ temp_fahrenheit: data['current_observation']['temp_f'],
56
+ temp_celcius: data['current_observation']['temp_c'],
57
+ relative_humidity: data['current_observation']['relative_humidity'],
58
+ feels_like: data['current_observation']['feelslike_string'],
59
+ uv: data['current_observation']['UV'],
60
+
61
+ ##
62
+ # Wind Related Data
63
+ wind: data['current_observation']['wind_string'],
64
+ wind_direction: data['current_observation']['wind_dir'],
65
+ wind_degrees: data['current_observation']['wind_degrees'],
66
+ wind_mph: data['current_observation']['wind_mph'],
67
+ wind_gust_mph: data['current_observation']['wind_gust_mph'],
68
+ wind_kph: data['current_observation']['wind_kph'],
69
+ pressure_mb: data['current_observation']['pressure_mb'],
70
+
71
+ ##
72
+ # Forecast URL
73
+ forecast_url: data['current_observation']['forecast_url']
74
+ )
88
75
  rescue
89
- 'Problem getting data.'
76
+ nil
90
77
  end
91
78
 
92
- def weather_summary
79
+ def weather_summary(data)
93
80
  ##
94
- # Sample Summary using geolookup('00687')
95
- # Weather for: Morovis, PR, US
96
- # Party Cloudy, feels like 85 F (27.1 C)
81
+ # Sample Summary using !forecast 00687
82
+ # Forecast for: Morovis, PR, US
83
+ # Latitude: 18.32682228, Longitude: -66.40519714
84
+ # Weather is Partly Cloudy, feels like 85 F (27.1 C)
97
85
  # UV: 9.5, Humidity: 78%
98
86
  # Wind: From the SE at 1.0 MPH Gusting to 5.0 MPH
99
87
  # Direction: East, Degrees: 90
100
88
  # Last Updated on June 4, 11:25 PM AST
101
89
  # More Info: http://www.wunderground.com/US/PR/Morovis.html
102
90
 
103
- %Q{Weather for: #{@conditions.county}, #{@conditions.country}
104
- #{@conditions.weather}, #{@conditions.feels_like}
105
- UV: #{@conditions.uv}, Humidity: #{@conditions.relative_humidity}
106
- Wind: #{@conditions.wind}
107
- Direction: #{@conditions.wind_direction}, Degrees: #{@conditions.wind_degrees},
108
- #{@conditions.observation_time}
109
- More Info: #{@conditions.forecast_url}}
91
+ %Q{
92
+ Forecast for: #{data.county}, #{data.country}
93
+ Latitude: #{data.lat}, Longitude: #{data.lng}
94
+ Weather is #{data.weather}, #{data.feels_like}
95
+ UV: #{data.uv}, Humidity: #{data.relative_humidity}
96
+ Wind: #{data.wind}
97
+ Direction: #{data.wind_direction}, Degrees: #{data.wind_degrees},
98
+ #{data.observation_time}
99
+ More Info: #{data.forecast_url}}
110
100
  rescue
111
- 'Problem fetching the weather summary.'
101
+ 'Problem fetching the weather summary. Try again later.'
112
102
  end
113
103
  end
114
104
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch-forecast
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-05 00:00:00.000000000 Z
12
+ date: 2013-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cinch
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
91
  version: '0'
92
92
  segments:
93
93
  - 0
94
- hash: 2530530863438312584
94
+ hash: -2870447541984448510
95
95
  requirements: []
96
96
  rubyforge_project:
97
97
  rubygems_version: 1.8.25