afterpay-sdk 2.0.0 → 2.0.4

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: d11a93da08d6aef6124413f47bbdadc7a16a8b7bb0eefdc432b7550b722d5275
4
- data.tar.gz: f85183189810df17af941f776e2a900802cbf3f1df66d5e49d9b8b018dc2ed63
3
+ metadata.gz: eb292a6cb6b785f6740765d4ccf6b4cc7c2f85dce07cb600bba1e2bb022a1d6d
4
+ data.tar.gz: 62bf9d375026ae439655ba8e4b3acc2efbb4b875e24b0ee0e720c95e030a5eb3
5
5
  SHA512:
6
- metadata.gz: 33b5ada12c5ea764399ed5558329d0641daba8922e1636483fee3eb86ad315e8de013b3acfdd1427145a7e7f9f39b3333fd17e3afc4aa6dc58b4acb1587cfa68
7
- data.tar.gz: d5277fc45fa4a21ecf3d686d5993cd3a035ebfb6bb1603ff99d58e1f10b08235e4626b5e8394e545700e015e7ace72604fac632ebd4400a10f730b30cd6c37dc
6
+ metadata.gz: 599c360d5665eef5641188d2844a8b49aabeeb7e32a8a72fdab941f94213c1b86438c516ebb024baf72fe4b4481b873f4fbf94999672d446a6bb923b90f0b748
7
+ data.tar.gz: e673d5b3e0069ec7a4e4a18c53d9f13dbc88b7f01ba96777f06c0838fa5e230c6da3017c1482fab862bbd9f17772a81e5a4fcdf4be06de5c2caad12a7d4214ff
@@ -0,0 +1,54 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ working_directory: ~/YourMechanic/afterpay-sdk
5
+ parallelism: 1
6
+ shell: /bin/bash --login
7
+
8
+ environment:
9
+ CIRCLE_ARTIFACTS: /tmp/circleci-artifacts
10
+ CIRCLE_TEST_REPORTS: /tmp/circleci-test-results
11
+ docker:
12
+ - image: circleci/ruby:2.6.2
13
+ steps:
14
+ - checkout
15
+ - run: mkdir -p $CIRCLE_ARTIFACTS $CIRCLE_TEST_REPORTS
16
+ - restore_cache:
17
+ keys:
18
+ # This branch if available
19
+ - v2-dep-{{ .Branch }}-
20
+ # Default branch if not
21
+ - v2-dep-master-
22
+ # Any branch if there are none on the default branch - this should be unnecessary if you have your default branch configured correctly
23
+ - v2-dep-
24
+ - run:
25
+ name: Install bundler for afterpay-sdk
26
+ working_directory: ~/YourMechanic/afterpay-sdk
27
+ command: gem install bundler:2.2.11
28
+ - run:
29
+ name: Install Gems for afterpay-sdk
30
+ working_directory: ~/YourMechanic/afterpay-sdk
31
+ command: bundle install
32
+ # Save dependency cache
33
+ - save_cache:
34
+ key: v2-dep-{{ .Branch }}-{{ epoch }}
35
+ paths:
36
+ - vendor/bundle
37
+ - ~/virtualenvs
38
+ - ~/.m2
39
+ - ~/.ivy2
40
+ - ~/.bundle
41
+ - run:
42
+ working_directory: ~/YourMechanic/afterpay-sdk
43
+ command: bundle exec rubocop
44
+ - run:
45
+ working_directory: ~/YourMechanic/afterpay-sdk
46
+ command: bundle exec rspec --colour --drb --profile -fd --format progress $(circleci tests glob "spec/*_spec.rb" | circleci tests split)
47
+ - store_test_results:
48
+ path: /tmp/circleci-test-results
49
+ - store_artifacts:
50
+ path: /tmp/circleci-artifacts
51
+ - store_artifacts:
52
+ path: /tmp/circleci-test-results
53
+ - store_artifacts:
54
+ path: afterpay-sdk/coverage
data/CHANGELOG.md ADDED
@@ -0,0 +1,31 @@
1
+ ## [Unreleased]
2
+
3
+ ## [2.0.0] - 2021-06-02
4
+
5
+ - Initial release
6
+
7
+ ### 2.0.1 - 2021-07-05
8
+
9
+ * bug-fixes
10
+ * Correct the from_response method by not directly calling new with response but formatting the amount and then calling new with the attributes. The afterpay-sdk gem follows the Data Models attibutes data types as in v2 doc. As per the doc amount attibute of Refund or PaymentEvent object is a Money object so when the developer calls new he need to supply the money object however we use from_response method where we convert amount in response to money object using utils. (by @sachinsaxena1996)
11
+ * Fix refund objects attributes. add sucess? to refund model. Fix id be string in PaymentEvent. (by @sachinsaxena1996)
12
+ * Do not directly call new with response.body use from_response instead. Change done as attribute were blank in Refund.execute. (by @sachinsaxena1996)
13
+ * Fixed issue with error object of Refund object (by @sachinsaxena1996)
14
+ * enhancement
15
+ * respond with objects array in payment response objects for events and refunds attributes. (by @sachinsaxena1996)
16
+ * Added rspec for data models (by @sachinsaxena1996)
17
+
18
+ ### 2.0.2 - 2021-08-17
19
+
20
+ * enhancement
21
+ * Allow user agent to be configurable (by @siddyg)
22
+
23
+ ### 2.0.3 - 2021-08-20
24
+
25
+ * enhancement
26
+ * Expose declined? method in payment object, this is primarily applicable only for authorization (by @siddyg)
27
+
28
+ ### 2.0.4 - 2021-08-24
29
+
30
+ * enhancement
31
+ * added circleci support (by @sachinsaxena1996)
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- afterpay-sdk (2.0.0)
4
+ afterpay-sdk (2.0.4)
5
5
  faraday (>= 0.8, < 1.0)
