bambora-client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/linter.yml +13 -0
- data/.github/workflows/ruby.yml +34 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.rubocop.yml +108 -0
- data/.ruby-version +1 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +93 -0
- data/LICENSE.txt +21 -0
- data/README.md +198 -0
- data/Rakefile +8 -0
- data/bambora-client.gemspec +55 -0
- data/bin/console +12 -0
- data/bin/setup +8 -0
- data/lib/bambora/adapters/json_response.rb +7 -0
- data/lib/bambora/adapters/multipart_mixed_request.rb +23 -0
- data/lib/bambora/adapters/query_string_response.rb +20 -0
- data/lib/bambora/adapters/response.rb +44 -0
- data/lib/bambora/bank/adapters/payment_profile_response.rb +36 -0
- data/lib/bambora/bank/batch_report_messages.rb +81 -0
- data/lib/bambora/bank/batch_report_resource.rb +79 -0
- data/lib/bambora/bank/builders/payment_profile_params.rb +39 -0
- data/lib/bambora/bank/payment_profile_resource.rb +81 -0
- data/lib/bambora/builders/batch_payment_csv.rb +41 -0
- data/lib/bambora/builders/headers.rb +43 -0
- data/lib/bambora/builders/www_form_parameters.rb +33 -0
- data/lib/bambora/builders/xml_request_body.rb +19 -0
- data/lib/bambora/client.rb +215 -0
- data/lib/bambora/client/version.rb +7 -0
- data/lib/bambora/factories/response_adapter_factory.rb +21 -0
- data/lib/bambora/rest/batch_payment_file_upload_client.rb +58 -0
- data/lib/bambora/rest/client.rb +63 -0
- data/lib/bambora/rest/json_client.rb +109 -0
- data/lib/bambora/rest/www_form_client.rb +38 -0
- data/lib/bambora/rest/xml_client.rb +35 -0
- data/lib/bambora/v1/batch_payment_resource.rb +52 -0
- data/lib/bambora/v1/payment_resource.rb +82 -0
- data/lib/bambora/v1/profile_resource.rb +85 -0
- metadata +256 -0
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module Rest
|
5
|
+
##
|
6
|
+
# The base class for making JSON requests.
|
7
|
+
class JSONClient < Bambora::Rest::Client
|
8
|
+
CONTENT_TYPE = 'application/json'
|
9
|
+
|
10
|
+
# Make a GET Request.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
#
|
14
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', merchant_id: '...')
|
15
|
+
#
|
16
|
+
# client.get(
|
17
|
+
# path: 'v1/profiles',
|
18
|
+
# params: '...',
|
19
|
+
# api_key: '...'
|
20
|
+
# )
|
21
|
+
# # => {
|
22
|
+
# # :code => 1,
|
23
|
+
# # :message => "Operation Successful",
|
24
|
+
# # :customer_code => "02355E2e58Bf488EAB4EaFAD7083dB6A",
|
25
|
+
# # :card => { ... }
|
26
|
+
# # }
|
27
|
+
#
|
28
|
+
# @param path [String] Indicating request path.
|
29
|
+
# @param params [Hash] Query parameters for the request.
|
30
|
+
# @param api_key [String] Indicating the API Key to be used with the request.
|
31
|
+
#
|
32
|
+
# @return [Hash] Indicating success or failure of the operation.
|
33
|
+
def get(path:, params: nil, api_key:)
|
34
|
+
parse_response_body(
|
35
|
+
super(path: path, params: params, headers: build_headers(api_key: api_key)),
|
36
|
+
).to_h
|
37
|
+
end
|
38
|
+
|
39
|
+
# Make a POST Request.
|
40
|
+
#
|
41
|
+
# @example
|
42
|
+
#
|
43
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', merchant_id: '...')
|
44
|
+
#
|
45
|
+
# data = {
|
46
|
+
# language: 'en',
|
47
|
+
# card: {
|
48
|
+
# name: 'Hup Podling',
|
49
|
+
# number: '4030000010001234',
|
50
|
+
# expiry_month: '12',
|
51
|
+
# expiry_year: '23',
|
52
|
+
# cvd: '123',
|
53
|
+
# },
|
54
|
+
# }
|
55
|
+
#
|
56
|
+
# client.post(
|
57
|
+
# path: 'v1/profiles',
|
58
|
+
# body: data,
|
59
|
+
# api_key: '...'
|
60
|
+
# )
|
61
|
+
# # => {
|
62
|
+
# # :code => 1,
|
63
|
+
# # :message => "Operation Successful",
|
64
|
+
# # :customer_code => "02355E2e58Bf488EAB4EaFAD7083dB6A",
|
65
|
+
# # }
|
66
|
+
#
|
67
|
+
# @param method [Symbol] Indicating request verb.
|
68
|
+
# @param path [String] Indicating request path.
|
69
|
+
# @param body [Hash] Data to be sent in the body of the request.
|
70
|
+
# @param api_key [String] Indicating the API Key to be used with the request.
|
71
|
+
#
|
72
|
+
# @return [Hash] Indicating success or failure of the operation.
|
73
|
+
def post(path:, body:, api_key:)
|
74
|
+
parse_response_body(
|
75
|
+
super(path: path, body: body.to_json.to_s, headers: build_headers(api_key: api_key)),
|
76
|
+
).to_h
|
77
|
+
end
|
78
|
+
|
79
|
+
# Make a DELETE Request.
|
80
|
+
#
|
81
|
+
# @example
|
82
|
+
#
|
83
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
84
|
+
#
|
85
|
+
# client.delete(path: 'v1/profiles/02355E2e58Bf488EAB4EaFAD7083dB6A', api_key: '...')
|
86
|
+
# # => {
|
87
|
+
# # :code => 1,
|
88
|
+
# # :message => "Operation Successful",
|
89
|
+
# # :customer_code => "02355E2e58Bf488EAB4EaFAD7083dB6A",
|
90
|
+
# # }
|
91
|
+
#
|
92
|
+
# @param path [String] Indicating request path.
|
93
|
+
# @param api_key [String] Indicating the API Key to be used with the request.
|
94
|
+
#
|
95
|
+
# @return [Hash] Indicating success or failure of the operation.
|
96
|
+
def delete(path:, api_key:)
|
97
|
+
parse_response_body(
|
98
|
+
super(path: path, headers: build_headers(api_key: api_key)),
|
99
|
+
).to_h
|
100
|
+
end
|
101
|
+
|
102
|
+
private
|
103
|
+
|
104
|
+
def build_headers(api_key:)
|
105
|
+
super(api_key: api_key, content_type: CONTENT_TYPE)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module Rest
|
5
|
+
# The base class for making www form urlencoded requests.
|
6
|
+
class WWWFormClient < Bambora::Rest::Client
|
7
|
+
CONTENT_TYPE = 'application/x-www-form-urlencoded'
|
8
|
+
|
9
|
+
##
|
10
|
+
# Make a POST Request.
|
11
|
+
#
|
12
|
+
# @param path [String] Indicating request path.
|
13
|
+
# @param body [Hash] Data to be sent in the query parameters of the request.
|
14
|
+
#
|
15
|
+
# @return [Hash] Indicating success or failure of the operation.
|
16
|
+
def post(path:, body:)
|
17
|
+
# Both Faraday's and Excon's docs show that you can pass a hash into the +body+ and set the content type to
|
18
|
+
# application/x-www-form-urlencoded and the +body+ will be transformed into query parameters, however, this
|
19
|
+
# did not work in testing so I am manually transforming the hash into query parameters here.
|
20
|
+
parse_response_body(
|
21
|
+
super(
|
22
|
+
path: path,
|
23
|
+
body: Bambora::Builders::WWWFormParameters.new(body: body).to_s,
|
24
|
+
headers: build_headers,
|
25
|
+
),
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def build_headers
|
32
|
+
{
|
33
|
+
'Content-Type' => CONTENT_TYPE,
|
34
|
+
}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module Rest
|
5
|
+
# The base class for making XML requests.
|
6
|
+
class XMLClient < Bambora::Rest::Client
|
7
|
+
CONTENT_TYPE = 'application/xml'
|
8
|
+
RESPONSE_FORMAT = 'JSON'
|
9
|
+
|
10
|
+
##
|
11
|
+
# Make a POST Request.
|
12
|
+
#
|
13
|
+
# @param path [String] Indicating request path.
|
14
|
+
# @param body [Hash] Data to be sent in the body of the request.
|
15
|
+
# @param api_key [String] Indicating the API Key to be used with the request.
|
16
|
+
#
|
17
|
+
# @return [Hash] Indicating success or failure of the operation.
|
18
|
+
def post(path:, body:)
|
19
|
+
parse_response_body(
|
20
|
+
super(
|
21
|
+
path: path,
|
22
|
+
body: Bambora::Builders::XMLRequestBody.new(body: body).to_s,
|
23
|
+
headers: build_headers,
|
24
|
+
),
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def build_headers
|
31
|
+
{ 'Content-Type' => CONTENT_TYPE }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module V1
|
5
|
+
# Bank Electronic Funds Transfer (CAD) and Automatic Clearing House (USD)
|
6
|
+
class BatchPaymentResource
|
7
|
+
attr_reader :client, :api_key, :sub_path
|
8
|
+
|
9
|
+
def initialize(client:, api_key:)
|
10
|
+
@client = client
|
11
|
+
@api_key = api_key
|
12
|
+
@sub_path = '/v1/batchpayments'
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Post batch payment data. Transaction objects must have keys that match the order of the columns defined in the
|
17
|
+
# Bambora documentation.https://dev.na.bambora.com/docs/references/batch_payment/#format-of-data-in-file
|
18
|
+
# The values of each object are used to create one row of a CSV.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# batch_payment_resource.create(
|
22
|
+
# [{
|
23
|
+
# super_type: 'E',
|
24
|
+
# transaction_type: 'D',
|
25
|
+
# institution_number: 12345,
|
26
|
+
# transit_number: 123,
|
27
|
+
# account_number: 1223456789,
|
28
|
+
# amount: 10000,
|
29
|
+
# reference_nubmer: 1234,
|
30
|
+
# reccipient_name: 'Hup Podling',
|
31
|
+
# customer_code: '02355E2e58Bf488EAB4EaFAD7083dB6A',
|
32
|
+
# dynamic_description: 'The Skeksis',
|
33
|
+
# }],
|
34
|
+
# )
|
35
|
+
#
|
36
|
+
# @param transactions [Array] of hashes with payment data.
|
37
|
+
# @param opts[:process_now] [Integer] optional. Defaults to 1.
|
38
|
+
# @param opts[:process_date] [String] optional. Must exclude +process_now+ or pass +{ process_now: 0 }+
|
39
|
+
#
|
40
|
+
# @see https://dev.na.bambora.com/docs/references/batch_payment/
|
41
|
+
# @see https://dev.na.bambora.com/docs/guides/batch_payment/
|
42
|
+
def create(transactions, opts = { process_now: 1 })
|
43
|
+
client.post(
|
44
|
+
path: sub_path,
|
45
|
+
file_contents: Bambora::Builders::BatchPaymentCSV.build(transactions),
|
46
|
+
options: opts.merge(sub_merchant_id: client.sub_merchant_id),
|
47
|
+
api_key: api_key,
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module V1
|
5
|
+
class PaymentResource
|
6
|
+
attr_reader :api_key, :client, :sub_path
|
7
|
+
|
8
|
+
def initialize(client:, api_key:)
|
9
|
+
@client = client
|
10
|
+
@api_key = api_key
|
11
|
+
@sub_path = '/v1/payments'
|
12
|
+
end
|
13
|
+
|
14
|
+
# Make a payment with a credit card. Also aliased as +make_payment+.
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
#
|
19
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
20
|
+
# payments = Bambora::V1::PaymentResource(client: client)
|
21
|
+
# payments.create(
|
22
|
+
# {
|
23
|
+
# amount: 50,
|
24
|
+
# payment_method: 'card',
|
25
|
+
# card: {
|
26
|
+
# name: 'Hup Podling',
|
27
|
+
# number: '4504481742333',
|
28
|
+
# expiry_month: '12',
|
29
|
+
# expiry_year: '20',
|
30
|
+
# cvd: '123',
|
31
|
+
# },
|
32
|
+
# },
|
33
|
+
# )
|
34
|
+
#
|
35
|
+
# @param payment_data [Hash] All information relevant to making a payment.
|
36
|
+
#
|
37
|
+
# @see https://dev.na.bambora.com/docs/references/payment_APIs/
|
38
|
+
#
|
39
|
+
# @see https://dev.na.bambora.com/docs/references/payment_SDKs/take_payments/?shell#
|
40
|
+
#
|
41
|
+
# @return [Hash] Indicating success or failure of the operation.
|
42
|
+
def create(payment_data)
|
43
|
+
client.post(path: sub_path, body: payment_data, api_key: api_key)
|
44
|
+
end
|
45
|
+
|
46
|
+
alias make_payment create
|
47
|
+
|
48
|
+
# Make a payment with a credit card. Aliased as +make_payment_with_payment_profile+.
|
49
|
+
#
|
50
|
+
#
|
51
|
+
# @example
|
52
|
+
#
|
53
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
54
|
+
# payments = Bambora::V1::PaymentResource(client: client)
|
55
|
+
# payments.create_with_payment_profile(
|
56
|
+
# customer_code: '2355E2e58Bf488EAB4EaFAD7083dB6A', amount: 50, complete: false
|
57
|
+
# )
|
58
|
+
#
|
59
|
+
# @param customer_code [String] Bambora's payment profile ID.
|
60
|
+
# @param amount [Float] A decimal value in dollars. Uses up to two decimal places. Max value is account specific.
|
61
|
+
# Default max value is 1000.
|
62
|
+
# @param card_id [Integer] Default +1+. Which credit card to use. Starts at 1 for the first card. You must
|
63
|
+
# configure how many cards can be stored by visiting the profile options in the back office.
|
64
|
+
# @param complete [Boolean] Default +false+. Set to false for Pre-Authorize, and true to complete a payment.
|
65
|
+
#
|
66
|
+
# @return [Hash] Indicating success or failure of the operation.
|
67
|
+
def create_with_payment_profile(customer_code:, amount:, card_id: 1, complete: false)
|
68
|
+
create(
|
69
|
+
amount: amount,
|
70
|
+
payment_method: 'payment_profile',
|
71
|
+
payment_profile: {
|
72
|
+
customer_code: customer_code,
|
73
|
+
card_id: card_id,
|
74
|
+
complete: complete,
|
75
|
+
},
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
alias make_payment_with_payment_profile create_with_payment_profile
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Bambora
|
4
|
+
module V1
|
5
|
+
##
|
6
|
+
# For making requests to the /profiles endpoint
|
7
|
+
class ProfileResource
|
8
|
+
attr_reader :client, :api_key, :sub_path
|
9
|
+
|
10
|
+
##
|
11
|
+
# Instantiate an interface to make requests against Bambora's Profiles API.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
#
|
15
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
16
|
+
# profiles = Bambora::V1::ProfileResource(client: client)
|
17
|
+
#
|
18
|
+
# # Start making requests ...
|
19
|
+
#
|
20
|
+
# @param client [Bambora::Rest::JSONClient] An instance of Bambora::JSONClient, used to make network requests.
|
21
|
+
def initialize(client:, api_key:)
|
22
|
+
@client = client
|
23
|
+
@api_key = api_key
|
24
|
+
@sub_path = '/v1/profiles'
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Create a Bambora payment profile.
|
29
|
+
#
|
30
|
+
# @example
|
31
|
+
#
|
32
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
33
|
+
# profiles = Bambora::V1::ProfileResource(client: client)
|
34
|
+
# data = {
|
35
|
+
# language: 'en',
|
36
|
+
# card: {
|
37
|
+
# name: 'Hup Podling',
|
38
|
+
# number: '4030000010001234',
|
39
|
+
# expiry_month: '12',
|
40
|
+
# expiry_year: '23',
|
41
|
+
# cvd: '123',
|
42
|
+
# },
|
43
|
+
# }
|
44
|
+
#
|
45
|
+
# profiles.create(data)
|
46
|
+
# # => {
|
47
|
+
# # :code => 1,
|
48
|
+
# # :message => "Operation Successful",
|
49
|
+
# # :customer_code => "02355E2e58Bf488EAB4EaFAD7083dB6A",
|
50
|
+
# # }
|
51
|
+
#
|
52
|
+
# @param card_data [Hash] All information relevant to making a payment.
|
53
|
+
#
|
54
|
+
# @see https://dev.na.bambora.com/docs/guides/payment_profiles
|
55
|
+
#
|
56
|
+
# @return [Hash] Indicating success or failure of the operation.
|
57
|
+
def create(card_data)
|
58
|
+
client.post(path: sub_path, body: card_data, api_key: api_key)
|
59
|
+
end
|
60
|
+
|
61
|
+
##
|
62
|
+
# Delete a Bambora payment profile given a customer code.
|
63
|
+
#
|
64
|
+
# @example
|
65
|
+
#
|
66
|
+
# client = Bambora::Rest::JSONClient(base_url: '...', api_key: '...', merchant_id: '...')
|
67
|
+
# profiles = Bambora::V1::ProfileResource(client: client)
|
68
|
+
# customer_code = '02355E2e58Bf488EAB4EaFAD7083dB6A'
|
69
|
+
#
|
70
|
+
# profiles.delete(customer_code: customer_code)
|
71
|
+
# # => {
|
72
|
+
# # :code => 1,
|
73
|
+
# # :message => "Operation Successful",
|
74
|
+
# # :customer_code => "02355E2e58Bf488EAB4EaFAD7083dB6A",
|
75
|
+
# # }
|
76
|
+
#
|
77
|
+
# @param customer_code [String] A unique identifier for the associated payment profile.
|
78
|
+
#
|
79
|
+
# @return [Hash] Indicating success or failure of the operation.
|
80
|
+
def delete(customer_code:)
|
81
|
+
client.delete(path: "#{@sub_path}/#{customer_code}", api_key: api_key)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
metadata
ADDED
@@ -0,0 +1,256 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bambora-client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Cassidy K
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-02-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: excon
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "<"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "<"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "<"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: gyoku
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: multiparty
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '2'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '2'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.12.0
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.12.0
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.7'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rake
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '10.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '10.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rspec
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '3.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '3.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec_junit_formatter
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 0.4.1
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 0.4.1
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubocop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.74.0
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.74.0
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: webmock
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '3.7'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '3.7'
|
181
|
+
description: The official beanstream-ruby gem is not thread-safe. This thread-safe
|
182
|
+
client works in environments like Sidekiq and Puma.
|
183
|
+
email:
|
184
|
+
- hello@cassidy.codes
|
185
|
+
- tech@himama.com
|
186
|
+
executables: []
|
187
|
+
extensions: []
|
188
|
+
extra_rdoc_files: []
|
189
|
+
files:
|
190
|
+
- ".github/workflows/linter.yml"
|
191
|
+
- ".github/workflows/ruby.yml"
|
192
|
+
- ".gitignore"
|
193
|
+
- ".rspec"
|
194
|
+
- ".rubocop.yml"
|
195
|
+
- ".ruby-version"
|
196
|
+
- CODE_OF_CONDUCT.md
|
197
|
+
- Gemfile
|
198
|
+
- Gemfile.lock
|
199
|
+
- LICENSE.txt
|
200
|
+
- README.md
|
201
|
+
- Rakefile
|
202
|
+
- bambora-client.gemspec
|
203
|
+
- bin/console
|
204
|
+
- bin/setup
|
205
|
+
- lib/bambora/adapters/json_response.rb
|
206
|
+
- lib/bambora/adapters/multipart_mixed_request.rb
|
207
|
+
- lib/bambora/adapters/query_string_response.rb
|
208
|
+
- lib/bambora/adapters/response.rb
|
209
|
+
- lib/bambora/bank/adapters/payment_profile_response.rb
|
210
|
+
- lib/bambora/bank/batch_report_messages.rb
|
211
|
+
- lib/bambora/bank/batch_report_resource.rb
|
212
|
+
- lib/bambora/bank/builders/payment_profile_params.rb
|
213
|
+
- lib/bambora/bank/payment_profile_resource.rb
|
214
|
+
- lib/bambora/builders/batch_payment_csv.rb
|
215
|
+
- lib/bambora/builders/headers.rb
|
216
|
+
- lib/bambora/builders/www_form_parameters.rb
|
217
|
+
- lib/bambora/builders/xml_request_body.rb
|
218
|
+
- lib/bambora/client.rb
|
219
|
+
- lib/bambora/client/version.rb
|
220
|
+
- lib/bambora/factories/response_adapter_factory.rb
|
221
|
+
- lib/bambora/rest/batch_payment_file_upload_client.rb
|
222
|
+
- lib/bambora/rest/client.rb
|
223
|
+
- lib/bambora/rest/json_client.rb
|
224
|
+
- lib/bambora/rest/www_form_client.rb
|
225
|
+
- lib/bambora/rest/xml_client.rb
|
226
|
+
- lib/bambora/v1/batch_payment_resource.rb
|
227
|
+
- lib/bambora/v1/payment_resource.rb
|
228
|
+
- lib/bambora/v1/profile_resource.rb
|
229
|
+
homepage: https://github.com/HiMamaInc/bambora-client
|
230
|
+
licenses:
|
231
|
+
- MIT
|
232
|
+
metadata:
|
233
|
+
allowed_push_host: https://rubygems.org
|
234
|
+
homepage_uri: https://github.com/HiMamaInc/bambora-client
|
235
|
+
source_code_uri: https://github.com/HiMamaInc/bambora-client
|
236
|
+
changelog_uri: https://github.com/HiMamaInc/bambora-client/releases
|
237
|
+
post_install_message:
|
238
|
+
rdoc_options: []
|
239
|
+
require_paths:
|
240
|
+
- lib
|
241
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
242
|
+
requirements:
|
243
|
+
- - ">="
|
244
|
+
- !ruby/object:Gem::Version
|
245
|
+
version: 2.4.6
|
246
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
requirements: []
|
252
|
+
rubygems_version: 3.1.2
|
253
|
+
signing_key:
|
254
|
+
specification_version: 4
|
255
|
+
summary: A thread-safe client for the Bambora/Beanstream API.
|
256
|
+
test_files: []
|