safubot 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 (89) hide show
  1. data/.yardoc/checksums +9 -0
  2. data/.yardoc/objects/root.dat +0 -0
  3. data/.yardoc/proxy_types +0 -0
  4. data/README.md +52 -1
  5. data/doc/Safubot/Bot.html +1287 -652
  6. data/doc/Safubot/Evented.html +409 -276
  7. data/doc/Safubot/KnownUser.html +476 -254
  8. data/doc/Safubot/Log.html +184 -192
  9. data/doc/Safubot/Query.html +131 -164
  10. data/doc/Safubot/Request.html +158 -147
  11. data/doc/Safubot/Response.html +92 -135
  12. data/doc/Safubot/Test.html +166 -187
  13. data/doc/Safubot/Twitter/Bot.html +1005 -455
  14. data/doc/Safubot/Twitter/DirectMessage.html +417 -238
  15. data/doc/Safubot/Twitter/Tweet.html +725 -398
  16. data/doc/Safubot/Twitter.html +69 -116
  17. data/doc/Safubot/XMPP/Bot.html +625 -303
  18. data/doc/Safubot/XMPP/Message.html +372 -217
  19. data/doc/Safubot/XMPP.html +69 -116
  20. data/doc/Safubot.html +155 -126
  21. data/doc/_index.html +294 -0
  22. data/doc/class_list.html +47 -0
  23. data/doc/css/common.css +1 -0
  24. data/doc/css/full_list.css +55 -0
  25. data/doc/css/style.css +322 -0
  26. data/doc/file.README.html +140 -0
  27. data/doc/file_list.html +49 -0
  28. data/doc/frames.html +13 -0
  29. data/doc/index.html +129 -101
  30. data/doc/js/app.js +205 -0
  31. data/doc/js/full_list.js +167 -0
  32. data/doc/js/jquery.js +3 -5
  33. data/doc/method_list.html +638 -0
  34. data/doc/top-level-namespace.html +103 -0
  35. data/lib/safubot/bot.rb +22 -20
  36. data/lib/safubot/known_user.rb +2 -0
  37. data/lib/safubot/twitter.rb +30 -26
  38. data/lib/safubot/version.rb +1 -1
  39. data/lib/safubot/xmpp.rb +20 -14
  40. data/safubot.gemspec +1 -0
  41. metadata +50 -71
  42. data/doc/Gemfile.html +0 -119
  43. data/doc/Object.html +0 -171
  44. data/doc/Rakefile.html +0 -117
  45. data/doc/created.rid +0 -14
  46. data/doc/foo_rb.html +0 -115
  47. data/doc/images/add.png +0 -0
  48. data/doc/images/brick.png +0 -0
  49. data/doc/images/brick_link.png +0 -0
  50. data/doc/images/bug.png +0 -0
  51. data/doc/images/bullet_black.png +0 -0
  52. data/doc/images/bullet_toggle_minus.png +0 -0
  53. data/doc/images/bullet_toggle_plus.png +0 -0
  54. data/doc/images/date.png +0 -0
  55. data/doc/images/delete.png +0 -0
  56. data/doc/images/find.png +0 -0
  57. data/doc/images/loadingAnimation.gif +0 -0
  58. data/doc/images/macFFBgHack.png +0 -0
  59. data/doc/images/package.png +0 -0
  60. data/doc/images/page_green.png +0 -0
  61. data/doc/images/page_white_text.png +0 -0
  62. data/doc/images/page_white_width.png +0 -0
  63. data/doc/images/plugin.png +0 -0
  64. data/doc/images/ruby.png +0 -0
  65. data/doc/images/tag_blue.png +0 -0
  66. data/doc/images/tag_green.png +0 -0
  67. data/doc/images/transparent.png +0 -0
  68. data/doc/images/wrench.png +0 -0
  69. data/doc/images/wrench_orange.png +0 -0
  70. data/doc/images/zoom.png +0 -0
  71. data/doc/js/darkfish.js +0 -153
  72. data/doc/js/navigation.js +0 -142
  73. data/doc/js/search.js +0 -94
  74. data/doc/js/search_index.js +0 -1
  75. data/doc/js/searcher.js +0 -228
  76. data/doc/lib/safubot/bot_rb.html +0 -115
  77. data/doc/lib/safubot/evented_rb.html +0 -115
  78. data/doc/lib/safubot/known_user_rb.html +0 -115
  79. data/doc/lib/safubot/log_rb.html +0 -115
  80. data/doc/lib/safubot/safubot_rb.html +0 -115
  81. data/doc/lib/safubot/spec/bot_spec_rb.html +0 -115
  82. data/doc/lib/safubot/spec/twitter_spec_rb.html +0 -137
  83. data/doc/lib/safubot/test_helper_rb.html +0 -115
  84. data/doc/lib/safubot/twitter_rb.html +0 -115
  85. data/doc/lib/safubot/version_rb.html +0 -115
  86. data/doc/lib/safubot/xmpp_rb.html +0 -115
  87. data/doc/lib/safubot_rb.html +0 -115
  88. data/doc/rdoc.css +0 -543
  89. data/doc/table_of_contents.html +0 -224
