Skip to content

Commit

Permalink
Merge pull request #1 from el-dot/master
Browse files Browse the repository at this point in the history
Add support for explicit merchant and multiple configurations
  • Loading branch information
el-dot authored Jul 20, 2023
2 parents b5d46e3 + bf4f3ef commit c34460f
Show file tree
Hide file tree
Showing 36 changed files with 944 additions and 799 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ jobs:
integration-tests:
env:
SECRET_KEY: ${{ secrets.SECRET_KEY }}
EXPLICIT_MERCHANT_SECRET_KEY: ${{ secrets.EXPLICIT_MERCHANT_SECRET_KEY }}
EXPLICIT_MERCHANT: ${{ secrets.EXPLICIT_MERCHANT }}
name: Integration Tests
strategy:
fail-fast: false
Expand Down
16 changes: 8 additions & 8 deletions lib/shift4/blacklist.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,20 @@ module Shift4
class Blacklist
extend TransactionBase

def self.create(params)
communicator.post("#{Configuration.api_url}/blacklist", json: params)
def self.create(params, config = Configuration)
communicator.post("#{config.api_url}/blacklist", json: params, config: config)
end

def self.retrieve(blacklist_rule_id)
communicator.get("#{Configuration.api_url}/blacklist/#{blacklist_rule_id}")
def self.retrieve(blacklist_rule_id, config = Configuration)
communicator.get("#{config.api_url}/blacklist/#{blacklist_rule_id}", config: config)
end

def self.delete(blacklist_rule_id)
communicator.delete("#{Configuration.api_url}/blacklist/#{blacklist_rule_id}")
def self.delete(blacklist_rule_id, config = Configuration)
communicator.delete("#{config.api_url}/blacklist/#{blacklist_rule_id}", config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/blacklist", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/blacklist", query: params, config: config)
end
end
end
20 changes: 10 additions & 10 deletions lib/shift4/cards.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ module Shift4
class Cards
extend TransactionBase

def self.create(customer_id, params)
communicator.post("#{Configuration.api_url}/customers/#{customer_id}/cards", json: params)
def self.create(customer_id, params, config = Configuration)
communicator.post("#{config.api_url}/customers/#{customer_id}/cards", json: params, config: config)
end

def self.retrieve(customer_id, card_id)
communicator.get("#{Configuration.api_url}/customers/#{customer_id}/cards/#{card_id}")
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)
communicator.post("#{Configuration.api_url}/customers/#{customer_id}/cards/#{card_id}", json: params)
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)
end

def self.delete(customer_id, card_id)
communicator.delete("#{Configuration.api_url}/customers/#{customer_id}/cards/#{card_id}")
def self.delete(customer_id, card_id, config = Configuration)
communicator.delete("#{config.api_url}/customers/#{customer_id}/cards/#{card_id}", config: config)
end

def self.list(customer_id, params = nil)
communicator.get("#{Configuration.api_url}/customers/#{customer_id}/cards", query: params)
def self.list(customer_id, params = nil, config = Configuration)
communicator.get("#{config.api_url}/customers/#{customer_id}/cards", query: params, config: config)
end
end
end
24 changes: 12 additions & 12 deletions lib/shift4/charges.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@ module Shift4
class Charges
extend TransactionBase

def self.create(params)
communicator.post("#{Configuration.api_url}/charges", json: params)
def self.create(params, config = Configuration)
communicator.post("#{config.api_url}/charges", json: params, config: config)
end

def self.retrieve(charge_id)
communicator.get("#{Configuration.api_url}/charges/#{charge_id}")
def self.retrieve(charge_id, config = Configuration)
communicator.get("#{config.api_url}/charges/#{charge_id}", config: config)
end

def self.update(charge_id, params)
communicator.post("#{Configuration.api_url}/charges/#{charge_id}", json: params)
def self.update(charge_id, params, config = Configuration)
communicator.post("#{config.api_url}/charges/#{charge_id}", json: params, config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/charges", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/charges", query: params, config: config)
end

def self.capture(charge_id)
communicator.post("#{Configuration.api_url}/charges/#{charge_id}/capture")
def self.capture(charge_id, config = Configuration)
communicator.post("#{config.api_url}/charges/#{charge_id}/capture", config: config)
end

def self.refund(charge_id, params = nil)
communicator.post("#{Configuration.api_url}/charges/#{charge_id}/refund", json: params)
def self.refund(charge_id, params = nil, config = Configuration)
communicator.post("#{config.api_url}/charges/#{charge_id}/refund", json: params, config: config)
end
end
end
18 changes: 10 additions & 8 deletions lib/shift4/communicator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,31 @@ class << self

