hipbot 1.0.0 → 1.0.3
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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/Gemfile +1 -9
- data/README.md +17 -1
- data/hipbot.gemspec +9 -9
- data/lib/hipbot.rb +1 -0
- data/lib/hipbot/adapters/hipchat/initializer.rb +1 -1
- data/lib/hipbot/callbacks/room_presence.rb +3 -0
- data/lib/hipbot/configuration.rb +4 -1
- data/lib/hipbot/helpers.rb +1 -1
- data/lib/hipbot/http.rb +5 -10
- data/lib/hipbot/logger.rb +2 -4
- data/lib/hipbot/match.rb +2 -2
- data/lib/hipbot/matchable.rb +15 -5
- data/lib/hipbot/presence.rb +17 -0
- data/lib/hipbot/reactable.rb +7 -1
- data/lib/hipbot/reaction.rb +1 -1
- data/lib/hipbot/storages/hash.rb +5 -5
- data/lib/hipbot/user.rb +0 -4
- data/lib/hipbot/version.rb +1 -1
- data/spec/integration/my_hipbot.rb +13 -4
- data/spec/integration/my_hipbot_spec.rb +33 -26
- data/spec/spec_helper.rb +3 -10
- data/spec/unit/bot_spec.rb +29 -30
- data/spec/unit/match_spec.rb +32 -28
- data/spec/unit/matchable_spec.rb +23 -0
- data/spec/unit/message_spec.rb +15 -8
- data/spec/unit/reaction_factory_spec.rb +2 -2
- data/spec/unit/reaction_spec.rb +4 -4
- metadata +46 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef69ec3d9ca84e1a5bf80f9e15d107b9e4bd2ec4
|
4
|
+
data.tar.gz: a875ec05d94328a7fb6a7c7f0dfbd3c207b4f6d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d003c361dee535be8929fc219e16523ee02030383a9c607a119d4dad7fca9530feece39073119f32a0359d55b5ac67a7594dcfda44d8481a42d7d3371b1874eb
|
7
|
+
data.tar.gz: e5bf6173b705a247963f67c77e6b6d67d7c352cc1aee8c4f4d00ce709d7121d7d93b01422701509e6b6eb2fd7d603c7087b3b36f5cd87ed8cf8f753a030da184
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -1,14 +1,6 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
gem 'eventmachine'
|
5
|
-
gem 'em-http-request'
|
6
|
-
gem 'httparty'
|
7
|
-
gem 'activesupport'
|
8
|
-
gem 'daemons'
|
3
|
+
gemspec
|
9
4
|
gem 'xmpp4r-hipchat', github: 'bartoszkopinski/xmpp4r-hipchat', branch: 'master'
|
10
5
|
|
11
|
-
gem 'rspec'
|
12
|
-
gem 'guard-rspec'
|
13
6
|
gem 'coveralls', require: false
|
14
|
-
gem 'mocha'
|
data/README.md
CHANGED
@@ -373,6 +373,22 @@ end
|
|
373
373
|
on /^My name is (.*)$/, :hello
|
374
374
|
```
|
375
375
|
|
376
|
+
### Presence reaction
|
377
|
+
Use `on_presence` in the same way as `on` to make presence reactions:
|
378
|
+
```ruby
|
379
|
+
class MyBot < Hipbot::Bot
|
380
|
+
# ...
|
381
|
+
on_presence do |status|
|
382
|
+
case status
|
383
|
+
when 'unavailable'
|
384
|
+
reply("Bye bye, #{sender.name}!")
|
385
|
+
when ''
|
386
|
+
reply("Welcome, #{sender.name}!")
|
387
|
+
end
|
388
|
+
end
|
389
|
+
end
|
390
|
+
```
|
391
|
+
|
376
392
|
### Scopes
|
377
393
|
Use `scope` blocks to extract common options:
|
378
394
|
```ruby
|
@@ -432,7 +448,7 @@ end
|
|
432
448
|
```
|
433
449
|
|
434
450
|
### User managment
|
435
|
-
This behavior is experimental and not officially supported by HipChat. Bot must be an admin in order to perform
|
451
|
+
This behavior is experimental and not officially supported by HipChat. Bot must be an admin in order to perform these actions.
|
436
452
|
```ruby
|
437
453
|
on /^kick (.*)/ do |user_name|
|
438
454
|
user = Hipbot::User.find_by(name: user_name)
|
data/hipbot.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# encoding: utf-8
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
2
|
require File.expand_path('../lib/hipbot/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
@@ -15,12 +15,12 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.name = "hipbot"
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
gem.version = Hipbot::VERSION
|
18
|
-
gem.add_runtime_dependency "xmpp4r-hipchat", ["
|
19
|
-
gem.add_runtime_dependency "daemons", ["
|
20
|
-
gem.add_runtime_dependency "activesupport", [">= 3.
|
21
|
-
gem.add_runtime_dependency "eventmachine", ["
|
22
|
-
gem.add_runtime_dependency "em-http-request", ["
|
23
|
-
gem.add_development_dependency "
|
24
|
-
gem.add_development_dependency "
|
25
|
-
gem.add_development_dependency "
|
18
|
+
gem.add_runtime_dependency "xmpp4r-hipchat", ["= 0.0.4"]
|
19
|
+
gem.add_runtime_dependency "daemons", ["~> 1.1"]
|
20
|
+
gem.add_runtime_dependency "activesupport", [">= 3.0.0"]
|
21
|
+
gem.add_runtime_dependency "eventmachine", ["~> 1.0"]
|
22
|
+
gem.add_runtime_dependency "em-http-request", ["~> 1.1"]
|
23
|
+
gem.add_development_dependency "rake"
|
24
|
+
gem.add_development_dependency "rspec"
|
25
|
+
gem.add_development_dependency "guard-rspec"
|
26
26
|
end
|
data/lib/hipbot.rb
CHANGED
@@ -15,10 +15,13 @@ module Hipbot
|
|
15
15
|
def handle_room_presence
|
16
16
|
with_room(id: room_id) do |room|
|
17
17
|
with_user(name: user_name) do |user|
|
18
|
+
Hipbot.react_to_presence(user, presence, room)
|
18
19
|
if offline_presence?
|
19
20
|
room.on_leave(user)
|
20
21
|
elsif online_presence? && !room.users.include?(user)
|
21
22
|
room.on_join(user)
|
23
|
+
else
|
24
|
+
# TODO: Availability status change handling
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
data/lib/hipbot/configuration.rb
CHANGED
@@ -8,7 +8,10 @@ module Hipbot
|
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
self.adapter = Adapters::Hipchat
|
11
|
-
self.exception_handler = Proc.new
|
11
|
+
self.exception_handler = Proc.new do |e|
|
12
|
+
Hipbot.logger.error(e.message)
|
13
|
+
e.backtrace.each { |line| Hipbot.logger.error(line) }
|
14
|
+
end
|
12
15
|
self.helpers = Module.new
|
13
16
|
self.jid = ''
|
14
17
|
self.join = :all
|
data/lib/hipbot/helpers.rb
CHANGED
@@ -2,7 +2,7 @@ module Hipbot
|
|
2
2
|
module Helpers
|
3
3
|
[:get, :post, :put, :delete].each do |method|
|
4
4
|
define_method method do |url, query = {}, &block|
|
5
|
-
Http::Request.new(url, query, method).(&block)
|
5
|
+
Http::Request.new(url, query, method).call(&block)
|
6
6
|
end
|
7
7
|
module_function method
|
8
8
|
end
|
data/lib/hipbot/http.rb
CHANGED
@@ -1,17 +1,13 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
module Hipbot
|
3
2
|
module Http
|
4
|
-
class Request < Struct.new(:url, :
|
3
|
+
class Request < Struct.new(:url, :query, :method)
|
5
4
|
DEFAULT_HEADERS = { 'accept-encoding' => 'gzip, compressed' }.freeze
|
6
5
|
CONNECTION_SETTINGS = { connect_timeout: 5, inactivity_timeout: 10 }.freeze
|
7
6
|
ERROR_CALLBACK = ->(error){ Hipbot.logger.error(error) }
|
8
7
|
|
9
8
|
def initialize *args
|
10
9
|
super
|
11
|
-
|
12
|
-
self.params = params.has_key?(:query) ? params : { query: params }
|
13
|
-
self.params = { head: DEFAULT_HEADERS }.merge(params)
|
14
|
-
Hipbot.logger.info("HTTP-REQUEST: #{url} #{params}")
|
10
|
+
Hipbot.logger.info("HTTP-REQUEST: #{url} #{query}")
|
15
11
|
end
|
16
12
|
|
17
13
|
def call &success_block
|
@@ -29,12 +25,12 @@ module Hipbot
|
|
29
25
|
instance_exec(e, &Hipbot.exception_handler)
|
30
26
|
end
|
31
27
|
|
32
|
-
def http
|
33
|
-
@http ||= connection.send(method,
|
28
|
+
def http
|
29
|
+
@http ||= connection.send(method, query: query.merge(head: DEFAULT_HEADERS))
|
34
30
|
end
|
35
31
|
|
36
32
|
def connection
|
37
|
-
|
33
|
+
EM::HttpRequest.new(url, CONNECTION_SETTINGS)
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
@@ -57,7 +53,6 @@ module Hipbot
|
|
57
53
|
end
|
58
54
|
|
59
55
|
def json
|
60
|
-
binding.pry
|
61
56
|
@json ||= JSON.parse(body) || {}
|
62
57
|
end
|
63
58
|
end
|
data/lib/hipbot/logger.rb
CHANGED
@@ -2,10 +2,8 @@ require 'logger'
|
|
2
2
|
|
3
3
|
module Hipbot
|
4
4
|
class Logger < ::Logger
|
5
|
-
def
|
6
|
-
|
7
|
-
severity_name = { 0 => "DEBUG", 1 => "INFO", 2 => "WARN", 3 => "ERROR", 4 => "FATAL", 5 => "UNKNOWN" }[severity]
|
8
|
-
super(severity, "[#{severity_name}][#{Time.now}] #{msg}")
|
5
|
+
def format_message(severity, timestamp, progname, msg)
|
6
|
+
"[#{severity}][#{Time.now}] #{msg}\n"
|
9
7
|
end
|
10
8
|
end
|
11
9
|
end
|
data/lib/hipbot/match.rb
CHANGED
@@ -28,7 +28,7 @@ module Hipbot
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def matches_scope?
|
31
|
-
reaction.global? || message.for?(Hipbot.user)
|
31
|
+
reaction.global? || message.private? || message.for?(Hipbot.user)
|
32
32
|
end
|
33
33
|
|
34
34
|
def matches_place?
|
@@ -44,7 +44,7 @@ module Hipbot
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def matches_condition?
|
47
|
-
reaction.condition.(*reaction.condition.parameters.map{ |parameter| message.send(parameter.last) })
|
47
|
+
reaction.condition.call(*reaction.condition.parameters.map{ |parameter| message.send(parameter.last) })
|
48
48
|
end
|
49
49
|
|
50
50
|
def message_text
|
data/lib/hipbot/matchable.rb
CHANGED
@@ -2,7 +2,13 @@ module Hipbot
|
|
2
2
|
module Matchable
|
3
3
|
def react sender, room, body
|
4
4
|
message = Message.new(body, room, sender)
|
5
|
-
matches =
|
5
|
+
matches = set_matches(reaction_sets, message)
|
6
|
+
Match.invoke_all(matches)
|
7
|
+
end
|
8
|
+
|
9
|
+
def react_to_presence sender, status, room
|
10
|
+
presence = Presence.new(sender, status, room)
|
11
|
+
matches = set_matches(presence_reaction_sets, presence)
|
6
12
|
Match.invoke_all(matches)
|
7
13
|
end
|
8
14
|
|
@@ -16,6 +22,10 @@ module Hipbot
|
|
16
22
|
plugins.map(&:class)
|
17
23
|
end
|
18
24
|
|
25
|
+
def presence_reaction_sets
|
26
|
+
reactables.map(&:presence_reactions)
|
27
|
+
end
|
28
|
+
|
19
29
|
def reaction_sets
|
20
30
|
reactables.each_with_object([]) do |reactable, array|
|
21
31
|
array.unshift(reactable.reactions)
|
@@ -23,16 +33,16 @@ module Hipbot
|
|
23
33
|
end
|
24
34
|
end
|
25
35
|
|
26
|
-
def
|
27
|
-
|
36
|
+
def set_matches sets, message
|
37
|
+
sets.each do |reactions|
|
28
38
|
matches = reactions_matches(message, reactions)
|
29
39
|
return matches if matches.any?
|
30
40
|
end
|
31
41
|
[]
|
32
42
|
end
|
33
43
|
|
34
|
-
def reactions_matches
|
35
|
-
reactions.map{ |reaction| reaction.match_with(
|
44
|
+
def reactions_matches matchable, reactions
|
45
|
+
reactions.map{ |reaction| reaction.match_with(matchable) }.select(&:matches?)
|
36
46
|
end
|
37
47
|
end
|
38
48
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Hipbot
|
2
|
+
class Presence < Struct.new(:sender, :body, :room)
|
3
|
+
|
4
|
+
def initialize *args
|
5
|
+
super
|
6
|
+
Hipbot.logger.info("PRESENCE from #{sender} in #{room}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def for? _
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
def private?
|
14
|
+
room.nil?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/hipbot/reactable.rb
CHANGED
@@ -2,11 +2,17 @@ module Hipbot
|
|
2
2
|
module Reactable
|
3
3
|
include Cache
|
4
4
|
|
5
|
-
attr_cache :reactions, :default_reactions, :options_stack
|
5
|
+
attr_cache :reactions, :default_reactions, :presence_reactions, :options_stack
|
6
6
|
attr_cache :reaction_factory do
|
7
7
|
ReactionFactory.new(self)
|
8
8
|
end
|
9
9
|
|
10
|
+
def on_presence *params, &block
|
11
|
+
scope *params do
|
12
|
+
presence_reactions << to_reaction(block)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
10
16
|
def on *params, &block
|
11
17
|
scope *params do
|
12
18
|
reactions << to_reaction(block)
|
data/lib/hipbot/reaction.rb
CHANGED
data/lib/hipbot/storages/hash.rb
CHANGED
@@ -77,12 +77,12 @@ module Hipbot
|
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
|
80
|
+
protected
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
82
|
+
def method_missing name, *args, &block
|
83
|
+
return all.public_send(name, *args, &block) if Array.instance_methods.include?(name)
|
84
|
+
super
|
85
|
+
end
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
data/lib/hipbot/user.rb
CHANGED
data/lib/hipbot/version.rb
CHANGED
@@ -44,10 +44,6 @@ class CoolPlugin
|
|
44
44
|
on /respond cool/ do
|
45
45
|
reply('cool responded')
|
46
46
|
end
|
47
|
-
|
48
|
-
default do
|
49
|
-
reply("I didn't understand you")
|
50
|
-
end
|
51
47
|
end
|
52
48
|
|
53
49
|
class MyHipbot < Hipbot::Bot
|
@@ -63,6 +59,19 @@ class MyHipbot < Hipbot::Bot
|
|
63
59
|
reply('What do you mean, Other Guy?')
|
64
60
|
end
|
65
61
|
|
62
|
+
default do
|
63
|
+
reply("I didn't understand you")
|
64
|
+
end
|
65
|
+
|
66
|
+
on_presence do |status|
|
67
|
+
case status
|
68
|
+
when :available
|
69
|
+
reply("Welcome, #{sender.name}!")
|
70
|
+
when :unavailable
|
71
|
+
reply("Bye bye, #{sender.name}!")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
66
75
|
desc 'greets the user'
|
67
76
|
on /^hello hipbot!$/ do
|
68
77
|
reply('hello!')
|
@@ -20,145 +20,152 @@ describe MyHipbot do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
describe 'presence reactions' do
|
24
|
+
it 'greets joining user', focus: true do
|
25
|
+
subject.should_receive(:send_to_room).with(room, 'Welcome, John Doe!')
|
26
|
+
subject.react_to_presence(sender, :available, room)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
23
30
|
describe 'replying' do
|
24
31
|
it 'should reply to hello' do
|
25
|
-
subject.
|
32
|
+
subject.should_receive(:send_to_room).with(room, 'hello!')
|
26
33
|
subject.react(sender, room, '@robot hello hipbot!')
|
27
34
|
end
|
28
35
|
|
29
36
|
it 'should reply with argument' do
|
30
|
-
subject.
|
37
|
+
subject.should_receive(:send_to_room).with(room, "I know I'm cool")
|
31
38
|
subject.react(sender, room, '@robot you\'re cool, robot')
|
32
39
|
end
|
33
40
|
|
34
41
|
it 'should reply to global message' do
|
35
|
-
subject.
|
42
|
+
subject.should_receive(:send_to_room).with(room, 'hello!')
|
36
43
|
subject.react(sender, room, 'hi everyone!')
|
37
44
|
end
|
38
45
|
|
39
46
|
it 'should respond with default reply' do
|
40
|
-
subject.
|
47
|
+
subject.should_receive(:send_to_room).with(room, "I didn't understand you")
|
41
48
|
subject.react(sender, room, '@robot blahlblah')
|
42
49
|
end
|
43
50
|
end
|
44
51
|
|
45
52
|
describe '"from" option' do
|
46
53
|
it 'reacts to sender from required team' do
|
47
|
-
subject.
|
54
|
+
subject.should_receive(:send_to_room).with(room, 'restarting')
|
48
55
|
subject.react(sender, room, '@robot restart')
|
49
56
|
end
|
50
57
|
|
51
58
|
it 'ignores sender when not in team' do
|
52
|
-
subject.
|
59
|
+
subject.should_receive(:send_to_room).with(room, 'What do you mean, Other Guy?')
|
53
60
|
subject.react(other_sender, room, '@robot restart')
|
54
61
|
end
|
55
62
|
end
|
56
63
|
|
57
64
|
describe '"room" option' do
|
58
65
|
it 'reacts in required room' do
|
59
|
-
subject.
|
66
|
+
subject.should_receive(:send_to_room).with(room, 'deploying')
|
60
67
|
subject.react(sender, room, '@robot deploy')
|
61
68
|
end
|
62
69
|
|
63
70
|
it 'ignores other rooms' do
|
64
|
-
subject.
|
71
|
+
subject.should_receive(:send_to_room).with(other_room, "I didn't understand you")
|
65
72
|
subject.react(sender, other_room, '@robot deploy')
|
66
73
|
end
|
67
74
|
end
|
68
75
|
|
69
76
|
describe 'room=true' do
|
70
77
|
it 'reacts in any room' do
|
71
|
-
subject.
|
78
|
+
subject.should_receive(:send_to_room).with(room, 'doing room thing')
|
72
79
|
subject.react(sender, room, '@robot room thing')
|
73
80
|
end
|
74
81
|
|
75
82
|
it 'ignores room commands if not in room' do
|
76
|
-
subject.
|
83
|
+
subject.should_receive(:send_to_user).with(sender, "I didn't understand you")
|
77
84
|
subject.react(sender, nil, 'room thing')
|
78
85
|
end
|
79
86
|
end
|
80
87
|
|
81
88
|
describe 'room=false' do
|
82
89
|
it 'ignores private command in room' do
|
83
|
-
subject.
|
90
|
+
subject.should_receive(:send_to_room).with(room, "I didn't understand you")
|
84
91
|
subject.react(sender, room, '@robot private thing')
|
85
92
|
end
|
86
93
|
|
87
94
|
it 'allows private command if not in room' do
|
88
|
-
subject.
|
95
|
+
subject.should_receive(:send_to_user).with(sender, 'doing private thing')
|
89
96
|
subject.react(sender, nil, 'private thing')
|
90
97
|
end
|
91
98
|
end
|
92
99
|
|
93
100
|
describe 'scope' do
|
94
101
|
it 'sets its attributes to every reaction inside' do
|
95
|
-
subject.
|
102
|
+
subject.should_receive(:send_to_room).with(room, 'doing John Doe thing')
|
96
103
|
subject.react(sender, room, '@robot John Doe thing')
|
97
104
|
end
|
98
105
|
|
99
106
|
it 'does not match other senders' do
|
100
|
-
subject.
|
107
|
+
subject.should_receive(:send_to_room).with(room, 'What do you mean, Other Guy?')
|
101
108
|
subject.react(other_sender, room, '@robot John Doe thing')
|
102
109
|
end
|
103
110
|
|
104
111
|
it 'merges params if embedded' do
|
105
|
-
subject.
|
112
|
+
subject.should_receive(:send_to_room).with(room, 'doing John Doe project thing')
|
106
113
|
subject.react(sender, room, '@robot John Doe project thing')
|
107
114
|
end
|
108
115
|
|
109
116
|
it 'ignores message from same sander in other room' do
|
110
|
-
subject.
|
117
|
+
subject.should_receive(:send_to_room).with(other_room, "I didn't understand you")
|
111
118
|
subject.react(sender, other_room, '@robot John Doe project thing')
|
112
119
|
end
|
113
120
|
|
114
121
|
it 'ignores message from other sender in same room' do
|
115
|
-
subject.
|
122
|
+
subject.should_receive(:send_to_room).with(room, 'What do you mean, Other Guy?')
|
116
123
|
subject.react(other_sender, room, '@robot John Doe project thing')
|
117
124
|
end
|
118
125
|
end
|
119
126
|
|
120
127
|
describe 'custom helpers' do
|
121
128
|
it 'should have access to room variable' do
|
122
|
-
subject.
|
129
|
+
subject.should_receive(:send_to_room).with(room, 'Project: Project 1')
|
123
130
|
subject.react(sender, room, '@robot tell me the project name')
|
124
131
|
end
|
125
132
|
|
126
133
|
it 'should have access to message variable' do
|
127
|
-
subject.
|
134
|
+
subject.should_receive(:send_to_room).with(room, 'you are John')
|
128
135
|
subject.react(sender, room, '@robot tell me my name')
|
129
136
|
end
|
130
137
|
end
|
131
138
|
|
132
139
|
describe 'plugins' do
|
133
140
|
it 'should reply to reaction defined in plugin' do
|
134
|
-
subject.
|
141
|
+
subject.should_receive(:send_to_room).with(room, 'awesome responded')
|
135
142
|
subject.react(sender, room, '@robot respond awesome')
|
136
143
|
end
|
137
144
|
|
138
145
|
it 'should reply to reaction defined in second plugin' do
|
139
|
-
subject.
|
146
|
+
subject.should_receive(:send_to_room).with(room, 'cool responded')
|
140
147
|
subject.react(sender, room, '@robot respond cool')
|
141
148
|
end
|
142
149
|
end
|
143
150
|
|
144
151
|
describe 'method reaction' do
|
145
152
|
it 'should reply to a method reaction defined in plugin' do
|
146
|
-
subject.
|
153
|
+
subject.should_receive(:send_to_room).with(room, 'parameter: empty')
|
147
154
|
subject.react(sender, room, '@robot method reaction')
|
148
155
|
end
|
149
156
|
|
150
157
|
it 'should reply to a method reaction defined in plugin with parameters' do
|
151
|
-
subject.
|
158
|
+
subject.should_receive(:send_to_room).with(room, 'parameter: method param')
|
152
159
|
subject.react(sender, room, '@robot method reaction method param')
|
153
160
|
end
|
154
161
|
|
155
162
|
it 'should reply to a scope method reaction defined in plugin' do
|
156
|
-
subject.
|
163
|
+
subject.should_receive(:send_to_room).with(room, 'scope method reaction')
|
157
164
|
subject.react(sender, room, '@robot scope method reaction')
|
158
165
|
end
|
159
166
|
|
160
|
-
it 'should reply to a scope regexp with method reaction defined in plugin'
|
161
|
-
subject.
|
167
|
+
it 'should reply to a scope regexp with method reaction defined in plugin' do
|
168
|
+
subject.should_receive(:send_to_room).with(room, 'parameter: empty')
|
162
169
|
subject.react(sender, room, '@robot scope regexp')
|
163
170
|
end
|
164
171
|
end
|