@@ -0,0 +1,103 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>
7
+ Top Level Namespace
8
+
9
+ &mdash; Documentation by YARD 0.7.3
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ relpath = '';
19
+ if (relpath != '') relpath += '/';
20
+ </script>
21
+
22
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
23
+
24
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
25
+
26
+
27
+ </head>
28
+ <body>
29
+ <script type="text/javascript" charset="utf-8">
30
+ if (window.top.frames.main) document.body.className = 'frames';
31
+ </script>
32
+
33
+ <div id="header">
34
+ <div id="menu">
35
+
36
+ <a href="_index.html">Index</a> &raquo;
37
+
38
+
39
+ <span class="title">Top Level Namespace</span>
40
+
41
+
42
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
43
+ </div>
44
+
45
+ <div id="search">
46
+
47
+ <a id="class_list_link" href="#">Class List</a>
48
+
49
+ <a id="method_list_link" href="#">Method List</a>
50
+
51
+ <a id="file_list_link" href="#">File List</a>
52
+
53
+ </div>
54
+ <div class="clear"></div>
55
+ </div>
56
+
57
+ <iframe id="search_frame"></iframe>
58
+
59
+ <div id="content"><h1>Top Level Namespace
60
+
61
+
62
+
63
+ </h1>
64
+
65
+ <dl class="box">
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+ </dl>
75
+ <div class="clear"></div>
76
+
77
+ <h2>Defined Under Namespace</h2>
78
+ <p class="children">
79
+
80
+
81
+ <strong class="modules">Modules:</strong> <span class='object_link'><a href="Safubot.html" title="Safubot (module)">Safubot</a></span>
82
+
83
+
84
+
85
+
86
+ </p>
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ </div>
95
+
96
+ <div id="footer">
97
+ Generated on Mon Nov 28 20:20:04 2011 by
98
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
99
+ 0.7.3 (ruby-1.9.2).
100
+ </div>
101
+
102
+ </body>
103
+ </html>
data/lib/safubot/bot.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  module Safubot
4
+ def error_report(e)
5
+ "#{e.inspect}\n#{e.backtrace.join("\n\t")}"
6
+ end
7
+
4
8
  # Defines elements of the input queue, agnostic of the transfer medium.
5
9
  # May be extended by service-specific modules.
6
10
  class Request
@@ -31,12 +35,12 @@ module Safubot
31
35
  timestamps!
32
36
  end
33
37
 
34
- # Here's where we define the main Safubot instance.
35
38
  class Bot
36
39
  include Evented
37
40
 
38
41
  attr_reader :opts, :twitter, :xmpp
39
42
 
43
+ # Records an error and emits a corresponding :request_error event.
40
44
  def request_error(req, e)
41
45
  Log.error "Error processing #{req.source.class} '#{req.text}': #{e}\n#{e.backtrace.join("\n\t")}"
42
46
  req.errors[Time.now] = e
@@ -44,6 +48,7 @@ module Safubot
44
48
  emit(:request_error, req, e)
45
49
  end
46
50
 
51
+ # Processes an individual request (synchronously).
47
52
  def process_request(req)
48
53
  begin
49
54
  emit(:request, req)
@@ -55,8 +60,8 @@ module Safubot
55
60
  end
56
61
  end
57
62
 
