lib/scamp.rb in scamp-1.2.0 vs lib/scamp.rb in scamp-2.0.0.pre

- old
+ new

@@ -1,66 +1,61 @@ require 'eventmachine' -require 'em-http-request' -require 'yajl' require "logger" require "scamp/version" -require 'scamp/connection' -require 'scamp/rooms' -require 'scamp/users' require 'scamp/matcher' -require 'scamp/action' -require 'scamp/messages' +require 'scamp/adapter' +require 'scamp/plugin' class Scamp - include Connection - include Rooms - include Users - include Messages + attr_accessor :adapters, :plugins, :matchers, :logger, :verbose, :first_match_only, :required_format, :strip_prefix - attr_accessor :rooms, :user_cache, :room_cache, :matchers, :api_key, :subdomain, - :logger, :verbose, :first_match_only, :ignore_self, :required_prefix, - :rooms_to_join - - def initialize(options = {}) + def initialize(options = {}, &block) options ||= {} - raise ArgumentError, "You must pass an API key" unless options[:api_key] - raise ArgumentError, "You must pass a subdomain" unless options[:subdomain] - options.each do |k,v| s = "#{k}=" if respond_to?(s) send(s, v) else logger.warn "Scamp initialized with #{k.inspect} => #{v.inspect} but NO UNDERSTAND!" end end - - @rooms_to_join = [] - @rooms = {} - @user_cache = {} - @room_cache = {} + + @strip_prefix ||= true @matchers ||= [] + @adapters ||= {} + @plugins ||= [] + + yield self end - - def behaviour &block - instance_eval &block + + def adapter name, klass, opts={} + adapter = klass.new self, opts + sid = adapter.subscribe do |context, msg| + process_message(name, context, msg) + end + @adapters[name] = {:adapter => adapter, :sid => sid} end - - def connect!(room_list, &blk) - logger.info "Starting up" - connect(api_key, room_list, &blk) + + def plugin klass, opts={} + plugins << klass.new(self, opts) end - - def command_list - matchers.map{|m| [m.trigger, m.conditions] } + + def connect! + EM.run do + @adapters.each do |name, data| + logger.info "Connecting to #{name} adapter" + data[:adapter].connect! + end + end end def logger unless @logger @logger = Logger.new(STDOUT) @logger.level = (verbose ? Logger::DEBUG : Logger::INFO) + @logger.info "Scamp using default logger as none was provided" end @logger end def verbose @@ -71,20 +66,15 @@ def first_match_only @first_match_only = false if @first_match_only == nil @first_match_only end - private - def match trigger, params={}, &block - params ||= {} - matchers << Matcher.new(self, {:trigger => trigger, :action => block, :conditions => params[:conditions], :required_prefix => required_prefix}) + matchers << Matcher.new(self, {:trigger => trigger, :action => block, :on => params[:on], :conditions => params[:conditions]}) end - - def process_message(msg) - logger.debug "Received message #{msg.inspect}" - return false if ignore_self && is_me?(msg[:user_id]) + + def process_message(channel, context, msg) matchers.each do |matcher| - break if first_match_only & matcher.attempt(msg) + break if first_match_only & matcher.attempt(channel, context, msg) end end end