cinch-weatherman 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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