63
+ # Performs appropriate dispatch operation for response type.
58
64
  def dispatch(resp)
59
- # Performs appropriate dispatch operation for response type.
60
65
  begin
61
66
  source = resp.request.source
62
67
  if Safubot::mode != :production
@@ -81,10 +86,12 @@ module Safubot
81
86
  end
82
87
  end
83
88
 
89
+ # This pulls requests from passive non-streaming sources (currently, the Twitter AJAX API).
84
90
  def pull
85
91
  @twitter.pull
86
92
  end
87
93
 
94
+ # Goes through each unprocessed Request and submits it for processing.
88
95
  def process
89
96
  Request.where(:processed => false).each do |req|
90
97
  concurrently(req) { process_request(req) }
@@ -105,19 +112,16 @@ module Safubot
105
112
  push
106
113
  end
107
114
 
115
+ # Dispatches all undispatched Responses.
108
116
  def push
109
117
  Response.where(:dispatched => false).each(&method(:dispatch))
110
118
  end
111
-
112
- def cycle
113
- pull; process; push
114
- end
115
119
 
116
120
  # Wraps EM::defer with error handling and response pushing for the given request.
117
121
  # @param req The Request being processed.
118
122
  # @param blk The operation to be performed in a separate thread.
119
123
  def concurrently(req, &blk)
120
- EventMachine::defer do
124
+ EM::defer do
121
125
  begin
122
126
  blk.call
123
127
  rescue Exception => e
@@ -129,28 +133,25 @@ module Safubot
129
133
  end
130
134
 
131
135
  def run
132
- EventMachine::run do
133
- EM::error_handler do |e|
134
- if e.is_a? Interrupt
135
- Log.error("Received interrupt, shutting down.")
136
- stop
137
- else
138
- Log.error("Unhandled exception: #{e}\n#{e.backtrace.join("\t\n")}")
139
- end
140
- end
141
-
142
- cycle
136
+ #EventMachine::run do
137
+ pull; process; push
143
138
  @twitter.run if @twitter
144
139
  @xmpp.run if @xmpp
145
- end
140
+ begin
141
+ Process.waitall
142
+ rescue Interrupt
143
+ stop
144
+ end
145
+ #end
146
146
  end
147
147
 
148
+ # Shuts down the event loop.
148
149
  def stop
149
150
  @twitter.stop if @twitter
150
151
  @xmpp.stop if @xmpp
151
- EM::stop_event_loop
152
152
  end
153
153
 
154
+ # Initialises Twitter-related functionality.
154
155
  def enable_twitter(opts={})
155
156
  @twitter = Twitter::Bot.new(opts)
156
157
  @twitter.on(:request) do |req|
@@ -158,6 +159,7 @@ module Safubot
158
159
  end
159
160
  end
160
161
 
162
+ # Initialises XMPP-related functionality.
161
163
  def enable_xmpp(options={})
162
164
  defaults = { :jid => nil, :password => nil }
163
165
  @xmpp = XMPP::Bot.new(defaults.merge(options))
@@ -7,6 +7,8 @@ module Safubot
7
7
 
8
8
  many :requests, :as => "user", :class_name => "Safubot::Request"
9
9
 
10
+ timestamps!
11
+
10
12
  # Combines the service-specific identities of two users to
11
13
  # form a cohesive picture of an individual.
12
14
  def merge(user)
@@ -156,7 +156,7 @@ module Safubot
156
156
  class Bot
157
157
  include Evented
158
158
 
159
- attr_reader :username, :client, :opts
159
+ attr_reader :username, :client, :opts, :stream, :pid
160
160
 
161
161
  # Sends a Twitter-sourced Response to the appropriate target.
162
162
  def send(resp)
@@ -218,46 +218,50 @@ module Safubot
218
218
  rescue ::Twitter::Error::ServiceUnavailable
219
219
  Log.error "Twitter: Couldn't pull tweets due to temporary service unavailability."
220
220
  rescue Exception => e
221
- Log.error "Twitter: Unhandled error: #{e}\n#{e.backtrace.join("\n\t")}"
221
+ Log.error "Twitter: Unhandled error: #{error_report(e)}"
222
222
  end
223
223
  end
224
224
 
225
225
  # Starts our TweetStream client running.
226
226
  def run
