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

49 lines
1.3 KiB
Ruby
Raw Normal View History

2014-05-16 07:58:06 +00:00
module JamRuby
class EmailBatchNewMusician < EmailBatchPeriodic
2014-05-18 00:12:01 +00:00
BATCH_SIZE = 500
2014-05-17 17:38:22 +00:00
SINCE_WEEKS = 2
2014-05-16 07:58:06 +00:00
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
2014-05-18 00:12:01 +00:00
def fetch_recipients(since=nil)
2014-05-17 17:38:22 +00:00
since ||= Time.now - SINCE_WEEKS.weeks
2014-05-16 07:58:06 +00:00
User.geocoded_users
.email_opt_in
2014-05-17 17:38:22 +00:00
.where(['created_at < ?', since])
2014-05-18 00:12:01 +00:00
.find_in_batches(batch_size: EmailBatchNewMusician::BATCH_SIZE) do |users|
2014-05-16 07:58:06 +00:00
new_musicians = users.inject({}) do |hh, uu|
if 0 < (nearby = uu.nearest_musicians).count
hh[uu] = nearby
end
hh
end
2014-05-17 17:38:22 +00:00
yield(new_musicians) if block_given?
end
end
def deliver_batch_sets!
self.opt_in_count = 0
sent = 0
2014-05-18 00:12:01 +00:00
self.fetch_recipients(self.time_since_last_batch(SINCE_WEEKS)) do |new_musicians|
2014-05-16 07:58:06 +00:00
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
2014-05-17 17:38:22 +00:00
self.did_batch_run!
2014-05-16 07:58:06 +00:00
end
end
end