6
6
  faraday_middleware (~> 0.13.1)
7
7
  money (>= 6.7.1, < 7.0.0)
@@ -11,8 +11,9 @@ GEM
11
11
  specs:
12
12
  addressable (2.6.0)
13
13
  public_suffix (>= 2.0.2, < 4.0)
14
+ ast (2.4.2)
14
15
  coderay (1.1.2)
15
- concurrent-ruby (1.1.8)
16
+ concurrent-ruby (1.1.9)
16
17
  coveralls (0.8.22)
17
18
  json (>= 1.8, < 3)
18
19
  simplecov (~> 0.16.1)
@@ -29,18 +30,24 @@ GEM
29
30
  faraday_middleware (0.13.1)
30
31
  faraday (>= 0.7.4, < 1.0)
31
32
  hashdiff (0.3.8)
32
- i18n (1.8.9)
33
+ i18n (1.8.10)
33
34
  concurrent-ruby (~> 1.0)
34
35
  json (2.3.1)
35
36
  method_source (0.9.2)
36
37
  money (6.16.0)
37
38
  i18n (>= 0.6.4, <= 2)
38
39
  multipart-post (2.1.1)
40
+ parallel (1.20.1)
41
+ parser (3.0.2.0)
42
+ ast (~> 2.4.1)
39
43
  pry (0.12.2)
40
44
  coderay (~> 1.1.0)
41
45
  method_source (~> 0.9.0)
42
46
  public_suffix (3.0.3)
47
+ rainbow (3.0.0)
43
48
  rake (12.3.3)
49
+ regexp_parser (2.1.1)
50
+ rexml (3.2.5)
44
51
  rspec (3.8.0)
45
52
  rspec-core (~> 3.8.0)
46
53
  rspec-expectations (~> 3.8.0)
@@ -54,6 +61,18 @@ GEM
54
61
  diff-lcs (>= 1.2.0, < 2.0)
55
62
  rspec-support (~> 3.8.0)