227
- Fiber.new do
228
- @stream = TweetStream::Client.new(@opts)
227
+ @stream = TweetStream::Client.new(@opts)
229
228
 
230
- @stream.on_direct_message do |message|
231
- dm = handle_message(message)
232
- handle_request(dm.request)
233
- end
229
+ @stream.on_direct_message do |message|
230
+ req = handle_message(message)
231
+ handle_request(req) if req.is_a? Request
232
+ end
234
233
 
235
- @stream.on_error do |err|
236
- # HACK (Mispy): For some reason this is a String instead of an Exception.
237
- if err.match(/invalid status code: 401/)
238
- Log.error "TweetStream authentication failure!"
239
- else
240
- Log.error "Unhandled TweetStream error: #{$!} #{$@}"
241
- end
234
+ @stream.on_error do |err|
235
+ if err.match(/invalid status code: 401/)
236
+ Log.error "TweetStream authentication failure!"
237
+ else
238
+ Log.error "Unhandled TweetStream error: #{error_report($!)}"
242
239
  end
240
+ end
243
241
 
242
+ @pid = Process.fork do
244
243
  begin
245
244
  @stream.userstream do |status|
246
- tweet = handle_tweet(status)
247
- handle_request(tweet.request) if tweet.is_a? Tweet
245
+ req = handle_tweet(status)
246
+ handle_request(req) if req.is_a? Request
248
247
  end
249
248
  rescue Exception => e
250
- if e.is_a? Interrupt
251
- exit
252
- else
253
- Log.error "TweetStream event loop exited: #{$!} #{$@}"
254
- Log.error "Reinitialising TweetStream in 5 seconds."
255
- EM::Timer.new(5) { run }
249
+ unless e.is_a? Interrupt
250
+ Log.error "TweetStream client exited unexpectedly: #{error_report(e)}"
251
+ Log.error "Restarting TweetStream client in 5 seconds."
252
+ sleep 5; run
256
253
  end
257
254
  end
258
-
259
- Log.info("Twitter client is online at @#{@username} :3")
260
- end.resume
255
+
256
+ Log.info("TweetStream client shutdown complete.")
257
+ end
258
+
259
+ Log.info("TweetStream client is online at @#{@username} :3")
260
+ end
261
+
262
+ # Shut down the TweetStream client.
263
+ def stop
264
+ @stream.stop
261
265
  end
262
266
 
263
267
  # Options are passed straight through to ::TweetStream and ::Twitter,
@@ -1,3 +1,3 @@
1
1
  module Safubot
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/safubot/xmpp.rb CHANGED
@@ -21,6 +21,7 @@ module Safubot
21
21
  scope :xmpp, :source_type => "Safubot::XMPP::Message"
22
22
  end
23
23
 
24
+ # XMPP-specific functionality.
24
25
  module XMPP
25
26
  # A Message is a Request source representing a single XMPP chat stanza.
26
27
  class Message
@@ -71,7 +72,7 @@ module Safubot
71
72
  class Bot
72
73
  include Evented
73
74
 
74
- attr_reader :jid, :client, :state
75
+ attr_reader :jid, :client, :state, :pid
75
76
 
76
77
  # Sets our Blather::Client event processor running.
77
78
  def run
@@ -96,25 +97,26 @@ module Safubot
96
97
  @client.register_handler(:disconnected) do
97
98
  if @state == :running
98
99
  Log.warn("XMPP disconnected; attempting reconnection in 5 seconds.")
99
- EM::Timer.new(5) { @client.connect }
100
+ sleep 5; @client.connect
100
101
  end
101
102
  end
102
103
 
103
104
  @client.register_handler(:error) do |e|
104
- Log.error "Unhandled Blather error: #{$!} #{$@}"
105
+ Log.error "Unhandled Blather error: #{error_report(e)}"
105
106
  end
106
107
 
107
- Fiber.new do
108
+ @pid = Process.fork do
108
109
  begin
109
- @client.run
110
+ EM::run { @client.run }
110
111
  rescue Exception => e
111
- if e.is_a? Interrupt
112
- raise e
113
- else
114
- Log.error "Blather client exited unexpectedly: #{$!} #{$@}"
112
+ unless e.is_a? Interrupt
113
+ Log.error "XMPP client exited unexpectedly: #{error_report(e)}"
114
+ Log.error "Restarting XMPP client in 5 seconds."
115
+ sleep 5; run
115
116
  end
