Module: Cinch::Test
- Defined in:
- lib/cinch/test.rb,
lib/cinch/test/version.rb
Overview
Defined Under Namespace
Classes: MockBot, MockIRC, MockMessage, Reply
Constant Summary
collapse
- VERSION =
'0.1.4'
Instance Method Summary
collapse
-
#catch_channel_messages(message, mutex, replies) ⇒ Object
-
#catch_direct_messages(message, mutex, replies) ⇒ Object
-
#catch_replies(message, mutex, replies) ⇒ Object
-
#get_events(message, event) ⇒ Object
-
#get_replies(message, event = :message) ⇒ Object
Process message and return all replies.
-
#make_bot(plugin = nil, opts = {}, &b) ⇒ Object
-
#make_message(bot, text, opts = {}) ⇒ Object
-
#process_message(message, event) ⇒ Object
Process message by dispatching it to the handlers.
Instance Method Details
#catch_channel_messages(message, mutex, replies) ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/cinch/test.rb', line 114
def catch_channel_messages(message, mutex, replies)
return unless message.channel
(class << message.channel; self; end).class_eval do
[[:send, :channel], [:action, :action]].each do |method, event|
define_method method do |msg|
reply = Reply.new(msg, event, Time.now)
mutex.synchronize { replies << reply }
end
end
end
end
|
#catch_direct_messages(message, mutex, replies) ⇒ Object
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/cinch/test.rb', line 103
def catch_direct_messages(message, mutex, replies)
(class << message.user; self; end).class_eval do
[:send, :msg, :privmsg].each do |method|
define_method method do |msg, notice = false|
reply = Reply.new(msg, (notice ? :notice : :private), Time.now)
mutex.synchronize { replies << reply }
end
end
end
end
|
#catch_replies(message, mutex, replies) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
# File 'lib/cinch/test.rb', line 87
def catch_replies(message, mutex, replies)
(class << message; self; end).class_eval do
[:reply, :safe_reply, :action_reply, :safe_action_reply].each do |name|
define_method name do |msg, prefix = false|
msg = [user.nick, msg].join(': ') if prefix
if name == :safe_reply || name == :safe_action_reply
msg = Cinch::Utilities::String.filter_string(msg)
end
reply = Reply.new(msg, name.match(/action/) ? :action : :message,
Time.now)
mutex.synchronize { replies << reply }
end
end
end
end
|
#get_events(message, event) ⇒ Object
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/cinch/test.rb', line 166
def get_events(message, event)
events = event.is_a?(Array) ? [:catchall] + event : [:catchall, event]
events << (message.channel.nil? ? :private : :channel)
events << :message if events.include?(:private)
events.uniq
end
|
#get_replies(message, event = :message) ⇒ Object
Process message and return all replies.
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
# File 'lib/cinch/test.rb', line 129
def get_replies(message, event = :message)
mutex = Mutex.new
replies = []
catch_replies(message, mutex, replies)
catch_direct_messages(message, mutex, replies)
catch_channel_messages(message, mutex, replies)
process_message(message, event)
replies
end
|
#make_bot(plugin = nil, opts = {}, &b) ⇒ Object
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
# File 'lib/cinch/test.rb', line 68
def make_bot(plugin = nil, opts = {}, &b)
MockBot.new do
configure do |c|
c.nick = 'testbot'
c.server = nil
c.channels = ['#test']
c.plugins.plugins = [plugin] unless plugin.nil?
c.plugins.options[plugin] = opts
c.reconnect = false
end
instance_eval(&b) if b
end
end
|
#make_message(bot, text, opts = {}) ⇒ Object
83
84
85
|
# File 'lib/cinch/test.rb', line 83
def make_message(bot, text, opts = {})
MockMessage.new(text, bot, opts)
end
|
#process_message(message, event) ⇒ Object
Process message by dispatching it to the handlers
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# File 'lib/cinch/test.rb', line 150
def process_message(message, event)
handlers = message.bot.handlers
events = get_events(message, event)
events.each { |e| handlers.dispatch(e, message) }
handlers.each do |handler|
handler.thread_group.list.each(&:join)
end
end
|