Skip to content

Instantly share code, notes, and snippets.

@roidrage
Created May 27, 2009 09:14
Show Gist options
  • Save roidrage/118536 to your computer and use it in GitHub Desktop.
Save roidrage/118536 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'activerecord'
ActiveRecord::Base.configurations = {'sqlite3' => {:adapter => 'sqlite3', :database => ':memory:'}}
ActiveRecord::Base.establish_connection('sqlite3')
ActiveRecord::Base.logger = Logger.new(STDERR)
ActiveRecord::Base.logger.level = Logger::DEBUG
ActiveRecord::Schema.define(:version => 0) do
create_table :jobs do |t|
t.string :klazz, :method
t.string :obj_id
end
create_table :users do |t|
end
end
class User < ActiveRecord::Base
def notify_signup
puts "notified!"
end
end
class Job < ActiveRecord::Base
def self.schedule(obj, method)
create(:klazz => obj.class.name,
:obj_id => obj.id,
:method => method.to_s)
end
def run
puts klazz
obj = klazz.constantize.find(obj_id)
obj.send(self[:method])
end
end
Job.schedule(User.create, :notify_signup)
class JobPoller
def run
loop do
job = Job.find(:first, :lock => true)
next unless job
job.run
job.delete
break
end
end
end
JobPoller.new.run
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment