assemblymade/coderwall

View on GitHub
lib/tasks/digest.rake

Summary

Maintainability
Test Coverage
namespace :weekly do
  namespace :digest do
    task :send => :environment do
      send_digest_to_all(ENV['WEEKLY_DIGEST_AUDIENCE'] || 'all')
    end

    task :automatic => :environment do
      now_in_pst = Time.now.in_time_zone("Pacific Time (US & Canada)")
      if now_in_pst.tuesday? && now_in_pst.hour >= 10
        send_digest_to_all(ENV['WEEKLY_DIGEST_AUDIENCE'] || 'all')
      end
    end

    def send_digest_to_all(audience)
      users = User.receives_digest.no_emails_since(5.days.ago).order('last_request_at asc').select([:username, :id])
      if audience == "2weeks"
        users = users.where('last_request_at < ?', 2.weeks.ago)
      elsif audience == "1month"
        users = users.where('last_request_at < ?', 1.month.ago)
      end
      users.find_each(:batch_size => 1000) do |user|
        WeeklyDigestMailer.weekly_digest(user.username).deliver
      end
    end
  end
end