Skip to content

Instantly share code, notes, and snippets.

@benders
Created May 10, 2011 05:59
Show Gist options
  • Save benders/963977 to your computer and use it in GitHub Desktop.
Save benders/963977 to your computer and use it in GitHub Desktop.
Helper for testing applications using DelayedJob
require 'delayed_job'
module DelayedJobHelper
def self.included(klass)
klass.class_eval <<-RUBY
extend ClassMethods
RUBY
end
module ClassMethods
def discard_delayed_jobs
self.instance_eval <<-RUBY
setup :eliminate_dj
teardown :restore_dj
RUBY
end
def immediate_delayed_jobs
self.instance_eval <<-RUBY
setup :immanentize_dj
teardown :restore_dj
RUBY
end
end
private
def immanentize_dj
Object.class_eval <<-'RUBY'
alias :orig_send_later :send_later
alias :orig_send_at :send_at
def send_later(*args)
RAILS_DEFAULT_LOGGER.debug "Immanentizing #{self.class.to_s}#send_later(#{args.map(&:inspect).join(', ')})"
send(*args)
end
def send_at(*args)
RAILS_DEFAULT_LOGGER.debug "Immanentizing #{self.class.to_s}#send_at(#{args.map(&:inspect).join(', ')})"
send(*args[1..-1])
end
RUBY
end
def eliminate_dj
Object.class_eval <<-'RUBY'
alias :orig_send_later :send_later
alias :orig_send_at :send_at
def send_later(*args)
RAILS_DEFAULT_LOGGER.debug "Discarding #{self.class.to_s}#send_later(#{args.map(&:inspect).join(', ')})"
nil
end
def send_at(*args)
RAILS_DEFAULT_LOGGER.debug "Discarding #{self.class.to_s}#send_at(#{args.map(&:inspect).join(', ')})"
nil
end
RUBY
end
def restore_dj
Object.class_eval <<-RUBY
alias :send_later :orig_send_later
alias :send_at :orig_send_at
undef :orig_send_later
undef :orig_send_at
RUBY
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment