Sha256: 1a0cd9297e6cf387421520e48f362fcbbf1db99462bf95b7cd4104bb639be0a8

Contents?: true

Size: 909 Bytes

Versions: 12

Compression:

Stored size: 909 Bytes

Contents

require 'json'
require 'grocer/notification'

module Grocer
  class NotificationReader
    include Enumerable

    def initialize(io)
      @io = io
    end

    def each
      while notification = read_notification
        yield notification
      end
    end

    private

    def read_notification
      @io.read(1) # version (not used for now)

      payload = { }
      payload[:identifier] = @io.read(4).unpack("N").first
      payload[:expiry] = Time.at(@io.read(4).unpack("N").first)

      @io.read(2) # device token length (always 32, so not used)
      payload[:device_token] = @io.read(32).unpack("H*").first

      payload_length = @io.read(2).unpack("n").first
      payload_hash = JSON.parse(@io.read(payload_length), symbolize_names: true)

      payload.merge!(payload_hash.delete(:aps) || { })
      payload[:custom] = payload_hash

      Grocer::Notification.new(payload)
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
grocer-0.4.0 lib/grocer/notification_reader.rb
grocer-0.3.4 lib/grocer/notification_reader.rb
grocer-0.3.3 lib/grocer/notification_reader.rb
grocer-0.3.2 lib/grocer/notification_reader.rb
grocer-0.3.1 lib/grocer/notification_reader.rb
grocer-0.3.0 lib/grocer/notification_reader.rb
grocer-0.2.0 lib/grocer/notification_reader.rb
grocer-0.1.1 lib/grocer/notification_reader.rb
grocer-0.1.0 lib/grocer/notification_reader.rb
grocer-0.0.13 lib/grocer/notification_reader.rb
grocer-0.0.12 lib/grocer/notification_reader.rb
grocer-0.0.11 lib/grocer/notification_reader.rb