class Monza::StatusResponse

Attributes

auto_renew_product_id[R]
auto_renew_status[R]
auto_renew_status_change_date[R]
auto_renew_status_change_date_ms[R]
auto_renew_status_change_date_pst[R]
bundle_id[R]
bvrs[R]
cancellation_date[R]
environment[R]
expiration_intent[R]
expires_date[R]
expires_date_ms[R]
expires_date_pst[R]
is_in_intro_offer_period[R]
is_trial_period[R]
item_id[R]
latest_receipt[R]
latest_receipt_info[R]
notification_type[R]
original_json_response[R]
original_purchase_date[R]
original_purchase_date_ms[R]
original_purchase_date_pst[R]
original_transaction_id[R]
password[R]
product_id[R]
purchase_date[R]
purchase_date_ms[R]
purchase_date_pst[R]
quantity[R]
renewal_info[R]
transaction_id[R]
unique_identifier[R]
unique_vendor_identifier[R]
web_order_line_item_id[R]

Public Class Methods

new(attributes) click to toggle source
# File lib/monza/status_response.rb, line 63
def initialize(attributes)
  @original_json_response = attributes

  @auto_renew_product_id = attributes['auto_renew_product_id']
  @auto_renew_status = attributes['auto_renew_status'].to_bool
  if attributes['auto_renew_status_change_date']
    @auto_renew_status_change_date = DateTime.parse(attributes['auto_renew_status_change_date'])
  end
  if attributes['auto_renew_status_change_date_ms']
    @auto_renew_status_change_date_ms = Time.zone.at(attributes['auto_renew_status_change_date_ms'].to_i / 1000)
  end
  if attributes['auto_renew_status_change_date_pst']
    @auto_renew_status_change_date_pst = DateTime.parse(attributes['auto_renew_status_change_date_pst'].gsub("America/Los_Angeles", "PST"))
  end
  
  @environment = attributes['environment']
  @expiration_intent = attributes['expiration_intent']

  @latest_receipt = attributes.dig('unified_receipt', 'latest_receipt')
  @notification_type = attributes['notification_type']

  @password = attributes['password'] if attributes['password']

  latest_receipt_info = []
  case attributes.dig('unified_receipt', 'latest_receipt_info')
  when Array
    attributes.dig('unified_receipt', 'latest_receipt_info').each do |transaction_receipt_attributes|
      latest_receipt_info << transaction_receipt_attributes
    end
  when Hash
    latest_receipt_info << attributes.dig('unified_receipt', 'latest_receipt_info')
  end
  @renewal_info = []
  attributes.dig('unified_receipt', 'pending_renewal_info')&.each do |renewal_info_attributes|
    renewal_info << RenewalInfo.new(renewal_info_attributes)
  end

  latest_receipt_info = latest_receipt_info.first

  @bundle_id = latest_receipt_info['bid']
  @bvrs = latest_receipt_info['bvrs'].to_i
  @item_id = latest_receipt_info['item_id'].to_i
  @product_id = latest_receipt_info['product_id']
  @transaction_id = latest_receipt_info['transaction_id']
  @original_transaction_id = latest_receipt_info['original_transaction_id']
  @purchase_date = DateTime.parse(latest_receipt_info['purchase_date']) if latest_receipt_info['purchase_date']
  @purchase_date_ms = Time.zone.at(latest_receipt_info['purchase_date_ms'].to_i / 1000)
  if latest_receipt_info['purchase_date_pst']
    @purchase_date_pst = date_for_pacific_time(latest_receipt_info['purchase_date_pst'])
  end
  if latest_receipt_info['original_purchase_date']
    @original_purchase_date = DateTime.parse(latest_receipt_info['original_purchase_date'])
  end
  @original_purchase_date_ms = Time.zone.at(latest_receipt_info['original_purchase_date_ms'].to_i / 1000)
  if latest_receipt_info['original_purchase_date_pst']
    @original_purchase_date_pst = date_for_pacific_time(latest_receipt_info['original_purchase_date_pst'])
  end
  @web_order_line_item_id = latest_receipt_info['web_order_line_item_id']
  @quantity = latest_receipt_info['quantity'].to_i
  
  @unique_identifier = latest_receipt_info['unique_identifier']
  @unique_vendor_identifier = latest_receipt_info['unique_vendor_identifier']
  
  # Here we coerce the field names to match what the receipt verify response returns
  if latest_receipt_info['expires_date_formatted']
    @expires_date = DateTime.parse(latest_receipt_info['expires_date_formatted'])
  end
  if latest_receipt_info['expires_date']
    @expires_date_ms = if latest_receipt_info['expires_date'].size == 13
                         Time.zone.at(latest_receipt_info['expires_date'].to_i / 1000)
                       else
                         DateTime.parse(latest_receipt_info['expires_date'])
                       end
  end
  if latest_receipt_info['expires_date_formatted_pst']
    @expires_date_pst = date_for_pacific_time(latest_receipt_info['expires_date_formatted_pst'] || latest_receipt_info['expires_date_pst'])
  end
  if latest_receipt_info['is_in_intro_offer_period']
    @is_in_intro_offer_period = latest_receipt_info['is_in_intro_offer_period'].to_bool
  end
  if latest_receipt_info['is_trial_period']
    @is_trial_period = latest_receipt_info['is_trial_period'].to_bool
  end
  if latest_receipt_info['cancellation_date']
    @cancellation_date = DateTime.parse(latest_receipt_info['cancellation_date'])
  end

  @latest_receipt_info = []
  case attributes.dig('unified_receipt', 'latest_receipt_info')
  when Array
    attributes.dig('unified_receipt', 'latest_receipt_info').each do |transaction_receipt_attributes|
      @latest_receipt_info << TransactionReceipt.new(transaction_receipt_attributes)
    end
  when Hash
    @latest_receipt_info << TransactionReceipt.new(attributes.dig('unified_receipt', 'latest_receipt_info'))
  end
  @renewal_info = []
  if attributes.dig('unified_receipt', 'pending_renewal_info')
    attributes.dig('unified_receipt', 'pending_renewal_info').each do |renewal_info_attributes|
      @renewal_info << RenewalInfo.new(renewal_info_attributes)
    end
  end
