bitbckt-botbckt 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ doc
data/Rakefile CHANGED
@@ -21,6 +21,7 @@ begin
21
21
  g.add_dependency('json', '>= 1.1.2')
22
22
  g.add_dependency('hpricot', '>= 0.6')
23
23
  g.add_dependency('em-redis', '>= 0.1.1')
24
+ g.add_dependency('em-http', '>= 0.1.6')
24
25
  end
25
26
  rescue LoadError
26
27
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 2
2
+ :patch: 3
3
3
  :major: 0
4
4
  :minor: 4
data/botbckt.gemspec ADDED
@@ -0,0 +1,74 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{botbckt}
5
+ s.version = "0.4.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Brandon Mitchell"]
9
+ s.date = %q{2009-06-24}
10
+ s.description = %q{Boredom strikes on Sunday mornings.}
11
+ s.email = %q{brandon@systemisdown.net}
12
+ s.executables = ["botbckt", "botbckt"]
13
+ s.extra_rdoc_files = [
14
+ "README"
15
+ ]
16
+ s.files = [
17
+ ".gitignore",
18
+ "README",
19
+ "Rakefile",
20
+ "VERSION.yml",
21
+ "bin/botbckt",
22
+ "botbckt.gemspec",
23
+ "lib/botbckt.rb",
24
+ "lib/botbckt/bot.rb",
25
+ "lib/botbckt/cmd.rb",
26
+ "lib/botbckt/command.rb",
27
+ "lib/botbckt/commands/gooble.rb",
28
+ "lib/botbckt/commands/google.rb",
29
+ "lib/botbckt/commands/meme.rb",
30
+ "lib/botbckt/commands/ping.rb",
31
+ "lib/botbckt/commands/remind.rb",
32
+ "lib/botbckt/commands/snack.rb",
33
+ "lib/botbckt/commands/star_jar.rb",
34
+ "lib/botbckt/commands/ticker.rb",
35
+ "lib/botbckt/commands/weather.rb",
36
+ "lib/botbckt/irc.rb",
37
+ "lib/botbckt/store.rb",
38
+ "lib/botbckt/utilities.rb"
39
+ ]
40
+ s.has_rdoc = true
41
+ s.homepage = %q{http://github.com/bitbckt/botbckt}
42
+ s.rdoc_options = ["--charset=UTF-8"]
43
+ s.require_paths = ["lib"]
44
+ s.rubygems_version = %q{1.3.1}
45
+ s.summary = %q{Boredom strikes on Sunday mornings.}
46
+
47
+ if s.respond_to? :specification_version then
48
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
+ s.specification_version = 2
50
+
51
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
52
+ s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.0"])
53
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
54
+ s.add_runtime_dependency(%q<json>, [">= 1.1.2"])
55
+ s.add_runtime_dependency(%q<hpricot>, [">= 0.6"])
56
+ s.add_runtime_dependency(%q<em-redis>, [">= 0.1.1"])
57
+ s.add_runtime_dependency(%q<em-http>, [">= 0.1.6"])
58
+ else
59
+ s.add_dependency(%q<eventmachine>, [">= 0.12.0"])
60
+ s.add_dependency(%q<activesupport>, [">= 0"])
61
+ s.add_dependency(%q<json>, [">= 1.1.2"])
62
+ s.add_dependency(%q<hpricot>, [">= 0.6"])
63
+ s.add_dependency(%q<em-redis>, [">= 0.1.1"])
64
+ s.add_dependency(%q<em-http>, [">= 0.1.6"])
65
+ end
66
+ else
67
+ s.add_dependency(%q<eventmachine>, [">= 0.12.0"])
68
+ s.add_dependency(%q<activesupport>, [">= 0"])
69
+ s.add_dependency(%q<json>, [">= 1.1.2"])
70
+ s.add_dependency(%q<hpricot>, [">= 0.6"])
71
+ s.add_dependency(%q<em-redis>, [">= 0.1.1"])
72
+ s.add_dependency(%q<em-http>, [">= 0.1.6"])
73
+ end
74
+ end
data/lib/botbckt/bot.rb CHANGED
@@ -6,8 +6,8 @@ module Botbckt #:nodoc:
6
6
  include Singleton
7
7
  include ActiveSupport::BufferedLogger::Severity
8
8
 
9
- AFFIRMATIVE = ["'Sea, mhuise.", "In Ordnung", "Ik begrijp", "Alles klar", "Ok.", "Roger.", "You don't have to tell me twice.", "Ack. Ack.", "C'est bon!"]
10
- NEGATIVE = ["Titim gan éirí ort.", "Gabh mo leithscéal?", "No entiendo", "excusez-moi", "Excuse me?", "Huh?", "I don't understand.", "Pardon?", "It's greek to me."]
9
+ AFFIRMATIVE = ["'Sea, mhuise.", "In Ordnung", "Ik begrijp het", "Alles klar", "Ok.", "Roger.", "You don't have to tell me twice.", "Ack. Ack.", "C'est bon!"]
10
+ NEGATIVE = ["Titim gan éirí ort.", "Gabh mo leithscéal?", "No entiendo", "excusez-moi", "Excuse me?", "Huh?", "I don't understand.", "Pardon?", "It's greek to me.", "Wat zeg je me nou?"]
11
11
 
12
12
  attr_accessor :logger
13
13
  attr_accessor :store
@@ -35,7 +35,7 @@ module Botbckt #:nodoc:
35
35
 
36
36
  if daemonize || daemonize.nil?
37
37
  EventMachine::fork_reactor do
38
- start!
38
+ start! options
39
39
 
40
40
  if pid
41
41
  File.open(pid, 'w') { |file| file.write("#{Process.pid}") }
@@ -44,7 +44,7 @@ module Botbckt #:nodoc:
44
44
 
45
45
  end
46
46
  else
47
- EventMachine::run { start! }
47
+ EventMachine::run { start! options }
48
48
  end
49
49
  end
50
50
 
@@ -89,8 +89,9 @@ module Botbckt #:nodoc:
89
89
  languages << LANGUAGES.values.sort_by{ rand }.slice(0...TRANSLATE_ATTEMPTS)
90
90
  languages << MAIN_LANGUAGE # always end with main
91
91
 
92
- result = gooble(text, languages.flatten)
93
- say result, channel
92
+ gooble(text, languages.flatten) do |result|
93
+ say result, channel
94
+ end
94
95
  end
95
96
 
96
97
  private
@@ -98,15 +99,16 @@ module Botbckt #:nodoc:
98
99
  # args
99
100
  # text<String>: text to translate
100
101
  # langs<Array>: languages to translate from/to
101
- def self.gooble(text, languages) #:nodoc:
102
+ def self.gooble(text, languages, &block) #:nodoc:
102
103
  if languages.length >= 2
103
104
  pair = "#{languages[0]}|#{languages[1]}"
104
- json = open("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{CGI.escape(text)}&langpair=#{CGI.escape(pair)}")
105
- response = JSON.parse(json.read) # could check for failed response with response['responseStatus'] != 200
106
- languages.shift
107
- gooble(response['responseData']['translatedText'], languages)
105
+ open("http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{CGI.escape(text)}&langpair=#{CGI.escape(pair)}") do |json|
106
+ response = JSON.parse(json) # could check for failed response with response['responseStatus'] != 200
107
+ languages.shift
108
+ gooble(response['responseData']['translatedText'], languages)
109
+ end
108
110
  else
109
- text
111
+ yield text
110
112
  end
111
113
  end
112
114
 
@@ -14,22 +14,24 @@ module Botbckt #:nodoc:
14
14
  trigger :google
15
15
 
16
16
  def call(sender, channel, query)
17
- result = google(query)
18
- say "First out of #{result.first} results:", channel
19
- say result.last['titleNoFormatting'], channel
20
- say result.last['unescapedUrl'], channel
17
+ google(query) do |result|
18
+ say "First out of #{result.first} results:", channel
19
+ say result.last['titleNoFormatting'], channel
20
+ say result.last['unescapedUrl'], channel
21
+ end
21
22
  end
22
23
 
23
24
  private
24
25
 
25
- def google(term) #:nodoc:
26
- json = open("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=#{CGI.escape(term)}")
27
- response = JSON.parse(json.read)
26
+ def google(term, &block) #:nodoc:
27
+ open("http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=#{CGI.escape(term)}") do |json|
28
+ response = JSON.parse(json)
28
29
 
29
- [
30
- response['responseData']['cursor']['estimatedResultCount'],
31
- response['responseData']['results'].first
32
- ]
30
+ yield [
31
+ response['responseData']['cursor']['estimatedResultCount'],
32
+ response['responseData']['results'].first
33
+ ]
34
+ end
33
35
  end
34
36
 
35
37
  end
@@ -10,13 +10,17 @@ module Botbckt #:nodoc:
10
10
  trigger :meme
11
11
 
12
12
  def call(sender, channel, *args)
13
- say meme, channel
13
+ meme do |msg|
14
+ say msg, channel
15
+ end
14
16
  end
15
17
 
16
18
  private
17
19
 
18
- def meme #:nodoc:
19
- open("http://meme.boxofjunk.ws/moar.txt?lines=1").read.chomp
20
+ def meme(&block) #:nodoc:
21
+ open("http://meme.boxofjunk.ws/moar.txt?lines=1") do |response|
22
+ yield response.chomp
23
+ end
20
24
  end
21
25
 
22
26
  end
@@ -12,7 +12,9 @@ module Botbckt #:nodoc:
12
12
 
13
13
  def call(sender, channel, symbol)
14
14
  begin
15
- say stock_price(symbol.split(' ').first), channel
15
+ stock_price(symbol.split(' ').first) do |ticker|
16
+ say ticker, channel
17
+ end
16
18
  # TODO: Log me.
17
19
  rescue OpenURI::HTTPError => e
18
20
  say Botbckt::Bot.befuddled, channel
@@ -21,13 +23,14 @@ module Botbckt #:nodoc:
21
23
 
22
24
  private
23
25
 
24
- def stock_price(symbol) #:nodoc:
25
- json = open("http://www.google.com/finance/info?q=#{CGI.escape(symbol)}")
26
- response = JSON.parse(json.read[4..-1]).first
26
+ def stock_price(symbol, &block) #:nodoc:
27
+ open("http://www.google.com/finance/info?q=#{CGI.escape(symbol)}") do |json|
28
+ response = JSON.parse(json[4..-1]).first
27
29
 
28
- ticker, price, change = response['t'], response['l'], response['c']
30
+ ticker, price, change = response['t'], response['l'], response['c']
29
31
 
30
- "#{ticker} - $#{price} (#{change})"
32
+ yield "#{ticker} - $#{price} (#{change})"
33
+ end
31
34
  end
32
35
  end
33
36
 
@@ -13,7 +13,9 @@ module Botbckt #:nodoc:
13
13
 
14
14
  trigger :forecast do |sender, channel, query|
15
15
  begin
16
- say forecast(query), channel
16
+ forecast(query) do |msg|
17
+ say msg, channel
18
+ end
17
19
  # TODO: Log me.
18
20
  rescue OpenURI::HTTPError => e
19
21
  say Botbckt::Bot.befuddled, channel
@@ -22,7 +24,9 @@ module Botbckt #:nodoc:
22
24
 
23
25
  trigger :conditions do |sender, channel, query|
24
26
  begin
25
- say conditions(query), channel
27
+ conditions(query) do |msg|
28
+ say msg, channel
29
+ end
26
30
  # TODO: Log me.
27
31
  rescue OpenURI::HTTPError => e
28
32
  say Botbckt::Bot.befuddled, channel
@@ -31,23 +35,28 @@ module Botbckt #:nodoc:
31
35
 
32
36
  private
33
37
 
34
- def self.conditions(query) #:nodoc:
35
- xml = (search(query)/'txt_forecast')
36
- daytime = (xml/'forecastday[1]')
37
- evening = (xml/'forecastday[2]')
38
+ def self.conditions(query, &block) #:nodoc:
39
+ search(query) do |response|
40
+ xml = (response/'txt_forecast')
41
+ daytime = (xml/'forecastday[1]')
42
+ evening = (xml/'forecastday[2]')
38
43
 
39
- "Today: #{(daytime/'fcttext').inner_html}\nTonight: #{(evening/'fcttext').inner_html}"
44
+ yield "Today: #{(daytime/'fcttext').inner_html}\nTonight: #{(evening/'fcttext').inner_html}"
45
+ end
40
46
  end
41
47
 
42
- def self.forecast(query) #:nodoc:
43
- xml = (search(query)/'simpleforecast/forecastday[1]')
48
+ def self.forecast(query, &block) #:nodoc:
49
+ search(query) do |response|
50
+ xml = (response/'simpleforecast/forecastday[1]')
44
51
 
45
- "Today's Forecast: #{(xml/'high/fahrenheit').inner_html}F/#{(xml/'low/fahrenheit').inner_html}F (#{(xml/'conditions').inner_html})"
52
+ yield "Today's Forecast: #{(xml/'high/fahrenheit').inner_html}F/#{(xml/'low/fahrenheit').inner_html}F (#{(xml/'conditions').inner_html})"
53
+ end
46
54
  end
47
55
 
48
- def self.search(query) #:nodoc:
49
- xml = open("http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml?query=#{CGI.escape(query)}")
50
- Hpricot.XML(xml)
56
+ def self.search(query, &block) #:nodoc:
57
+ open("http://api.wunderground.com/auto/wui/geo/ForecastXML/index.xml?query=#{CGI.escape(query)}") do |xml|
58
+ yield Hpricot.XML(xml)
59
+ end
51
60
  end
52
61
 
53
62
  end
data/lib/botbckt.rb CHANGED
@@ -1,3 +1,23 @@
1
- %w{ rubygems eventmachine activesupport ostruct json open-uri cgi hpricot singleton optparse em-redis }.each { |lib| require lib }
1
+ %w{ rubygems eventmachine activesupport ostruct json cgi hpricot singleton optparse em-redis em-http }.each { |lib| require lib }
2
2
  %w{ irc store bot utilities command cmd }.each { |lib| require File.dirname(__FILE__) + "/botbckt/#{ lib }" }
3
3
  Dir[File.dirname(__FILE__) + '/botbckt/commands/*'].each { |lib| require lib }
4
+
5
+ module Kernel
6
+ private
7
+ alias open_uri_original_open open
8
+
9
+ def open(name, *rest, &block) #:nodoc:
10
+ if name.respond_to?(:open)
11
+ name.open(*rest, &block)
12
+ elsif name.respond_to?(:to_str) &&
13
+ %r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ name
14
+ uri = URI.parse(name)
15
+ http = EventMachine::HttpRequest.new("#{uri.scheme}://#{uri.host}#{uri.path}").get :query => uri.query
16
+ http.callback { |request| yield request.response }
17
+ else
18
+ open_uri_original_open(name, *rest, &block)
19
+ end
20
+ end
21
+ module_function :open
22
+
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bitbckt-botbckt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mitchell
@@ -62,6 +62,16 @@ dependencies:
62
62
  - !ruby/object:Gem::Version
63
63
  version: 0.1.1
64
64
  version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: em-http
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.1.6
74
+ version:
65
75
  description: Boredom strikes on Sunday mornings.
66
76
  email: brandon@systemisdown.net
67
77
  executables:
@@ -72,9 +82,12 @@ extensions: []
72
82
  extra_rdoc_files:
73
83
  - README
74
84
  files:
85
+ - .gitignore
86
+ - README
75
87
  - Rakefile
76
88
  - VERSION.yml
77
89
  - bin/botbckt
90
+ - botbckt.gemspec
78
91
  - lib/botbckt.rb
79
92
  - lib/botbckt/bot.rb
80
93
  - lib/botbckt/cmd.rb
@@ -91,7 +104,6 @@ files:
91
104
  - lib/botbckt/irc.rb
92
105
  - lib/botbckt/store.rb
93
106
  - lib/botbckt/utilities.rb
94
- - README
95
107
  has_rdoc: true
96
108
  homepage: http://github.com/bitbckt/botbckt
97
109
  post_install_message:
@@ -116,7 +128,7 @@ requirements: []
116
128
  rubyforge_project:
117
129
  rubygems_version: 1.2.0
118
130
  signing_key:
119
- specification_version: 3
131
+ specification_version: 2
120
132
  summary: Boredom strikes on Sunday mornings.
121
133
  test_files: []
122
134