mollie-api-ruby 4.12.0 → 4.13.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: 74f551510fa882249e3224bd53e50334ccce5d9f4538b0c9fdf94cd86eb25bd1
4
- data.tar.gz: 2208eac855cb783b5183c4b64f604ce9981b2196eeaa92cdfd71061b0e98a56a
3
+ metadata.gz: 58916be713b9cf5128476188f1b0e61dc51f04d9e41b48b09c053b923e9daf39
4
+ data.tar.gz: 2f514f685d55211565be7197d5b9b36e587894582bdc515f4eb75ce19c481f10
5
5
  SHA512:
6
- metadata.gz: 50eb679501ae91cdf624127d13d5e45be32624864c166c3ff75fff563e0accc9e24874142b279c019b48f848f061e87c18f3c8092a34120588ca869de7e01498
7
- data.tar.gz: 54cd23ca6361f723a622d00b05724373632f2ab395dcb51d8343e37467c0a14d7da23b758cd127fc7340c0e7bdd57fea837a1cfaa0b18eb0fb0a8889d1fd3c7c
6
+ metadata.gz: f3dd1ed54bf737169dbd652f3314ce258c03a87d3b73ed0f8e2473ff2acfef1c08cd5b06349d370f564ee318964a78757978fc948d975f6e0733b1d60a69ff52
7
+ data.tar.gz: cad4e544c9cb525bbc94d1a4caf5585590456345ec1bd74fe08f4fe73a5292d4c721b7df2226f6721311487f3ef319bc69d8664863ca864792399cd48f067669
@@ -0,0 +1,27 @@
1
+ name: Publish gem
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v[0-9]+.[0-9]+.[0-9]+*
7
+
8
+ jobs:
9
+ publish:
10
+ name: Push gem to RubyGems.org
11
+ runs-on: ubuntu-latest
12
+
13
+ permissions:
14
+ id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
15
+ contents: write # IMPORTANT: this permission is required for `rake release` to push the release tag
16
+
17
+ steps:
18
+ # Set up
19
+ - uses: actions/checkout@v4
20
+ - name: Set up Ruby
21
+ uses: ruby/setup-ruby@v1
22
+ with:
23
+ bundler-cache: true
24
+ ruby-version: ruby
25
+
26
+ # Release
27
+ - uses: rubygems/release-gem@v1
data/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@
4
4
 
5
5
  All notable changes to this project will be documented in this file.
6
6
 
7
+ ## 4.13.0 - 2023-05-22
8
+
9
+ - (09489be) Add HTTP response details to RequestError
10
+ - (fe5d114) Add Terminals API
11
+
7
12
  ## 4.12.0 - 2023-01-29
8
13
 
9
14
  - (f180b47) Add support for idempotency keys
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ require 'bundler/gem_tasks'
2
+
1
3
  task default: %w[test]
2
4
 
3
5
  task :test do
@@ -0,0 +1 @@
1
+ terminal = Mollie::Terminal.get("term_7MgL4wea46qkRcoTZjWEH")
@@ -0,0 +1 @@
1
+ terminals = Mollie::Terminal.all
data/lib/mollie/client.rb CHANGED
@@ -130,11 +130,11 @@ module Mollie
130
130
  {} # No Content
131
131
  when 404
132
132
  json = JSON.parse(response.body)
133
- exception = ResourceNotFoundError.new(json)
133
+ exception = ResourceNotFoundError.new(json, response)
134
134
  raise exception
135
135
  else
136
136
  json = JSON.parse(response.body)
137
- exception = Mollie::RequestError.new(json)
137
+ exception = Mollie::RequestError.new(json, response)
138
138
  raise exception
139
139
  end
140
140
  end
@@ -5,17 +5,30 @@ module Mollie
5
5
  class RequestError < Mollie::Exception
6
6
  attr_accessor :status, :title, :detail, :field, :links
7
7
 
8
- def initialize(error)
8
+ def initialize(error, response = nil)
9
9
  exception.status = error['status']