56
63
  rspec-support (3.8.0)
64
+ rubocop (1.19.1)
65
+ parallel (~> 1.10)
66
+ parser (>= 3.0.0.0)
67
+ rainbow (>= 2.2.2, < 4.0)
68
+ regexp_parser (>= 1.8, < 3.0)
69
+ rexml
70
+ rubocop-ast (>= 1.9.1, < 2.0)
71
+ ruby-progressbar (~> 1.7)
72
+ unicode-display_width (>= 1.4.0, < 3.0)
73
+ rubocop-ast (1.11.0)
74
+ parser (>= 3.0.1.1)
75
+ ruby-progressbar (1.11.0)
57
76
  safe_yaml (1.0.5)
58
77
  simplecov (0.16.1)
59
78
  docile (~> 1.1)
@@ -64,6 +83,7 @@ GEM
64
83
  tins (~> 1.0)
65
84
  thor (0.19.4)
66
85
  tins (1.20.2)
86
+ unicode-display_width (2.0.0)
67
87
  vcr (4.0.0)
68
88
  webmock (3.5.1)
69
89
  addressable (>= 2.3.6)
@@ -81,6 +101,7 @@ DEPENDENCIES
81
101
  pry
82
102
  rake (~> 12.3, >= 12.3.3)
83
103
  rspec (~> 3.0)
104
+ rubocop (~> 1.7)
84
105
  simplecov
85
106
  vcr (~> 4.0)
86
107
  webmock (~> 3.5, >= 3.5.1)
data/README.md CHANGED
@@ -36,19 +36,27 @@ Afterpay.configure do |config|
36
36
  # config.env = "sandbox" # "live"
37
37
 
38
38
  # Sets the user agent header for Afterpay requests
39
- # Refer https://developers.afterpay.com/afterpay-online/reference#configuration
40
- # config.user_agent_header = {pluginOrModuleOrClientLibrary}/{pluginVersion} ({platform}/{platformVersion}; Merchant/{merchantId}) { merchantUrl }
39
+ # Refer https://developers.afterpay.com/afterpay-online/docs/user-agent-header-1
40
+ # Refer https://developers.afterpay.com/afterpay-online/reference#user-agent-header
41
41
  # Example
42
- # config.user_agent_header = "Afterpay Module / 1.0.0 (rails/ 5.1.2; Merchant/#{ merchant_id }) #{ merchant_website_url }"
43
-
42
+ # config.afterpay_plugin = 'MyAfterpayModule/1.0.0'
43
+ # config.platform = 'Rails/3.2.22.3'
44
+ # config.system_information = 'RUBY/2.3.8'
45
+ # config.merchant_website_url = <merchant_website_url>
46
+
47
+ config.afterpay_plugin = <afterpay_plugin>
48
+ config.platform = <platform>
49
+ config.system_information = <system_information>
50
+ config.merchant_website_url = <merchant_website_url>
51
+
44
52
  end
45
53
  ```
46
54
 
47
55
  ### Creating an Order
48
56
 
49
- [api docs](https://YourMechanic/afterpay-sdk#create-checkout)
57
+ [api docs](https://developers.afterpay.com/afterpay-online/reference#checkouts)
50
58
 
51
- Order accepts a [Consumer](YourMechanic/afterpay-sdk#consumer-object) and an array of [Item](YourMechanic/afterpay-sdk#item-object) object which are required.
59
+ Order accepts a [Consumer](https://github.com/YourMechanic/afterpay-sdk#consumer-object) and an array of [Item](https://github.com/YourMechanic/afterpay-sdk#item-object) object which are required.
52
60
 
53
61
  ```ruby
