From d6153d8d5a285fb30fb70afd5a6cf30a477f370e Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Thu, 25 Jul 2024 17:05:47 +0200 Subject: [PATCH 1/7] Introduce idempotency_key as post request option --- Gemfile.lock | 2 +- lib/shift4.rb | 1 + lib/shift4/blacklist.rb | 4 +- lib/shift4/cards.rb | 18 ++++-- lib/shift4/charges.rb | 30 +++++++--- lib/shift4/communicator.rb | 10 +++- lib/shift4/credits.rb | 13 +++-- lib/shift4/customers.rb | 17 ++++-- lib/shift4/disputes.rb | 17 ++++-- lib/shift4/file_uploads.rb | 4 +- lib/shift4/payment_methods.rb | 9 ++- lib/shift4/plans.rb | 13 +++-- lib/shift4/request_options.rb | 15 +++++ lib/shift4/subscriptions.rb | 18 ++++-- lib/shift4/version.rb | 2 +- spec/integration/blacklist_spec.rb | 22 ++++++++ spec/integration/cards_spec.rb | 64 +++++++++++++++++++++ spec/integration/charges_spec.rb | 71 +++++++++++++++++++++++- spec/integration/credits_spec.rb | 36 ++++++++++++ spec/integration/customers_spec.rb | 34 ++++++++++++ spec/integration/disputes_spec.rb | 35 ++++++++++++ spec/integration/file_uploads_spec.rb | 22 ++++++++ spec/integration/payment_methods_spec.rb | 15 +++++ spec/integration/plans_spec.rb | 33 +++++++++++ spec/integration/subscriptions_spec.rb | 59 ++++++++++++++++++++ spec/support/random_data.rb | 4 ++ 26 files changed, 524 insertions(+), 44 deletions(-) create mode 100644 lib/shift4/request_options.rb diff --git a/Gemfile.lock b/Gemfile.lock index 273085e..47376f0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - shift4 (2.0.0) + shift4 (2.1.0) httparty (~> 0.20) GEM diff --git a/lib/shift4.rb b/lib/shift4.rb index 18c9e60..e9009c1 100644 --- a/lib/shift4.rb +++ b/lib/shift4.rb @@ -17,6 +17,7 @@ require 'shift4/fraud_warnings' require 'shift4/payment_methods' require 'shift4/plans' +require 'shift4/request_options' require 'shift4/subscriptions' require 'shift4/tokens' diff --git a/lib/shift4/blacklist.rb b/lib/shift4/blacklist.rb index dcf123a..06cd35f 100644 --- a/lib/shift4/blacklist.rb +++ b/lib/shift4/blacklist.rb @@ -5,8 +5,8 @@ module Shift4 class Blacklist extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/blacklist", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post("#{config.api_url}/blacklist", json: params, config: config, request_options: request_options) end def self.retrieve(blacklist_rule_id, config = Configuration) diff --git a/lib/shift4/cards.rb b/lib/shift4/cards.rb index cc30454..001d897 100644 --- a/lib/shift4/cards.rb +++ b/lib/shift4/cards.rb @@ -4,16 +4,26 @@ module Shift4 class Cards extend TransactionBase - def self.create(customer_id, params, config = Configuration) - communicator.post("#{config.api_url}/customers/#{customer_id}/cards", json: params, config: config) + def self.create(customer_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/customers/#{customer_id}/cards", + json: params, + config: config, + request_options: request_options + ) end def self.retrieve(customer_id, card_id, config = Configuration) communicator.get("#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", config: config) end - def self.update(customer_id, card_id, params, config = Configuration) - communicator.post("#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", json: params, config: config) + def self.update(customer_id, card_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", + json: params, + config: config, + request_options: request_options + ) end def self.delete(customer_id, card_id, config = Configuration) diff --git a/lib/shift4/charges.rb b/lib/shift4/charges.rb index 72c5995..db19f91 100644 --- a/lib/shift4/charges.rb +++ b/lib/shift4/charges.rb @@ -4,28 +4,42 @@ module Shift4 class Charges extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/charges", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post("#{config.api_url}/charges", json: params, config: config, request_options: request_options) end def self.retrieve(charge_id, config = Configuration) communicator.get("#{config.api_url}/charges/#{charge_id}", config: config) end - def self.update(charge_id, params, config = Configuration) - communicator.post("#{config.api_url}/charges/#{charge_id}", json: params, config: config) + def self.update(charge_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/charges/#{charge_id}", + json: params, + config: config, + request_options: request_options + ) end def self.list(params = nil, config = Configuration) communicator.get("#{config.api_url}/charges", query: params, config: config) end - def self.capture(charge_id, config = Configuration) - communicator.post("#{config.api_url}/charges/#{charge_id}/capture", config: config) + def self.capture(charge_id, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/charges/#{charge_id}/capture", + config: config, + request_options: request_options + ) end - def self.refund(charge_id, params = nil, config = Configuration) - communicator.post("#{config.api_url}/charges/#{charge_id}/refund", json: params, config: config) + def self.refund(charge_id, params = nil, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/charges/#{charge_id}/refund", + json: params, + config: config, + request_options: request_options + ) end end end diff --git a/lib/shift4/communicator.rb b/lib/shift4/communicator.rb index d646a72..43ed56f 100644 --- a/lib/shift4/communicator.rb +++ b/lib/shift4/communicator.rb @@ -16,8 +16,11 @@ def self.get(url, query: nil, config: Configuration) response end - def self.post(url, json: nil, body: nil, config: Configuration) - response = web_consumer.post(url, request(json: json, body: body, config: config)) + def self.post(url, json: nil, body: nil, config: Configuration, request_options: RequestOptions) + response = web_consumer.post( + url, + request(json: json, body: body, config: config, request_options: request_options) + ) handle_response(response) response end @@ -28,12 +31,13 @@ def self.delete(url, config: Configuration) response end - def self.request(json: nil, query: nil, body: nil, config: Configuration) + def self.request(json: nil, query: nil, body: nil, config: Configuration, request_options: RequestOptions) headers = { "User-Agent" => "Shift4-Ruby/#{Shift4::VERSION} (Ruby/#{RUBY_VERSION})", "Accept" => "application/json", } headers["Shift4-Merchant"] = config.merchant unless config.merchant.nil? + headers["Idempotency-Key"] = request_options.idempotency_key unless request_options.idempotency_key.nil? if json raise ArgumentError("Cannot specify both body and json") if body diff --git a/lib/shift4/credits.rb b/lib/shift4/credits.rb index ec31cf3..98acc7e 100644 --- a/lib/shift4/credits.rb +++ b/lib/shift4/credits.rb @@ -4,16 +4,21 @@ module Shift4 class Credits extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/credits", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post("#{config.api_url}/credits", json: params, config: config, request_options: request_options) end def self.retrieve(credit_id, config = Configuration) communicator.get("#{config.api_url}/credits/#{credit_id}", config: config) end - def self.update(credit_id, params, config = Configuration) - communicator.post("#{config.api_url}/credits/#{credit_id}", json: params, config: config) + def self.update(credit_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/credits/#{credit_id}", + json: params, + config: config, + request_options: request_options + ) end def self.list(params = nil, config = Configuration) diff --git a/lib/shift4/customers.rb b/lib/shift4/customers.rb index 07acbd0..0b2f9d2 100644 --- a/lib/shift4/customers.rb +++ b/lib/shift4/customers.rb @@ -4,16 +4,25 @@ module Shift4 class Customers extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/customers", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/customers", + json: params, config: config, + request_options: request_options + ) end def self.retrieve(customer_id, config = Configuration) communicator.get("#{config.api_url}/customers/#{customer_id}", config: config) end - def self.update(customer_id, params, config = Configuration) - communicator.post("#{config.api_url}/customers/#{customer_id}", json: params, config: config) + def self.update(customer_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/customers/#{customer_id}", + json: params, + config: config, + request_options: request_options + ) end def self.delete(customer_id, config = Configuration) diff --git a/lib/shift4/disputes.rb b/lib/shift4/disputes.rb index 2b5e870..9775e20 100644 --- a/lib/shift4/disputes.rb +++ b/lib/shift4/disputes.rb @@ -8,12 +8,21 @@ def self.retrieve(dispute_id, config = Configuration) communicator.get("#{config.api_url}/disputes/#{dispute_id}", config: config) end - def self.update(dispute_id, params, config = Configuration) - communicator.post("#{config.api_url}/disputes/#{dispute_id}", json: params, config: config) + def self.update(dispute_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/disputes/#{dispute_id}", + json: params, + config: config, + request_options: request_options + ) end - def self.close(dispute_id, config = Configuration) - communicator.post("#{config.api_url}/disputes/#{dispute_id}/close", config: config) + def self.close(dispute_id, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/disputes/#{dispute_id}/close", + config: config, + request_options: request_options + ) end def self.list(params = nil, config = Configuration) diff --git a/lib/shift4/file_uploads.rb b/lib/shift4/file_uploads.rb index 071498f..5c1bb0b 100644 --- a/lib/shift4/file_uploads.rb +++ b/lib/shift4/file_uploads.rb @@ -4,9 +4,9 @@ module Shift4 class FileUploads extend TransactionBase - def self.upload(file, params, config = Configuration) + def self.upload(file, params, config = Configuration, request_options: RequestOptions) body = { file: file }.merge(params) - communicator.post("#{config.uploads_url}/files", body: body, config: config) + communicator.post("#{config.uploads_url}/files", body: body, config: config, request_options: request_options) end def self.list(params = nil, config = Configuration) diff --git a/lib/shift4/payment_methods.rb b/lib/shift4/payment_methods.rb index 14bc54f..9c8f146 100644 --- a/lib/shift4/payment_methods.rb +++ b/lib/shift4/payment_methods.rb @@ -4,8 +4,13 @@ module Shift4 class PaymentMethods extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/payment-methods", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/payment-methods", + json: params, + config: config, + request_options: request_options + ) end def self.retrieve(plan_id, config = Configuration) diff --git a/lib/shift4/plans.rb b/lib/shift4/plans.rb index 3a8ab1d..6bf4c8d 100644 --- a/lib/shift4/plans.rb +++ b/lib/shift4/plans.rb @@ -4,16 +4,21 @@ module Shift4 class Plans extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/plans", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post("#{config.api_url}/plans", json: params, config: config, request_options: request_options) end def self.retrieve(plan_id, config = Configuration) communicator.get("#{config.api_url}/plans/#{plan_id}", config: config) end - def self.update(plan_id, params, config = Configuration) - communicator.post("#{config.api_url}/plans/#{plan_id}", json: params, config: config) + def self.update(plan_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/plans/#{plan_id}", + json: params, + config: config, + request_options: request_options + ) end def self.delete(plan_id, config = Configuration) diff --git a/lib/shift4/request_options.rb b/lib/shift4/request_options.rb new file mode 100644 index 0000000..d5ddb9a --- /dev/null +++ b/lib/shift4/request_options.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Shift4 + class RequestOptions + class << self + attr_reader :idempotency_key + end + + def initialize(params = {}) + @idempotency_key = params.fetch(:idempotency_key, nil) + end + + attr_reader :idempotency_key + end +end diff --git a/lib/shift4/subscriptions.rb b/lib/shift4/subscriptions.rb index 0712a27..b7b2999 100644 --- a/lib/shift4/subscriptions.rb +++ b/lib/shift4/subscriptions.rb @@ -4,16 +4,26 @@ module Shift4 class Subscriptions extend TransactionBase - def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/subscriptions", json: params, config: config) + def self.create(params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/subscriptions", + json: params, + config: config, + request_options: request_options + ) end def self.retrieve(subscription_id, config = Configuration) communicator.get("#{config.api_url}/subscriptions/#{subscription_id}", config: config) end - def self.update(subscription_id, params, config = Configuration) - communicator.post("#{config.api_url}/subscriptions/#{subscription_id}", json: params, config: config) + def self.update(subscription_id, params, config = Configuration, request_options: RequestOptions) + communicator.post( + "#{config.api_url}/subscriptions/#{subscription_id}", + json: params, + config: config, + request_options: request_options + ) end def self.cancel(subscription_id, config = Configuration) diff --git a/lib/shift4/version.rb b/lib/shift4/version.rb index 5004a6c..8f9dc52 100644 --- a/lib/shift4/version.rb +++ b/lib/shift4/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module Shift4 - VERSION = '2.0.0' + VERSION = '2.1.0' end diff --git a/spec/integration/blacklist_spec.rb b/spec/integration/blacklist_spec.rb index 2c3472a..ba2baa1 100644 --- a/spec/integration/blacklist_spec.rb +++ b/spec/integration/blacklist_spec.rb @@ -16,6 +16,28 @@ expect(retrieved['email']).to eq(email) end + it 'create only one rule on blacklist with idempotency_key' do + # given + email = random_email + request = { ruleType: 'email', email: email, } + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::Blacklist.create( + request, + request_options: request_options + ) + not_created_because_idempotency = Shift4::Blacklist.create( + request, + request_options: request_options + ) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'delete blacklist' do # given email = random_email diff --git a/spec/integration/cards_spec.rb b/spec/integration/cards_spec.rb index 26649ca..19eb766 100644 --- a/spec/integration/cards_spec.rb +++ b/spec/integration/cards_spec.rb @@ -27,6 +27,35 @@ expect(retrieved['customerId']).to eq(customer_id) end + it 'create only one card with idempotency_key' do + # given + customer = Shift4::Customers.create(TestData.customer) + customer_id = customer['id'] + cardholder_name = random_string + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + created = Shift4::Cards.create(customer_id, + number: '4242424242424242', + expMonth: '12', + expYear: '2055', + cvc: '123', + cardholderName: cardholder_name, + request_options: request_options) + + # when + not_created_because_idempotency = Shift4::Cards.create(customer_id, + number: '4242424242424242', + expMonth: '12', + expYear: '2055', + cvc: '123', + cardholderName: cardholder_name, + request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update card' do # given customer = Shift4::Customers.create(TestData.customer) @@ -56,6 +85,41 @@ expect(updated_card['addressLine2']).to eq('updated addressLine2') end + it 'update card only once with idempotency_key' do + # given + customer = Shift4::Customers.create(TestData.customer) + card = Shift4::Cards.create(customer['id'], TestData.card) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated_card = Shift4::Cards.update(customer['id'], card['id'], + expMonth: '05', + expYear: '55', + cardholderName: 'updated cardholderName', + addressCountry: 'updated addressCountry', + addressCity: 'updated addressCity', + addressState: 'updated addressState', + addressZip: 'updated addressZip', + addressLine1: 'updated addressLine1', + addressLine2: 'updated addressLine2', + request_options: request_options) + not_updated_because_idempotency = Shift4::Cards.update(customer['id'], card['id'], + expMonth: '05', + expYear: '55', + cardholderName: 'updated cardholderName', + addressCountry: 'updated addressCountry', + addressCity: 'updated addressCity', + addressState: 'updated addressState', + addressZip: 'updated addressZip', + addressLine1: 'updated addressLine1', + addressLine2: 'updated addressLine2', + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'delete card' do # given customer = Shift4::Customers.create(TestData.customer) diff --git a/spec/integration/charges_spec.rb b/spec/integration/charges_spec.rb index d564427..96153a5 100644 --- a/spec/integration/charges_spec.rb +++ b/spec/integration/charges_spec.rb @@ -39,13 +39,27 @@ expect(retrieved['card']['first4']).to eq(charge_req["card"]["first4"]) end + it 'create charge only once with idempotency_key' do + # given + charge_req = TestData.charge(card: TestData.card) + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::Charges.create(charge_req, request_options: request_options) + not_created_because_idempotency = Shift4::Charges.create(charge_req, request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update charge' do # given card = TestData.card charge_req = TestData.charge(card: card) + created = Shift4::Charges.create(charge_req) # when - created = Shift4::Charges.create(charge_req) updated = Shift4::Charges.update(created['id'], "description" => "updated description", "metadata" => { "key" => "updated value" }) @@ -62,6 +76,29 @@ expect(updated['card']['first4']).to eq(charge_req["card"]["first4"]) end + it 'update charge only once with idempotency_key' do + # given + card = TestData.card + charge_req = TestData.charge(card: card) + created = Shift4::Charges.create(charge_req) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Charges.update(created['id'], + "description" => "updated description", + "metadata" => { "key" => "updated value" }, + request_options: request_options) + + not_updated_because_idempotency = Shift4::Charges.update(created['id'], + "description" => "updated description", + "metadata" => { "key" => "updated value" }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'capture charge' do # given charge_req = TestData.charge(card: TestData.card, captured: false) @@ -75,6 +112,22 @@ expect(captured['captured']).to eq(true) end + it 'capture charge only once with idempotency_key' do + # given + charge_req = TestData.charge(card: TestData.card, captured: false) + created = Shift4::Charges.create(charge_req) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + captured = Shift4::Charges.capture(created['id'], request_options: request_options) + not_captured_because_idempotency = Shift4::Charges.capture(created['id'], request_options: request_options) + + # then + expect(captured['id']).to eq(not_captured_because_idempotency['id']) + expect(not_captured_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'refund charge' do # given charge_req = TestData.charge(card: TestData.card, captured: false) @@ -88,6 +141,22 @@ expect(refunded['refunded']).to eq(true) end + it 'refund charge only once with idempotency_key' do + # given + charge_req = TestData.charge(card: TestData.card, captured: false) + created = Shift4::Charges.create(charge_req) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + refunded = Shift4::Charges.refund(created['id'], request_options: request_options) + not_refunded_because_idempotency = Shift4::Charges.refund(created['id'], request_options: request_options) + + # then + expect(refunded['id']).to eq(not_refunded_because_idempotency['id']) + expect(not_refunded_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'list charges' do # given customer = Shift4::Customers.create(TestData.customer) diff --git a/spec/integration/credits_spec.rb b/spec/integration/credits_spec.rb index b7223e7..3f6d06b 100644 --- a/spec/integration/credits_spec.rb +++ b/spec/integration/credits_spec.rb @@ -19,6 +19,20 @@ expect(retrieved['card']['first4']).to eq(credit_req["card"]["first4"]) end + it 'create only once with idempotency_key' do + # given + credit_req = TestData.credit(card: TestData.card) + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::Credits.create(credit_req, request_options: request_options) + not_created_because_idempotency = Shift4::Credits.create(credit_req, request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update credit' do # given card = TestData.card @@ -42,6 +56,28 @@ expect(updated['card']['first4']).to eq(credit_req["card"]["first4"]) end + it 'update credit only once with idempotency_key' do + # given + card = TestData.card + credit_req = TestData.credit(card: card) + created = Shift4::Credits.create(credit_req) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Credits.update(created['id'], + "description" => "updated description", + "metadata" => { "key" => "updated value" }, + request_options: request_options) + not_updated_because_idempotency = Shift4::Credits.update(created['id'], + "description" => "updated description", + "metadata" => { "key" => "updated value" }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'list credits' do # given customer = Shift4::Customers.create(TestData.customer) diff --git a/spec/integration/customers_spec.rb b/spec/integration/customers_spec.rb index 8fda74a..a0add1b 100644 --- a/spec/integration/customers_spec.rb +++ b/spec/integration/customers_spec.rb @@ -17,6 +17,20 @@ expect(retrieved['email']).to eq(customer_req['email']) end + it 'create only once with idempotency_key' do + # given + customer_req = TestData.customer + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::Customers.create(customer_req, request_options: request_options) + not_created_because_idempotency = Shift4::Customers.create(customer_req, request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update customer default card' do # given customer_req = TestData.customer(card: TestData.card) @@ -32,6 +46,26 @@ expect(updated['defaultCardId']).to eq(new_card['id']) end + it 'update customer only once with idempotency_key' do + # given + customer_req = TestData.customer(card: TestData.card) + customer = Shift4::Customers.create(customer_req) + new_card = Shift4::Cards.create(customer['id'], TestData.card) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Customers.update(customer['id'], + { defaultCardId: new_card['id'] }, + request_options: request_options) + not_updated_because_idempotency = Shift4::Customers.update(customer['id'], + { defaultCardId: new_card['id'] }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'delete customer' do # given customer_req = TestData.customer(card: TestData.card) diff --git a/spec/integration/disputes_spec.rb b/spec/integration/disputes_spec.rb index b54ee66..2c31831 100644 --- a/spec/integration/disputes_spec.rb +++ b/spec/integration/disputes_spec.rb @@ -40,6 +40,25 @@ expect(retrieved['evidence']['customerName']).to eq(evidence_customer_name) end + it 'update dispute only once with idempotency_key' do + # given + dispute, = create_dispute + evidence_customer_name = 'Test Customer' + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Disputes.update(dispute['id'], + { evidence: { customerName: evidence_customer_name } }, + request_options: request_options) + not_updated_because_idempotency = Shift4::Disputes.update(dispute['id'], + { evidence: { customerName: evidence_customer_name } }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'close dispute' do # given dispute, = create_dispute @@ -51,6 +70,22 @@ # then expect(retrieved['acceptedAsLost']).to eq(true) end + + it 'close dispute only once with idempotency_key' do + # given + dispute, = create_dispute + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + closed = Shift4::Disputes.close(dispute['id'], + request_options: request_options) + not_closed_because_idempotency = Shift4::Disputes.close(dispute['id'], + request_options: request_options) + + # then + expect(not_closed_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end end end diff --git a/spec/integration/file_uploads_spec.rb b/spec/integration/file_uploads_spec.rb index f12bdc4..328e2fb 100644 --- a/spec/integration/file_uploads_spec.rb +++ b/spec/integration/file_uploads_spec.rb @@ -25,6 +25,28 @@ def create_test_pdf expect(uploaded['id']).not_to be_nil end + it 'test upload by file only once with idempotency_key' do + # given + tempfile = create_test_pdf + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + uploaded = Shift4::FileUploads.upload( + tempfile, + { purpose: 'dispute_evidence' }, + request_options: request_options + ) + not_uploaded_because_idempotency = Shift4::FileUploads.upload( + tempfile, + { purpose: 'dispute_evidence' }, + request_options: request_options + ) + + # then + expect(uploaded['id']).to eq(not_uploaded_because_idempotency['id']) + expect(not_uploaded_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'test get' do # given uploaded = Shift4::FileUploads.upload(create_test_pdf, { purpose: 'dispute_evidence' }) diff --git a/spec/integration/payment_methods_spec.rb b/spec/integration/payment_methods_spec.rb index 3a06d75..41f15f8 100644 --- a/spec/integration/payment_methods_spec.rb +++ b/spec/integration/payment_methods_spec.rb @@ -21,6 +21,21 @@ expect(retrieved['status']).to eq('chargeable') end + it 'create only once with idempotency_key' do + # given + payment_method_req = TestData.payment_method + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::PaymentMethods.create(payment_method_req, request_options: request_options) + not_created_because_idempotency = Shift4::PaymentMethods.create(payment_method_req, + request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'delete payment_method' do # given payment_method_req = TestData.payment_method diff --git a/spec/integration/plans_spec.rb b/spec/integration/plans_spec.rb index c2ef054..cf3ef79 100644 --- a/spec/integration/plans_spec.rb +++ b/spec/integration/plans_spec.rb @@ -20,6 +20,20 @@ expect(retrieved['name']).to eq(plan_req['name']) end + it 'create only once with idempotency_key' do + # given + plan_req = TestData.plan + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + created = Shift4::Plans.create(plan_req, request_options: request_options) + not_created_because_idempotency = Shift4::Plans.create(plan_req, request_options: request_options) + + # then + expect(created['id']).to eq(not_created_because_idempotency['id']) + expect(not_created_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update plan' do # given plan_req = TestData.plan @@ -37,6 +51,25 @@ expect(retrieved['name']).to eq('Updated plan') end + it 'update plan once with idempotency_key' do + # given + plan_req = TestData.plan + created = Shift4::Plans.create(plan_req) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Plans.update(created['id'], + { amount: 222, currency: 'PLN', name: 'Updated plan' }, + request_options: request_options) + not_updated_because_idempotency = Shift4::Plans.update(created['id'], + { amount: 222, currency: 'PLN', name: 'Updated plan' }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'delete plan' do # given plan_req = TestData.plan diff --git a/spec/integration/subscriptions_spec.rb b/spec/integration/subscriptions_spec.rb index 05c7892..b545d02 100644 --- a/spec/integration/subscriptions_spec.rb +++ b/spec/integration/subscriptions_spec.rb @@ -19,6 +19,25 @@ expect(retrieved['customerId']).to eq(customer['id']) end + it 'create only once with idempotency_key' do + # given + plan = Shift4::Plans.create(TestData.plan) + customer = Shift4::Customers.create(TestData.customer(card: TestData.card)) + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + subscription = Shift4::Subscriptions.create(customerId: customer['id'], + planId: plan['id'], + request_options: request_options) + not_subscribed_because_idempotency = Shift4::Subscriptions.create(customerId: customer['id'], + planId: plan['id'], + request_options: request_options) + + # then + expect(subscription['id']).to eq(not_subscribed_because_idempotency['id']) + expect(not_subscribed_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'update subscription' do # given plan = Shift4::Plans.create(TestData.plan) @@ -54,6 +73,46 @@ expect(shipping['address']['country']).to eq("CH") end + it 'update subscription only once with idempotency_key' do + # given + plan = Shift4::Plans.create(TestData.plan) + customer = Shift4::Customers.create(TestData.customer(card: TestData.card)) + subscription = Shift4::Subscriptions.create(customerId: customer['id'], planId: plan['id']) + + request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) + + # when + updated = Shift4::Subscriptions.update(subscription['id'], + shipping: { + name: 'Updated shipping', + address: { + "line1" => "Updated line1", + "line2" => "Updated line2", + "zip" => "Updated zip", + "city" => "Updated city", + "state" => "Updated state", + "country" => "CH", + }.compact, + }, + request_options: request_options) + not_updated_because_idempotency = Shift4::Subscriptions.update(subscription['id'], + shipping: { + name: 'Updated shipping', + address: { + "line1" => "Updated line1", + "line2" => "Updated line2", + "zip" => "Updated zip", + "city" => "Updated city", + "state" => "Updated state", + "country" => "CH", + }.compact, + }, + request_options: request_options) + + # then + expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") + end + it 'cancel subscription' do # given plan = Shift4::Plans.create(TestData.plan) diff --git a/spec/support/random_data.rb b/spec/support/random_data.rb index 3135fb4..4928361 100644 --- a/spec/support/random_data.rb +++ b/spec/support/random_data.rb @@ -7,3 +7,7 @@ def random_string def random_email "#{random_string}@#{random_string}.com" end + +def random_idempotency_key + "#{random_string}#{random_string}" +end From 6dcfd0b060e766e4599aa04e1697145b7ad95f74 Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Tue, 30 Jul 2024 09:07:11 +0200 Subject: [PATCH 2/7] Idempotency key as param in RequestOptions constructor --- lib/shift4/request_options.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/shift4/request_options.rb b/lib/shift4/request_options.rb index d5ddb9a..0f04e80 100644 --- a/lib/shift4/request_options.rb +++ b/lib/shift4/request_options.rb @@ -6,8 +6,8 @@ class << self attr_reader :idempotency_key end - def initialize(params = {}) - @idempotency_key = params.fetch(:idempotency_key, nil) + def initialize(idempotency_key: nil) + @idempotency_key = idempotency_key end attr_reader :idempotency_key From 6df92e29cd1bb058e3cc549a35275ad6638adc07 Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Tue, 30 Jul 2024 17:19:09 +0200 Subject: [PATCH 3/7] Fix failing tests --- lib/shift4/file_uploads.rb | 4 +- spec/integration/cards_spec.rb | 70 +++++++++++++++----------- spec/integration/charges_spec.rb | 12 +++-- spec/integration/credits_spec.rb | 12 +++-- spec/integration/file_uploads_spec.rb | 22 -------- spec/integration/subscriptions_spec.rb | 56 ++++++++++++--------- 6 files changed, 90 insertions(+), 86 deletions(-) diff --git a/lib/shift4/file_uploads.rb b/lib/shift4/file_uploads.rb index 5c1bb0b..071498f 100644 --- a/lib/shift4/file_uploads.rb +++ b/lib/shift4/file_uploads.rb @@ -4,9 +4,9 @@ module Shift4 class FileUploads extend TransactionBase - def self.upload(file, params, config = Configuration, request_options: RequestOptions) + def self.upload(file, params, config = Configuration) body = { file: file }.merge(params) - communicator.post("#{config.uploads_url}/files", body: body, config: config, request_options: request_options) + communicator.post("#{config.uploads_url}/files", body: body, config: config) end def self.list(params = nil, config = Configuration) diff --git a/spec/integration/cards_spec.rb b/spec/integration/cards_spec.rb index 19eb766..b7d0695 100644 --- a/spec/integration/cards_spec.rb +++ b/spec/integration/cards_spec.rb @@ -35,20 +35,24 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) created = Shift4::Cards.create(customer_id, - number: '4242424242424242', - expMonth: '12', - expYear: '2055', - cvc: '123', - cardholderName: cardholder_name, + { + number: '4242424242424242', + expMonth: '12', + expYear: '2055', + cvc: '123', + cardholderName: cardholder_name + }, request_options: request_options) # when not_created_because_idempotency = Shift4::Cards.create(customer_id, - number: '4242424242424242', - expMonth: '12', - expYear: '2055', - cvc: '123', - cardholderName: cardholder_name, + { + number: '4242424242424242', + expMonth: '12', + expYear: '2055', + cvc: '123', + cardholderName: cardholder_name + }, request_options: request_options) # then @@ -93,27 +97,33 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated_card = Shift4::Cards.update(customer['id'], card['id'], - expMonth: '05', - expYear: '55', - cardholderName: 'updated cardholderName', - addressCountry: 'updated addressCountry', - addressCity: 'updated addressCity', - addressState: 'updated addressState', - addressZip: 'updated addressZip', - addressLine1: 'updated addressLine1', - addressLine2: 'updated addressLine2', + updated_card = Shift4::Cards.update(customer['id'], + card['id'], + { + expMonth: '05', + expYear: '55', + cardholderName: 'updated cardholderName', + addressCountry: 'updated addressCountry', + addressCity: 'updated addressCity', + addressState: 'updated addressState', + addressZip: 'updated addressZip', + addressLine1: 'updated addressLine1', + addressLine2: 'updated addressLine2' + }, request_options: request_options) - not_updated_because_idempotency = Shift4::Cards.update(customer['id'], card['id'], - expMonth: '05', - expYear: '55', - cardholderName: 'updated cardholderName', - addressCountry: 'updated addressCountry', - addressCity: 'updated addressCity', - addressState: 'updated addressState', - addressZip: 'updated addressZip', - addressLine1: 'updated addressLine1', - addressLine2: 'updated addressLine2', + not_updated_because_idempotency = Shift4::Cards.update(customer['id'], + card['id'], + { + expMonth: '05', + expYear: '55', + cardholderName: 'updated cardholderName', + addressCountry: 'updated addressCountry', + addressCity: 'updated addressCity', + addressState: 'updated addressState', + addressZip: 'updated addressZip', + addressLine1: 'updated addressLine1', + addressLine2: 'updated addressLine2' + }, request_options: request_options) # then diff --git a/spec/integration/charges_spec.rb b/spec/integration/charges_spec.rb index 96153a5..ed598a3 100644 --- a/spec/integration/charges_spec.rb +++ b/spec/integration/charges_spec.rb @@ -86,13 +86,17 @@ # when updated = Shift4::Charges.update(created['id'], - "description" => "updated description", - "metadata" => { "key" => "updated value" }, + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, request_options: request_options) not_updated_because_idempotency = Shift4::Charges.update(created['id'], - "description" => "updated description", - "metadata" => { "key" => "updated value" }, + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, request_options: request_options) # then diff --git a/spec/integration/credits_spec.rb b/spec/integration/credits_spec.rb index 3f6d06b..6a6487a 100644 --- a/spec/integration/credits_spec.rb +++ b/spec/integration/credits_spec.rb @@ -66,12 +66,16 @@ # when updated = Shift4::Credits.update(created['id'], - "description" => "updated description", - "metadata" => { "key" => "updated value" }, + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, request_options: request_options) not_updated_because_idempotency = Shift4::Credits.update(created['id'], - "description" => "updated description", - "metadata" => { "key" => "updated value" }, + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, request_options: request_options) # then diff --git a/spec/integration/file_uploads_spec.rb b/spec/integration/file_uploads_spec.rb index 328e2fb..f12bdc4 100644 --- a/spec/integration/file_uploads_spec.rb +++ b/spec/integration/file_uploads_spec.rb @@ -25,28 +25,6 @@ def create_test_pdf expect(uploaded['id']).not_to be_nil end - it 'test upload by file only once with idempotency_key' do - # given - tempfile = create_test_pdf - request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) - - # when - uploaded = Shift4::FileUploads.upload( - tempfile, - { purpose: 'dispute_evidence' }, - request_options: request_options - ) - not_uploaded_because_idempotency = Shift4::FileUploads.upload( - tempfile, - { purpose: 'dispute_evidence' }, - request_options: request_options - ) - - # then - expect(uploaded['id']).to eq(not_uploaded_because_idempotency['id']) - expect(not_uploaded_because_idempotency.headers['Idempotent-Replayed']).to eq("true") - end - it 'test get' do # given uploaded = Shift4::FileUploads.upload(create_test_pdf, { purpose: 'dispute_evidence' }) diff --git a/spec/integration/subscriptions_spec.rb b/spec/integration/subscriptions_spec.rb index b545d02..22369c2 100644 --- a/spec/integration/subscriptions_spec.rb +++ b/spec/integration/subscriptions_spec.rb @@ -26,11 +26,15 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - subscription = Shift4::Subscriptions.create(customerId: customer['id'], - planId: plan['id'], + subscription = Shift4::Subscriptions.create({ + customerId: customer['id'], + planId: plan['id'] + }, request_options: request_options) - not_subscribed_because_idempotency = Shift4::Subscriptions.create(customerId: customer['id'], - planId: plan['id'], + not_subscribed_because_idempotency = Shift4::Subscriptions.create({ + customerId: customer['id'], + planId: plan['id'] + }, request_options: request_options) # then @@ -83,29 +87,33 @@ # when updated = Shift4::Subscriptions.update(subscription['id'], - shipping: { - name: 'Updated shipping', - address: { - "line1" => "Updated line1", - "line2" => "Updated line2", - "zip" => "Updated zip", - "city" => "Updated city", - "state" => "Updated state", - "country" => "CH", - }.compact, + { + shipping: { + name: 'Updated shipping', + address: { + "line1" => "Updated line1", + "line2" => "Updated line2", + "zip" => "Updated zip", + "city" => "Updated city", + "state" => "Updated state", + "country" => "CH", + }.compact, + } }, request_options: request_options) not_updated_because_idempotency = Shift4::Subscriptions.update(subscription['id'], - shipping: { - name: 'Updated shipping', - address: { - "line1" => "Updated line1", - "line2" => "Updated line2", - "zip" => "Updated zip", - "city" => "Updated city", - "state" => "Updated state", - "country" => "CH", - }.compact, + { + shipping: { + name: 'Updated shipping', + address: { + "line1" => "Updated line1", + "line2" => "Updated line2", + "zip" => "Updated zip", + "city" => "Updated city", + "state" => "Updated state", + "country" => "CH", + }.compact, + } }, request_options: request_options) From ffa66b32df0a54e7054f4a446e843fa4094d1b2e Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Tue, 30 Jul 2024 18:55:04 +0200 Subject: [PATCH 4/7] Change ruby version in check style --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f66eb4f..51a08f6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -34,7 +34,7 @@ jobs: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 with: - ruby-version: 3.0 + ruby-version: 2.6 bundler-cache: true - name: Run style checks run: bundle exec rubocop \ No newline at end of file From 22b6d7376c1329d0dfa779002e1e773ed49666fb Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Tue, 30 Jul 2024 18:56:22 +0200 Subject: [PATCH 5/7] Change request option from object to child class of Configuration --- lib/shift4/blacklist.rb | 4 ++-- lib/shift4/cards.rb | 10 ++++------ lib/shift4/charges.rb | 19 ++++++++----------- lib/shift4/communicator.rb | 10 ++++++---- lib/shift4/credits.rb | 9 ++++----- lib/shift4/customers.rb | 10 ++++------ lib/shift4/disputes.rb | 10 ++++------ lib/shift4/payment_methods.rb | 5 ++--- lib/shift4/plans.rb | 9 ++++----- lib/shift4/request_options.rb | 13 +++++++++++-- lib/shift4/subscriptions.rb | 10 ++++------ spec/integration/blacklist_spec.rb | 7 ++++--- spec/integration/cards_spec.rb | 8 ++++---- spec/integration/charges_spec.rb | 16 ++++++++-------- spec/integration/credits_spec.rb | 8 ++++---- spec/integration/customers_spec.rb | 8 ++++---- spec/integration/disputes_spec.rb | 8 ++++---- spec/integration/payment_methods_spec.rb | 4 ++-- spec/integration/plans_spec.rb | 8 ++++---- spec/integration/subscriptions_spec.rb | 8 ++++---- 20 files changed, 91 insertions(+), 93 deletions(-) diff --git a/lib/shift4/blacklist.rb b/lib/shift4/blacklist.rb index 06cd35f..dcf123a 100644 --- a/lib/shift4/blacklist.rb +++ b/lib/shift4/blacklist.rb @@ -5,8 +5,8 @@ module Shift4 class Blacklist extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) - communicator.post("#{config.api_url}/blacklist", json: params, config: config, request_options: request_options) + def self.create(params, config = Configuration) + communicator.post("#{config.api_url}/blacklist", json: params, config: config) end def self.retrieve(blacklist_rule_id, config = Configuration) diff --git a/lib/shift4/cards.rb b/lib/shift4/cards.rb index 001d897..efac416 100644 --- a/lib/shift4/cards.rb +++ b/lib/shift4/cards.rb @@ -4,12 +4,11 @@ module Shift4 class Cards extend TransactionBase - def self.create(customer_id, params, config = Configuration, request_options: RequestOptions) + def self.create(customer_id, params, config = Configuration) communicator.post( "#{config.api_url}/customers/#{customer_id}/cards", json: params, - config: config, - request_options: request_options + config: config ) end @@ -17,12 +16,11 @@ def self.retrieve(customer_id, card_id, config = Configuration) communicator.get("#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", config: config) end - def self.update(customer_id, card_id, params, config = Configuration, request_options: RequestOptions) + def self.update(customer_id, card_id, params, config = Configuration) communicator.post( "#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/charges.rb b/lib/shift4/charges.rb index db19f91..7cbc72a 100644 --- a/lib/shift4/charges.rb +++ b/lib/shift4/charges.rb @@ -4,20 +4,19 @@ module Shift4 class Charges extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) - communicator.post("#{config.api_url}/charges", json: params, config: config, request_options: request_options) + def self.create(params, config = Configuration) + communicator.post("#{config.api_url}/charges", json: params, config: config) end def self.retrieve(charge_id, config = Configuration) communicator.get("#{config.api_url}/charges/#{charge_id}", config: config) end - def self.update(charge_id, params, config = Configuration, request_options: RequestOptions) + def self.update(charge_id, params, config = Configuration) communicator.post( "#{config.api_url}/charges/#{charge_id}", json: params, - config: config, - request_options: request_options + config: config ) end @@ -25,20 +24,18 @@ def self.list(params = nil, config = Configuration) communicator.get("#{config.api_url}/charges", query: params, config: config) end - def self.capture(charge_id, config = Configuration, request_options: RequestOptions) + def self.capture(charge_id, config = Configuration) communicator.post( "#{config.api_url}/charges/#{charge_id}/capture", - config: config, - request_options: request_options + config: config ) end - def self.refund(charge_id, params = nil, config = Configuration, request_options: RequestOptions) + def self.refund(charge_id, params = nil, config = Configuration) communicator.post( "#{config.api_url}/charges/#{charge_id}/refund", json: params, - config: config, - request_options: request_options + config: config ) end end diff --git a/lib/shift4/communicator.rb b/lib/shift4/communicator.rb index 43ed56f..dd779bf 100644 --- a/lib/shift4/communicator.rb +++ b/lib/shift4/communicator.rb @@ -16,10 +16,10 @@ def self.get(url, query: nil, config: Configuration) response end - def self.post(url, json: nil, body: nil, config: Configuration, request_options: RequestOptions) + def self.post(url, json: nil, body: nil, config: Configuration) response = web_consumer.post( url, - request(json: json, body: body, config: config, request_options: request_options) + request(json: json, body: body, config: config) ) handle_response(response) response @@ -31,13 +31,15 @@ def self.delete(url, config: Configuration) response end - def self.request(json: nil, query: nil, body: nil, config: Configuration, request_options: RequestOptions) + def self.request(json: nil, query: nil, body: nil, config: Configuration) headers = { "User-Agent" => "Shift4-Ruby/#{Shift4::VERSION} (Ruby/#{RUBY_VERSION})", "Accept" => "application/json", } headers["Shift4-Merchant"] = config.merchant unless config.merchant.nil? - headers["Idempotency-Key"] = request_options.idempotency_key unless request_options.idempotency_key.nil? + if config.is_a?(RequestOptions) && !config.idempotency_key.nil? + headers["Idempotency-Key"] = config.idempotency_key + end if json raise ArgumentError("Cannot specify both body and json") if body diff --git a/lib/shift4/credits.rb b/lib/shift4/credits.rb index 98acc7e..7d8405a 100644 --- a/lib/shift4/credits.rb +++ b/lib/shift4/credits.rb @@ -4,20 +4,19 @@ module Shift4 class Credits extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) - communicator.post("#{config.api_url}/credits", json: params, config: config, request_options: request_options) + def self.create(params, config = Configuration) + communicator.post("#{config.api_url}/credits", json: params, config: config, ) end def self.retrieve(credit_id, config = Configuration) communicator.get("#{config.api_url}/credits/#{credit_id}", config: config) end - def self.update(credit_id, params, config = Configuration, request_options: RequestOptions) + def self.update(credit_id, params, config = Configuration) communicator.post( "#{config.api_url}/credits/#{credit_id}", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/customers.rb b/lib/shift4/customers.rb index 0b2f9d2..7be8fdd 100644 --- a/lib/shift4/customers.rb +++ b/lib/shift4/customers.rb @@ -4,11 +4,10 @@ module Shift4 class Customers extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) + def self.create(params, config = Configuration) communicator.post( "#{config.api_url}/customers", - json: params, config: config, - request_options: request_options + json: params, config: config ) end @@ -16,12 +15,11 @@ def self.retrieve(customer_id, config = Configuration) communicator.get("#{config.api_url}/customers/#{customer_id}", config: config) end - def self.update(customer_id, params, config = Configuration, request_options: RequestOptions) + def self.update(customer_id, params, config = Configuration) communicator.post( "#{config.api_url}/customers/#{customer_id}", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/disputes.rb b/lib/shift4/disputes.rb index 9775e20..5a4f025 100644 --- a/lib/shift4/disputes.rb +++ b/lib/shift4/disputes.rb @@ -8,20 +8,18 @@ def self.retrieve(dispute_id, config = Configuration) communicator.get("#{config.api_url}/disputes/#{dispute_id}", config: config) end - def self.update(dispute_id, params, config = Configuration, request_options: RequestOptions) + def self.update(dispute_id, params, config = Configuration) communicator.post( "#{config.api_url}/disputes/#{dispute_id}", json: params, - config: config, - request_options: request_options + config: config ) end - def self.close(dispute_id, config = Configuration, request_options: RequestOptions) + def self.close(dispute_id, config = Configuration) communicator.post( "#{config.api_url}/disputes/#{dispute_id}/close", - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/payment_methods.rb b/lib/shift4/payment_methods.rb index 9c8f146..15827a2 100644 --- a/lib/shift4/payment_methods.rb +++ b/lib/shift4/payment_methods.rb @@ -4,12 +4,11 @@ module Shift4 class PaymentMethods extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) + def self.create(params, config = Configuration) communicator.post( "#{config.api_url}/payment-methods", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/plans.rb b/lib/shift4/plans.rb index 6bf4c8d..1ae24e2 100644 --- a/lib/shift4/plans.rb +++ b/lib/shift4/plans.rb @@ -4,20 +4,19 @@ module Shift4 class Plans extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) - communicator.post("#{config.api_url}/plans", json: params, config: config, request_options: request_options) + def self.create(params, config = Configuration) + communicator.post("#{config.api_url}/plans", json: params, config: config, ) end def self.retrieve(plan_id, config = Configuration) communicator.get("#{config.api_url}/plans/#{plan_id}", config: config) end - def self.update(plan_id, params, config = Configuration, request_options: RequestOptions) + def self.update(plan_id, params, config = Configuration) communicator.post( "#{config.api_url}/plans/#{plan_id}", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/lib/shift4/request_options.rb b/lib/shift4/request_options.rb index 0f04e80..4b94052 100644 --- a/lib/shift4/request_options.rb +++ b/lib/shift4/request_options.rb @@ -1,12 +1,21 @@ # frozen_string_literal: true module Shift4 - class RequestOptions + class RequestOptions < Configuration class << self attr_reader :idempotency_key end - def initialize(idempotency_key: nil) + def initialize( + config = Configuration, + idempotency_key: nil + ) + super( + secret_key: config.secret_key, + merchant: config.merchant, + api_url: config.api_url, + uploads_url: config.uploads_url + ) @idempotency_key = idempotency_key end diff --git a/lib/shift4/subscriptions.rb b/lib/shift4/subscriptions.rb index b7b2999..99f62cb 100644 --- a/lib/shift4/subscriptions.rb +++ b/lib/shift4/subscriptions.rb @@ -4,12 +4,11 @@ module Shift4 class Subscriptions extend TransactionBase - def self.create(params, config = Configuration, request_options: RequestOptions) + def self.create(params, config = Configuration) communicator.post( "#{config.api_url}/subscriptions", json: params, - config: config, - request_options: request_options + config: config ) end @@ -17,12 +16,11 @@ def self.retrieve(subscription_id, config = Configuration) communicator.get("#{config.api_url}/subscriptions/#{subscription_id}", config: config) end - def self.update(subscription_id, params, config = Configuration, request_options: RequestOptions) + def self.update(subscription_id, params, config = Configuration) communicator.post( "#{config.api_url}/subscriptions/#{subscription_id}", json: params, - config: config, - request_options: request_options + config: config ) end diff --git a/spec/integration/blacklist_spec.rb b/spec/integration/blacklist_spec.rb index ba2baa1..0ac2156 100644 --- a/spec/integration/blacklist_spec.rb +++ b/spec/integration/blacklist_spec.rb @@ -23,14 +23,15 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) - # when created = Shift4::Blacklist.create( request, - request_options: request_options + request_options ) + + # when not_created_because_idempotency = Shift4::Blacklist.create( request, - request_options: request_options + request_options ) # then diff --git a/spec/integration/cards_spec.rb b/spec/integration/cards_spec.rb index b7d0695..4eb5166 100644 --- a/spec/integration/cards_spec.rb +++ b/spec/integration/cards_spec.rb @@ -42,7 +42,7 @@ cvc: '123', cardholderName: cardholder_name }, - request_options: request_options) + request_options) # when not_created_because_idempotency = Shift4::Cards.create(customer_id, @@ -53,7 +53,7 @@ cvc: '123', cardholderName: cardholder_name }, - request_options: request_options) + request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) @@ -110,7 +110,7 @@ addressLine1: 'updated addressLine1', addressLine2: 'updated addressLine2' }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Cards.update(customer['id'], card['id'], { @@ -124,7 +124,7 @@ addressLine1: 'updated addressLine1', addressLine2: 'updated addressLine2' }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") diff --git a/spec/integration/charges_spec.rb b/spec/integration/charges_spec.rb index ed598a3..4ddb440 100644 --- a/spec/integration/charges_spec.rb +++ b/spec/integration/charges_spec.rb @@ -45,8 +45,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - created = Shift4::Charges.create(charge_req, request_options: request_options) - not_created_because_idempotency = Shift4::Charges.create(charge_req, request_options: request_options) + created = Shift4::Charges.create(charge_req, request_options) + not_created_because_idempotency = Shift4::Charges.create(charge_req, request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) @@ -90,14 +90,14 @@ "description" => "updated description", "metadata" => { "key" => "updated value" } }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Charges.update(created['id'], { "description" => "updated description", "metadata" => { "key" => "updated value" } }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") @@ -124,8 +124,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - captured = Shift4::Charges.capture(created['id'], request_options: request_options) - not_captured_because_idempotency = Shift4::Charges.capture(created['id'], request_options: request_options) + captured = Shift4::Charges.capture(created['id'], request_options) + not_captured_because_idempotency = Shift4::Charges.capture(created['id'], request_options) # then expect(captured['id']).to eq(not_captured_because_idempotency['id']) @@ -153,8 +153,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - refunded = Shift4::Charges.refund(created['id'], request_options: request_options) - not_refunded_because_idempotency = Shift4::Charges.refund(created['id'], request_options: request_options) + refunded = Shift4::Charges.refund(created['id'], nil, request_options) + not_refunded_because_idempotency = Shift4::Charges.refund(created['id'], nil, request_options) # then expect(refunded['id']).to eq(not_refunded_because_idempotency['id']) diff --git a/spec/integration/credits_spec.rb b/spec/integration/credits_spec.rb index 6a6487a..6783117 100644 --- a/spec/integration/credits_spec.rb +++ b/spec/integration/credits_spec.rb @@ -25,8 +25,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - created = Shift4::Credits.create(credit_req, request_options: request_options) - not_created_because_idempotency = Shift4::Credits.create(credit_req, request_options: request_options) + created = Shift4::Credits.create(credit_req, request_options) + not_created_because_idempotency = Shift4::Credits.create(credit_req, request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) @@ -70,13 +70,13 @@ "description" => "updated description", "metadata" => { "key" => "updated value" } }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Credits.update(created['id'], { "description" => "updated description", "metadata" => { "key" => "updated value" } }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") diff --git a/spec/integration/customers_spec.rb b/spec/integration/customers_spec.rb index a0add1b..dce4e18 100644 --- a/spec/integration/customers_spec.rb +++ b/spec/integration/customers_spec.rb @@ -23,8 +23,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - created = Shift4::Customers.create(customer_req, request_options: request_options) - not_created_because_idempotency = Shift4::Customers.create(customer_req, request_options: request_options) + created = Shift4::Customers.create(customer_req, request_options) + not_created_because_idempotency = Shift4::Customers.create(customer_req, request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) @@ -57,10 +57,10 @@ # when updated = Shift4::Customers.update(customer['id'], { defaultCardId: new_card['id'] }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Customers.update(customer['id'], { defaultCardId: new_card['id'] }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") diff --git a/spec/integration/disputes_spec.rb b/spec/integration/disputes_spec.rb index 2c31831..77a2e58 100644 --- a/spec/integration/disputes_spec.rb +++ b/spec/integration/disputes_spec.rb @@ -50,10 +50,10 @@ # when updated = Shift4::Disputes.update(dispute['id'], { evidence: { customerName: evidence_customer_name } }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Disputes.update(dispute['id'], { evidence: { customerName: evidence_customer_name } }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") @@ -79,9 +79,9 @@ # when closed = Shift4::Disputes.close(dispute['id'], - request_options: request_options) + request_options) not_closed_because_idempotency = Shift4::Disputes.close(dispute['id'], - request_options: request_options) + request_options) # then expect(not_closed_because_idempotency.headers['Idempotent-Replayed']).to eq("true") diff --git a/spec/integration/payment_methods_spec.rb b/spec/integration/payment_methods_spec.rb index 41f15f8..8e4a392 100644 --- a/spec/integration/payment_methods_spec.rb +++ b/spec/integration/payment_methods_spec.rb @@ -27,9 +27,9 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - created = Shift4::PaymentMethods.create(payment_method_req, request_options: request_options) + created = Shift4::PaymentMethods.create(payment_method_req, request_options) not_created_because_idempotency = Shift4::PaymentMethods.create(payment_method_req, - request_options: request_options) + request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) diff --git a/spec/integration/plans_spec.rb b/spec/integration/plans_spec.rb index cf3ef79..94e2eac 100644 --- a/spec/integration/plans_spec.rb +++ b/spec/integration/plans_spec.rb @@ -26,8 +26,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - created = Shift4::Plans.create(plan_req, request_options: request_options) - not_created_because_idempotency = Shift4::Plans.create(plan_req, request_options: request_options) + created = Shift4::Plans.create(plan_req, request_options) + not_created_because_idempotency = Shift4::Plans.create(plan_req, request_options) # then expect(created['id']).to eq(not_created_because_idempotency['id']) @@ -61,10 +61,10 @@ # when updated = Shift4::Plans.update(created['id'], { amount: 222, currency: 'PLN', name: 'Updated plan' }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Plans.update(created['id'], { amount: 222, currency: 'PLN', name: 'Updated plan' }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") diff --git a/spec/integration/subscriptions_spec.rb b/spec/integration/subscriptions_spec.rb index 22369c2..3d8f04c 100644 --- a/spec/integration/subscriptions_spec.rb +++ b/spec/integration/subscriptions_spec.rb @@ -30,12 +30,12 @@ customerId: customer['id'], planId: plan['id'] }, - request_options: request_options) + request_options) not_subscribed_because_idempotency = Shift4::Subscriptions.create({ customerId: customer['id'], planId: plan['id'] }, - request_options: request_options) + request_options) # then expect(subscription['id']).to eq(not_subscribed_because_idempotency['id']) @@ -100,7 +100,7 @@ }.compact, } }, - request_options: request_options) + request_options) not_updated_because_idempotency = Shift4::Subscriptions.update(subscription['id'], { shipping: { @@ -115,7 +115,7 @@ }.compact, } }, - request_options: request_options) + request_options) # then expect(not_updated_because_idempotency.headers['Idempotent-Replayed']).to eq("true") From 2cae94ce6b5b1bf1c134f7e54b73f688c0a1569f Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Tue, 30 Jul 2024 19:05:13 +0200 Subject: [PATCH 6/7] Rubocop --- lib/shift4/credits.rb | 2 +- lib/shift4/plans.rb | 2 +- spec/integration/cards_spec.rb | 28 ++++++++++++------------ spec/integration/charges_spec.rb | 12 +++++------ spec/integration/credits_spec.rb | 12 +++++------ spec/integration/customers_spec.rb | 6 +++--- spec/integration/disputes_spec.rb | 10 ++++----- spec/integration/plans_spec.rb | 6 +++--- spec/integration/subscriptions_spec.rb | 30 +++++++++++++------------- 9 files changed, 54 insertions(+), 54 deletions(-) diff --git a/lib/shift4/credits.rb b/lib/shift4/credits.rb index 7d8405a..b941c98 100644 --- a/lib/shift4/credits.rb +++ b/lib/shift4/credits.rb @@ -5,7 +5,7 @@ class Credits extend TransactionBase def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/credits", json: params, config: config, ) + communicator.post("#{config.api_url}/credits", json: params, config: config) end def self.retrieve(credit_id, config = Configuration) diff --git a/lib/shift4/plans.rb b/lib/shift4/plans.rb index 1ae24e2..c4f0363 100644 --- a/lib/shift4/plans.rb +++ b/lib/shift4/plans.rb @@ -5,7 +5,7 @@ class Plans extend TransactionBase def self.create(params, config = Configuration) - communicator.post("#{config.api_url}/plans", json: params, config: config, ) + communicator.post("#{config.api_url}/plans", json: params, config: config) end def self.retrieve(plan_id, config = Configuration) diff --git a/spec/integration/cards_spec.rb b/spec/integration/cards_spec.rb index 4eb5166..f69a47c 100644 --- a/spec/integration/cards_spec.rb +++ b/spec/integration/cards_spec.rb @@ -97,20 +97,20 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated_card = Shift4::Cards.update(customer['id'], - card['id'], - { - expMonth: '05', - expYear: '55', - cardholderName: 'updated cardholderName', - addressCountry: 'updated addressCountry', - addressCity: 'updated addressCity', - addressState: 'updated addressState', - addressZip: 'updated addressZip', - addressLine1: 'updated addressLine1', - addressLine2: 'updated addressLine2' - }, - request_options) + Shift4::Cards.update(customer['id'], + card['id'], + { + expMonth: '05', + expYear: '55', + cardholderName: 'updated cardholderName', + addressCountry: 'updated addressCountry', + addressCity: 'updated addressCity', + addressState: 'updated addressState', + addressZip: 'updated addressZip', + addressLine1: 'updated addressLine1', + addressLine2: 'updated addressLine2' + }, + request_options) not_updated_because_idempotency = Shift4::Cards.update(customer['id'], card['id'], { diff --git a/spec/integration/charges_spec.rb b/spec/integration/charges_spec.rb index 4ddb440..a6c24ef 100644 --- a/spec/integration/charges_spec.rb +++ b/spec/integration/charges_spec.rb @@ -85,12 +85,12 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Charges.update(created['id'], - { - "description" => "updated description", - "metadata" => { "key" => "updated value" } - }, - request_options) + Shift4::Charges.update(created['id'], + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, + request_options) not_updated_because_idempotency = Shift4::Charges.update(created['id'], { diff --git a/spec/integration/credits_spec.rb b/spec/integration/credits_spec.rb index 6783117..6eb36c6 100644 --- a/spec/integration/credits_spec.rb +++ b/spec/integration/credits_spec.rb @@ -65,12 +65,12 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Credits.update(created['id'], - { - "description" => "updated description", - "metadata" => { "key" => "updated value" } - }, - request_options) + Shift4::Credits.update(created['id'], + { + "description" => "updated description", + "metadata" => { "key" => "updated value" } + }, + request_options) not_updated_because_idempotency = Shift4::Credits.update(created['id'], { "description" => "updated description", diff --git a/spec/integration/customers_spec.rb b/spec/integration/customers_spec.rb index dce4e18..802e369 100644 --- a/spec/integration/customers_spec.rb +++ b/spec/integration/customers_spec.rb @@ -55,9 +55,9 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Customers.update(customer['id'], - { defaultCardId: new_card['id'] }, - request_options) + Shift4::Customers.update(customer['id'], + { defaultCardId: new_card['id'] }, + request_options) not_updated_because_idempotency = Shift4::Customers.update(customer['id'], { defaultCardId: new_card['id'] }, request_options) diff --git a/spec/integration/disputes_spec.rb b/spec/integration/disputes_spec.rb index 77a2e58..4b91d8c 100644 --- a/spec/integration/disputes_spec.rb +++ b/spec/integration/disputes_spec.rb @@ -48,9 +48,9 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Disputes.update(dispute['id'], - { evidence: { customerName: evidence_customer_name } }, - request_options) + Shift4::Disputes.update(dispute['id'], + { evidence: { customerName: evidence_customer_name } }, + request_options) not_updated_because_idempotency = Shift4::Disputes.update(dispute['id'], { evidence: { customerName: evidence_customer_name } }, request_options) @@ -78,8 +78,8 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - closed = Shift4::Disputes.close(dispute['id'], - request_options) + Shift4::Disputes.close(dispute['id'], + request_options) not_closed_because_idempotency = Shift4::Disputes.close(dispute['id'], request_options) diff --git a/spec/integration/plans_spec.rb b/spec/integration/plans_spec.rb index 94e2eac..e9c8cb8 100644 --- a/spec/integration/plans_spec.rb +++ b/spec/integration/plans_spec.rb @@ -59,9 +59,9 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Plans.update(created['id'], - { amount: 222, currency: 'PLN', name: 'Updated plan' }, - request_options) + Shift4::Plans.update(created['id'], + { amount: 222, currency: 'PLN', name: 'Updated plan' }, + request_options) not_updated_because_idempotency = Shift4::Plans.update(created['id'], { amount: 222, currency: 'PLN', name: 'Updated plan' }, request_options) diff --git a/spec/integration/subscriptions_spec.rb b/spec/integration/subscriptions_spec.rb index 3d8f04c..5f1673a 100644 --- a/spec/integration/subscriptions_spec.rb +++ b/spec/integration/subscriptions_spec.rb @@ -86,21 +86,21 @@ request_options = Shift4::RequestOptions.new(idempotency_key: random_idempotency_key.to_s) # when - updated = Shift4::Subscriptions.update(subscription['id'], - { - shipping: { - name: 'Updated shipping', - address: { - "line1" => "Updated line1", - "line2" => "Updated line2", - "zip" => "Updated zip", - "city" => "Updated city", - "state" => "Updated state", - "country" => "CH", - }.compact, - } - }, - request_options) + Shift4::Subscriptions.update(subscription['id'], + { + shipping: { + name: 'Updated shipping', + address: { + "line1" => "Updated line1", + "line2" => "Updated line2", + "zip" => "Updated zip", + "city" => "Updated city", + "state" => "Updated state", + "country" => "CH", + }.compact, + } + }, + request_options) not_updated_because_idempotency = Shift4::Subscriptions.update(subscription['id'], { shipping: { From ed70665f862882ef9c23af6173fa40c564c75b6d Mon Sep 17 00:00:00 2001 From: Kamil Tarczewski Date: Wed, 31 Jul 2024 14:08:02 +0200 Subject: [PATCH 7/7] Restore old formatting --- lib/shift4/cards.rb | 12 ++---------- lib/shift4/charges.rb | 17 +++-------------- lib/shift4/communicator.rb | 5 +---- lib/shift4/credits.rb | 6 +----- lib/shift4/customers.rb | 11 ++--------- lib/shift4/disputes.rb | 11 ++--------- lib/shift4/payment_methods.rb | 6 +----- lib/shift4/plans.rb | 6 +----- lib/shift4/subscriptions.rb | 12 ++---------- 9 files changed, 15 insertions(+), 71 deletions(-) diff --git a/lib/shift4/cards.rb b/lib/shift4/cards.rb index efac416..cc30454 100644 --- a/lib/shift4/cards.rb +++ b/lib/shift4/cards.rb @@ -5,11 +5,7 @@ class Cards extend TransactionBase def self.create(customer_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/customers/#{customer_id}/cards", - json: params, - config: config - ) + communicator.post("#{config.api_url}/customers/#{customer_id}/cards", json: params, config: config) end def self.retrieve(customer_id, card_id, config = Configuration) @@ -17,11 +13,7 @@ def self.retrieve(customer_id, card_id, config = Configuration) end def self.update(customer_id, card_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", json: params, config: config) end def self.delete(customer_id, card_id, config = Configuration) diff --git a/lib/shift4/charges.rb b/lib/shift4/charges.rb index 7cbc72a..72c5995 100644 --- a/lib/shift4/charges.rb +++ b/lib/shift4/charges.rb @@ -13,11 +13,7 @@ def self.retrieve(charge_id, config = Configuration) end def self.update(charge_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/charges/#{charge_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/charges/#{charge_id}", json: params, config: config) end def self.list(params = nil, config = Configuration) @@ -25,18 +21,11 @@ def self.list(params = nil, config = Configuration) end def self.capture(charge_id, config = Configuration) - communicator.post( - "#{config.api_url}/charges/#{charge_id}/capture", - config: config - ) + communicator.post("#{config.api_url}/charges/#{charge_id}/capture", config: config) end def self.refund(charge_id, params = nil, config = Configuration) - communicator.post( - "#{config.api_url}/charges/#{charge_id}/refund", - json: params, - config: config - ) + communicator.post("#{config.api_url}/charges/#{charge_id}/refund", json: params, config: config) end end end diff --git a/lib/shift4/communicator.rb b/lib/shift4/communicator.rb index dd779bf..6ad1fc0 100644 --- a/lib/shift4/communicator.rb +++ b/lib/shift4/communicator.rb @@ -17,10 +17,7 @@ def self.get(url, query: nil, config: Configuration) end def self.post(url, json: nil, body: nil, config: Configuration) - response = web_consumer.post( - url, - request(json: json, body: body, config: config) - ) + response = web_consumer.post(url, request(json: json, body: body, config: config)) handle_response(response) response end diff --git a/lib/shift4/credits.rb b/lib/shift4/credits.rb index b941c98..ec31cf3 100644 --- a/lib/shift4/credits.rb +++ b/lib/shift4/credits.rb @@ -13,11 +13,7 @@ def self.retrieve(credit_id, config = Configuration) end def self.update(credit_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/credits/#{credit_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/credits/#{credit_id}", json: params, config: config) end def self.list(params = nil, config = Configuration) diff --git a/lib/shift4/customers.rb b/lib/shift4/customers.rb index 7be8fdd..07acbd0 100644 --- a/lib/shift4/customers.rb +++ b/lib/shift4/customers.rb @@ -5,10 +5,7 @@ class Customers extend TransactionBase def self.create(params, config = Configuration) - communicator.post( - "#{config.api_url}/customers", - json: params, config: config - ) + communicator.post("#{config.api_url}/customers", json: params, config: config) end def self.retrieve(customer_id, config = Configuration) @@ -16,11 +13,7 @@ def self.retrieve(customer_id, config = Configuration) end def self.update(customer_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/customers/#{customer_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/customers/#{customer_id}", json: params, config: config) end def self.delete(customer_id, config = Configuration) diff --git a/lib/shift4/disputes.rb b/lib/shift4/disputes.rb index 5a4f025..2b5e870 100644 --- a/lib/shift4/disputes.rb +++ b/lib/shift4/disputes.rb @@ -9,18 +9,11 @@ def self.retrieve(dispute_id, config = Configuration) end def self.update(dispute_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/disputes/#{dispute_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/disputes/#{dispute_id}", json: params, config: config) end def self.close(dispute_id, config = Configuration) - communicator.post( - "#{config.api_url}/disputes/#{dispute_id}/close", - config: config - ) + communicator.post("#{config.api_url}/disputes/#{dispute_id}/close", config: config) end def self.list(params = nil, config = Configuration) diff --git a/lib/shift4/payment_methods.rb b/lib/shift4/payment_methods.rb index 15827a2..14bc54f 100644 --- a/lib/shift4/payment_methods.rb +++ b/lib/shift4/payment_methods.rb @@ -5,11 +5,7 @@ class PaymentMethods extend TransactionBase def self.create(params, config = Configuration) - communicator.post( - "#{config.api_url}/payment-methods", - json: params, - config: config - ) + communicator.post("#{config.api_url}/payment-methods", json: params, config: config) end def self.retrieve(plan_id, config = Configuration) diff --git a/lib/shift4/plans.rb b/lib/shift4/plans.rb index c4f0363..3a8ab1d 100644 --- a/lib/shift4/plans.rb +++ b/lib/shift4/plans.rb @@ -13,11 +13,7 @@ def self.retrieve(plan_id, config = Configuration) end def self.update(plan_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/plans/#{plan_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/plans/#{plan_id}", json: params, config: config) end def self.delete(plan_id, config = Configuration) diff --git a/lib/shift4/subscriptions.rb b/lib/shift4/subscriptions.rb index 99f62cb..0712a27 100644 --- a/lib/shift4/subscriptions.rb +++ b/lib/shift4/subscriptions.rb @@ -5,11 +5,7 @@ class Subscriptions extend TransactionBase def self.create(params, config = Configuration) - communicator.post( - "#{config.api_url}/subscriptions", - json: params, - config: config - ) + communicator.post("#{config.api_url}/subscriptions", json: params, config: config) end def self.retrieve(subscription_id, config = Configuration) @@ -17,11 +13,7 @@ def self.retrieve(subscription_id, config = Configuration) end def self.update(subscription_id, params, config = Configuration) - communicator.post( - "#{config.api_url}/subscriptions/#{subscription_id}", - json: params, - config: config - ) + communicator.post("#{config.api_url}/subscriptions/#{subscription_id}", json: params, config: config) end def self.cancel(subscription_id, config = Configuration)