10
10
  exception.title = error['title']
11
11
  exception.detail = error['detail']
12
12
  exception.field = error['field']
13
13
  exception.links = error['_links']
14
+ self.response = response
14
15
  end
15
16
 
16
17
  def to_s
17
18
  "#{status} #{title}: #{detail}"
18
19
  end
20
+
21
+ def http_headers
22
+ response.to_hash if response
23
+ end
24
+
25
+ def http_body
26
+ response.body if response
27
+ end
28
+
29
+ private
30
+
31
+ attr_accessor :response
19
32
  end
20
33
 
21
34
  class ResourceNotFoundError < RequestError
@@ -0,0 +1,59 @@
1
+ module Mollie
2
+ class Terminal < Base
3
+
4
+ STATUS_PENDING = "pending".freeze
5
+ STATUS_ACTIVE = "active".freeze
6
+ STATUS_INACTIVE = "inactive".freeze
7
+
8
+ attr_accessor :id,
9
+ :profile_id,
10
+ :status,
11
+ :brand,
12
+ :model,
13
+ :serial_number,
14
+ :currency,
15
+ :description,
16
+ :created_at,
17
+ :updated_at,
18
+ :deactivated_at,
19
+ :_links
20
+
21
+ alias links _links
22
+
23
+ def pending?
24
+ status == STATUS_PENDING
25
+ end
26
+
27
+ def active?
28
+ status == STATUS_ACTIVE
29
+ end
30
+
31
+ def inactive?
32
+ status == STATUS_INACTIVE
33
+ end
34
+
35
+ def created_at=(created_at)
36
+ @created_at = begin
37
+ Time.parse(created_at.to_s)
38
+ rescue StandardError
39
+ nil
40
+ end
41
+ end
42
+
43
+ def updated_at=(updated_at)
44
+ @updated_at = begin
45
+ Time.parse(updated_at.to_s)
46
+ rescue StandardError
47
+ nil
48
+ end
49
+ end
50
+
51
+ def deactivated_at=(deactivated_at)
52
+ @deactivated_at = begin
53
+ Time.parse(deactivated_at.to_s)
54
+ rescue StandardError
55
+ nil
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,3 @@
1
1
  module Mollie
2
- VERSION = '4.12.0'.freeze
2
+ VERSION = '4.13.0'.freeze
3
3
  end
data/lib/mollie.rb CHANGED
@@ -28,6 +28,7 @@ require 'mollie/profile'
28
28
  require 'mollie/refund'
29
29
  require 'mollie/settlement'
30
30
  require 'mollie/subscription'
31
+ require 'mollie/terminal'
31
32
 
32
33
  require 'mollie/customer/mandate'
33
34
  require 'mollie/customer/payment'
