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