Skip to content

Instantly share code, notes, and snippets.

@codatory
Created April 25, 2012 18:29
Show Gist options
  • Select an option

  • Save codatory/2491959 to your computer and use it in GitHub Desktop.

Select an option

Save codatory/2491959 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
QUEUE = Beanstalk::Pool.new(['127.0.0.1:11300'])
MAILR = Mailer.new
MAILR.deliver_digests
# Main program loop
counter = 0
loop do
MAILR.deliver_digests if counter > 900
job = QUEUE.reserve(1)
if job.present?
payload = JSON.parse(job.body)
payload.symbolize_keys!
if payload[:instant] == 'true'
MAILR.deliver_payoad(payload)
else
MAILR.enqeue_payload(payload)
end
end
counter += 1
end
class Mailer
require 'celluloid'
include Celluload
def deliver_payload(payload)
mail = Mail.new(:to => payload[:to], :subject => payload[:subject])
mail.messages << payload[:message]
mail.deliver
end
def enqueu_payload(payload)
MessageQueue.create(:to => payload[:to], :subject => payload[:subject], :message => payload[:message]
end
def deliver_digests
MessageQueue.pending.group_by(&:to) do |address,messages|
mail = Mail.new(:to => address)
if messages.size == 1
mail.subject = messages.first.subject
else
mail.subject = "Digest of #{messages.size} messages"
end
messages.each{|m| mail.messages << m.message}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment