afterpay 0.1.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0f91404c5d5fb6e1575f4beb24517b27902c6c4a6ecc7082f91d79ceee8c16a
4
- data.tar.gz: 5cd752c26bcffba90e75574309dfaf6adab18a203d3534f963199c5b2e2c19ad
3
+ metadata.gz: 1cd800dd1ba77222d13cda03c99774be278c356ce2897824b4a697402681730a
4
+ data.tar.gz: d0694bb5b3292455cec172ca51c9106c2e6c9e5d1c6f15f587e86b8f8ea81eda
5
5
  SHA512:
6
- metadata.gz: 89eed2a49559ed62512b2e1a7db600cd0217aba8f4c55c07667cabbce12eb5e47843ecc78d64f8b5b3e81c6eed4a032afae187fb089c2685498046ec15c4f063
7
- data.tar.gz: e284f5bb19b2908c621769d9abc1a3c170af32d0147bac7270fa8d432930c30e2dcd6de048df175d5c8cffa2b49856e4f8ce0ba8a7af6e03112be94d165b95b8
6
+ metadata.gz: 461b9bcb102ca910a48fac2064b29f359952fa4a083b8b72259664f60e3c7300df55e1f4f9f5eb777f466df79de1e8c98e384d09dc7ebefdcfad31c464213cda
7
+ data.tar.gz: 9589bdd16eb98b818754e91db5cbaa44800815b198cd5993ffcfa4305e1e6cd011e4d23b99f7df4d252f6775f660af053bd340ad4c58d3fbbc478f639b144d53
data/.rubocop.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  inherit_gem:
2
2
  relaxed-rubocop: .rubocop.yml
3
3
 
4
+ AllCops:
5
+ TargetRubyVersion: 2.5
6
+
4
7
  Lint/MissingSuper:
5
8
  Enabled: false
data/README.md CHANGED
@@ -30,7 +30,7 @@ Merchant ID and Secret Key are required to work with Afterpay API
30
30
  Afterpay.configure do |c|
31
31
  c.merchant_id = 'your_merchant_id'
32
32
  c.secret_key = 'your_secret_key'
33
- c.server = 'us_or_au_server' # Default is 'https://api.us.afterpay.com/'
33
+ c.server = 'us_or_au_server' # Default is 'https://global-api.afterpay.com/'
34
34
  c.user_agent = 'MyAfterpayModule/1.0.0 (E-Commerce Platform Name/1.0.0; PHP/7.0.0; Merchant/600032000) https://merchant.example.com' # Default is nil
35
35
  end
