Module: Rpush::Client::ActiveModel::Apns::Notification
- Defined in:
- lib/rpush/client/active_model/apns/notification.rb
Constant Summary collapse
- APNS_DEFAULT_EXPIRY =
1.day.to_i
- APNS_PRIORITY_IMMEDIATE =
10
- APNS_PRIORITY_CONSERVE_POWER =
5
- APNS_PRIORITIES =
[APNS_PRIORITY_IMMEDIATE, APNS_PRIORITY_CONSERVE_POWER]
- MDM_KEY =
'__rpush_mdm__'
- CONTENT_AVAILABLE_KEY =
'__rpush_content_available__'
Class Method Summary collapse
Instance Method Summary collapse
-
#as_json ⇒ Object
rubocop:disable Metrics/PerceivedComplexity.
- #content_available=(bool) ⇒ Object
- #device_token=(token) ⇒ Object
- #mdm=(magic) ⇒ Object
- #to_binary(options = {}) ⇒ Object
Class Method Details
.included(base) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 11 def self.included(base) base.instance_eval do validates :device_token, presence: true validates :badge, numericality: true, allow_nil: true validates :priority, inclusion: { in: APNS_PRIORITIES }, allow_nil: true validates_with Rpush::Client::ActiveModel::Apns::DeviceTokenFormatValidator validates_with Rpush::Client::ActiveModel::Apns::BinaryNotificationValidator base.const_set('APNS_DEFAULT_EXPIRY', APNS_DEFAULT_EXPIRY) unless base.const_defined?('APNS_DEFAULT_EXPIRY') base.const_set('APNS_PRIORITY_IMMEDIATE', APNS_PRIORITY_IMMEDIATE) unless base.const_defined?('APNS_PRIORITY_IMMEDIATE') base.const_set('APNS_PRIORITY_CONSERVE_POWER', APNS_PRIORITY_CONSERVE_POWER) unless base.const_defined?('APNS_PRIORITY_CONSERVE_POWER') end end |
Instance Method Details
#as_json ⇒ Object
rubocop:disable Metrics/PerceivedComplexity
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 41 def as_json # rubocop:disable Metrics/PerceivedComplexity json = ActiveSupport::OrderedHash.new if data && data.key?(MDM_KEY) json['mdm'] = data[MDM_KEY] else json['aps'] = ActiveSupport::OrderedHash.new json['aps']['alert'] = alert if alert json['aps']['badge'] = badge if badge json['aps']['sound'] = sound if sound json['aps']['category'] = category if category json['aps']['url-args'] = url_args if url_args if data && data[CONTENT_AVAILABLE_KEY] json['aps']['content-available'] = 1 end if data non_aps_attributes = data.reject { |k, _| k == CONTENT_AVAILABLE_KEY } non_aps_attributes.each { |k, v| json[k.to_s] = v } end end json end |
#content_available=(bool) ⇒ Object
36 37 38 39 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 36 def content_available=(bool) return unless bool self.data = (data || {}).merge(CONTENT_AVAILABLE_KEY => true) end |
#device_token=(token) ⇒ Object
26 27 28 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 26 def device_token=(token) write_attribute(:device_token, token.delete(" <>")) unless token.nil? end |
#mdm=(magic) ⇒ Object
31 32 33 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 31 def mdm=(magic) self.data = (data || {}).merge(MDM_KEY => magic) end |
#to_binary(options = {}) ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/rpush/client/active_model/apns/notification.rb', line 67 def to_binary( = {}) frame_payload = payload frame_id = [:for_validation] ? 0 : id frame = "" frame << [1, 32, device_token].pack("cnH*") frame << [2, frame_payload.bytesize, frame_payload].pack("cna*") frame << [3, 4, frame_id].pack("cnN") frame << [4, 4, expiry || APNS_DEFAULT_EXPIRY].pack("cnN") frame << [5, 1, priority_for_frame].pack("cnc") [2, frame.bytesize].pack("cN") + frame end |