samnang
3/10/2014 - 4:45 PM

notifications_worker.rb

class NotificationsWorker
  include Sidekiq::Worker
  sidekiq_options queue: :notification, retry: false

  def perform(actor_id, user_ids, action, target_type, target_id)
    actor  = User.find(actor_id)
    target = target_type.constantize.find(target_id)

    notifications = []
    ActiveRecord::Base.transaction do
      user_ids.each do |user_id|
        notification = Notification.create(
          user_id: user_id,
          action:  action,
          actor:   actor,
          target:  target
        )

        notifications.push(PushNotification.new(notification).notification)
      end
    end

    Urbanairship.batch_push(notifications)
  end
end