lib/rpush/client/redis/notification.rb
module Rpush
module Client
module Redis
class Notification
include Rpush::MultiJsonHelper
include Modis::Model
include Rpush::Client::ActiveModel::Notification
after_create :register_notification
self.namespace = 'notifications'
def self.absolute_pending_namespace
"#{absolute_namespace}:pending"
end
def self.absolute_retryable_namespace
"#{absolute_namespace}:retryable"
end
attribute :badge, :integer
attribute :device_token, :string
attribute :sound, [:string, :hash], strict: false, default: 'default'
attribute :alert, [:string, :hash], strict: false
attribute :data, :hash
attribute :expiry, :integer, default: 1.day.to_i
attribute :delivered, :boolean
attribute :delivered_at, :timestamp
attribute :failed, :boolean
attribute :failed_at, :timestamp
attribute :fail_after, :timestamp
attribute :retries, :integer, default: 0
attribute :error_code, :integer
attribute :error_description, :string
attribute :deliver_after, :timestamp
attribute :alert_is_json, :boolean
attribute :sound_is_json, :boolean
attribute :app_id, :integer
attribute :collapse_key, :string
attribute :delay_while_idle, :boolean
attribute :registration_ids, :array
attribute :uri, :string
attribute :priority, :integer
attribute :url_args, :array
attribute :category, :string
attribute :content_available, :boolean, default: false
attribute :dry_run, :boolean, default: false
attribute :mutable_content, :boolean, default: false
attribute :notification, :hash
attribute :thread_id, :string
def app
return nil unless app_id
@app ||= Rpush::Client::Redis::App.find(app_id)
end
def app=(app)
@app = app
if app
self.app_id = app.id
else
self.app_id = nil
end
end
private
def register_notification
Modis.with_connection do |redis|
redis.zadd(self.class.absolute_pending_namespace, id, id)
end
end
end
end
end
end