@@ -0,0 +1,23 @@
1
+ {
2
+ "id": "term_7MgL4wea46qkRcoTZjWEH",
3
+ "profileId": "pfl_QkEhN94Ba",
4
+ "status": "active",
5
+ "brand": "PAX",
6
+ "model": "A920",
7
+ "serialNumber": "1234567890",
8
+ "currency": "EUR",
9
+ "description": "Terminal #12345",
10
+ "createdAt": "2022-02-12T11:58:35.0Z",
11
+ "updatedAt": "2022-11-15T13:32:11+00:00",
12
+ "deactivatedAt": "2022-02-12T12:13:35.0Z",
13
+ "_links": {
14
+ "self": {
15
+ "href": "https://api.mollie.com/v2/terminals/term_7MgL4wea46qkRcoTZjWEH",
16
+ "type": "application/hal+json"
17
+ },
18
+ "documentation": {
19
+ "href": "https://docs.mollie.com/reference/v2/terminals-api/get-terminal",
20
+ "type": "text/html"
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "count": 3,
3
+ "_embedded": {
4
+ "terminals": [
5
+ {
6
+ "resource": "terminal",
7
+ "id": "terminal_one"
8
+ },
9
+ {
10
+ "resource": "terminal",
11
+ "id": "terminal_two"
12
+ },
13
+ {
14
+ "resource": "terminal",
15
+ "id": "terminal_three"
16
+ }
17
+ ]
18
+ },
19
+ "_links": {
20
+ "self": {
21
+ "href": "https://api.mollie.com/v2/terminals",
22
+ "type": "application/hal+json"
23
+ },
24
+ "previous": null,
25
+ "next": {
26
+ "href": "https://api.mollie.com/v2/terminals?from=term_7MgL4wea46qkRcoTZjWEH",
27
+ "type": "application/hal+json"
28
+ },
29
+ "documentation": {
30
+ "href": "https://docs.mollie.com/reference/v2/terminals-api/list-terminals",
31
+ "type": "text/html"
32
+ }
33
+ }
34
+ }
@@ -44,6 +44,7 @@ module Mollie
44
44
  assert_equal 'my-id', resource.id
45
45
  assert_equal 'object-id', resource.testobject_id
46
46
  end
47
+
47
48
  def test_get_with_invalid_identifiers
48
49
  assert_raises(Mollie::Exception) { TestObject.get(nil) }
49
50
  assert_raises(Mollie::Exception) { TestObject.get(" ") }
@@ -0,0 +1,87 @@
1
+ require 'helper'
2
+
3
+ module Mollie
4
+ class ExceptionTest < Test::Unit::TestCase
5
+ def test_attributes
6
+ stub_request(:post, 'https://api.mollie.com/v2/payments')
7
+ .to_return(status: 422, headers: { "Content-Type" => "application/hal+json}" }, body: %(
8
+ {
9
+ "status": 422,
10
+ "title": "Unprocessable Entity",
11
+ "detail": "The amount is higher than the maximum",
12
+ "field": "amount",
13
+ "_links": {
14
+ "documentation": {
15
+ "href": "https://docs.mollie.com/errors",
16
+ "type": "text/html"
17
+ }
18
+ }
19
+ }
20
+ ))
21
+
22
+ exception = assert_raise(Mollie::RequestError) do
23
+ Mollie::Payment.create(
24
+ amount: { value: "1000000000.00", currency: "EUR" },
25
+ description: "Order #66",
26
+ redirect_url: "https://www.example.org/payment/completed",
27
+ )
28
+ end
29
+
30
+ assert_equal 422, exception.status
31
+ assert_equal "Unprocessable Entity", exception.title
32
+ assert_equal "The amount is higher than the maximum", exception.detail
33
+ assert_equal "amount", exception.field
34
+ assert_equal "https://docs.mollie.com/errors", exception.links["documentation"]["href"]
35
+ assert_equal "text/html", exception.links["documentation"]["type"]
36
+ end
37
+
38
+ def test_exception_message
39
+ stub_request(:get, 'https://api.mollie.com/v2/payments/tr_WDqYK6vllg')
40
+ .to_return(status: 401, headers: { "Content-Type" => "application/hal+json}" }, body: %(
41
+ {
42
+ "status": 401,
43
+ "title": "Unauthorized Request",
44
+ "detail": "Missing authentication, or failed to authenticate",
45
+ "_links": {
46
+ "documentation": {
47
+ "href": "https://docs.mollie.com/overview/authentication",
48
+ "type": "text/html"
49
+ }
50
+ }
51
+ }
52
+ ))
53
+
54
+ exception = assert_raise(Mollie::RequestError) { Payment.get('tr_WDqYK6vllg') }
55
+ assert_equal '401 Unauthorized Request: Missing authentication, or failed to authenticate', exception.message
56
+ end
57
+
58
+ def test_http_attributes
59
+ body = %({
60
+ "status": 422,
61
+ "title": "Unprocessable Entity",
62
+ "detail": "The amount is higher than the maximum",
63
+ "field": "amount",
64
+ "_links": {
65
+ "documentation": {
66
+ "href": "https://docs.mollie.com/errors",
67
+ "type": "text/html"
68
+ }
69
+ }
70
+ })
71
+
72
+ stub_request(:post, 'https://api.mollie.com/v2/payments')
73
+ .to_return(status: 422, headers: { "Content-Type" => "application/hal+json" }, body: body)
74
+
75
+ exception = assert_raise(Mollie::RequestError) do
76
+ Mollie::Payment.create(
77
+ amount: { value: "1000000000.00", currency: "EUR" },
78
+ description: "Order #66",
79
+ redirect_url: "https://www.example.org/payment/completed",
80
+ )
81
+ end
82
+
83
+ assert_equal({ "content-type" => ["application/hal+json"] }, exception.http_headers)
84
+ assert_equal(body, exception.http_body)
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,54 @@
1
+ require 'helper'
2
+
3
+ module Mollie
4
+ class TerminalTest < Test::Unit::TestCase
5
+ GET_TERMINAL = read_fixture('terminals/get.json')
6
+ LIST_TERMINALS = read_fixture('terminals/list.json')
7
+
8
+ def test_get_terminal
9
+ stub_request(:get, "https://api.mollie.com/v2/terminals/term_7MgL4wea46qkRcoTZjWEH")
10
+ .to_return(status: 200, body: GET_TERMINAL, headers: {})
11
+
12
+ terminal = Terminal.get("term_7MgL4wea46qkRcoTZjWEH")
13
+
14
+ assert_equal "term_7MgL4wea46qkRcoTZjWEH", terminal.id
15
+ assert_equal "pfl_QkEhN94Ba", terminal.profile_id
16
+ assert_equal "active", terminal.status
17
+ assert_equal "PAX", terminal.brand
18
+ assert_equal "A920", terminal.model
19
+ assert_equal "1234567890", terminal.serial_number
20
+ assert_equal "EUR", terminal.currency
21
+ assert_equal "Terminal #12345", terminal.description
22
+ assert_equal Time.parse("2022-02-12T11:58:35.0Z"), terminal.created_at
23
+ assert_equal Time.parse("2022-11-15T13:32:11+00:00"), terminal.updated_at
24
+ assert_equal Time.parse("2022-02-12T12:13:35.0Z"), terminal.deactivated_at
25
+ end
26
+
27
+ def test_status_pending
28
+ assert Terminal.new(status: Terminal::STATUS_PENDING).pending?
29
+ assert !Terminal.new(status: "not-pending").pending?
30
+ end
31
+
32
+ def test_status_active
33
+ assert Terminal.new(status: Terminal::STATUS_ACTIVE).active?
34
+ assert !Terminal.new(status: "not-active").active?
35
+ end
36
+
37
+ def test_status_inactive
38
+ assert Terminal.new(status: Terminal::STATUS_INACTIVE).inactive?
39
+ assert !Terminal.new(status: "not-inactive").inactive?
40
+ end
41
+
42
+ def test_list_terminals
43
+ stub_request(:get, "https://api.mollie.com/v2/terminals")
44
+ .to_return(status: 200, body: LIST_TERMINALS, headers: {})
45
+
46
+ terminals = Terminal.all
47
+
48
+ assert_equal 3, terminals.size
49
+ assert_equal "terminal_one", terminals[0].id
50
+ assert_equal "terminal_two", terminals[1].id
51
+ assert_equal "terminal_three", terminals[2].id
52
+ end
53
+ end
54
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mollie-api-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.12.0
4
+ version: 4.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mollie B.V.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-05-25 00:00:00.000000000 Z
11
+ date: 2024-05-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -81,6 +81,7 @@ extra_rdoc_files: []
81
81
  files:
82
82
  - ".github/workflows/build.yml"
83
83
  - ".github/workflows/codeql.yml"
84
+ - ".github/workflows/push.yml"
84
85
  - ".gitignore"
85
86
  - ".rubocop.yml"
86
87
  - ".rubocop_todo.yml"
@@ -180,6 +181,8 @@ files:
180
181
  - examples/subscriptions/get.rb
181
182
  - examples/subscriptions/list.rb
182
183
  - examples/subscriptions/update.rb
184
+ - examples/terminals/get.rb
185
+ - examples/terminals/list.rb
183
186
  - lib/cacert.pem
184
187
  - lib/mollie-api-ruby.rb
185
188
  - lib/mollie.rb
@@ -216,6 +219,7 @@ files:
216
219
  - lib/mollie/settlement/payment.rb
217
220
  - lib/mollie/settlement/refund.rb
218
221
  - lib/mollie/subscription.rb
222
+ - lib/mollie/terminal.rb
219
223
  - lib/mollie/util.rb
220
224
  - lib/mollie/version.rb
221
225
  - mollie-api-ruby.gemspec
@@ -250,6 +254,8 @@ files:
250
254
  - test/fixtures/shipments/update.json
251
255
  - test/fixtures/subscriptions/get.json
252
256
  - test/fixtures/subscriptions/get_payments.json
257
+ - test/fixtures/terminals/get.json
258
+ - test/fixtures/terminals/list.json
253
259
  - test/helper.rb
254
260
  - test/mollie/amount_test.rb
255
261
  - test/mollie/base_test.rb
@@ -259,6 +265,7 @@ files:
259
265
  - test/mollie/customer/payment_test.rb
260
266
  - test/mollie/customer/subscription_test.rb
261
267
  - test/mollie/customer_test.rb
268
+ - test/mollie/exception_test.rb
262
269
  - test/mollie/invoice_test.rb
263
270
  - test/mollie/list_test.rb
264
271
  - test/mollie/method_test.rb
@@ -280,13 +287,14 @@ files:
280
287
  - test/mollie/settlement/payment_test.rb
281
288
  - test/mollie/settlement/refund_test.rb
282
289
  - test/mollie/settlement_test.rb
290
+ - test/mollie/terminal_test.rb
283
291
  - test/mollie/util_test.rb
284
292
  - test/run-test.rb
285
293
  homepage: https://github.com/mollie/mollie-api-ruby
286
294
  licenses:
287
295
  - BSD
288
296
  metadata: {}
289
- post_install_message:
297
+ post_install_message:
290
298
  rdoc_options: []
291
299
  require_paths:
292
300
  - lib
@@ -301,8 +309,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
301
309
  - !ruby/object:Gem::Version
302
310
  version: '0'
303
311
  requirements: []
304
- rubygems_version: 3.5.10
305
- signing_key:
312
+ rubygems_version: 3.5.9
313
+ signing_key:
306
314
  specification_version: 4
307
315
  summary: Official Mollie API Client for Ruby
308
316
  test_files:
@@ -337,6 +345,8 @@ test_files:
337
345
  - test/fixtures/shipments/update.json
338
346
  - test/fixtures/subscriptions/get.json
339
347
  - test/fixtures/subscriptions/get_payments.json
348
+ - test/fixtures/terminals/get.json
349
+ - test/fixtures/terminals/list.json
340
350
  - test/helper.rb
341
351
  - test/mollie/amount_test.rb
342
352
  - test/mollie/base_test.rb
@@ -346,6 +356,7 @@ test_files:
346
356
  - test/mollie/customer/payment_test.rb
347
357
  - test/mollie/customer/subscription_test.rb
348
358
  - test/mollie/customer_test.rb
359
+ - test/mollie/exception_test.rb
349
360
  - test/mollie/invoice_test.rb
350
361
  - test/mollie/list_test.rb
351
362
  - test/mollie/method_test.rb
@@ -367,5 +378,6 @@ test_files:
367
378
  - test/mollie/settlement/payment_test.rb
368
379
  - test/mollie/settlement/refund_test.rb
369
380
  - test/mollie/settlement_test.rb
381
+ - test/mollie/terminal_test.rb
370
382
  - test/mollie/util_test.rb
371
383
  - test/run-test.rb