36
36
  ```
data/afterpay.gemspec CHANGED
@@ -23,9 +23,9 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = %w[lib]
25
25
 
26
- spec.add_runtime_dependency 'faraday', '~> 0.15', '>= 0.15.3'
27
- spec.add_runtime_dependency 'faraday_middleware', '~> 0.12', '>= 0.12.2'
28
- spec.add_runtime_dependency 'hashie', '~> 3.6', '>= 3.6.0'
26
+ spec.add_runtime_dependency 'faraday', '~> 1.0'
27
+ spec.add_runtime_dependency 'faraday_middleware', '~> 1.0'
28
+ spec.add_runtime_dependency 'hashie', '~> 4.0'
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 2.2.22'
31
31
  spec.add_development_dependency 'codecov', '~> 0.5.2'
@@ -11,6 +11,8 @@ module Afterpay
11
11
  class Base < Callable
12
12
  def call
13
13
  ::Afterpay::ErrorHandler.inspect(response)
14
+ rescue ::Faraday::TimeoutError => e
15
+ raise RequestTimeoutError.new(e.response_status), e.message
14
16
  end
15
17
 
16
18
  private
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterpay
4
+ module API
5
+ module Order
6
+ class Find < Base
7
+ def initialize(params = {})
8
+ @token = params[:token]
9
+ end
10
+
11
+ private
12
+
13
+ attr_reader :token
14
+
15
+ def payload
16
+ {
17
+ action: :get,
18
+ endpoint: endpoint
19
+ }
20
+ end
21
+
22
+ def endpoint
23
+ "#{URL}/#{token}"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Afterpay
4
+ module API
5
+ module Payment
6
+ class Reversal < Base
7
+ def initialize(params = {})
8
+ @token = params[:token]
9
+ end
10
+
11
+ private
12
+
13
+ attr_reader :token
14
+
15
+ def payload
16
+ {
17
+ action: :post,
18
+ endpoint: endpoint
19
+ }
20
+ end
21
+
22
+ def endpoint
23
+ "#{URL}/token:#{token}/reversal"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -43,6 +43,11 @@ module Afterpay
43
43
  # @return [String]
44
44
  # The estimated date when the order will be shipped, in YYYY-MM or YYYY-MM-DD format
45
45
  attr_accessor :estimated_shipment_date
46
+
47
+ # @attribute preorder
48
+ # @return boolean
49
+ # Should return false when the estimated_shipment_date is already passed otherwise true
50
+ attr_accessor :preorder
46
51
  end
47
52
  end
48
53
  end
@@ -12,6 +12,12 @@ module Afterpay
12
12
  # @return [String]
13
13
  # The user to redirected to this URL if the payment process is cancelled.
14
14
  attr_accessor :redirect_cancel_url
15
+
16
+ # @attribute popup_origin_url
17
+ # @return [String]
18
+ # URL to receive Javascript callbacks from Afterpay (e.g. onComplete, onShippingAddressChange, etc).
19
+ # Include the scheme, hostname and port. Port is optional.
20
+ attr_accessor :popup_origin_url
15
21
  end
16
22
  end
17
23
  end
@@ -62,6 +62,11 @@ module Afterpay
62
62
  # @return [Afterpay::Components::Money]
63
63
  # The shipping amount.
64
64
  attr_accessor :shipping_amount
65
+
66
+ # @attribute mode
67
+ # @return [String]
68
+ # Set to `express` for an express-flow checkout.
69
+ attr_accessor :mode
65
70
  end
66
71
  end
67
72
  end
@@ -17,6 +17,28 @@ module Afterpay
17
17
  # @return [Afterpay::Components::Money]
18
18
  # The refund amount.
19
19
  attr_accessor :amount
20
+
21
+ # @attribute is_checkout_adjusted
22
+ # @return [Boolean]
23
+ # Whether there have been changes to the order since the initial order creation.
24
+ attr_accessor :is_checkout_adjusted
25
+
26
+ # @attribute payment_schedule_checksum
27
+ # @return [String]
28
+ # A unique value representing the payment schedule that must be provided
29
+ # when there has been changes since the initial order creation.
30
+ attr_accessor :payment_schedule_checksum
31
+
32
+ # @attribute items
33
+ # @return [Array<Afterpay::Components::Item>]
34
+ # An array of order items that have been updated to be provided
35
+ # if it has changed since the initial order creation.
36
+ attr_accessor :items
37
+
38
+ # @attribute shipping
39
+ # @return [Afterpay::Components::Contact]
40
+ # The shipping address for this order to be provided if it has changed since the initial order creation.
41
+ attr_accessor :shipping
20
42
  end
21
43
  end
22
44
  end
@@ -11,13 +11,17 @@ module Afterpay
11
11
  def inspect(response)
12
12
  return response if response.ok?
13
13
 
14
- raise ERRORS[response.status], response_message(response)
14
+ raise ERRORS[response.status].new(response_error_code(response)), response_message(response)
15
15
  end
16
16
 
17
17
  def response_message(response)
18
18
  response.body.is_a?(String) ? JSON.parse(response.body)['message'] : response.message
19
19
  end
20
20
 
21
+ def response_error_code(response)
22
+ response.body.is_a?(String) ? JSON.parse(response.body)['errorCode'] : response.body.errorCode
23
+ end
24
+
21
25
  ERRORS = {
22
26
  400 => BadRequestError,
23
27
  401 => UnathorizedError,
@@ -25,13 +29,15 @@ module Afterpay
25
29
  404 => NotFoundError,
26
30
  405 => MethodNotAllowedError,
27
31
  406 => NotAcceptableError,
32
+ 408 => RequestTimeoutError,
28
33
  409 => ConflictError,
29
34
  410 => GoneError,
30
35
  412 => PreconditionFailedError,
31
36
  422 => UnprocessableEntityError,
32
37
  429 => TooManyRequestsError,
33
38
  500 => InternalServerError,
34
- 503 => ServiceUnavailableError
39
+ 503 => ServiceUnavailableError,
40
+ 504 => GatewayTimeoutError
35
41
  }.freeze
36
42
  end
37
43
  end
@@ -1,7 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterpay
4
- class BaseError < StandardError; end
4
+ class BaseError < StandardError
5
+ attr_accessor :error_code
6
+
7
+ def initialize(error_code)
8
+ super
9
+ @error_code = error_code
10
+ end
11
+ end
5
12
 
6
13
  class BadRequestError < BaseError; end
7
14
 
@@ -15,6 +22,8 @@ module Afterpay
15
22
 
16
23
  class NotAcceptableError < BaseError; end
17
24
 
25
+ class RequestTimeoutError < BaseError; end
26
+
18
27
  class ConflictError < BaseError; end
19
28
 
20
29
  class GoneError < BaseError; end
@@ -28,4 +37,6 @@ module Afterpay
28
37
  class InternalServerError < BaseError; end
29
38
 
30
39
  class ServiceUnavailableError < BaseError; end
40
+
41
+ class GatewayTimeoutError < BaseError; end
31
42
  end
@@ -37,9 +37,11 @@ module Afterpay
37
37
  end
38
38
 
39
39
  def faraday_options
40
- return {} unless ::Afterpay.user_agent
40
+ { "headers" => headers }
41
+ end
41
42
 
42
- { "headers" => { "User-Agent" => ::Afterpay.user_agent } }
43
+ def headers
44
+ { 'Content-Type' => 'application/json', 'User-Agent' => ::Afterpay.user_agent }.compact
43
45
  end
44
46
  end
45
47
  end
@@ -27,7 +27,7 @@ module Afterpay
27
27
  end
28
28
 
29
29
  def ok?
30
- (200..201).cover?(status.to_i)
30
+ (200..204).cover?(status.to_i)
31
31
  end
32
32
  end
33
33
  end
@@ -18,8 +18,7 @@ module Afterpay
18
18
  # Afterpay default middleware stack
19
19
  DEFAULT_MIDDLEWARE = proc do |builder|
20
20
  builder.request :json
21
-
22
- builder.basic_auth(*::Afterpay.configuration.values)
21
+ builder.request :basic_auth, *::Afterpay.configuration.values
23
22
 
24
23
  builder.response :mashify
25
24
  builder.response :json, content_type: /\bjson$/
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterpay
4
- VERSION = '0.1.0'
4
+ VERSION = '0.5.0'
5
5
  end
data/lib/afterpay.rb CHANGED
@@ -5,6 +5,7 @@ require 'afterpay/api/configuration'
5
5
  require 'afterpay/api/configuration/retrieve'
6
6
  require 'afterpay/api/order'
7
7
  require 'afterpay/api/order/create'
8
+ require 'afterpay/api/order/find'
8
9
  require 'afterpay/api/payment'
9
10
  require 'afterpay/api/payment/capture'
10
11
  require 'afterpay/api/payment/refund'
@@ -12,6 +13,7 @@ require 'afterpay/api/payment/auth'
12
13
  require 'afterpay/api/payment/void'
13
14
  require 'afterpay/api/payment/deferred_capture'
14
15
  require 'afterpay/api/payment/find'
16
+ require 'afterpay/api/payment/reversal'
15
17
  require 'afterpay/components/base'
16
18
  require 'afterpay/components/consumer'
17
19
  require 'afterpay/components/contact'
@@ -62,5 +64,5 @@ module Afterpay
62
64
  end
63
65
  end
64
66
 
65
- DEFAULT_SERVER = 'https://api.us.afterpay.com/'
67
+ DEFAULT_SERVER = 'https://global-api.afterpay.com/'
66
68
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: afterpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Vygovsky
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2021-08-30 00:00:00.000000000 Z
14
+ date: 2021-11-02 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: faraday
@@ -19,60 +19,42 @@ dependencies:
19
19
  requirements:
20
20
  - - "~>"
21
21
  - !ruby/object:Gem::Version
22
- version: '0.15'
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: 0.15.3
22
+ version: '1.0'
26
23
  type: :runtime
27
24
  prerelease: false
28
25
  version_requirements: !ruby/object:Gem::Requirement
29
26
  requirements:
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
- version: '0.15'
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: 0.15.3
29
+ version: '1.0'
36
30
  - !ruby/object:Gem::Dependency
37
31
  name: faraday_middleware
38
32
  requirement: !ruby/object:Gem::Requirement
39
33
  requirements:
40
34
  - - "~>"
41
35
  - !ruby/object:Gem::Version
42
- version: '0.12'
43
- - - ">="
44
- - !ruby/object:Gem::Version
45
- version: 0.12.2
36
+ version: '1.0'
46
37
  type: :runtime
47
38
  prerelease: false
48
39
  version_requirements: !ruby/object:Gem::Requirement
49
40
  requirements:
50
41
  - - "~>"
51
42
  - !ruby/object:Gem::Version
52
- version: '0.12'
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- version: 0.12.2
43
+ version: '1.0'
56
44
  - !ruby/object:Gem::Dependency
57
45
  name: hashie
58
46
  requirement: !ruby/object:Gem::Requirement
59
47
  requirements:
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 3.6.0
63
48
  - - "~>"
64
49
  - !ruby/object:Gem::Version
65
- version: '3.6'
50
+ version: '4.0'
66
51
  type: :runtime
67
52
  prerelease: false
68
53
  version_requirements: !ruby/object:Gem::Requirement
69
54
  requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 3.6.0
73
55
  - - "~>"
74
56
  - !ruby/object:Gem::Version
75
- version: '3.6'
57
+ version: '4.0'
76
58
  - !ruby/object:Gem::Dependency
77
59
  name: bundler
78
60
  requirement: !ruby/object:Gem::Requirement
@@ -257,12 +239,14 @@ files:
257
239
  - lib/afterpay/api/configuration/retrieve.rb
258
240
  - lib/afterpay/api/order.rb
259
241
  - lib/afterpay/api/order/create.rb
242
+ - lib/afterpay/api/order/find.rb
260
243
  - lib/afterpay/api/payment.rb
261
244
  - lib/afterpay/api/payment/auth.rb
262
245
  - lib/afterpay/api/payment/capture.rb
263
246
  - lib/afterpay/api/payment/deferred_capture.rb
264
247
  - lib/afterpay/api/payment/find.rb
265
248
  - lib/afterpay/api/payment/refund.rb
249
+ - lib/afterpay/api/payment/reversal.rb
266
250
  - lib/afterpay/api/payment/void.rb
267
251
  - lib/afterpay/callable.rb
268
252
  - lib/afterpay/components/base.rb