54
62
  order = Afterpay::Order.create(
@@ -57,7 +65,7 @@ order = Afterpay::Order.create(
57
65
  items: [<Afterpay::Item>],
58
66
  success_url: <String>,
59
67
  cancel_url: <String>,
60
- reference: <String>,
68
+ merchant_reference: <String>,
61
69
  tax: <Money>,
62
70
  shipping: <Money | optional>,
63
71
  discounts: [<Afterpay::Discount | optional>],
@@ -94,7 +102,7 @@ order.error
94
102
  ```ruby
95
103
  payment = Afterpay::Payment.execute(
96
104
  token: token <String>,
97
- reference: "checkout-1" <String>
105
+ merchant_reference: "checkout-1" <String>
98
106
  )
99
107
  => <Afterpay::Payment ...>
100
108
 
@@ -115,7 +123,7 @@ For Auth
115
123
  Afterpay::Payment.execute_auth(request_id: 'fjfwwwjfj090292920', token: '002.v4krg5qpii1tbp0kvr261rf3p1k5jfe2fin', merchant_reference: '100101382')
116
124
 
117
125
  For executing deferred payment
118
- Afterpay::Payment.execute_deferred_payment(request_id: 'ppjjjkjk', reference: '100101382', amount: mony, payment_event_merchant_reference: '', order_id: 100101524323)
126
+ Afterpay::Payment.execute_deferred_payment(request_id: 'ppjjjkjk', merchant_reference: '100101382', amount: mony, payment_event_merchant_reference: '', order_id: 100101524323)
119
127
  ```
120
128
 
121
129
  ### Void payment
data/afterpay-sdk.gemspec CHANGED
@@ -38,6 +38,7 @@ Gem::Specification.new do |spec|
38
38
  spec.add_development_dependency "pry"
39
39
  spec.add_development_dependency "rake", "~> 12.3", ">= 12.3.3"
40
40
  spec.add_development_dependency "rspec", "~> 3.0"
41
+ spec.add_development_dependency 'rubocop', '~> 1.7'
41
42
 
42
43
  spec.add_dependency "faraday", ">= 0.8", "< 1.0"
43
44
  spec.add_dependency "faraday_middleware", "~> 0.13.1"
@@ -43,7 +43,7 @@ module Afterpay
43
43
  Faraday.new(url: self.class.server_url) do |conn|
44
44
  conn.use ErrorMiddleware if Afterpay.config.raise_errors
45
45
  conn.authorization "Basic", self.class.auth_token
46
- # conn.headers["User-Agent"] = Afterpay.config.user_agent_header if Afterpay.config.user_agent_header.present?
46
+ conn.headers["User-Agent"] = "#{Afterpay.config.afterpay_plugin} (#{Afterpay.config.platform}; #{Afterpay.config.system_information}; Merchant/#{Afterpay.config.app_id}) #{Afterpay.config.merchant_website_url}"
47
47
 
48
48
  conn.request :json
49
49
  conn.response :json, content_type: "application/json", parser_options: { symbolize_names: true }
@@ -5,7 +5,8 @@ module Afterpay
5
5
  attr_accessor :app_id, :secret, :env, :raise_errors,
6
6
  :type, :maximum_amount, :minimum_amount,
7
7
  :description, :currency, :skip_remote_config,
8
- :user_agent_header
8
+ :afterpay_plugin, :platform,
9
+ :system_information, :merchant_website_url
9
10
 
10
11
  def initialize
11
12
  @env = "sandbox"
@@ -4,11 +4,11 @@ module Afterpay
4
4
  class Consumer
5
5
  attr_accessor :email, :phone, :first_name, :last_name
6
6
 
7
- def initialize(email:, phone:, first_name:, last_name:)
8
- @email = email
9
- @phone = phone
10
- @first_name = first_name
11
- @last_name = last_name
7
+ def initialize(attributes = {})
8
+ @email = attributes[:email]
9
+ @phone = attributes[:phone] || ""
10
+ @first_name = attributes[:first_name] || ""
11
+ @last_name = attributes[:last_name] || ""
12
12
  end
13
13
 
14
14
  def to_hash
@@ -20,7 +20,7 @@ module Afterpay
20
20
  return nil if response.nil?
21
21
 
22
22
  new(
23
- name: response[:display_name],
23
+ name: response[:displayName],
24
24
  amount: Utils::Money.from_response(response[:amount])
25
25
  )
26
26
  end
data/lib/afterpay/item.rb CHANGED
@@ -6,18 +6,16 @@ module Afterpay
6
6
  class Item
7
7
  attr_accessor :name, :sku, :quantity, :page_url, :image_url, :price, :categories, :estimated_shipment_date
8
8
 
9
- # rubocop:disable Metrics/ParameterLists
10
- def initialize(name:, price:, page_url:, image_url:, categories:, estimated_shipment_date:, sku: nil, quantity: 1)
11
- @name = name
12
- @sku = sku
13
- @quantity = quantity
14
- @price = price
15
- @page_url = page_url
16
- @image_url = image_url
17
- @categories = categories
18
- @estimated_shipment_date = estimated_shipment_date
9
+ def initialize(attributes = {})
10
+ @name = attributes[:name]
11
+ @sku = attributes[:sku] || ""
12
+ @quantity = attributes[:quantity]
13
+ @price = attributes[:price]
14
+ @page_url = attributes[:page_url] || ""
15
+ @image_url = attributes[:image_url] || ""
16
+ @categories = attributes[:categories] || []
17
+ @estimated_shipment_date = attributes[:estimated_shipment_date] || ""
19
18
  end
20
- # rubocop:enable Metrics/ParameterLists
21
19
 
22
20
  def to_hash
23
21
  {
@@ -4,7 +4,7 @@ module Afterpay
4
4
  # The Order object for creating an order to `/v2/checkouts`
5
5
  class Order
6
6
  attr_accessor :total, :consumer, :items, :shipping, :tax, :discounts,
7
- :billing, :shipping_address, :billing_address, :reference,
7
+ :billing, :shipping_address, :billing_address, :merchant_reference,
8
8
  :payment_type, :success_url, :cancel_url, :redirect_checkout_url
9
9
 
10
10
  attr_reader :expiry, :token, :error
@@ -77,11 +77,11 @@ module Afterpay
77
77
  redirectConfirmUrl: success_url,
78
78
  redirectCancelUrl: cancel_url
79
79
  },
80
- merchantReference: reference,
80
+ merchantReference: merchant_reference,
81
81
  taxAmount: tax,
82
82
  paymentType: payment_type
83
83
  }
84
- data[items] = items.map(&:to_hash) if items
84
+ data[:items] = items.map(&:to_hash) if items
85
85
  data[:taxAmount] = Utils::Money.api_hash(tax) if tax
86
86
  data[:shippingAmount] = Utils::Money.api_hash(shipping) if shipping
87
87
  data[:discounts] = discounts.map(&:to_hash) if discounts
@@ -8,42 +8,52 @@ module Afterpay
8
8
  attr_accessor :id, :token, :status, :created, :original_amount, :open_to_capture_amount,
9
9
  :payment_state, :merchant_reference, :refunds, :order, :events, :error
10
10
 
11
+ # rubocop:disable Metrics/CyclomaticComplexity
12
+ # rubocop:disable Metrics/PerceivedComplexity
13
+
11
14
  # Initialize Payment from response
12
- def initialize(attributes)
13
- @id = attributes[:id].to_i
14
- @token = attributes[:token]
15
- @status = attributes[:status]
16
- @created = attributes[:created]
17
- @original_amount = Utils::Money.from_response(attributes[:originalAmount])
18
- @open_to_capture_amount = Utils::Money.from_response(attributes[:openToCaptureAmount])
19
- @payment_state = attributes[:paymentState]
20
- @merchant_reference = attributes[:merchantReference]
21
- @refunds = attributes[:refunds]
22
- @order = Order.from_response(attributes[:orderDetails])
23
- @events = attributes[:events]
15
+ def initialize(attributes = {})
16
+ @id = attributes[:id] || ""
17
+ @token = attributes[:token] || ""
18
+ @status = attributes[:status] || ""
19
+ @created = attributes[:created] || ""
20
+ @original_amount = Utils::Money.from_response(attributes[:originalAmount]) || Money.from_amount(0)
21
+ @open_to_capture_amount = Utils::Money.from_response(attributes[:openToCaptureAmount]) || Money.from_amount(0)
22
+ @payment_state = attributes[:paymentState] || ""
23
+ @merchant_reference = attributes[:merchantReference] || ""
24
+ @refunds = attributes[:refunds].map { |refund| Refund.from_response(refund) } || [] unless attributes[:refunds].nil?
25
+ @order = Order.from_response(attributes[:orderDetails]) || Afterpay::Order.new
26
+ @events = attributes[:events].map { |event| PaymentEvent.from_response(event) } || [] unless attributes[:events].nil?
24
27
  @error = Error.new(attributes) if attributes[:errorId]
25
28
  end
26
29
 
30
+ # rubocop:enable Metrics/CyclomaticComplexity
31
+ # rubocop:enable Metrics/PerceivedComplexity
32
+
27
33
  def success?
28
34
  @status == "APPROVED"
29
35
  end
30
36
 
37
+ def declined?
38
+ @status == "DECLINED"
39
+ end
40
+
31
41
  # Executes the Payment
32
42
  #
33
43
  # @param token [String] the Order token
34
- # @param reference [String] the reference for payment
44
+ # @param merchant_reference [String] the merchant_reference for payment
35
45
  # @return [Payment] the Payment object
36
- def self.execute(token:, reference:)
46
+ def self.execute(token:, merchant_reference: nil)
37
47
  request = Afterpay.client.post("/v2/payments/capture") do |req|
38
48
  req.body = {
39
49
  token: token,
40
- merchantRefernce: reference
50
+ merchantReference: merchant_reference
41
51
  }
42
52
  end
43
53
  new(request.body)
44
54
  end
45
55
 
46
- def self.execute_auth(request_id:, token:, merchant_reference:)
56
+ def self.execute_auth(token:, request_id: nil, merchant_reference: nil)
47
57
  request = Afterpay.client.post("/v2/payments/auth") do |req|
48
58
  req.body = {
49
59
  requestId: request_id,
@@ -54,12 +64,12 @@ module Afterpay
54
64
  new(request.body)
55
65
  end
56
66
 
57
- def self.execute_deferred_payment(request_id:, reference:, amount:,
58
- payment_event_merchant_reference:, order_id:)
67
+ def self.execute_deferred_payment(amount:, order_id:, request_id: nil, merchant_reference: nil,
68
+ payment_event_merchant_reference: nil)
59
69
  request = Afterpay.client.post("/v2/payments/#{order_id}/capture") do |req|
60
70
  req.body = {
61
71
  requestId: request_id,
62
- merchantRefernce: reference,
72
+ merchantReference: merchant_reference,
63
73
  amount: Utils::Money.api_hash(amount),
64
74
  paymentEventMerchantReference: payment_event_merchant_reference
65
75
  }
@@ -67,7 +77,7 @@ module Afterpay
67
77
  new(request.body)
68
78
  end
69
79
 
70
- def self.execute_void(request_id:, order_id:, amount:)
80
+ def self.execute_void(order_id:, amount:, request_id: nil)
71
81
  request = Afterpay.client.post("/v2/payments/#{order_id}/void") do |req|
72
82
  req.body = {
73
83
  requestId: request_id,
@@ -77,7 +87,7 @@ module Afterpay
77
87
  new(request.body)
78
88
  end
79
89
 
80
- def self.update_shipping_courier(order_id:, shipped_at:, name:, tracking:, priority:)
90
+ def self.update_shipping_courier(order_id:, shipped_at: nil, name: nil, tracking: nil, priority: nil)
81
91
  request = Afterpay.client.put("/v2/payments/#{order_id}/courier") do |req|
82
92
  req.body = {
83
93
  shippedAt: shipped_at,
@@ -140,8 +150,7 @@ module Afterpay
140
150
  # rubocop:disable Metrics/ParameterLists
141
151
 
142
152
  # This endpoint retrieves a collection of payments along with their order details.
143
- def self.list_payments(to_created_date:, from_created_date:, limit:, offset:, tokens:, ids:,
144
- merchant_ref:, statuses:, order_by:, asc:)
153
+ def self.list_payments(tokens:, ids:, merchant_ref:, statuses:, to_created_date: nil, from_created_date: nil, limit: nil, offset: nil, order_by: nil, asc: nil)
145
154
  url = "/v2/payments?"
146
155
  url += "toCreatedDate=#{to_created_date.gsub('+', '%2b')}" if to_created_date
147
156
  url += "&fromCreatedDate=#{from_created_date.gsub('+', '%2b')}" if from_created_date
@@ -4,13 +4,27 @@ module Afterpay
4
4
  class PaymentEvent
5
5
  attr_accessor :id, :created, :expires, :type, :amount, :payment_event_merchant_reference
6
6
 
7
- def initialize(attributes)
8
- @id = attributes[:id]
9
- @created = attributes[:created]
10
- @expires = attributes[:expires]
11
- @type = attributes[:expires]
12
- @amount = Utils::Money.from_response(attributes[:amount])
13
- @payment_event_merchant_reference = attributes[:paymentEventMerchantReference]
7
+ def initialize(attributes = {})
8
+ @id = attributes[:id] || ""
9
+ @created = attributes[:created] || ""
10
+ @expires = attributes[:expires] || ""
11
+ @type = attributes[:type] || ""
12
+ @amount = attributes[:amount] || Money.from_amount(0)
13
+ @payment_event_merchant_reference = attributes[:payment_event_merchant_reference] || ""
14
+ end
15
+
16
+ # Builds PaymentEvent from response
17
+ def self.from_response(response)
18
+ return nil if response.nil?
19
+
20
+ new(
21
+ id: response[:id],
22
+ created: response[:created],
23
+ expires: response[:expires],
24
+ type: response[:type],
25
+ amount: Utils::Money.from_response(response[:amount]),
26
+ payment_event_merchant_reference: response[:paymentEventMerchantReference]
27
+ )
14
28
  end
15
29
  end
16
30
  end
@@ -5,18 +5,24 @@ module Afterpay
5
5
  attr_accessor :request_id, :amount, :merchant_reference, :refund_id, :refunded_at,
6
6
  :refund_merchant_reference, :error
7
7
 
8
- def initialize(attributes)
9
- @request_id = attributes[:requestId]
10
- @amount = attributes[:amount]
11
- @merchant_reference = attributes[:merchantReference]
12
- @refund_id = attributes[:refundId]
13
- @refunded_at = attributes[:refundAt]
14
- @refund_merchant_reference = attributes[:refundMerchantReference]
15
- @error = Error.new(attributes) if attributes[:errorId]
8
+ # rubocop:disable Metrics/CyclomaticComplexity
9
+ # rubocop:disable Metrics/PerceivedComplexity
10
+
11
+ def initialize(attributes = {})
12
+ @request_id = attributes[:request_id] || ""
13
+ @amount = attributes[:amount] || Money.from_amount(0)
14
+ @merchant_reference = attributes[:merchant_reference] || ""
15
+ @refund_id = attributes[:refund_id] || ""
16
+ @refunded_at = attributes[:refunded_at] || ""
17
+ @refund_merchant_reference = attributes[:refund_merchant_reference] || ""
18
+ @error = Error.new(attributes[:error]) if attributes[:error] && attributes[:error][:errorId]
16
19
  end
17
20
 
18
- def self.execute(request_id:, order_id:, amount:, merchant_reference:,
19
- refund_merchant_reference:)
21
+ # rubocop:enable Metrics/CyclomaticComplexity
22
+ # rubocop:enable Metrics/PerceivedComplexity
23
+
24
+ def self.execute(order_id:, amount:, request_id: nil, merchant_reference: nil,
25
+ refund_merchant_reference: nil)
20
26
  request = Afterpay.client.post("/v2/payments/#{order_id}/refund") do |req|
21
27
  req.body = {
22
28
  requestId: request_id,
@@ -25,7 +31,26 @@ module Afterpay
25
31
  refundMerchantReference: refund_merchant_reference
26
32
  }
27
33
  end
28
- new(request.body)
34
+ from_response(request.body)
35
+ end
36
+
37
+ def success?
38
+ @error.nil?
39
+ end
40
+
41
+ # Builds Refund from response
42
+ def self.from_response(response)
43
+ return nil if response.nil?
44
+
45
+ new(
46
+ request_id: response[:requestId],
47
+ amount: Utils::Money.from_response(response[:amount]),
48
+ merchant_reference: response[:merchantReference],
49
+ refund_id: response[:refundId],
50
+ refunded_at: response[:refundedAt],
51
+ refund_merchant_reference: response[:refundMerchantReference],
52
+ error: response
53
+ )
29
54
  end
30
55
  end
31
56
  end
@@ -4,11 +4,24 @@ module Afterpay
4
4
  class ShippingCourier
5
5
  attr_accessor :shipped_at, :name, :tracking, :priority
6
6
 
7
- def initialize(shipped_at:, name:, tracking:, priority:)
8
- @shipped_at = shipped_at
9
- @name = name
10
- @tracking = tracking
11
- @priority = priority
7
+ def initialize(attributes = {})
8
+ @shipped_at = attributes[:shipped_at] || ""
9
+ @name = attributes[:name] || ""
10
+ @tracking = attributes[:tracking] || ""
11
+ @priority = attributes[:priority] || ""
12
+ end
13
+
14
+ # Builds ShippingCourier from response
15
+ def self.from_response(response)
16
+ return nil if response.nil?
17
+
18
+ new(
19
+ shipped_at: response[:shippedAt],
20
+ name: response[:name],
21
+ tracking: response[:tracking],
22
+ priority: response[:priority],
23
+ error: Error.new(response)
24
+ )
12
25
  end
13
26
  end
14
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Afterpay
4
- VERSION = "2.0.0"
4
+ VERSION = "2.0.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: afterpay-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sachin Saxena
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-04 00:00:00.000000000 Z
11
+ date: 2021-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -92,6 +92,20 @@ dependencies:
92
92
  - - "~>"
93
93
  - !ruby/object:Gem::Version
94
94
  version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: rubocop
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.7'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - "~>"
107
+ - !ruby/object:Gem::Version
108
+ version: '1.7'
95
109
  - !ruby/object:Gem::Dependency
96
110
  name: faraday
97
111
  requirement: !ruby/object:Gem::Requirement
@@ -153,12 +167,14 @@ executables: []
153
167
  extensions: []
154
168
  extra_rdoc_files: []
155
169
  files:
170
+ - ".circleci/config.yml"
156
171
  - ".env.sample"
157
172
  - ".github/workflows/gempush.yml"
158
173
  - ".gitignore"
159
174
  - ".rspec"
160
175
  - ".rubocop.yml"
161
176
  - ".travis.yml"
177
+ - CHANGELOG.md
162
178
  - CODE_OF_CONDUCT.md
163
179
  - Gemfile
164
180
  - Gemfile.lock
@@ -208,7 +224,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
224
  - !ruby/object:Gem::Version
209
225
  version: '0'
210
226
  requirements: []
211
- rubygems_version: 3.2.8
227
+ rubygems_version: 3.0.3
212
228
  signing_key:
213
229
  specification_version: 4
214
230
  summary: Afterpay ruby wrapper