def picnic!
include Picnic
puts "Adding Picnic functionality to #{self} from #{File.dirname(File.expand_path(__FILE__))}..."
self.module_eval do
def init_logger
puts "Initializing #{self} logger..."
$LOG = Picnic::Utils::Logger.new(self::Conf.log[:file])
$LOG.level = Picnic::Utils::Logger.const_get(self::Conf.log[:level])
end
module_function :init_logger
def init_db_logger
begin
if self::Conf.db_log
log_file = self::Conf.db_log[:file] || "#{self.to_s.downcase}_db.log"
self::Models::Base.logger = Picnic::Utils::Logger.new(log_file)
self::Models::Base.logger.level = Picnic::Utils::Logger.const_get(self::Conf.db_log[:level] || 'DEBUG')
$LOG.debug "Logging database queries to #{log_file.inspect}"
end
rescue Errno::EACCES => e
$LOG.warn "Can't write to database log file at '#{log_file}': #{e}"
end
end
module_function :init_db_logger
def authenticate_using(mod)
require 'picnic/authentication'
mod = self::Authentication.const_get(mod.to_s.camelize) unless mod.kind_of? Module
$LOG.info("Enabling authentication for all requests using #{mod.inspect}.")
module_eval do
include mod
end
end
module_function :authenticate_using
def start_picnic
require 'picnic/postambles'
self.extend self::Postambles
if $PID_FILE && !(self::Conf.server.to_s == 'mongrel' || self::Conf.server.to_s == 'webrick')
$LOG.warn("Unable to create a pid file. You must use mongrel or webrick for this feature.")
end
puts "\nStarting with configuration: #{$CONF.to_yaml}"
puts
raise NoMethodError if self::Conf.server.nil?
send(self::Conf.server)
end
module_function :start_picnic
c = File.dirname(File.expand_path(__FILE__))+'/picnic/controllers.rb'
p = IO.read(c).gsub("Picnic", self.to_s)
eval p, TOPLEVEL_BINDING
end
self::Conf.load(self)
init_logger
end