116
117
  end
117
- end.resume
118
+ Log.info "XMPP client shutdown complete."
119
+ end
118
120
 
119
121
  @state = :running
120
122
  end
@@ -125,14 +127,18 @@ module Safubot
125
127
  @client.close
126
128
  end
127
129
 
128
- # Dispatch a Response via XMPP.
129
- def send(resp)
130
+ def tell(jid, text)
130
131
  msg = Blather::Stanza::Message.new
131
- msg.to = resp.request.source.from
132
- msg.body = resp.text
132
+ msg.to = jid
133
+ msg.body = text
133
134
  @client.write msg
134
135
  end
135
136
 
137
+ # Dispatch a Response via XMPP.
138
+ def send(resp)
139
+ tell(resp.request.source.from, resp.text)
140
+ end
141
+
136
142
  def initialize(opts)
137
143
  @jid = opts[:jid]
138
144
  @password = opts[:password]
data/safubot.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
27
27
  s.add_dependency "blather", "~> 0.5.8"
28
28
  s.add_development_dependency "rake"
29
29
  s.add_development_dependency "rspec"
30
+ s.add_development_dependency "yard"
30
31
  s.add_development_dependency "bundler"
31
32
  s.add_development_dependency "wirble"
32
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safubot
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:
@@ -13,7 +13,7 @@ date: 2011-11-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine
16
- requirement: &17785620 !ruby/object:Gem::Requirement
16
+ requirement: &15868360 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.12.10
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *17785620
24
+ version_requirements: *15868360
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bson_ext
27
- requirement: &17784880 !ruby/object:Gem::Requirement
27
+ requirement: &15857880 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.4.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *17784880
35
+ version_requirements: *15857880
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: mongo_mapper
38
- requirement: &17784180 !ruby/object:Gem::Requirement
38
+ requirement: &15857280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.10.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *17784180
46
+ version_requirements: *15857280
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: twitter
49
- requirement: &17783180 !ruby/object:Gem::Requirement
49
+ requirement: &15856620 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.0.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *17783180
57
+ version_requirements: *15856620
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: tweetstream
60
- requirement: &17775740 !ruby/object:Gem::Requirement
60
+ requirement: &15855520 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *17775740
68
+ version_requirements: *15855520
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: blather
71
- requirement: &17774800 !ruby/object:Gem::Requirement
71
+ requirement: &15854600 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.5.8
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *17774800
79
+ version_requirements: *15854600
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rake
82
- requirement: &17774120 !ruby/object:Gem::Requirement
82
+ requirement: &15854060 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *17774120
90
+ version_requirements: *15854060
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rspec
93
- requirement: &17773340 !ruby/object:Gem::Requirement
93
+ requirement: &15853180 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,21 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *17773340
101
+ version_requirements: *15853180
102
+ - !ruby/object:Gem::Dependency
103
+ name: yard
104
+ requirement: &15851920 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: *15851920
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: bundler
104
- requirement: &17772480 !ruby/object:Gem::Requirement
115
+ requirement: &15850500 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,10 +120,10 @@ dependencies:
109
120
  version: '0'
110
121
  type: :development
111
122
  prerelease: false
112
- version_requirements: *17772480
123
+ version_requirements: *15850500
113
124
  - !ruby/object:Gem::Dependency
114
125
  name: wirble
115
- requirement: &17771600 !ruby/object:Gem::Requirement
126
+ requirement: &15839680 !ruby/object:Gem::Requirement
116
127
  none: false
117
128
  requirements:
118
129
  - - ! '>='
@@ -120,7 +131,7 @@ dependencies:
120
131
  version: '0'
121
132
  type: :development
122
133
  prerelease: false
123
- version_requirements: *17771600
134
+ version_requirements: *15839680
124
135
  description: A modular, evented chatbot framework. Supports Twitter and XMPP.
125
136
  email:
126
137
  - ^_^@mispy.me
@@ -129,13 +140,13 @@ extensions: []
129
140
  extra_rdoc_files: []
130
141
  files:
131
142
  - .gitignore