end

Public Instance Methods

cancel?() click to toggle source
# File lib/monza/status_response.rb, line 173
def cancel?
  notification_type == Type::CANCEL
end
date_for_pacific_time(pt) click to toggle source
# File lib/monza/status_response.rb, line 167
def date_for_pacific_time pt
  # The field is labelled "PST" by apple, but the "America/Los_Angelus" time zone is actually Pacific Time,
  # which is different, because it observes DST.
  ActiveSupport::TimeZone["Pacific Time (US & Canada)"].parse(pt).to_datetime
end
did_change_renewal_pref?() click to toggle source
# File lib/monza/status_response.rb, line 177
def did_change_renewal_pref?
  notification_type == Type::DID_CHANGE_RENEWAL_PREF
end
did_change_renewal_status?() click to toggle source
# File lib/monza/status_response.rb, line 181
def did_change_renewal_status?
  notification_type == Type::DID_CHANGE_RENEWAL_STATUS
end
did_fail_to_renew?() click to toggle source
# File lib/monza/status_response.rb, line 185
def did_fail_to_renew?
  notification_type == Type::DID_FAIL_TO_RENEW
end
did_recover?() click to toggle source
# File lib/monza/status_response.rb, line 189
def did_recover?
  notification_type == Type::DID_RECOVER
end
initial_buy?() click to toggle source
# File lib/monza/status_response.rb, line 193
def initial_buy?
  notification_type == Type::INITIAL_BUY
end
interactive_renewal?() click to toggle source
# File lib/monza/status_response.rb, line 197
def interactive_renewal?
  notification_type == Type::INTERACTIVE_RENEWAL
end
refund?() click to toggle source
# File lib/monza/status_response.rb, line 205
def refund?
  notification_type == Type::REFUND
end
renewal?() click to toggle source
# File lib/monza/status_response.rb, line 201
def renewal?
  notification_type == Type::RENEWAL
end