Skip to content

Instantly share code, notes, and snippets.

View bleonard's full-sized avatar

Brian Leonard bleonard

View GitHub Profile
class InvoiceChargeBatchWorker
include TResque::Worker
worker_lock :all
queue_lock :all
def work
Invoice.where(stat: 'pending').find_each do |invoice|
InvoiceChargeWorker.enqueue(invoice_id: invoice.id)
end
class InvoiceChargeWorker
include TResque::Worker
inputs :invoice_id
worker_lock :invoice_id
def work
return unless needed?
invoice.charge!
end
require 'resque/tasks'
require 'resque_scheduler/tasks'
require "resque_bus/tasks"
namespace :resque do
task :setup => [:environment] do
require 'resque_scheduler'
require 'resque/scheduler'
require 'tresque'
end
require 'tresque'
module Account
class RegularWorker
include ::TResque::Worker
# defaults to account_default queue
end
end
module Account
subscribe "user_changed" do |attributes|
UserIndexWorker.enqueue(user_id: attributes['id'])
end
class InvoiceChargeWorker
include TResque::Worker
inputs :invoice_id
worker_lock :to_id
def work
return unless needed?
invoice.charge!
end
class UserIndexWorker
include TResque::Worker
inputs :user_id
queue_lock :user_id
end
class InvoiceChargeWorker
include TResque::Worker
inputs :invoice_id
def work
return unless needed?
invoice.charge!
end
def needed?
class UserIndexWorker
include TResque::Worker
inputs :user_id
def work
Elasticsearch.index('users').write(user.attributes.slice(:id, :first_name, :last_name, :etc))
end
def user
@user ||= User.find(user_id)
class UserIndexWorker
include TResque::Worker
inputs :id, :first_name, :last_name, :etc
def work
Elasticsearch.index('users').write(id, id: id, first_name: first_name, last_name: last_name, etc: etc)
end
end
# When user changes