class Ios::Receipt::Result

Attributes

application_version[R]
bundle_id[R]
environment[R]
in_app[R]
latest[R]
original_application_version[R]
receipt_style[R]
result[R]

Public Class Methods

new(result, environment=nil) click to toggle source
# File lib/ios/receipt/result.rb, line 5
def initialize(result, environment=nil)
  @result = result
  @status = result['status']
  check_status!

  @environment = (result['environment'] || environment).try(:downcase).try(:to_sym)
  raise Ios::Receipt::Exceptions::InvalidConfiguration if @environment.nil?

  receipt = result['receipt']
  @bundle_id = receipt['bid'] || receipt['bundle_id']
  @application_version = receipt['application_version']
  @original_application_version = receipt['original_application_version']

  @receipt_style = receipt['original_transaction_id'] ? :ios6 : :ios7
  if @receipt_style == :ios6
    latest = result['latest_receipt_info'] || result['latest_expired_receipt_info']
    @latest = if latest
      [ Ios::Receipt::Receipt.new(latest) ]
    elsif receipt['original_transaction_id']
      [ Ios::Receipt::Receipt.new(receipt) ]
    else
      []
    end
  end

  @in_app = [receipt['in_app'] || []].flatten.compact.collect { |r| Ios::Receipt::Receipt.new r }
  @latest = [result['latest_receipt_info'] || []].flatten.compact.collect { |r| Ios::Receipt::Receipt.new r } unless @latest
end

Public Instance Methods

active_recurring_receipts() click to toggle source
# File lib/ios/receipt/result.rb, line 54
def active_recurring_receipts
  @active_recurring_receipts ||= recurring_receipts.select { |r| r.active? }
end
expired?() click to toggle source
# File lib/ios/receipt/result.rb, line 42
def expired?
  @status == 21006
end
in_trial_receipts() click to toggle source
# File lib/ios/receipt/result.rb, line 62
def in_trial_receipts
  @in_trial_receipts ||= active_recurring_receipts.select { |r| r.in_trial? }
end
next_recurring_receipt() click to toggle source
# File lib/ios/receipt/result.rb, line 58
def next_recurring_receipt
  @next_recurring_receipt ||= active_recurring_receipts.sort_by { |r| r.expires_date }.first
end
once_off_receipts() click to toggle source
# File lib/ios/receipt/result.rb, line 38
def once_off_receipts
  @once_offs ||= @latest.select { |r| r.once_off? }
end
production?() click to toggle source
# File lib/ios/receipt/result.rb, line 50
def production?
  @environment == :production
end
recurring_receipts() click to toggle source
# File lib/ios/receipt/result.rb, line 34
def recurring_receipts
  @recurring ||= @latest.select { |r| r.recurring? }
end
sandbox?() click to toggle source
# File lib/ios/receipt/result.rb, line 46
def sandbox?
  @environment == :sandbox
end
transaction_ids() click to toggle source
# File lib/ios/receipt/result.rb, line 66
def transaction_ids
  (@in_app.collect { |r| r.transaction_id } + @latest.collect { |r| r.transaction_id }).flatten.compact.uniq
end

Protected Instance Methods

check_status!() click to toggle source
# File lib/ios/receipt/result.rb, line 72
def check_status!
  case @status
  when 21000 then raise Ios::Receipt::Exceptions::Json
  when 21002 then raise Ios::Receipt::Exceptions::ReceiptFormat
  when 21003 then raise Ios::Receipt::Exceptions::ReceiptAuthentication
  when 21004 then raise Ios::Receipt::Exceptions::SharedSecret
  when 21005 then raise Ios::Receipt::Exceptions::ServerOffline
  when 21007 then raise Ios::Receipt::Exceptions::SandboxReceipt
  when 21008 then raise Ios::Receipt::Exceptions::ProductionReceipt
  end
end