percy 1.0.0 → 1.1.0

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.
Files changed (4) hide show
  1. data/README.md +9 -1
  2. data/VERSION +1 -1
  3. data/lib/percy.rb +48 -42
  4. metadata +2 -2
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Percy 1.0.0
1
+ # Percy 1.1.0
2
2
 
3
3
  ## Configuring and starting the bot
4
4
 
@@ -113,6 +113,14 @@ env[:channel]<br />
113
113
  env[:victim]<br />
114
114
  env[:reason]</tt>
115
115
 
116
+ ### Raw Numerics
117
+ Percy.on '301' do |env|
118
+ # ...
119
+ end
120
+ Variables:
121
+
122
+ <tt>env[:params]</tt>
123
+
116
124
  ## Availabe Class Methods
117
125
 
118
126
  `Percy.raw(msg)`
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.0
1
+ 1.1.0
data/lib/percy.rb CHANGED
@@ -42,7 +42,7 @@ class Percy
42
42
  attr_accessor :traffic_logger, :connected
43
43
  end
44
44
 
45
- VERSION = 'Percy 1.0.0 (http://github.com/tbuehlmann/percy)'
45
+ VERSION = 'Percy 1.1.0 (http://github.com/tbuehlmann/percy)'
46
46
 
47
47
  Config = Struct.new(:server, :port, :password, :nick, :username, :verbose, :logging, :reconnect, :reconnect_interval)
48
48
 
@@ -55,14 +55,8 @@ class Percy
55
55
  @connected = false
56
56
 
57
57
  # user methods
58
- @on_channel = []
59
- @on_query = []
60
- @on_connect = []
61
- @on_join = []
62
- @on_part = []
63
- @on_quit = []
64
- @on_nickchange = []
65
- @on_kick = []
58
+ @events = Hash.new []
59
+ @listened_types = [:connect, :channel, :query, :join, :part, :quit, :nickchange, :kick] # + 3-digit numbers
66
60
 
67
61
  # observer synchronizer
68
62
  @mutex_observer = Mutex.new
@@ -240,23 +234,16 @@ class Percy
240
234
 
241
235
  # on method
242
236
  def self.on(type = :channel, match = //, &block)
237
+ unless @listened_types.include?(type) || type =~ /^\d\d\d$/
238
+ raise ArgumentError, "#{type} is not a supported type"
239
+ end
240
+
241
+ @events[type] = [] if @events[type].empty?
243
242
  case type
244
- when :channel
245
- @on_channel << {:match => match, :proc => block}
246
- when :connect
247
- @on_connect << block
248
- when :query
249
- @on_query << {:match => match, :proc => block}
250
- when :join
251
- @on_join << block
252
- when :part
253
- @on_part << block
254
- when :quit
255
- @on_quit << block
256
- when :nickchange
257
- @on_nickchange << block
258
- when :kick
259
- @on_kick << block
243
+ when :channel || :query
244
+ @events[type] << {:match => match, :proc => block}
245
+ else
246
+ @events[type] << block
260
247
  end
261
248
  end
262
249
 
@@ -278,27 +265,46 @@ class Percy
278
265
  # parses incoming traffic (types)
279
266
  def self.parse_type(type, env = nil)
280
267
  case type
281
- when :connect
282
- @on_connect.each do |block|
283
- Thread.new do
284
- begin
285
- unless @connected
286
- @connected = true
287
- block.call
268
+ when /^\d\d\d$/
269
+ if @events[type]
270
+ @events[type].each do |block|
271
+ Thread.new do
272
+ begin
273
+ block.call(env)
274
+ rescue => e
275
+ if @error_logger
276
+ @error_logger.error(e.message)
277
+ e.backtrace.each do |line|
278
+ @error_logger.error(line)
279
+ end
280
+ end
288
281
  end
289
- rescue => e
282
+ end
283
+ end
284
+ end
285
+ # :connect
286
+ if type =~ /^376|422$/
287
+ @events[:connect].each do |block|
288
+ Thread.new do
289
+ begin
290
+ unless @connected
291
+ @connected = true
292
+ block.call
293
+ end
294
+ rescue => e
290
295
  if @error_logger
291
296
  @error_logger.error(e.message)
292
297
  e.backtrace.each do |line|
293
298
  @error_logger.error(line)
294
299
  end
295
300
  end
301
+ end
296
302
  end
297
303
  end
298
304
  end
299
305
 
300
306
  when :channel
301
- @on_channel.each do |method|
307
+ @events[type].each do |method|
302
308
  if env[:message] =~ method[:match]
303
309
  Thread.new do
304
310
  begin
@@ -331,7 +337,7 @@ class Percy
331
337
  self.notice env[:nick], "\001PING #{$1}\001"
332
338
  end
333
339
 
334
- @on_query.each do |method|
340
+ @events[type].each do |method|
335
341
  if env[:message] =~ method[:match]
336
342
  Thread.new do
337
343
  begin
@@ -349,7 +355,7 @@ class Percy
349
355
  end
350
356
 
351
357
  when :join
352
- @on_join.each do |block|
358
+ @events[type].each do |block|
353
359
  Thread.new do
354
360
  begin
355
361
  block.call(env)
@@ -365,7 +371,7 @@ class Percy
365
371
  end
366
372
 
367
373
  when :part
368
- @on_part.each do |block|
374
+ @events[type].each do |block|
369
375
  Thread.new do
370
376
  begin
371
377
  block.call(env)
@@ -381,7 +387,7 @@ class Percy
381
387
  end
382
388
 
383
389
  when :quit
384
- @on_quit.each do |block|
390
+ @events[type].each do |block|
385
391
  Thread.new do
386
392
  begin
387
393
  block.call(env)
@@ -397,7 +403,7 @@ class Percy
397
403
  end
398
404
 
399
405
  when :nickchange
400
- @on_nickchange.each do |block|
406
+ @events[type].each do |block|
401
407
  Thread.new do
402
408
  begin
403
409
  block.call(env)
@@ -413,7 +419,7 @@ class Percy
413
419
  end
414
420
 
415
421
  when :kick
416
- @on_kick.each do |block|
422
+ @events[type].each do |block|
417
423
  Thread.new do
418
424
  begin
419
425
  block.call(env)
@@ -449,8 +455,8 @@ class Percy
449
455
  when /^PING \S+$/
450
456
  self.raw message.chomp.gsub('PING', 'PONG')
451
457
 
452
- when /^:\S+ 376|422/
453
- self.parse_type(:connect)
458
+ when /^:\S+ (\d\d\d) /
459
+ self.parse_type($1, :params => $')
454
460
 
455
461
  when /^:(\S+)!(\S+)@(\S+) PRIVMSG #(\S+) :/
456
462
  self.parse_type(:channel, :nick => $1, :user => $2, :host => $3, :channel => "##{$4}", :message => $')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Tobias B\xC3\xBChlmann"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-21 00:00:00 +01:00
12
+ date: 2009-12-22 00:00:00 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency