diff --git a/.ruby-version b/.ruby-version index 73462a5..860487c 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.1 +2.7.1 diff --git a/lib/candy_check/app_store/client.rb b/lib/candy_check/app_store/client.rb index a1b0bd0..42c92df 100644 --- a/lib/candy_check/app_store/client.rb +++ b/lib/candy_check/app_store/client.rb @@ -19,8 +19,8 @@ def initialize(endpoint_url) # @param receipt_data [String] base64 encoded data string from the app # @param secret [String] the password for auto-renewable subscriptions # @return [Hash] - def verify(receipt_data, secret = nil) - request = build_request(build_request_parameters(receipt_data, secret)) + def verify(receipt_data, secret = nil, exclude_old_transactions = nil) + request = build_request(build_request_parameters(receipt_data, secret, exclude_old_transactions)) response = perform_request(request) MultiJson.load(response.body) end @@ -46,10 +46,11 @@ def build_request(parameters) end end - def build_request_parameters(receipt_data, secret) + def build_request_parameters(receipt_data, secret, exclude_old_transactions) { - 'receipt-data' => receipt_data + 'receipt-data' => receipt_data, }.tap do |h| + h['exclude-old-transactions'] = exclude_old_transactions if exclude_old_transactions h['password'] = secret if secret end end diff --git a/lib/candy_check/app_store/subscription_verification.rb b/lib/candy_check/app_store/subscription_verification.rb index 2e9a615..bba15d0 100644 --- a/lib/candy_check/app_store/subscription_verification.rb +++ b/lib/candy_check/app_store/subscription_verification.rb @@ -8,13 +8,15 @@ class SubscriptionVerification < CandyCheck::AppStore::Verification # @param receipt_data [String] the raw data to be verified # @param secret [String] optional: shared secret # @param product_ids [Array<String>] optional: select specific products + # @param exclude_old_transactions [Boolean] optional: exclude older subscription transactions def initialize( endpoint_url, receipt_data, secret = nil, - product_ids = nil + product_ids = nil, + exclude_old_transactions = nil ) - super(endpoint_url, receipt_data, secret) + super(endpoint_url, receipt_data, secret, exclude_old_transactions) @product_ids = product_ids end diff --git a/lib/candy_check/app_store/verification.rb b/lib/candy_check/app_store/verification.rb index b7536d0..59853c8 100644 --- a/lib/candy_check/app_store/verification.rb +++ b/lib/candy_check/app_store/verification.rb @@ -9,6 +9,8 @@ class Verification attr_reader :receipt_data # @return [String] the optional shared secret attr_reader :secret + # @return [Boolean] optional. Set this value to true for the response to include only the latest renewal transaction for any subscriptions. + attr_reader :exclude_old_transactions # Constant for successful responses STATUS_OK = 0 @@ -17,10 +19,11 @@ class Verification # @param endpoint_url [String] the verification URL to use # @param receipt_data [String] the raw data to be verified # @param secret [String] optional: shared secret - def initialize(endpoint_url, receipt_data, secret = nil) - @endpoint_url = endpoint_url - @receipt_data = receipt_data - @secret = secret + def initialize(endpoint_url, receipt_data, secret = nil, exclude_old_transactions = nil) + @endpoint_url = endpoint_url + @receipt_data = receipt_data + @secret = secret + @exclude_old_transactions = exclude_old_transactions end # Performs the verification against the remote server @@ -43,7 +46,7 @@ def valid? def verify! client = Client.new(endpoint_url) - @response = client.verify(receipt_data, secret) + @response = client.verify(receipt_data, secret, exclude_old_transactions) end end end diff --git a/lib/candy_check/app_store/verifier.rb b/lib/candy_check/app_store/verifier.rb index 283117b..3232c9d 100644 --- a/lib/candy_check/app_store/verifier.rb +++ b/lib/candy_check/app_store/verifier.rb @@ -29,8 +29,8 @@ def initialize(config) # @param secret [String] the optional shared secret # @return [Receipt] if successful # @return [VerificationFailure] otherwise - def verify(receipt_data, secret = nil) - fetch_receipt_information(Verification, [receipt_data, secret]) + def verify(receipt_data, secret = nil, exclude_old_transactions: false) + fetch_receipt_information(Verification, [receipt_data, secret, exclude_old_transactions]) end # Calls a subscription verification for the given input @@ -39,8 +39,8 @@ def verify(receipt_data, secret = nil) # @param product_ids [Array<String>] optional: products to filter # @return [ReceiptCollection] if successful # @return [Verification] otherwise - def verify_subscription(receipt_data, secret = nil, product_ids = nil) - args = [receipt_data, secret, product_ids] + def verify_subscription(receipt_data, secret = nil, product_ids = nil, exclude_old_transactions: false) + args = [receipt_data, secret, product_ids, exclude_old_transactions] fetch_receipt_information(SubscriptionVerification, args) end