Class: Grocer::Notification

Inherits:
Object
  • Object
show all
Defined in:
lib/grocer/notification.rb

Overview

Public: An object used to send notifications to APNS.

Constant Summary collapse

MAX_PAYLOAD_SIZE =
2048
CONTENT_AVAILABLE_INDICATOR =
1

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(payload = {}) ⇒ Notification

Public: Initialize a new Grocer::Notification. You must specify at least an ‘alert` or `badge`.

payload - The Hash of notification parameters and payload to be sent to APNS.:

:device_token      - The String representing to device token sent to APNS.
:alert             - The String or Hash to be sent as the alert portion of the payload. (optional)
:badge             - The Integer to be sent as the badge portion of the payload. (optional)
:sound             - The String representing the sound portion of the payload. (optional)
:expiry            - The Integer representing UNIX epoch date sent to APNS as the notification expiry. (default: 0)
:identifier        - The arbitrary Integer sent to APNS to uniquely this notification. (default: 0)
:content_available - The truthy or falsy value indicating the availability of new content for background fetch. (optional)
:category          - The String to be sent as the category portion of the payload. (optional)


23
24
25
26
27
28
29
# File 'lib/grocer/notification.rb', line 23

def initialize(payload = {})
  @identifier = 0

  payload.each do |key, val|
    send("#{key}=", val)
  end
end

Instance Attribute Details

#alertObject

Returns the value of attribute alert.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def alert
  @alert
end

#badgeObject

Returns the value of attribute badge.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def badge
  @badge
end

#categoryObject

Returns the value of attribute category.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def category
  @category
end

#content_availableObject

Returns the value of attribute content_available.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def content_available
  @content_available
end

#customObject

Returns the value of attribute custom.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def custom
  @custom
end

#device_tokenObject

Returns the value of attribute device_token.



9
10
11
# File 'lib/grocer/notification.rb', line 9

def device_token
  @device_token
end

#expiryObject

Returns the value of attribute expiry.



9
10
11
# File 'lib/grocer/notification.rb', line 9

def expiry
  @expiry
end

#identifierObject

Returns the value of attribute identifier.



9
10
11
# File 'lib/grocer/notification.rb', line 9

def identifier
  @identifier
end

#soundObject

Returns the value of attribute sound.



10
11
12
# File 'lib/grocer/notification.rb', line 10

def sound
  @sound
end

Instance Method Details

#content_available?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'lib/grocer/notification.rb', line 75

def content_available?
  !!content_available
end

#to_bytesObject



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/grocer/notification.rb', line 31

def to_bytes
  validate_payload

  [
    1,
    identifier,
    expiry_epoch_time,
    device_token_length,
    sanitized_device_token,
    encoded_payload.bytesize,
    encoded_payload
  ].pack('CNNnH64nA*')
end

#valid?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/grocer/notification.rb', line 85

def valid?
  validate_payload rescue false
end

#validate_payloadObject



79
80
81
82
83
# File 'lib/grocer/notification.rb', line 79

def validate_payload
  fail NoPayloadError unless alert || badge || custom
  fail PayloadTooLargeError if payload_too_large?
  true
end