afterpay 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +24 -0
  3. data/.gitignore +13 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +5 -0
  6. data/.travis.yml +5 -0
  7. data/Gemfile +8 -0
  8. data/LICENSE +224 -0
  9. data/README.md +103 -0
  10. data/Rakefile +8 -0
  11. data/afterpay.gemspec +41 -0
  12. data/bin/console +15 -0
  13. data/bin/setup +8 -0
  14. data/lib/afterpay/api/base.rb +37 -0
  15. data/lib/afterpay/api/configuration/retrieve.rb +20 -0
  16. data/lib/afterpay/api/configuration.rb +9 -0
  17. data/lib/afterpay/api/order/create.rb +27 -0
  18. data/lib/afterpay/api/order.rb +9 -0
  19. data/lib/afterpay/api/payment/auth.rb +29 -0
  20. data/lib/afterpay/api/payment/capture.rb +29 -0
  21. data/lib/afterpay/api/payment/deferred_capture.rb +30 -0
  22. data/lib/afterpay/api/payment/find.rb +28 -0
  23. data/lib/afterpay/api/payment/refund.rb +30 -0
  24. data/lib/afterpay/api/payment/void.rb +30 -0
  25. data/lib/afterpay/api/payment.rb +9 -0
  26. data/lib/afterpay/callable.rb +11 -0
  27. data/lib/afterpay/components/base.rb +14 -0
  28. data/lib/afterpay/components/consumer.rb +27 -0
  29. data/lib/afterpay/components/contact.rb +52 -0
  30. data/lib/afterpay/components/courier.rb +27 -0
  31. data/lib/afterpay/components/discount.rb +17 -0
  32. data/lib/afterpay/components/item.rb +48 -0
  33. data/lib/afterpay/components/merchant.rb +17 -0
  34. data/lib/afterpay/components/money.rb +17 -0
  35. data/lib/afterpay/components/order.rb +67 -0
  36. data/lib/afterpay/components/payment.rb +22 -0
  37. data/lib/afterpay/components/payment_event.rb +17 -0
  38. data/lib/afterpay/components/refund.rb +29 -0
  39. data/lib/afterpay/error_handler.rb +38 -0
  40. data/lib/afterpay/errors.rb +31 -0
  41. data/lib/afterpay/http_service/request.rb +46 -0
  42. data/lib/afterpay/http_service/response.rb +34 -0
  43. data/lib/afterpay/http_service.rb +30 -0
  44. data/lib/afterpay/initializable.rb +27 -0
  45. data/lib/afterpay/representable.rb +47 -0
  46. data/lib/afterpay/version.rb +5 -0
  47. data/lib/afterpay.rb +66 -0
  48. metadata +311 -0
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterpay
4
+ module Initializable
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ def initialize(params = {})
10
+ self.class.accessors.each do |name|
11
+ send :"#{name}=", params[name]
12
+ end
13
+ end
14
+
15
+ module ClassMethods
16
+ def accessors
17
+ @accessors ||= []
18
+ end
19
+
20
+ def attr_accessor(*args)
21
+ accessors.push(*args)
22
+
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'json'
4
+
5
+ module Afterpay
6
+ module Representable
7
+ def self.included(base)
8
+ base.extend Forwardable
9
+ base.def_delegators :as_json, :to_json
10
+ end
11
+
12
+ def as_json
13
+ instance_values.reduce({}) do |mem, (key, value)|
14
+ mem.merge!(camelize(key) => represent(value))
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def camelize(value)
21
+ value.gsub(/_(\w)/) { Regexp.last_match(1).upcase }
22
+ end
23
+
24
+ def represent(value)
25
+ return value.as_json if non_primitive?(value)
26
+
27
+ return value.map { |item| represent(item) } if value.is_a?(Array)
28
+
29
+ value
30
+ end
31
+
32
+ def non_primitive?(value)
33
+ value.is_a? Afterpay::Components::Base
34
+ end
35
+
36
+ def instance_values
37
+ Hash[
38
+ instance_variables.map do |name|
39
+ [
40
+ name.to_s[1..-1],
41
+ instance_variable_get(name)
42
+ ]
43
+ end
44
+ ]
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterpay
4
+ VERSION = '0.1.0'
5
+ end
data/lib/afterpay.rb ADDED
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'afterpay/api/base'
4
+ require 'afterpay/api/configuration'
5
+ require 'afterpay/api/configuration/retrieve'
6
+ require 'afterpay/api/order'
7
+ require 'afterpay/api/order/create'
8
+ require 'afterpay/api/payment'
9
+ require 'afterpay/api/payment/capture'
10
+ require 'afterpay/api/payment/refund'
11
+ require 'afterpay/api/payment/auth'
12
+ require 'afterpay/api/payment/void'
13
+ require 'afterpay/api/payment/deferred_capture'
14
+ require 'afterpay/api/payment/find'
15
+ require 'afterpay/components/base'
16
+ require 'afterpay/components/consumer'
17
+ require 'afterpay/components/contact'
18
+ require 'afterpay/components/discount'
19
+ require 'afterpay/components/item'
20
+ require 'afterpay/components/merchant'
21
+ require 'afterpay/components/money'
22
+ require 'afterpay/components/order'
23
+ require 'afterpay/components/payment_event'
24
+ require 'afterpay/components/payment'
25
+ require 'afterpay/components/refund'
26
+ require 'afterpay/components/courier'
27
+
28
+ module Afterpay
29
+ class << self
30
+ # @!attribute merchant_id
31
+ # @return [String] Afterpay merchant ID that is used for authorization
32
+ attr_accessor :merchant_id
33
+
34
+ # @!attribute secret_key
35
+ # @return [String] Afterpay secret key that is used for authorization
36
+ attr_accessor :secret_key
37
+
38
+ # @!attribute server
39
+ attr_writer :server
40
+
41
+ # @!attribute user_agent
42
+ # @return [String] A User-Agent header must be supplied with all Merchant API requests prior to placing any live transactions.
43
+ # Create your User-Agent string here... https://developers.afterpay.com/afterpay-online/docs/user-agent-header-1
44
+ attr_accessor :user_agent
45
+
46
+ # @yield [self] to accept configuration settings
47
+ def configure
48
+ yield self
49
+ end
50
+
51
+ # @return [Hash] current Afterpay configuration
52
+ def configuration
53
+ {
54
+ merchant_id: @merchant_id,
55
+ secret_key: @secret_key
56
+ }
57
+ end
58
+
59
+ # @return [String] Afterpay server to which requests sended
60
+ def server
61
+ @server || DEFAULT_SERVER
62
+ end
63
+ end
64
+
65
+ DEFAULT_SERVER = 'https://api.us.afterpay.com/'
66
+ end
metadata ADDED
@@ -0,0 +1,311 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: afterpay
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Vygovsky
8
+ - Yuriy Kushnir
9
+ - Christian Rimondi
10
+ - Jordy Garcia
11
+ autorequire:
12
+ bindir: exe
13
+ cert_chain: []
14
+ date: 2021-08-30 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: faraday
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - "~>"
21
+ - !ruby/object:Gem::Version
22
+ version: '0.15'
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 0.15.3
26
+ type: :runtime
27
+ prerelease: false
28
+ version_requirements: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.15'
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.15.3
36
+ - !ruby/object:Gem::Dependency
37
+ name: faraday_middleware
38
+ requirement: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.12'
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.12.2
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.12'
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 0.12.2
56
+ - !ruby/object:Gem::Dependency
57
+ name: hashie
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 3.6.0
63
+ - - "~>"
64
+ - !ruby/object:Gem::Version
65
+ version: '3.6'
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 3.6.0
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.6'
76
+ - !ruby/object:Gem::Dependency
77
+ name: bundler
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.2.22
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 2.2.22
90
+ - !ruby/object:Gem::Dependency
91
+ name: codecov
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.5.2
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.5.2
104
+ - !ruby/object:Gem::Dependency
105
+ name: factory_bot
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 4.11.1
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 4.11.1
118
+ - !ruby/object:Gem::Dependency
119
+ name: faker
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.9.1
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 1.9.1
132
+ - !ruby/object:Gem::Dependency
133
+ name: rake
134
+ requirement: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '10.0'
139
+ type: :development
140
+ prerelease: false
141
+ version_requirements: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '10.0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: relaxed-rubocop
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.5'
153
+ type: :development
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '2.5'
160
+ - !ruby/object:Gem::Dependency
161
+ name: rspec
162
+ requirement: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '3.0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '3.0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: rspec_junit_formatter
176
+ requirement: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.4.1
181
+ type: :development
182
+ prerelease: false
183
+ version_requirements: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.4.1
188
+ - !ruby/object:Gem::Dependency
189
+ name: rubocop
190
+ requirement: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '1.18'
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: 1.18.4
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: '1.18'
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: 1.18.4
208
+ - !ruby/object:Gem::Dependency
209
+ name: simplecov
210
+ requirement: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: 0.21.2
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: 0.21.2
222
+ - !ruby/object:Gem::Dependency
223
+ name: webmock
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '2.1'
229
+ type: :development
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '2.1'
236
+ description: Provides Ruby SDK for AfterPay payment service provider.
237
+ email: contact@solidus.io
238
+ executables: []
239
+ extensions: []
240
+ extra_rdoc_files: []
241
+ files:
242
+ - ".circleci/config.yml"
243
+ - ".gitignore"
244
+ - ".rspec"
245
+ - ".rubocop.yml"
246
+ - ".travis.yml"
247
+ - Gemfile
248
+ - LICENSE
249
+ - README.md
250
+ - Rakefile
251
+ - afterpay.gemspec
252
+ - bin/console
253
+ - bin/setup
254
+ - lib/afterpay.rb
255
+ - lib/afterpay/api/base.rb
256
+ - lib/afterpay/api/configuration.rb
257
+ - lib/afterpay/api/configuration/retrieve.rb
258
+ - lib/afterpay/api/order.rb
259
+ - lib/afterpay/api/order/create.rb
260
+ - lib/afterpay/api/payment.rb
261
+ - lib/afterpay/api/payment/auth.rb
262
+ - lib/afterpay/api/payment/capture.rb
263
+ - lib/afterpay/api/payment/deferred_capture.rb
264
+ - lib/afterpay/api/payment/find.rb
265
+ - lib/afterpay/api/payment/refund.rb
266
+ - lib/afterpay/api/payment/void.rb
267
+ - lib/afterpay/callable.rb
268
+ - lib/afterpay/components/base.rb
269
+ - lib/afterpay/components/consumer.rb
270
+ - lib/afterpay/components/contact.rb
271
+ - lib/afterpay/components/courier.rb
272
+ - lib/afterpay/components/discount.rb
273
+ - lib/afterpay/components/item.rb
274
+ - lib/afterpay/components/merchant.rb
275
+ - lib/afterpay/components/money.rb
276
+ - lib/afterpay/components/order.rb
277
+ - lib/afterpay/components/payment.rb
278
+ - lib/afterpay/components/payment_event.rb
279
+ - lib/afterpay/components/refund.rb
280
+ - lib/afterpay/error_handler.rb
281
+ - lib/afterpay/errors.rb
282
+ - lib/afterpay/http_service.rb
283
+ - lib/afterpay/http_service/request.rb
284
+ - lib/afterpay/http_service/response.rb
285
+ - lib/afterpay/initializable.rb
286
+ - lib/afterpay/representable.rb
287
+ - lib/afterpay/version.rb
288
+ homepage: http://solidus.io
289
+ licenses:
290
+ - Apache-2.0
291
+ metadata: {}
292
+ post_install_message:
293
+ rdoc_options: []
294
+ require_paths:
295
+ - lib
296
+ required_ruby_version: !ruby/object:Gem::Requirement
297
+ requirements:
298
+ - - ">="
299
+ - !ruby/object:Gem::Version
300
+ version: '2.5'
301
+ required_rubygems_version: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: '0'
306
+ requirements: []
307
+ rubygems_version: 3.0.3
308
+ signing_key:
309
+ specification_version: 4
310
+ summary: Provides Ruby SDK for AfterPay payment service provider.
311
+ test_files: []