Class: Vendor::Info

Inherits:
Object
  • Object
show all
Defined in:
lib/project/info.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params, &block) ⇒ Info

Returns a new instance of Info.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/project/info.rb', line 5

def initialize(params, &block)
  @params = params
  @block = block

  # Start product request
  productsRequest = SKProductsRequest.alloc.initWithProductIdentifiers(NSSet.setWithObject(@params.id))
  productsRequest.delegate = self
  productsRequest.start

  # Update receipt if bought and subscription
  if bought? && subscription?
    receipt = NSUserDefaults["#{@params.id}.receipt"]
    decoder = CocoaSecurityDecoder.new
    latest_receipt_data = decoder.base64(receipt[:latest_receipt])
    Vendor::Receipt.new(latest_receipt_data, @params)
  end
end

Instance Attribute Details

#blockObject

Returns the value of attribute block.



3
4
5
# File 'lib/project/info.rb', line 3

def block
  @block
end

#paramsObject

Returns the value of attribute params.



3
4
5
# File 'lib/project/info.rb', line 3

def params
  @params
end

Instance Method Details

#bought?Boolean

Returns:

  • (Boolean)


53
54
55
# File 'lib/project/info.rb', line 53

def bought?
  NSUserDefaults["#{@params.id}.receipt"] != nil
end

#descriptionObject



49
50
51
# File 'lib/project/info.rb', line 49

def description
  NSUserDefaults["#{@params.id}.localizedDescription"] || @params.desc
end

#priceObject

INFO METHODS



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/project/info.rb', line 26

def price
  local_price = NSUserDefaults["#{@params.id}.price"] || @params.price
  number_formatter = NSNumberFormatter.alloc.init
  number_formatter.setFormatterBehavior(NSNumberFormatterBehavior10_4)
  number_formatter.setNumberStyle(NSNumberFormatterCurrencyStyle)
  number_formatter.setLocale(price_locale)

  currency_string = number_formatter.internationalCurrencySymbol
  format = number_formatter.positiveFormat
  format.gsub("ยค", currency_string)
  number_formatter.setPositiveFormat(format)

  return number_formatter.stringFromNumber(local_price)
end

#price_localeObject



41
42
43
# File 'lib/project/info.rb', line 41

def price_locale
  @params[:price_locale]==nil ? NSLocale.alloc.initWithLocaleIdentifier("en_US") : @params[:price_locale]
end

#productsRequest(request, didReceiveResponse: response) ⇒ Object

DELEGATE METHODS



88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/project/info.rb', line 88

def productsRequest(request, didReceiveResponse:response) 
  exists = response.invalidProductIdentifiers.count==0

  # Save needed product info
  if exists
    product = response.products.first
    NSUserDefaults["#{@params.id}.price"] = product.price
    @params[:price_locale] = product.priceLocale
    NSUserDefaults["#{@params.id}.localizedTitle"] = product.localizedTitle
    NSUserDefaults["#{@params.id}.localizedDescription"] = product.localizedDescription
  end

  @block.call({success: exists, response: response, error: nil}.to_object)
end

#request(request, didFailWithError: error) ⇒ Object



103
104
105
# File 'lib/project/info.rb', line 103

def request(request, didFailWithError:error)
  @block.call({success: false, response: nil, error: error}.to_object)
end

#subscribed?Boolean

Returns:

  • (Boolean)


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/project/info.rb', line 61

def subscribed?
  # Return false if product is not a subscription or not bought
  return false if !subscription? || !bought?
  receipt = NSUserDefaults["#{@params.id}.receipt"]
  return false if receipt[:status].to_i!=0

  # Get the latest receipt
  receipt = NSUserDefaults["#{@params.id}.receipt"]
  decoder = CocoaSecurityDecoder.new
  latest_receipt_data = decoder.base64(receipt[:latest_receipt])
  latest_receipt_plist = NSPropertyListSerialization.propertyListWithData(latest_receipt_data, options:NSPropertyListImmutable, format:nil, error:nil)

  # Get the time for the latest receipt
  purchase_info_data = decoder.base64(latest_receipt_plist.objectForKey("purchase-info"))
  purchase_info_plist = NSPropertyListSerialization.propertyListWithData(purchase_info_data, options:NSPropertyListImmutable, format:nil, error:nil)

  # Manipulate the time for the latest receipt
  expires_date = purchase_info_plist.objectForKey("expires-date")
  expires_calc = expires_date.to_i/1000

  # Check if the latest receipt is too old
  return expires_calc > NSDate.date.timeIntervalSince1970
end

#subscription?Boolean

Returns:

  • (Boolean)


57
58
59
# File 'lib/project/info.rb', line 57

def subscription?
  @params.subscription
end

#titleObject



45
46
47
# File 'lib/project/info.rb', line 45

def title
  NSUserDefaults["#{@params.id}.localizedTitle"] || @params.title
end