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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/linter.yml +13 -0
  3. data/.github/workflows/ruby.yml +34 -0
  4. data/.gitignore +11 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +108 -0
  7. data/.ruby-version +1 -0
  8. data/CODE_OF_CONDUCT.md +74 -0
  9. data/Gemfile +8 -0
  10. data/Gemfile.lock +93 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +198 -0
  13. data/Rakefile +8 -0
  14. data/bambora-client.gemspec +55 -0
  15. data/bin/console +12 -0
  16. data/bin/setup +8 -0
  17. data/lib/bambora/adapters/json_response.rb +7 -0
  18. data/lib/bambora/adapters/multipart_mixed_request.rb +23 -0
  19. data/lib/bambora/adapters/query_string_response.rb +20 -0
  20. data/lib/bambora/adapters/response.rb +44 -0
  21. data/lib/bambora/bank/adapters/payment_profile_response.rb +36 -0
  22. data/lib/bambora/bank/batch_report_messages.rb +81 -0
  23. data/lib/bambora/bank/batch_report_resource.rb +79 -0
  24. data/lib/bambora/bank/builders/payment_profile_params.rb +39 -0
  25. data/lib/bambora/bank/payment_profile_resource.rb +81 -0
  26. data/lib/bambora/builders/batch_payment_csv.rb +41 -0
  27. data/lib/bambora/builders/headers.rb +43 -0
  28. data/lib/bambora/builders/www_form_parameters.rb +33 -0
  29. data/lib/bambora/builders/xml_request_body.rb +19 -0
  30. data/lib/bambora/client.rb +215 -0
  31. data/lib/bambora/client/version.rb +7 -0
  32. data/lib/bambora/factories/response_adapter_factory.rb +21 -0
  33. data/lib/bambora/rest/batch_payment_file_upload_client.rb +58 -0
  34. data/lib/bambora/rest/client.rb +63 -0
  35. data/lib/bambora/rest/json_client.rb +109 -0
  36. data/lib/bambora/rest/www_form_client.rb +38 -0
  37. data/lib/bambora/rest/xml_client.rb +35 -0
  38. data/lib/bambora/v1/batch_payment_resource.rb +52 -0
  39. data/lib/bambora/v1/payment_resource.rb +82 -0
  40. data/lib/bambora/v1/profile_resource.rb +85 -0
  41. 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: []