class Atheme::Service
Public Class Methods
command(name, opts={}, &block)
click to toggle source
# File lib/atheme/service.rb, line 70 def self.command(name, opts={}, &block) @@staged_parser.register_command(Atheme::Service::Command.new(name, opts, &block)) end
inherited(klass)
click to toggle source
# File lib/atheme/service.rb, line 52 def self.inherited(klass) class_name = klass.name.gsub('Atheme::', '') Atheme::Session.class_eval <<-RUBY def #{class_name.downcase} @#{class_name.downcase} ||= #{klass.name}.new(self) end RUBY @@parsers[class_name.downcase] ||= Hash.new end
new(session)
click to toggle source
# File lib/atheme/service.rb, line 78 def initialize(session) @session = session end
parse(cmd) { || ... }
click to toggle source
# File lib/atheme/service.rb, line 63 def self.parse(cmd, &block) service = self.name.sub('Atheme::', '').downcase @@parsers[service][cmd] = Atheme::Service::Parser.new @@staged_parser = @@parsers[service][cmd] yield if block_given? end
responds_with(atheme_class=nil, &block)
click to toggle source
# File lib/atheme/service.rb, line 74 def self.responds_with(atheme_class=nil, &block) @@staged_parser.responder = atheme_class || block end
Public Instance Methods
method_missing(method, *args, &block)
click to toggle source
# File lib/atheme/service.rb, line 82 def method_missing(method, *args, &block) raw_output = @session.service_call(service_name, method, *args) #if an error occurred, just return it to the user return raw_output if raw_output.kind_of?(Atheme::Error) #building up the response hash... response = {raw_output: raw_output} #get the parser of the method registered with 'parse :key' parser = @@parsers.has_key?(service_name) && @@parsers[service_name][method] #no parser is available, return generic Entity which holds only the raw_output return Atheme::Entity.new(@session, response, &block) unless parser #a responds_with is defined and associates a block #we do not need any further command-handling #as we only serve the raw_output if the request return parser.responder.call(@session, response[:raw_output]) if parser.responder && parser.responder.kind_of?(Proc) #add further commands/key-values to the hash registered with 'command :key' parser.commands.each do |command| response[command.name] = command.call(@session, raw_output) end #create a special Entity registered with resonds_with if available return parser.responder.new(@session, response, &block) if parser.responder #last but not least, return a generic Entity but with extended commands/values return Atheme::Entity.new(@session, response, &block) end
Private Instance Methods
service_name()
click to toggle source
# File lib/atheme/service.rb, line 115 def service_name self.class.name.gsub('Atheme::', '').downcase end