lib/afterparty.rb in afterparty-0.0.21 vs lib/afterparty.rb in afterparty-0.1.0
- old
+ new
@@ -1,17 +1,61 @@
require 'logger'
require 'afterparty/queue_helpers'
-require 'afterparty/redis_queue'
-require 'redis'
+require 'yaml'
Dir[File.expand_path('../afterparty/*', __FILE__)].each { |f| require f }
module Afterparty
- @@redis = Redis.new
+ def self.clear namespace=:default
+ redis_call namespace, :del
+ end
- def self.redis
- @@redis
+ def self.redis_call namespace, command, *args
+ @@redis.send(command, redis_queue_name(namespace), *args)
end
- def self.redis=(redis)
- @@redis = redis
+
+ def self.redis_queue_name namespace=:default
+ "afterparty_#{namespace}_queue"
end
+
+ def self.queues
+ # @@redis.smembers "afterparty_queues"
+ end
+
+ # return timestamp of :execute_at or current time
+ def self.queue_time job
+ time = job_valid?(job) ? job.execute_at : DateTime.now
+ end
+
+ # returns true if job has an :execute_at value
+ def self.job_valid? job
+ job.respond_to?(:execute_at) && !job.execute_at.nil?
+ end
+
+ def self.load(raw)
+ begin
+ # postgres converts it to utf-8
+ # raw.encode!("ascii")
+ begin
+ # job = Marshal.load(raw)
+ # job = Marshal.load(job) if String === job
+ return YAML.load(raw)
+ rescue ArgumentError => e
+ # lots of yaml load errors are because something that hasn't been
+ # required. recursively require on these errors
+ # Invoke the autoloader and try again if object's class is undefined
+ if e.message =~ /undefined class\/module (.*)$/
+ # puts "autoloading #{$1}"
+ $1.constantize rescue return nil
+ end
+ return load(raw)
+ end
+ rescue Exception => e
+ puts e
+ puts "Exception while unmarshaling a job:"
+ puts e.message
+ puts e.backtrace
+ return nil
+ end
+ end
+
end
\ No newline at end of file