cinch-weatherman 1.0.3 → 1.0.4

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.
@@ -1,3 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  require 'cinch/plugins/weatherman/version'
3
3
  require 'cinch/plugins/weatherman'
4
+ require 'cinch/plugins/weatherman/forecast'
5
+ require 'cinch/plugins/weatherman/weather'
@@ -13,33 +13,36 @@ module Cinch::Plugins
13
13
 
14
14
  self.help = 'Use .w <location> to see information on the weather.'
15
15
 
16
- match /(?:w|weather) (.+)/
16
+ def initialize(*args)
17
+ super
18
+ @append = config[:append_forecast] || false
19
+ end
20
+
21
+ match(/(?:w|weather) (.+)/, method: :weather)
22
+ match(/forecast (.+)/, method: :forecast)
17
23
 
18
- def execute(m, query)
24
+ def weather(m, query)
19
25
  m.reply get_weather(query)
20
26
  end
21
27
 
28
+ def forecast(m, query)
29
+ m.reply get_forecast(query)
30
+ end
31
+
22
32
  private
23
33
 
24
34
  def get_weather(query)
25
- location, temp_f, conditions, updated = get_forcast(query)
26
-
27
- message = "In #{location} it is #{conditions} "
28
- message << "and #{temp_f}°F "
29
- message << "(last updated about #{updated})"
30
-
31
- message
35
+ weather = Weather.new(query).to_s
36
+ weather << " #{Forecast.new(query).append}" if true
37
+ weather
32
38
  rescue ArgumentError
33
39
  "Sorry, couldn't find #{query}."
34
40
  end
35
41
 
36
- def get_forcast(query)
37
- data = WeatherUnderground::Base.new.CurrentObservations(query)
38
- weather = [data.display_location.first.full,
39
- data.temp_f,
40
- data.weather.downcase,
41
- Time.parse(data.observation_time).ago.to_words]
42
- weather
42
+ def get_forecast(query)
43
+ Forecast.new(query).to_s
44
+ rescue ArgumentError
45
+ "Sorry, couldn't find #{query}."
43
46
  end
44
47
  end
45
48
  end
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Cinch::Plugins
3
+ class Weatherman
4
+ class Forecast
5
+ def initialize(location)
6
+ @data = WeatherUnderground::Base.new
7
+ .SimpleForecast(location).days[1]
8
+ fail ArgumentError if @data.nil?
9
+ @location = Weather.new(location).location
10
+ @forecast = @data.conditions.downcase
11
+ @temp_high = @data.high.fahrenheit.round
12
+ @temp_low = @data.low.fahrenheit.round
13
+ end
14
+
15
+ def to_s
16
+ "Tommorrow in #{@location}; #{@forecast}, " +
17
+ "high of #{@temp_high}F, low of #{@temp_low}F."
18
+ end
19
+
20
+ def append
21
+ to_s.gsub(" in #{@location}", '')
22
+ end
23
+ end
24
+ end
25
+ end
@@ -3,7 +3,7 @@ module Cinch
3
3
  module Plugins
4
4
  # Versioning Info
5
5
  class Weatherman
6
- VERSION = '1.0.3'
6
+ VERSION = '1.0.4'
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,22 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Cinch::Plugins
3
+ class Weatherman
4
+ class Weather
5
+ attr_reader :location
6
+
7
+ def initialize(location)
8
+ @data = WeatherUnderground::Base.new
9
+ .CurrentObservations(location)
10
+ @location = @data.display_location.first.full
11
+ @temp = @data.temp_f
12
+ @conditions = @data.weather.downcase
13
+ @updated = Time.parse(@data.observation_time).ago.to_words
14
+ end
15
+
16
+ def to_s
17
+ "In #{@location} it is #{@conditions} " +
18
+ "and #{@temp}F (last updated about #{@updated})."
19
+ end
20
+ end
21
+ end
22
+ end
@@ -8,27 +8,76 @@ describe Cinch::Plugins::Weatherman do
8
8
  @bot = make_bot(Cinch::Plugins::Weatherman)
9
9
  end
10
10
 
11
- it 'should allow users to ask for weather by zip' do
12
- msg = make_message(@bot, '!weather 94062')
13
- get_replies(msg).last.text.
14
- should include('In Redwood City, CA it is')
15
- end
11
+ describe 'weather' do
12
+ it 'should allow users to ask for weather by zip' do
13
+ msg = make_message(@bot, '!weather 94062')
14
+ get_replies(msg).last.text
15
+ .should include('In Redwood City, CA it is')
16
+ end
16
17
 
