Sha256: 894c128605e7b22866f2cc4b91601491b8fc60261a75d8cc994e2c8210540093

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

require 'json'

module ApnsGatling
  class Response
    # See: https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
    attr_accessor :headers, :data
    attr_reader :message

    def initialize(message)
      @headers = {}
      @data = ''
      @message = message 
      @internal_error = nil
    end

    def status
      @headers[':status'] if @headers
    end

    def ok?
      status == '200'
    end

    def parse_data
      JSON.parse(@data) rescue @data
    end

    def error_with(reason)
      @internal_error = {reason: reason, 'apns-id': @message.apns_id, status: '0'}
    end

    def error
      return @internal_error if @internal_error
      if status != '200'
        e = {}
        e.merge!(status: @headers[':status']) if @headers[':status']
        e.merge!('apns-id' => @headers['apns-id']) if @headers['apns-id']
        data = parse_data
        e.merge!(reason: data['reason']) if data['reason']
        e.merge!(timestamp: data['timestamp']) if data['timestamp']
        e
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
apns_gatling-0.2.2 lib/apns_gatling/response.rb
apns_gatling-0.2.1 lib/apns_gatling/response.rb
apns_gatling-0.2 lib/apns_gatling/response.rb