jam-cloud/ruby/lib/jam_ruby/models/email_batch_new_musician.rb

49 lines
1.3 KiB
Ruby

module JamRuby
class EmailBatchNewMusician < EmailBatchPeriodic
BATCH_SIZE = 500
SINCE_WEEKS = 2
VAR_MUSICIAN_COUNT = "@MUSICIAN_COUNT"
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
def self.subject
"New musicians with good Internet connections to you have joined JamKazam!"
end
def fetch_recipients(since=nil)
since ||= Time.now - SINCE_WEEKS.weeks
User.geocoded_users
.email_opt_in
.where(['created_at < ?', since])
.find_in_batches(batch_size: EmailBatchNewMusician::BATCH_SIZE) do |users|
new_musicians = users.inject({}) do |hh, uu|
if 0 < (nearby = uu.nearest_musicians).count
hh[uu] = nearby
end
hh
end
yield(new_musicians) if block_given?
end
end
def deliver_batch_sets!
self.opt_in_count = 0
sent = 0
self.fetch_recipients(self.time_since_last_batch(SINCE_WEEKS)) do |new_musicians|
self.opt_in_count += new_musicians.count
self.email_batch_sets << (bset = EmailBatchSet.load_set(self, new_musicians.keys.map(&:id)))
new_musicians.each do |uu, nearby|
UserMailer.new_musicians(uu, nearby).deliver
sent += 1
end
end
self.sent_count = sent
self.save
self.did_batch_run!
end
end
end