@web_consumer = HTTParty

def self.get(url, query: nil)
response = web_consumer.get(url, request(query: query))
def self.get(url, query: nil, config: Configuration)
response = web_consumer.get(url, request(query: query, config: config))
handle_response(response)
response
end

def self.post(url, json: nil, body: nil)
response = web_consumer.post(url, request(json: json, body: body))
def self.post(url, json: nil, body: nil, config: Configuration)
response = web_consumer.post(url, request(json: json, body: body, config: config))
handle_response(response)
response
end

def self.delete(url)
response = web_consumer.delete(url, request)
def self.delete(url, config: Configuration)
response = web_consumer.delete(url, request(config: config))
handle_response(response)
response
end

def self.request(json: nil, query: nil, body: nil)
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?

if json
raise ArgumentError("Cannot specify both body and json") if body

Expand All @@ -45,7 +47,7 @@ def self.request(json: nil, query: nil, body: nil)
query: query,
headers: headers,
basic_auth: {
username: Configuration.secret_key
username: config.secret_key
}
}
end
Expand Down
45 changes: 30 additions & 15 deletions lib/shift4/configuration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,42 @@
module Shift4
class Configuration
class << self
attr_accessor :secret_key
attr_accessor :secret_key, :merchant
attr_reader :api_url, :uploads_url

@api_url = 'https://api.shift4.com'
@uploads_url = 'https://uploads.api.shift4.com'

def api_url=(api_url)
@api_url = api_url.nil? ? 'https://api.shift4.com' : api_url.gsub(%r{/$}, "")
end

def uploads_url=(uploads_url)
@uploads_url = uploads_url.nil? ? 'https://uploads.api.shift4.com' : uploads_url.gsub(%r{/$}, "")
end
end

@api_url = 'https://api.shift4.com'
@uploads_url = 'https://uploads.api.shift4.com'
attr_accessor :secret_key, :merchant
attr_reader :api_url, :uploads_url

def initialize(
secret_key:,
merchant: nil,
api_url: 'https://api.shift4.com',
uploads_url: 'https://uploads.api.shift4.com'
)
self.api_url = api_url
self.uploads_url = uploads_url
self.secret_key = secret_key
self.merchant = merchant
end

def self.api_url=(api_url)
@api_url = if api_url.nil?
'https://api.shift4.com'
else
api_url.gsub(%r{/$}, "")
end
def api_url=(api_url)
@api_url = api_url.nil? ? 'https://api.shift4.com' : api_url.gsub(%r{/$}, "")
end

def self.uploads_url=(uploads_url)
@uploads_url = if uploads_url.nil?
'https://uploads.api.shift4.com'
else
uploads_url.gsub(%r{/$}, "")
end
def uploads_url=(uploads_url)
@uploads_url = uploads_url.nil? ? 'https://uploads.api.shift4.com' : uploads_url.gsub(%r{/$}, "")
end
end
end
16 changes: 8 additions & 8 deletions lib/shift4/credits.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@ module Shift4
class Credits
extend TransactionBase

def self.create(params)
communicator.post("#{Configuration.api_url}/credits", json: params)
def self.create(params, config = Configuration)
communicator.post("#{config.api_url}/credits", json: params, config: config)
end

def self.retrieve(credit_id)
communicator.get("#{Configuration.api_url}/credits/#{credit_id}")
def self.retrieve(credit_id, config = Configuration)
communicator.get("#{config.api_url}/credits/#{credit_id}", config: config)
end

def self.update(credit_id, params)
communicator.post("#{Configuration.api_url}/credits/#{credit_id}", json: params)
def self.update(credit_id, params, config = Configuration)
communicator.post("#{config.api_url}/credits/#{credit_id}", json: params, config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/credits", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/credits", query: params, config: config)
end
end
end
20 changes: 10 additions & 10 deletions lib/shift4/cross_sale_offers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ module Shift4
class CrossSaleOffers
extend TransactionBase

def self.create(params)
communicator.post("#{Configuration.api_url}/cross-sale-offers", json: params)
def self.create(params, config = Configuration)
communicator.post("#{config.api_url}/cross-sale-offers", json: params, config: config)
end