17
- it 'should allow users to ask for weather by city, state' do
18
- msg = make_message(@bot, '!weather redwood city, ca')
19
- get_replies(msg).last.text.
20
- should include('In Redwood City, CA it is')
21
- end
18
+ it 'should allow users to ask for weather by city, state' do
19
+ msg = make_message(@bot, '!weather redwood city, ca')
20
+ get_replies(msg).last.text
21
+ .should include('In Redwood City, CA it is')
22
+ end
23
+
24
+ it 'should return temps' do
25
+ msg = make_message(@bot, '!weather redwood city, ca')
26
+ get_replies(msg).last.text
27
+ .should match(/\d+F/)
28
+ end
29
+
30
+ it 'should allow users to ask for weather by airport code' do
31
+ msg = make_message(@bot, '!weather SFO')
32
+ get_replies(msg).last.text
33
+ .should include('In San Francisco International, CA it is')
34
+ end
35
+
36
+ it 'should return an error when location not found' do
37
+ msg = make_message(@bot, '!weather 34')
38
+ get_replies(msg).last.text
39
+ .should include('Sorry, couldn\'t find 34.')
40
+ end
41
+
42
+ it 'should allow users to append forecasts' do
43
+ bot = make_bot(Cinch::Plugins::Weatherman, { append_forecast: true })
44
+ msg = make_message(@bot, '!weather 94062')
45
+ message = get_replies(msg).first.text
46
+ message.should include('In Redwood City, CA it is')
47
+ message.should include('Tommorrow;')
48
+ end
22
49
 
23
- it 'should allow users to ask for weather by airport code' do
24
- msg = make_message(@bot, '!weather SFO')
25
- get_replies(msg).last.text.
26
- should include('In San Francisco International, CA it is')
27
50
  end
28
51
 
29
- it 'should return an error when location not found' do
30
- msg = make_message(@bot, '!weather 34')
31
- get_replies(msg).last.text.
32
- should include('Sorry, couldn\'t find 34.')
52
+ describe 'forecast' do
53
+ it 'should allow users to ask for forecast by zip' do
54
+ msg = make_message(@bot, '!forecast 94062')
55
+ get_replies(msg).last.text
56
+ .should include('Tommorrow in Redwood City, CA;')
57
+ end
58
+
59
+ it 'should allow users to ask for forecast by city, state' do
60
+ msg = make_message(@bot, '!forecast redwood city, ca')
61
+ get_replies(msg).last.text
62
+ .should include('Tommorrow in Redwood City, CA;')
63
+ end
64
+
65
+ it 'should allow users to ask for forecast by airport code' do
66
+ msg = make_message(@bot, '!forecast SFO')
67
+ get_replies(msg).last.text
68
+ .should include('Tommorrow in San Francisco International, CA;')
69
+ end
70
+
71
+ it 'should return an error when location not found' do
72
+ msg = make_message(@bot, '!forecast 34')
73
+ get_replies(msg).last.text
74
+ .should include('Sorry, couldn\'t find 34.')
75
+ end
76
+
77
+ it 'should return temps' do
78
+ msg = make_message(@bot, '!weather redwood city, ca')
79
+ get_replies(msg).last.text
80
+ .should match(/\d+F/)
81
+ end
33
82
  end
34
83
  end
@@ -1,5 +1,11 @@
1
1
  require 'coveralls'
2
- Coveralls.wear!
2
+ require 'simplecov'
3
+
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
+ SimpleCov::Formatter::HTMLFormatter,
6
+ Coveralls::SimpleCov::Formatter
7
+ ]
8
+ SimpleCov.start
9
+
3
10
  require 'cinch-weatherman'
4
11
  require 'cinch/test'
5
-
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cinch-weatherman
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-02-20 00:00:00.000000000 Z
13
+ date: 2014-02-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake
@@ -156,7 +156,9 @@ files:
156
156
  - cinch-weatherman.gemspec
157
157
  - lib/cinch-weatherman.rb
158
158
  - lib/cinch/plugins/weatherman.rb
159
+ - lib/cinch/plugins/weatherman/forecast.rb
159
160
  - lib/cinch/plugins/weatherman/version.rb
161
+ - lib/cinch/plugins/weatherman/weather.rb
160
162
  - spec/cinch-weatherman_spec.rb
161
163
  - spec/spec_helper.rb
162
164
  homepage: https://github.com/canonical-hackers/cinch-weatherman