Module: Blather::DSL
- Defined in:
- lib/blather/client/dsl.rb,
lib/blather/client/dsl/pubsub.rb
Overview
# Blather DSL
The DSL is a set of methods that enables you to write cleaner code. Being a module means it can be included in or extend any class you may want to create.
Every stanza handler is registered as a method on the DSL.
Defined Under Namespace
Classes: PubSub
Class Method Summary collapse
- .append_features(o) ⇒ Object
-
.client ⇒ Blather::Client
The actual client connection.
Instance Method Summary collapse
-
#<<(stanza) ⇒ self
Push data to the stream This works such that it can be chained: self << stanza1 << stanza2 << “raw data”.
-
#after(handler = nil, *guards) {|Blather::Stanza| ... } ⇒ Object
Setup an after filter.
-
#before(handler = nil, *guards) {|Blather::Stanza| ... } ⇒ Object
Setup a before filter.
-
#disconnected(&block) ⇒ Object
Wrapper for “handle :disconnected”.
-
#discover(what, who, where, &callback) ⇒ Object
Request items or info from an entity discover (items|info), [jid], [node] do |response| end.
-
#halt ⇒ Object
Halt the handler chain.
-
#handle(handler, *guards) {|Blather::Stanza| ... } ⇒ Object
Set handler for a stanza type.
-
#jid ⇒ Blather::JID
The JID according to the server.
-
#join(room, service, nickname = nil) ⇒ Object
Helper method to join a MUC room.
-
#my_roster ⇒ Blather::Roster
Direct access to the roster.
-
#pass ⇒ Object
Pass responsibility to the next handler.
-
#pubsub ⇒ Blather::PubSub
A pubsub helper.
-
#run ⇒ Object
Connect to the server.
-
#say(to, msg, using = :chat) ⇒ Object
Helper method to make sending basic messages easier.
-
#send_caps ⇒ Object
Send capabilities to the server.
-
#set_caps(node, identities, features) ⇒ Object
Set the capabilities of the client.
-
#set_status(state = nil, msg = nil) ⇒ Object
Set current status.
-
#setup(jid, password, host = nil, port = nil, certs = nil, connection_timeout = nil) ⇒ Object
Prepare server settings.
-
#shutdown ⇒ Object
Shutdown the connection.
-
#when_ready(&block) ⇒ Object
Wrapper for “handle :ready” (just a bit of syntactic sugar).
-
#write_to_stream(stanza) ⇒ Object
Write data to the stream.
Class Method Details
.append_features(o) ⇒ Object
87 88 89 90 91 92 |
# File 'lib/blather/client/dsl.rb', line 87 def self.append_features(o) Blather::Stanza.handler_list.each do |handler_name| o.__send__ :remove_method, handler_name if !o.is_a?(Class) && o.method_defined?(handler_name) end super end |
.client ⇒ Blather::Client
The actual client connection
97 98 99 |
# File 'lib/blather/client/dsl.rb', line 97 def client @client ||= Client.new end |
Instance Method Details
#<<(stanza) ⇒ self
Push data to the stream This works such that it can be chained:
self << stanza1 << stanza2 << "raw data"
115 116 117 118 |
# File 'lib/blather/client/dsl.rb', line 115 def <<(stanza) client.write stanza self end |
#after(handler = nil, *guards) {|Blather::Stanza| ... } ⇒ Object
Setup an after filter
run after against
161 162 163 |
# File 'lib/blather/client/dsl.rb', line 161 def after(handler = nil, *guards, &block) client.register_filter :after, handler, *guards, &block end |
#before(handler = nil, *guards) {|Blather::Stanza| ... } ⇒ Object
Setup a before filter
run before against
150 151 152 |
# File 'lib/blather/client/dsl.rb', line 150 def before(handler = nil, *guards, &block) client.register_filter :before, handler, *guards, &block end |
#disconnected(&block) ⇒ Object
Wrapper for “handle :disconnected”
This is run after the connection has been shut down.
188 189 190 |
# File 'lib/blather/client/dsl.rb', line 188 def disconnected(&block) handle :disconnected, &block end |
#discover(what, who, where, &callback) ⇒ Object
Request items or info from an entity
discover (items|info), [jid], [node] do |response|
end
280 281 282 283 284 285 286 287 |
# File 'lib/blather/client/dsl.rb', line 280 def discover(what, who, where, &callback) stanza = Blather::Stanza.class_from_registration(:query, "http://jabber.org/protocol/disco##{what}").new stanza.to = who stanza.node = where client.register_tmp_handler stanza.id, &callback client.write stanza end |
#halt ⇒ Object
Halt the handler chain
Use this to stop the propogation of the stanza though the handler chain.
257 258 259 |
# File 'lib/blather/client/dsl.rb', line 257 def halt throw :halt end |
#handle(handler, *guards) {|Blather::Stanza| ... } ⇒ Object
Set handler for a stanza type
against
171 172 173 |
# File 'lib/blather/client/dsl.rb', line 171 def handle(handler, *guards, &block) client.register_handler handler, *guards, &block end |
#jid ⇒ Blather::JID
The JID according to the server
246 247 248 |
# File 'lib/blather/client/dsl.rb', line 246 def jid client.jid end |
#join(room_jid, nickname) ⇒ Object #join(room_jid, nickname) ⇒ Object
Helper method to join a MUC room
224 225 226 227 228 229 230 231 232 |
# File 'lib/blather/client/dsl.rb', line 224 def join(room, service, nickname = nil) join = Blather::Stanza::Presence::MUC.new join.to = if nickname "#{room}@#{service}/#{nickname}" else "#{room}/#{service}" end client.write join end |
#my_roster ⇒ Blather::Roster
Direct access to the roster
204 205 206 |
# File 'lib/blather/client/dsl.rb', line 204 def my_roster client.roster end |
#pass ⇒ Object
Pass responsibility to the next handler
Use this to jump out of the current handler and let the next registered handler take care of the stanza
This is contrive and should be handled with guards, but pass a message to the next handler based on the content
{ |s| puts "message caught" }
{ |s| pass if s.body =~ /pass along/ }
273 274 275 |
# File 'lib/blather/client/dsl.rb', line 273 def pass throw :pass end |
#pubsub ⇒ Blather::PubSub
A pubsub helper
105 106 107 |
# File 'lib/blather/client/dsl.rb', line 105 def pubsub @pubsub ||= PubSub.new client, jid.domain end |
#run ⇒ Object
Connect to the server. Must be run in the EventMachine reactor
133 134 135 |
# File 'lib/blather/client/dsl.rb', line 133 def run client.run end |
#say(to, msg, using = :chat) ⇒ Object
Helper method to make sending basic messages easier
239 240 241 |
# File 'lib/blather/client/dsl.rb', line 239 def say(to, msg, using = :chat) client.write Blather::Stanza::Message.new(to, msg, using) end |
#send_caps ⇒ Object
Send capabilities to the server
301 302 303 304 305 306 307 308 309 |
# File 'lib/blather/client/dsl.rb', line 301 def send_caps client.register_handler :disco_info, :type => :get, :node => client.caps.node do |s| r = client.caps.dup r.to = s.from r.id = s.id client.write r end client.write client.caps.c end |
#set_caps(node, identities, features) ⇒ Object
Set the capabilities of the client
294 295 296 297 298 |
# File 'lib/blather/client/dsl.rb', line 294 def set_caps(node, identities, features) client.caps.node = node client.caps.identities = identities client.caps.features = features end |
#set_status(state = nil, msg = nil) ⇒ Object
Set current status
state
197 198 199 |
# File 'lib/blather/client/dsl.rb', line 197 def set_status(state = nil, msg = nil) client.status = state, msg end |
#setup(jid, password, host = nil, port = nil, certs = nil, connection_timeout = nil) ⇒ Object
Prepare server settings
this is ‘nil` the domain on the JID will be used
128 129 130 |
# File 'lib/blather/client/dsl.rb', line 128 def setup(jid, password, host = nil, port = nil, certs = nil, connection_timeout = nil) client.setup(jid, password, host, port, certs, connection_timeout) end |
#shutdown ⇒ Object
Shutdown the connection. Flushes the write buffer then stops EventMachine
139 140 141 |
# File 'lib/blather/client/dsl.rb', line 139 def shutdown client.close end |
#when_ready(&block) ⇒ Object
Wrapper for “handle :ready” (just a bit of syntactic sugar)
This is run after the connection has been completely setup
178 179 180 |
# File 'lib/blather/client/dsl.rb', line 178 def when_ready(&block) handle :ready, &block end |