143
+ - .yardoc/checksums
144
+ - .yardoc/objects/root.dat
145
+ - .yardoc/proxy_types
132
146
  - Gemfile
133
147
  - LICENSE.md
134
148
  - README.md
135
149
  - Rakefile
136
- - doc/Gemfile.html
137
- - doc/Object.html
138
- - doc/Rakefile.html
139
150
  - doc/Safubot.html
140
151
  - doc/Safubot/Bot.html
141
152
  - doc/Safubot/Evented.html
@@ -152,53 +163,20 @@ files:
152
163
  - doc/Safubot/XMPP.html
153
164
  - doc/Safubot/XMPP/Bot.html
154
165
  - doc/Safubot/XMPP/Message.html
155
- - doc/created.rid
156
- - doc/foo_rb.html
157
- - doc/images/add.png
158
- - doc/images/brick.png
159
- - doc/images/brick_link.png
160
- - doc/images/bug.png
161
- - doc/images/bullet_black.png
162
- - doc/images/bullet_toggle_minus.png
163
- - doc/images/bullet_toggle_plus.png
164
- - doc/images/date.png
165
- - doc/images/delete.png
166
- - doc/images/find.png
167
- - doc/images/loadingAnimation.gif
168
- - doc/images/macFFBgHack.png
169
- - doc/images/package.png
170
- - doc/images/page_green.png
171
- - doc/images/page_white_text.png
172
- - doc/images/page_white_width.png
173
- - doc/images/plugin.png
174
- - doc/images/ruby.png
175
- - doc/images/tag_blue.png
176
- - doc/images/tag_green.png
177
- - doc/images/transparent.png
178
- - doc/images/wrench.png
179
- - doc/images/wrench_orange.png
180
- - doc/images/zoom.png
166
+ - doc/_index.html
167
+ - doc/class_list.html
168
+ - doc/css/common.css
169
+ - doc/css/full_list.css
170
+ - doc/css/style.css
171
+ - doc/file.README.html
172
+ - doc/file_list.html
173
+ - doc/frames.html
181
174
  - doc/index.html
182
- - doc/js/darkfish.js
175
+ - doc/js/app.js
176
+ - doc/js/full_list.js
183
177
  - doc/js/jquery.js
184
- - doc/js/navigation.js
185
- - doc/js/search.js
186
- - doc/js/search_index.js
187
- - doc/js/searcher.js
188
- - doc/lib/safubot/bot_rb.html
189
- - doc/lib/safubot/evented_rb.html
190
- - doc/lib/safubot/known_user_rb.html
191
- - doc/lib/safubot/log_rb.html
192
- - doc/lib/safubot/safubot_rb.html
193
- - doc/lib/safubot/spec/bot_spec_rb.html
194
- - doc/lib/safubot/spec/twitter_spec_rb.html
195
- - doc/lib/safubot/test_helper_rb.html
196
- - doc/lib/safubot/twitter_rb.html
197
- - doc/lib/safubot/version_rb.html
198
- - doc/lib/safubot/xmpp_rb.html
199
- - doc/lib/safubot_rb.html
200
- - doc/rdoc.css
201
- - doc/table_of_contents.html
178
+ - doc/method_list.html
179
+ - doc/top-level-namespace.html
202
180
  - lib/safubot.rb
203
181
  - lib/safubot/bot.rb
204
182
  - lib/safubot/evented.rb
@@ -232,7 +210,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
232
210
  version: '0'
233
211
  segments:
234
212
  - 0
235
- hash: 1927671741312878653
213
+ hash: 3506003285632595364
236
214
  required_rubygems_version: !ruby/object:Gem::Requirement
237
215
  none: false
238
216
  requirements:
@@ -241,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
241
219
  version: '0'
242
220
  segments:
243
221
  - 0
244
- hash: 1927671741312878653
222
+ hash: 3506003285632595364
245
223
  requirements: []
246
224
  rubyforge_project: safubot
247
225
  rubygems_version: 1.8.10
@@ -258,3 +236,4 @@ test_files:
258
236
  - spec/safubot/known_user_spec.rb
259
237
  - spec/safubot/twitter_spec.rb
260
238
  - spec/safubot/xmpp_spec.rb
239
+ has_rdoc: