class Exponent::Push::ResponseHandler

Attributes

errors[R]
invalid_push_tokens[R]
receipt_ids[R]
response[R]

Public Class Methods

new(error_builder = ErrorBuilder.new) click to toggle source
# File lib/exponent-server-sdk.rb, line 114
def initialize(error_builder = ErrorBuilder.new)
  @error_builder       = error_builder
  @response            = nil
  @receipt_ids         = []
  @invalid_push_tokens = []
  @errors              = []
end

Public Instance Methods

errors?() click to toggle source
# File lib/exponent-server-sdk.rb, line 133
def errors?
  @errors.any?
end
handle(response) click to toggle source

@deprecated

# File lib/exponent-server-sdk.rb, line 138
def handle(response)
  warn '[DEPRECATION] `handle` is deprecated. Please use `process_response` instead.'
  @response = response
  case response.code.to_s
  when /(^4|^5)/
    raise build_error_from_failure
  else
    extract_data
  end
end
process_response(response) click to toggle source
# File lib/exponent-server-sdk.rb, line 122
def process_response(response)
  @response = response

  case response.code.to_s
  when /(^4|^5)/
    raise @error_builder.parse_response(response)
  else
    sort_results
  end
end

Private Instance Methods

body() click to toggle source
# File lib/exponent-server-sdk.rb, line 190
def body
  # memoization FTW!
  @body ||= JSON.parse(@response.body)
rescue SyntaxError
  # Sometimes the server returns an empty string.
  # It must be escaped before we can process it.
  @body = JSON.parse(@response.body.to_json)
rescue StandardError
  # Prevent nil errors in old version of ruby when using fetch
  @body = {}
end
build_error_from_failure() click to toggle source

@deprecated

# File lib/exponent-server-sdk.rb, line 205
def build_error_from_failure
  @error_builder.build_from_erroneous(body)
end
build_error_from_success(response) click to toggle source

@deprecated

# File lib/exponent-server-sdk.rb, line 231
def build_error_from_success(response)
  @error_builder.build_from_successful(response)
end
extract_data() click to toggle source

@deprecated

# File lib/exponent-server-sdk.rb, line 210
def extract_data
  data = body.fetch('data')
  if data.is_a? Hash
    validate_status(data.fetch('status'), body)
    data
  elsif data.is_a? Array
    data.map do |receipt|
      validate_status(receipt.fetch('status'), body)
      receipt
    end
  else
    {}
  end
end
process_error(push_ticket) click to toggle source
# File lib/exponent-server-sdk.rb, line 180
def process_error(push_ticket)
  message     = push_ticket.fetch('message')
  matches     = message.match(/ExponentPushToken\[(...*)\]/)
  error_class = @error_builder.parse_push_ticket(push_ticket)

  @invalid_push_tokens.push(matches[0]) unless matches.nil?

  @errors.push(error_class) unless @errors.include?(error_class)
end
process_receipts(receipts) click to toggle source
# File lib/exponent-server-sdk.rb, line 173
def process_receipts(receipts)
  receipts.each do |receipt_id, receipt|
    @receipt_ids.push(receipt_id) unless receipt_id.nil?
    process_error(receipt) unless receipt.fetch('status') == 'ok'
  end
end
sort_results() click to toggle source
# File lib/exponent-server-sdk.rb, line 151
def sort_results
  data = body&.fetch('data', nil) || nil

  # something is definitely wrong
  return if data.nil?

  # Array indicates a response from the /send endpoint
  # Hash indicates a response from the /getReceipts endpoint
  if data.is_a? Array
    data.each do |push_ticket|
      receipt_id = push_ticket.fetch('id', nil)
      if push_ticket.fetch('status', nil) == 'ok'
        @receipt_ids.push(receipt_id) unless receipt_id.nil?
      else
        process_error(push_ticket)
      end
    end
  else
    process_receipts(data)
  end
end
validate_status(status, response) click to toggle source

@deprecated

# File lib/exponent-server-sdk.rb, line 226
def validate_status(status, response)
  raise build_error_from_success(response) unless status == 'ok'
end