adyen-ruby-api-library 4.0.1 → 4.4.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 +5 -5
- data/.github/CODEOWNERS +1 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +7 -0
- data/.github/dependabot.yml +8 -0
- data/.gitignore +2 -0
- data/CODE_OF_CONDUCT.md +76 -0
- data/Gemfile +2 -2
- data/README.md +28 -2
- data/docs/checkout.html +17 -0
- data/lib/adyen-ruby-api-library.rb +4 -11
- data/lib/adyen/client.rb +30 -9
- data/lib/adyen/errors.rb +44 -2
- data/lib/adyen/services/bin_lookup.rb +18 -0
- data/lib/adyen/services/checkout.rb +12 -7
- data/lib/adyen/services/data_protection.rb +17 -0
- data/lib/adyen/services/dispute.rb +20 -0
- data/lib/adyen/services/marketpay.rb +18 -0
- data/lib/adyen/services/payments.rb +10 -4
- data/lib/adyen/services/postfmapi.rb +19 -0
- data/lib/adyen/services/service.rb +2 -2
- data/lib/adyen/version.rb +1 -1
- data/renovate.json +5 -0
- data/spec/bin_lookup_spec.rb +15 -0
- data/spec/checkout_spec.rb +1 -0
- data/spec/data_protection_spec.rb +14 -0
- data/spec/dispute_spec.rb +17 -0
- data/spec/errors_spec.rb +33 -3
- data/spec/hop_spec.rb +14 -0
- data/spec/mocks/requests/BinLookup/get_3ds_availability.json +4 -0
- data/spec/mocks/requests/BinLookup/get_cost_estimate.json +8 -0
- data/spec/mocks/requests/Checkout/payment_links.json +9 -0
- data/spec/mocks/requests/DataProtectionService/request_subject_erasure.json +5 -0
- data/spec/mocks/requests/DisputeService/defend_dispute.json +5 -0
- data/spec/mocks/requests/DisputeService/delete_dispute_defense_document.json +5 -0
- data/spec/mocks/requests/DisputeService/retrieve_applicable_defense_reasons.json +4 -0
- data/spec/mocks/requests/DisputeService/supply_defense_document.json +11 -0
- data/spec/mocks/requests/Hop/get_onboarding_url.json +4 -0
- data/spec/mocks/requests/Payment/donate.json +10 -0
- data/spec/mocks/requests/Terminal/assign_terminals.json +6 -0
- data/spec/mocks/requests/Terminal/find_terminal.json +3 -0
- data/spec/mocks/requests/Terminal/get_terminals_under_account.json +4 -0
- data/spec/mocks/responses/BinLookup/get_3ds_availability.json +8 -0
- data/spec/mocks/responses/BinLookup/get_cost_estimate.json +8 -0
- data/spec/mocks/responses/Checkout/payment_links.json +9 -0
- data/spec/mocks/responses/DataProtectionService/request_subject_erasure.json +3 -0
- data/spec/mocks/responses/DisputeService/defend_dispute.json +5 -0
- data/spec/mocks/responses/DisputeService/delete_dispute_defense_document.json +5 -0
- data/spec/mocks/responses/DisputeService/retrieve_applicable_defense_reasons.json +28 -0
- data/spec/mocks/responses/DisputeService/supply_defense_document.json +5 -0
- data/spec/mocks/responses/Hop/get_onboarding_url.json +7 -0
- data/spec/mocks/responses/Payment/donate.json +4 -0
- data/spec/mocks/responses/Terminal/assign_terminals.json +5 -0
- data/spec/mocks/responses/Terminal/find_terminal.json +6 -0
- data/spec/mocks/responses/Terminal/get_terminals_under_account.json +11 -0
- data/spec/payments_spec.rb +2 -1
- data/spec/postfmapi_spec.rb +16 -0
- data/spec/service_spec.rb +3 -0
- data/spec/spec_helper.rb +19 -12
- metadata +45 -4
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'service'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
class BinLookup < Service
|
5
|
+
attr_accessor :version
|
6
|
+
DEFAULT_VERSION = 50
|
7
|
+
|
8
|
+
def initialize(client, version = DEFAULT_VERSION)
|
9
|
+
service = 'BinLookup'
|
10
|
+
method_names = [
|
11
|
+
:get_3ds_availability,
|
12
|
+
:get_cost_estimate
|
13
|
+
]
|
14
|
+
|
15
|
+
super(client, version, service, method_names)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,17 +1,22 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "service"
|
2
2
|
|
3
3
|
module Adyen
|
4
4
|
class Checkout < Service
|
5
5
|
DEFAULT_VERSION = 50
|
6
6
|
|
7
7
|
def initialize(client, version = DEFAULT_VERSION)
|
8
|
-
service =
|
8
|
+
service = "Checkout"
|
9
9
|
method_names = [
|
10
10
|
:payment_methods,
|
11
|
-
:payment_session
|
11
|
+
:payment_session,
|
12
|
+
:payment_links,
|
13
|
+
]
|
14
|
+
with_application_info = [
|
15
|
+
:payment_session,
|
16
|
+
:payment_links,
|
12
17
|
]
|
13
18
|
|
14
|
-
super(client, version, service, method_names)
|
19
|
+
super(client, version, service, method_names, with_application_info)
|
15
20
|
end
|
16
21
|
|
17
22
|
# This method can't be dynamically defined because
|
@@ -24,16 +29,16 @@ module Adyen
|
|
24
29
|
when 0
|
25
30
|
Adyen::CheckoutDetail.new(@client, @version)
|
26
31
|
else
|
27
|
-
action =
|
32
|
+
action = "payments"
|
28
33
|
args[1] ||= {} # optional headers arg
|
29
|
-
@client.call_adyen_api(@service, action, args[0], args[1], @version)
|
34
|
+
@client.call_adyen_api(@service, action, args[0], args[1], @version, true)
|
30
35
|
end
|
31
36
|
end
|
32
37
|
end
|
33
38
|
|
34
39
|
class CheckoutDetail < Service
|
35
40
|
def initialize(client, version = DEFAULT_VERSION)
|
36
|
-
@service =
|
41
|
+
@service = "Checkout"
|
37
42
|
@client = client
|
38
43
|
@version = version
|
39
44
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative 'service'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
class DataProtection < Service
|
5
|
+
attr_accessor :version
|
6
|
+
DEFAULT_VERSION = 1
|
7
|
+
|
8
|
+
def initialize(client, version = DEFAULT_VERSION)
|
9
|
+
service = 'DataProtectionService'
|
10
|
+
method_names = [
|
11
|
+
:request_subject_erasure
|
12
|
+
]
|
13
|
+
|
14
|
+
super(client, version, service, method_names)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative 'service'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
class Dispute < Service
|
5
|
+
attr_accessor :version
|
6
|
+
DEFAULT_VERSION = 30
|
7
|
+
|
8
|
+
def initialize(client, version = DEFAULT_VERSION)
|
9
|
+
service = 'DisputeService'
|
10
|
+
method_names = [
|
11
|
+
:retrieve_applicable_defense_reasons,
|
12
|
+
:supply_defense_document,
|
13
|
+
:delete_dispute_defense_document,
|
14
|
+
:defend_dispute,
|
15
|
+
]
|
16
|
+
|
17
|
+
super(client, version, service, method_names)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -21,6 +21,10 @@ module Adyen
|
|
21
21
|
def notification
|
22
22
|
@notification ||= Adyen::Marketpay::Notification.new(@client)
|
23
23
|
end
|
24
|
+
|
25
|
+
def hop
|
26
|
+
@hop ||= Adyen::Marketpay::Hop.new(@client)
|
27
|
+
end
|
24
28
|
end
|
25
29
|
|
26
30
|
class Account < Service
|
@@ -88,5 +92,19 @@ module Adyen
|
|
88
92
|
super(client, version, service, method_names)
|
89
93
|
end
|
90
94
|
end
|
95
|
+
|
96
|
+
class Hop < Service
|
97
|
+
attr_accessor :version
|
98
|
+
DEFAULT_VERSION = 1
|
99
|
+
|
100
|
+
def initialize(client, version = DEFAULT_VERSION)
|
101
|
+
service = 'Hop'
|
102
|
+
method_names = [
|
103
|
+
:get_onboarding_url
|
104
|
+
]
|
105
|
+
|
106
|
+
super(client, version, service, method_names)
|
107
|
+
end
|
108
|
+
end
|
91
109
|
end
|
92
110
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require_relative
|
1
|
+
require_relative "service"
|
2
2
|
|
3
3
|
module Adyen
|
4
4
|
class Payments < Service
|
@@ -6,7 +6,7 @@ module Adyen
|
|
6
6
|
DEFAULT_VERSION = 50
|
7
7
|
|
8
8
|
def initialize(client, version = DEFAULT_VERSION)
|
9
|
-
service =
|
9
|
+
service = "Payment"
|
10
10
|
method_names = [
|
11
11
|
:authorise,
|
12
12
|
:authorise3d,
|
@@ -15,10 +15,16 @@ module Adyen
|
|
15
15
|
:cancel,
|
16
16
|
:refund,
|
17
17
|
:cancel_or_refund,
|
18
|
-
:adjust_authorisation
|
18
|
+
:adjust_authorisation,
|
19
|
+
:donate,
|
20
|
+
]
|
21
|
+
with_application_info = [
|
22
|
+
:authorise,
|
23
|
+
:authorise3d,
|
24
|
+
:authorise3ds2,
|
19
25
|
]
|
20
26
|
|
21
|
-
super(client, version, service, method_names)
|
27
|
+
super(client, version, service, method_names, with_application_info)
|
22
28
|
end
|
23
29
|
end
|
24
30
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative 'service'
|
2
|
+
|
3
|
+
module Adyen
|
4
|
+
class PosTerminalManagement < Service
|
5
|
+
attr_accessor :version
|
6
|
+
DEFAULT_VERSION = 1
|
7
|
+
|
8
|
+
def initialize(client, version = DEFAULT_VERSION)
|
9
|
+
service = 'Terminal'
|
10
|
+
method_names = [
|
11
|
+
:assign_terminals,
|
12
|
+
:find_terminal,
|
13
|
+
:get_terminals_under_account
|
14
|
+
]
|
15
|
+
|
16
|
+
super(client, version, service, method_names)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -11,7 +11,7 @@ module Adyen
|
|
11
11
|
method_name.to_s.gsub(/_./) { |x| x[1].upcase }
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(client, version, service, method_names)
|
14
|
+
def initialize(client, version, service, method_names, with_application_info = [])
|
15
15
|
@client = client
|
16
16
|
@version = version
|
17
17
|
@service = service
|
@@ -20,7 +20,7 @@ module Adyen
|
|
20
20
|
method_names.each do |method_name|
|
21
21
|
define_singleton_method method_name do |request, headers = {}|
|
22
22
|
action = self.class.action_for_method_name(method_name)
|
23
|
-
@client.call_adyen_api(@service, action, request, headers, @version)
|
23
|
+
@client.call_adyen_api(@service, action, request, headers, @version, with_application_info.include?(method_name))
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/adyen/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Adyen::BinLookup, service: "BIN lookup service" do
|
4
|
+
# client instance to be used in dynamically generated tests
|
5
|
+
client = create_client(:basic)
|
6
|
+
|
7
|
+
# methods / values to test for
|
8
|
+
# format is defined in spec_helper
|
9
|
+
test_sets = [
|
10
|
+
["get_3ds_availability", "threeDS2supported", false],
|
11
|
+
["get_cost_estimate", "resultCode", "Success"]
|
12
|
+
]
|
13
|
+
|
14
|
+
generate_tests(client, "BinLookup", test_sets, client.bin_lookup)
|
15
|
+
end
|
data/spec/checkout_spec.rb
CHANGED
@@ -110,6 +110,7 @@ RSpec.describe Adyen::Checkout, service: "checkout" do
|
|
110
110
|
# format is defined in spec_helper
|
111
111
|
test_sets = [
|
112
112
|
["payment_session", "publicKeyToken", "8115054323780109"],
|
113
|
+
["payment_links", "url", "https://checkoutshopper-test.adyen.com"],
|
113
114
|
["payments", "resultCode", "Authorised"]
|
114
115
|
]
|
115
116
|
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Adyen::DataProtection, service: "Data Protection Service" do
|
4
|
+
# client instance to be used in dynamically generated tests
|
5
|
+
client = create_client(:basic)
|
6
|
+
|
7
|
+
# methods / values to test for
|
8
|
+
# format is defined in spec_helper
|
9
|
+
test_sets = [
|
10
|
+
["request_subject_erasure", "result", "SUCCESS"],
|
11
|
+
]
|
12
|
+
|
13
|
+
generate_tests(client, "DataProtectionService", test_sets, client.data_protection)
|
14
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Adyen::Dispute, service: "dispute service" do
|
4
|
+
# client instance to be used in dynamically generated tests
|
5
|
+
client = create_client(:basic)
|
6
|
+
|
7
|
+
# methods / values to test for
|
8
|
+
# format is defined in spec_helper
|
9
|
+
test_sets = [
|
10
|
+
["retrieve_applicable_defense_reasons", "disputeServiceResult", { "success" => true }],
|
11
|
+
["supply_defense_document", "disputeServiceResult", { "success" => true }],
|
12
|
+
["delete_dispute_defense_document", "disputeServiceResult", { "success" => true }],
|
13
|
+
["defend_dispute", "disputeServiceResult", { "success" => true }],
|
14
|
+
]
|
15
|
+
|
16
|
+
generate_tests(client, "DisputeService", test_sets, client.dispute)
|
17
|
+
end
|
data/spec/errors_spec.rb
CHANGED
@@ -3,15 +3,45 @@
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
5
|
RSpec.describe Adyen::AdyenError do
|
6
|
+
before(:all) do
|
7
|
+
@shared_values = {
|
8
|
+
request: {
|
9
|
+
amount: {
|
10
|
+
currency: "USD",
|
11
|
+
value: 1000
|
12
|
+
},
|
13
|
+
reference: "Your order number",
|
14
|
+
paymentMethod: {
|
15
|
+
type: "scheme",
|
16
|
+
number: "4111111111111111",
|
17
|
+
expiryMonth: "10",
|
18
|
+
expiryYear: "2020",
|
19
|
+
holderName: "John Smith",
|
20
|
+
cvc: "737"
|
21
|
+
},
|
22
|
+
returnUrl: "https://your-company.com/",
|
23
|
+
merchantAccount: "YOUR_MERCHANT_ACCOUNT"
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
6
28
|
describe '#to_s' do
|
7
29
|
it 'describes using the error properties' do
|
8
|
-
expect(Adyen::AdyenError.new(
|
30
|
+
expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').to_s).to eq("Adyen::AdyenError code:code, msg:message, request:#{@shared_values[:request]}, response:response")
|
9
31
|
end
|
10
32
|
it 'skips the null properties' do
|
11
|
-
expect(Adyen::AdyenError.new(
|
33
|
+
expect(Adyen::AdyenError.new(@shared_values[:request], nil, nil, 'code').to_s).to eq("Adyen::AdyenError code:code, request:#{@shared_values[:request]}")
|
12
34
|
end
|
13
35
|
it 'uses the proper error class name' do
|
14
|
-
expect(Adyen::PermissionError.new('
|
36
|
+
expect(Adyen::PermissionError.new('message', @shared_values[:request]).to_s).to eq("Adyen::PermissionError code:403, msg:message, request:#{@shared_values[:request]}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
describe '#masking' do
|
40
|
+
it 'masks card number when logging request in errors' do
|
41
|
+
expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').request[:paymentMethod][:number]).to eq('411111******1111')
|
42
|
+
end
|
43
|
+
it 'masks CVC when logging request in errors' do
|
44
|
+
expect(Adyen::AdyenError.new(@shared_values[:request], 'response', 'message', 'code').request[:paymentMethod][:cvc]).to eq('***')
|
15
45
|
end
|
16
46
|
end
|
17
47
|
end
|
data/spec/hop_spec.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Adyen::Payments, service: "marketpay hop service" do
|
4
|
+
# client instance to be used in dynamically generated tests
|
5
|
+
client = create_client(:basic)
|
6
|
+
|
7
|
+
# methods / values to test for
|
8
|
+
# format is defined in spec_helper
|
9
|
+
test_sets = [
|
10
|
+
["get_onboarding_url", "pspReference", "8815850625171183"]
|
11
|
+
]
|
12
|
+
|
13
|
+
generate_tests(client, "Hop", test_sets, client.marketpay.hop)
|
14
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{
|
2
|
+
"defenseDocuments": [
|
3
|
+
{
|
4
|
+
"content": "JVBERi0xLjMKJcTl8uXrp...",
|
5
|
+
"contentType": "application/pdf",
|
6
|
+
"defenseDocumentTypeCode": "MerchandiseDescription"
|
7
|
+
}
|
8
|
+
],
|
9
|
+
"disputePspReference": "9913486733050065",
|
10
|
+
"merchantAccountCode": "YOUR_MERCHANT_ACCOUNT"
|
11
|
+
}
|