def self.retrieve(cross_sale_offer_id)
communicator.get("#{Configuration.api_url}/cross-sale-offers/#{cross_sale_offer_id}")
def self.retrieve(cross_sale_offer_id, config = Configuration)
communicator.get("#{config.api_url}/cross-sale-offers/#{cross_sale_offer_id}", config: config)
end

def self.update(cross_sale_offer_id, params)
communicator.post("#{Configuration.api_url}/cross-sale-offers/#{cross_sale_offer_id}", json: params)
def self.update(cross_sale_offer_id, params, config = Configuration)
communicator.post("#{config.api_url}/cross-sale-offers/#{cross_sale_offer_id}", json: params, config: config)
end

def self.delete(cross_sale_offer_id)
communicator.delete("#{Configuration.api_url}/cross-sale-offers/#{cross_sale_offer_id}")
def self.delete(cross_sale_offer_id, config = Configuration)
communicator.delete("#{config.api_url}/cross-sale-offers/#{cross_sale_offer_id}", config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/cross-sale-offers", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/cross-sale-offers", query: params, config: config)
end
end
end
20 changes: 10 additions & 10 deletions lib/shift4/customers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,24 @@ module Shift4
class Customers
extend TransactionBase

def self.create(params)
communicator.post("#{Configuration.api_url}/customers", json: params)
def self.create(params, config = Configuration)
communicator.post("#{config.api_url}/customers", json: params, config: config)
end

def self.retrieve(customer_id)
communicator.get("#{Configuration.api_url}/customers/#{customer_id}")
def self.retrieve(customer_id, config = Configuration)
communicator.get("#{config.api_url}/customers/#{customer_id}", config: config)
end

def self.update(customer_id, params)
communicator.post("#{Configuration.api_url}/customers/#{customer_id}", json: params)
def self.update(customer_id, params, config = Configuration)
communicator.post("#{config.api_url}/customers/#{customer_id}", json: params, config: config)
end

def self.delete(customer_id)
communicator.delete("#{Configuration.api_url}/customers/#{customer_id}")
def self.delete(customer_id, config = Configuration)
communicator.delete("#{config.api_url}/customers/#{customer_id}", config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/customers", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/customers", query: params, config: config)
end
end
end
16 changes: 8 additions & 8 deletions lib/shift4/disputes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,20 @@ module Shift4
class Disputes
extend TransactionBase

def self.retrieve(dispute_id)
communicator.get("#{Configuration.api_url}/disputes/#{dispute_id}")
def self.retrieve(dispute_id, config = Configuration)
communicator.get("#{config.api_url}/disputes/#{dispute_id}", config: config)
end

def self.update(dispute_id, params)
communicator.post("#{Configuration.api_url}/disputes/#{dispute_id}", json: params)
def self.update(dispute_id, params, config = Configuration)
communicator.post("#{config.api_url}/disputes/#{dispute_id}", json: params, config: config)
end

def self.close(dispute_id)
communicator.post("#{Configuration.api_url}/disputes/#{dispute_id}/close")
def self.close(dispute_id, config = Configuration)
communicator.post("#{config.api_url}/disputes/#{dispute_id}/close", config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/disputes", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/disputes", query: params, config: config)
end
end
end
8 changes: 4 additions & 4 deletions lib/shift4/events.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ module Shift4
class Events
extend TransactionBase

def self.retrieve(event_id)
communicator.get("#{Configuration.api_url}/events/#{event_id}")
def self.retrieve(event_id, config = Configuration)
communicator.get("#{config.api_url}/events/#{event_id}", config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.api_url}/events", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.api_url}/events", query: params, config: config)
end
end
end
12 changes: 6 additions & 6 deletions lib/shift4/file_uploads.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ module Shift4
class FileUploads
extend TransactionBase

def self.upload(file, params)
def self.upload(file, params, config = Configuration)
body = { file: file }.merge(params)
communicator.post("#{Configuration.uploads_url}/files", body: body)
communicator.post("#{config.uploads_url}/files", body: body, config: config)
end

def self.list(params = nil)
communicator.get("#{Configuration.uploads_url}/files", query: params)
def self.list(params = nil, config = Configuration)
communicator.get("#{config.uploads_url}/files", query: params, config: config)
end

def self.retrieve(file_upload_id)
communicator.get("#{Configuration.uploads_url}/files/#{file_upload_id}")
def self.retrieve(file_upload_id, config = Configuration)
communicator.get("#{config.uploads_url}/files/#{file_upload_id}", config: config)
end
end
end
Loading

0 comments on commit c34460f

Please sign in to comment.