buckaruby 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +20 -4
  3. data/.travis.yml +7 -3
  4. data/CHANGELOG.md +6 -0
  5. data/Gemfile +3 -1
  6. data/README.md +58 -4
  7. data/Rakefile +2 -0
  8. data/buckaruby.gemspec +1 -1
  9. data/lib/buckaruby.rb +3 -1
  10. data/lib/buckaruby/action.rb +3 -0
  11. data/lib/buckaruby/configuration.rb +73 -0
  12. data/lib/buckaruby/currency.rb +4 -0
  13. data/lib/buckaruby/exception.rb +26 -0
  14. data/lib/buckaruby/gateway.rb +99 -45
  15. data/lib/buckaruby/iban.rb +2 -0
  16. data/lib/buckaruby/ideal.rb +5 -2
  17. data/lib/buckaruby/language.rb +2 -0
  18. data/lib/buckaruby/operation.rb +4 -0
  19. data/lib/buckaruby/payment_method.rb +5 -1
  20. data/lib/buckaruby/request.rb +70 -27
  21. data/lib/buckaruby/response.rb +106 -37
  22. data/lib/buckaruby/signature.rb +8 -9
  23. data/lib/buckaruby/support/case_insensitive_hash.rb +2 -0
  24. data/lib/buckaruby/transaction_status.rb +2 -0
  25. data/lib/buckaruby/transaction_type.rb +2 -0
  26. data/lib/buckaruby/version.rb +3 -1
  27. data/spec/buckaruby/configuration_spec.rb +113 -0
  28. data/spec/buckaruby/gateway_spec.rb +165 -83
  29. data/spec/buckaruby/iban_spec.rb +2 -0
  30. data/spec/buckaruby/signature_spec.rb +38 -17
  31. data/spec/buckaruby/support/case_insensitive_hash_spec.rb +2 -0
  32. data/spec/fixtures/responses/callback_invalid_signature.txt +1 -0
  33. data/spec/fixtures/responses/callback_payment_cancelled.txt +1 -0
  34. data/spec/fixtures/responses/callback_payment_empty_transaction_type.txt +1 -0
  35. data/spec/fixtures/responses/callback_payment_failed.txt +1 -0
  36. data/spec/fixtures/responses/callback_payment_pending.txt +1 -0
  37. data/spec/fixtures/responses/callback_payment_rejected.txt +1 -0
  38. data/spec/fixtures/responses/callback_payment_sepa.txt +1 -0
  39. data/spec/fixtures/responses/callback_payment_success.txt +1 -0
  40. data/spec/fixtures/responses/callback_recurrent_sepa.txt +1 -0
  41. data/spec/fixtures/responses/callback_recurrent_visa.txt +1 -0
  42. data/spec/fixtures/responses/callback_refund_ideal.txt +1 -0
  43. data/spec/fixtures/responses/callback_refund_paypal.txt +1 -0
  44. data/spec/fixtures/responses/callback_reversal_paypal.txt +1 -0
  45. data/spec/fixtures/responses/callback_reversal_sepa.txt +1 -0
  46. data/spec/fixtures/responses/callback_valid_signature.txt +1 -0
  47. data/spec/fixtures/responses/cancel_success.txt +1 -0
  48. data/spec/fixtures/responses/recurrent_transaction_success.txt +1 -0
  49. data/spec/fixtures/responses/refund_info_error.txt +1 -0
  50. data/spec/fixtures/responses/refund_info_success.txt +1 -0
  51. data/spec/fixtures/responses/refund_transaction_success.txt +1 -0
  52. data/spec/fixtures/responses/setup_transaction_success.txt +1 -0
  53. data/spec/fixtures/responses/status_cancellable.txt +1 -0
  54. data/spec/fixtures/responses/status_noncancellable.txt +1 -0
  55. data/spec/fixtures/responses/status_success.txt +1 -0
  56. data/spec/spec_helper.rb +2 -0
  57. metadata +54 -4
  58. data/lib/buckaruby/urls.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bf24f7ed57a0ee1afd17a9d85d696be81c7e28f3
4
- data.tar.gz: 472afa4186eb0cb9e6dda801b6fc80ea52ca0654
2
+ SHA256:
3
+ metadata.gz: 4c5c39e48aa11568771e7f89251560e47ac6a9ce8f151a05e146a8281ab58483
4
+ data.tar.gz: 450e2c0daa5a9bb0c12a119f6dd6b3aa0bf616ba35ba2403c6d47b214246e7ca
5
5
  SHA512:
6
- metadata.gz: 59deba4cfcf3006f9a20d5072619cf42550da007912cec0bf5ade166be9c9191810cf87066dcb1576c79e7d3d154e1098ba8e8d4aa1372883b1ad1fa547f8568
7
- data.tar.gz: 11d4aa501936edcaff85f77e163ee88732ba1ecea6b52415e24783a9c477c6894a1b3453045ee030d32cb1b8bc1dcbd2b92b4b2fba1f6403f04a492f1d1a1a1f
6
+ metadata.gz: a0ab66f241e872cde63993bca6d996b3a773be5336850cd2495677cc39caf1e1c3286ff681c789d49362278b4d1afdfddecf4fb366bbabb75de384b4ffa2efc5
7
+ data.tar.gz: 41712687c28b2a086cedb478938b79985b50d0bd6b4aedfba21a0143f3a60a3b92fade5de73782f3a8f481184a9ec08510842a7887db045cbaad569af0a00efe
data/.rubocop.yml CHANGED
@@ -1,10 +1,14 @@
1
1
  # Buckaruby RuboCop configuration
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.2
4
+ TargetRubyVersion: 2.3
5
5
  DisplayCopNames: true
6
6
  DisplayStyleGuide: true
7
7
 
8
+ # We target 2.3, but still want to support 2.0.
9
+ Gemspec/RequiredRubyVersion:
10
+ Enabled: false
11
+
8
12
  Metrics/AbcSize:
9
13
  Max: 30
10
14
 
@@ -24,10 +28,16 @@ Metrics/LineLength:
24
28
  Metrics/MethodLength:
25
29
  Enabled: false
26
30
 
31
+ Metrics/ModuleLength:
32
+ Enabled: false
33
+
27
34
  Metrics/PerceivedComplexity:
28
35
  Max: 9
29
36
 
30
- Style/AccessorMethodName:
37
+ Naming/AccessorMethodName:
38
+ Enabled: false
39
+
40
+ Naming/MemoizedInstanceVariableName:
31
41
  Enabled: false
32
42
 
33
43
  Style/BlockDelimiters:
@@ -37,14 +47,20 @@ Style/BlockDelimiters:
37
47
  Style/ConditionalAssignment:
38
48
  Enabled: false
39
49
 
50
+ Style/ExpandPathArguments:
51
+ Enabled: false
52
+
40
53
  Style/GuardClause:
41
54
  Enabled: false
42
55
 
43
56
  Style/IfUnlessModifier:
44
57
  Enabled: false
45
58
 
46
- Style/MutableConstant:
59
+ Style/StringLiterals:
60
+ Enabled: false
61
+
62
+ Style/SafeNavigation:
47
63
  Enabled: false
48
64
 
49
- Style/StringLiterals:
65
+ Style/SymbolArray:
50
66
  Enabled: false
data/.travis.yml CHANGED
@@ -1,7 +1,11 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
+ before_install:
5
+ - gem update --system
6
+ - gem install bundler
4
7
  rvm:
5
- - 2.2.7
6
- - 2.3.4
7
- - 2.4.1
8
+ - 2.2.10
9
+ - 2.3.7
10
+ - 2.4.4
11
+ - 2.5.1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Buckaruby changelog
2
2
 
3
+ ## 1.1.0 (2018-06-01)
4
+ - Added payment method iDEAL processing.
5
+ - Added Moneyou to the list of iDEAL issuers.
6
+ - Implemented refund transaction.
7
+ - Implemented cancel transaction.
8
+
3
9
  ## 1.0.2 (2017-08-25)
4
10
 
5
11
  - Recognize credit card transactions via Atos.
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in buckaruby.gemspec
4
6
  gemspec
5
7
 
6
- gem 'rubocop', '~> 0.47.1', group: :test
8
+ gem 'rubocop', '~> 0.55.0', group: :test
data/README.md CHANGED
@@ -49,6 +49,8 @@ gateway = Buckaruby::Gateway.new(
49
49
  )
50
50
  ```
51
51
 
52
+ You can override the default mode with the parameter `mode`.
53
+
52
54
  ### Start transaction
53
55
 
54
56
  To start a new transaction, use the method `setup_transaction`:
@@ -65,7 +67,9 @@ options = {
65
67
  response = gateway.setup_transaction(options)
66
68
  ```
67
69
 
68
- On success this will return a `Buckaruby::SetupTransactionResponse`.
70
+ The response includes a `status` to check if the transaction was successful and a `redirect_url` which you can use to redirect the user to when present.
71
+
72
+ See `Buckaruby::SetupTransactionResponse` for more details.
69
73
 
70
74
  ### Recurrent transaction
71
75
 
@@ -83,6 +87,8 @@ options = {
83
87
  }
84
88
 
85
89
  response = gateway.setup_transaction(options)
90
+
91
+ transaction = response.transaction_id # use this for the recurrent transaction
86
92
  ```
87
93
 
88
94
  The response will include a `transaction_id` which you must use to make a recurrent transaction:
@@ -98,7 +104,51 @@ options = {
98
104
  response = gateway.recurrent_transaction(options)
99
105
  ```
100
106
 
101
- On success this will return a `Buckaruby::RecurrentTransactionResponse`.
107
+ The response includes a `status` to check if the transaction was successful.
108
+
109
+ See `Buckaruby::RecurrentTransactionResponse` for more details.
110
+
111
+ ### Refund transaction
112
+
113
+ For some transactions it's possible to do a refund: Buckaroo creates a new "reverse" transaction based on the original transaction.
114
+
115
+ First check if the transaction is refundable, with the parameter `transaction_id` set to the original transaction ID:
116
+
117
+ ```ruby
118
+ response = gateway.refundable?(transaction_id: "abcdefg")
119
+ ```
120
+
121
+ If the reponse is positive then you can refund the transaction with:
122
+
123
+ ```ruby
124
+ response = gateway.refund_transaction(transaction_id: "abcdefg")
125
+ ```
126
+
127
+ The response includes a `status` to check if the refund was successful.
128
+
129
+ If you try to refund a transaction that's not refundable, then a `Buckaruby::NonRefundableTransactionException` will be raised.
130
+
131
+ See `Buckaruby::RefundTransactionResponse` for more details.
132
+
133
+ ### Cancel transaction
134
+
135
+ Sometimes a transaction can be cancelled, for example a SEPA Direct Debit transaction before it has been offered to the bank.
136
+
137
+ You can check if the transaction is cancellable, by using the method `cancellable?` with the parameter `transaction_id`:
138
+
139
+ ```ruby
140
+ response = gateway.cancellable?(transaction_id: "abcdefg")
141
+ ```
142
+
143
+ If the response is positive then you can cancel the transaction with:
144
+
145
+ ```ruby
146
+ response = gateway.cancel_transaction(transaction_id: "abcdefg")
147
+ ```
148
+
149
+ If this does not result in an exception, then the cancel was successful.
150
+
151
+ If you try to cancel a transaction that's not cancellable, then a `Buckaruby::NonCancellableTransactionException` will be raised.
102
152
 
103
153
  ### Push response
104
154
 
@@ -108,7 +158,7 @@ Buckaroo can be configured to send push notifications for transactions. You can
108
158
  response = gateway.callback(params)
109
159
  ```
110
160
 
111
- On success this will return a `Buckaruby::CallbackResponse`.
161
+ See `Buckaruby::CallbackResponse` for more details.
112
162
 
113
163
  ### Get status
114
164
 
@@ -118,7 +168,7 @@ To query the status of any transaction, use the method `status` with either the
118
168
  response = gateway.status(transaction_id: 12345)
119
169
  ```
120
170
 
121
- On success this will return a `Buckaruby::StatusResponse`.
171
+ See `Buckaruby::StatusResponse` for more details.
122
172
 
123
173
  ### Error handling
124
174
 
@@ -134,6 +184,10 @@ When the signature could not be verified, a `Buckaruby::SignatureException` will
134
184
 
135
185
  All Buckaruby exceptions listed here inherit from the class `Buckaruby::BuckarooException`.
136
186
 
187
+ ## Example
188
+
189
+ For a complete and working example project check out [Buckaruby PoC](https://github.com/KentaaNL/buckaruby-poc).
190
+
137
191
  ## Contributing
138
192
 
139
193
  Bug reports and pull requests are welcome on GitHub at https://github.com/KentaaNL/buckaruby.
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
  require "rubocop/rake_task"
data/buckaruby.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
data/lib/buckaruby.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'buckaruby/support/case_insensitive_hash'
2
4
 
3
5
  require_relative 'buckaruby/action'
@@ -8,8 +10,8 @@ require_relative 'buckaruby/operation'
8
10
  require_relative 'buckaruby/payment_method'
9
11
  require_relative 'buckaruby/transaction_status'
10
12
  require_relative 'buckaruby/transaction_type'
11
- require_relative 'buckaruby/urls'
12
13
 
14
+ require_relative 'buckaruby/configuration'
13
15
  require_relative 'buckaruby/exception'
14
16
  require_relative 'buckaruby/gateway'
15
17
  require_relative 'buckaruby/iban'
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  module Action
3
5
  PAY = "Pay"
4
6
  PAY_RECURRENT = "PayRecurrent"
7
+ REFUND = "Refund"
5
8
  EXTRA_INFO = "ExtraInfo"
6
9
  end
7
10
  end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ module Buckaruby
6
+ # Configuration settings for the Buckaruby Gateway.
7
+ class Configuration
8
+ TEST_URL = "https://testcheckout.buckaroo.nl/nvp/"
9
+ PRODUCTION_URL = "https://checkout.buckaroo.nl/nvp/"
10
+
11
+ attr_reader :website, :secret, :mode, :hash_method, :logger
12
+
13
+ def initialize(options)
14
+ set_website(options)
15
+ set_secret(options)
16
+ set_buckaroo_mode(options)
17
+ set_hash_method(options)
18
+ set_logger(options)
19
+ end
20
+
21
+ def test?
22
+ @mode == :test
23
+ end
24
+
25
+ def production?
26
+ @mode == :production
27
+ end
28
+
29
+ def api_url
30
+ test? ? TEST_URL : PRODUCTION_URL
31
+ end
32
+
33
+ private
34
+
35
+ def set_website(options)
36
+ @website = options[:website]
37
+
38
+ raise ArgumentError, "Missing required parameter: website" if @website.to_s.empty?
39
+ end
40
+
41
+ def set_secret(options)
42
+ @secret = options[:secret]
43
+
44
+ raise ArgumentError, "Missing required parameter: secret" if @secret.to_s.empty?
45
+ end
46
+
47
+ # Set Buckaroo mode from options, class setting or the default (test).
48
+ def set_buckaroo_mode(options)
49
+ @mode = options.key?(:mode) ? options[:mode] : Gateway.mode
50
+ @mode ||= :test
51
+
52
+ if @mode != :test && @mode != :production
53
+ raise ArgumentError, "Invalid Buckaroo mode provided: #{@mode} (expected :test or :production)"
54
+ end
55
+ end
56
+
57
+ # Set the hash method from options or default (SHA-1).
58
+ def set_hash_method(options)
59
+ @hash_method = (options[:hash_method] || "SHA1").downcase.to_sym
60
+
61
+ unless [:sha1, :sha256, :sha512].include?(@hash_method)
62
+ raise ArgumentError, "Invalid hash method provided: #{@hash_method} (expected :sha1, :sha256 or :sha512)"
63
+ end
64
+ end
65
+
66
+ # Set the logger from options, to Rails or to stdout.
67
+ def set_logger(options)
68
+ @logger = options[:logger]
69
+ @logger ||= Rails.logger if defined?(Rails)
70
+ @logger ||= Logger.new(STDOUT)
71
+ end
72
+ end
73
+ end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  module Currency
3
5
  EURO = "EUR"
6
+ BRITISH_POUND = "GBP"
7
+ US_DOLLAR = "USD"
4
8
  end
5
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Buckaruby
2
4
  # Base class for exceptions.
3
5
  class BuckarooException < StandardError
@@ -66,4 +68,28 @@ module Buckaruby
66
68
  super(message)
67
69
  end
68
70
  end
71
+
72
+ # Exception raised when trying to refund a non refundable transaction.
73
+ class NonRefundableTransactionException < BuckarooException
74
+ attr_reader :transaction_id
75
+
76
+ def initialize(transaction_id)
77
+ @transaction_id = transaction_id
78
+
79
+ message = "Not a refundable transaction: #{transaction_id}"
80
+ super(message)
81
+ end
82
+ end
83
+
84
+ # Exception raised when trying to cancel a non cancellable transaction.
85
+ class NonCancellableTransactionException < BuckarooException
86
+ attr_reader :transaction_id
87
+
88
+ def initialize(transaction_id)
89
+ @transaction_id = transaction_id
90
+
91
+ message = "Not a cancellable transaction: #{transaction_id}"
92
+ super(message)
93
+ end
94
+ end
69
95
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bigdecimal'
2
- require 'logger'
3
4
 
4
5
  module Buckaruby
5
6
  # Implementation of the BPE 3.0 NVP Gateway.
@@ -9,22 +10,17 @@ module Buckaruby
9
10
  attr_accessor :mode
10
11
  end
11
12
 
12
- attr_reader :options
13
+ attr_reader :config
13
14
 
14
15
  def initialize(options = {})
15
- validate_required_params!(options, :website, :secret)
16
-
17
- @logger = defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
18
- @options = options
19
-
20
- set_buckaroo_mode!(@options)
21
- set_hash_method!(@options)
16
+ @config = Configuration.new(options)
17
+ @logger = config.logger
22
18
  end
23
19
 
24
20
  # Get a list with payment issuers.
25
21
  def issuers(payment_method)
26
- if payment_method != PaymentMethod::IDEAL
27
- raise ArgumentError, "Invalid payment method, only #{PaymentMethod::IDEAL} is supported."
22
+ if payment_method != PaymentMethod::IDEAL && payment_method != PaymentMethod::IDEAL_PROCESSING
23
+ raise ArgumentError, "Invalid payment method, only iDEAL is supported."
28
24
  end
29
25
 
30
26
  Ideal::ISSUERS
@@ -50,6 +46,40 @@ module Buckaruby
50
46
  execute_request(:recurrent_transaction, options)
51
47
  end
52
48
 
49
+ # Checks if a transaction is refundable.
50
+ def refundable?(options = {})
51
+ @logger.debug("[refundable?] options=#{options.inspect}")
52
+
53
+ validate_required_params!(options, :transaction_id)
54
+
55
+ response = execute_request(:refund_info, options)
56
+ response.refundable?
57
+ end
58
+
59
+ # Refund a transaction.
60
+ def refund_transaction(options = {})
61
+ @logger.debug("[refund_transaction] options=#{options.inspect}")
62
+
63
+ validate_refund_transaction_params!(options)
64
+
65
+ response = execute_request(:refund_info, options)
66
+ unless response.refundable?
67
+ raise NonRefundableTransactionException, options[:transaction_id]
68
+ end
69
+
70
+ # Pick maximum refundable amount if amount is not supplied.
71
+ options[:amount] = response.maximum_amount unless options[:amount]
72
+
73
+ # Fill required parameters with data from refund info request.
74
+ options.merge!(
75
+ payment_method: response.payment_method,
76
+ invoicenumber: response.invoicenumber,
77
+ currency: response.currency
78
+ )
79
+
80
+ execute_request(:refund_transaction, options)
81
+ end
82
+
53
83
  # Get transaction status.
54
84
  def status(options = {})
55
85
  @logger.debug("[status] options=#{options.inspect}")
@@ -59,13 +89,37 @@ module Buckaruby
59
89
  execute_request(:status, options)
60
90
  end
61
91
 
92
+ # Checks if a transaction is cancellable.
93
+ def cancellable?(options = {})
94
+ @logger.debug("[cancellable?] options=#{options.inspect}")
95
+
96
+ validate_required_params!(options, :transaction_id)
97
+
98
+ response = execute_request(:status, options)
99
+ response.cancellable?
100
+ end
101
+
102
+ # Cancel a transaction.
103
+ def cancel_transaction(options = {})
104
+ @logger.debug("[cancel_transaction] options=#{options.inspect}")
105
+
106
+ validate_required_params!(options, :transaction_id)
107
+
108
+ response = execute_request(:status, options)
109
+ unless response.cancellable?
110
+ raise NonCancellableTransactionException, options[:transaction_id]
111
+ end
112
+
113
+ execute_request(:cancel, options)
114
+ end
115
+
62
116
  # Verify the response / callback.
63
117
  def callback(response = {})
64
118
  if response.empty?
65
119
  raise ArgumentError, "No callback parameters found"
66
120
  end
67
121
 
68
- CallbackResponse.new(response, @options)
122
+ CallbackResponse.new(response, config)
69
123
  end
70
124
 
71
125
  private
@@ -85,7 +139,7 @@ module Buckaruby
85
139
  required_params << :return_url if options[:payment_method] != PaymentMethod::SEPA_DIRECT_DEBIT
86
140
 
87
141
  case options[:payment_method]
88
- when PaymentMethod::IDEAL
142
+ when PaymentMethod::IDEAL, PaymentMethod::IDEAL_PROCESSING
89
143
  required_params << :payment_issuer
90
144
  when PaymentMethod::SEPA_DIRECT_DEBIT
91
145
  required_params << [:account_iban, :account_name]
@@ -96,7 +150,7 @@ module Buckaruby
96
150
  validate_amount!(options)
97
151
 
98
152
  valid_payment_methods = [
99
- PaymentMethod::IDEAL, PaymentMethod::VISA, PaymentMethod::MASTER_CARD, PaymentMethod::MAESTRO,
153
+ PaymentMethod::IDEAL, PaymentMethod::IDEAL_PROCESSING, PaymentMethod::VISA, PaymentMethod::MASTER_CARD, PaymentMethod::MAESTRO,
100
154
  PaymentMethod::SEPA_DIRECT_DEBIT, PaymentMethod::PAYPAL, PaymentMethod::BANCONTACT_MISTER_CASH
101
155
  ]
102
156
  validate_payment_method!(options, valid_payment_methods)
@@ -106,7 +160,7 @@ module Buckaruby
106
160
 
107
161
  # Validate amount of money, must be greater than 0.
108
162
  def validate_amount!(options)
109
- money = BigDecimal.new(options[:amount].to_s)
163
+ money = BigDecimal(options[:amount].to_s)
110
164
  if money <= 0
111
165
  raise ArgumentError, "Invalid amount: #{options[:amount]} (must be greater than 0)"
112
166
  end
@@ -121,7 +175,7 @@ module Buckaruby
121
175
 
122
176
  # Validate the payment issuer when iDEAL is selected as payment method.
123
177
  def validate_payment_issuer!(options)
124
- if options[:payment_method] == PaymentMethod::IDEAL
178
+ if options[:payment_method] == PaymentMethod::IDEAL || options[:payment_method] == PaymentMethod::IDEAL_PROCESSING
125
179
  unless Ideal::ISSUERS.include?(options[:payment_issuer])
126
180
  raise ArgumentError, "Invalid payment issuer: #{options[:payment_issuer]}"
127
181
  end
@@ -143,6 +197,17 @@ module Buckaruby
143
197
  validate_payment_method!(options, valid_payment_methods)
144
198
  end
145
199
 
200
+ # Validate params for refund transaction.
201
+ def validate_refund_transaction_params!(options)
202
+ unless options[:transaction_id]
203
+ raise ArgumentError, "Missing required parameter: transaction_id"
204
+ end
205
+
206
+ if options[:amount]
207
+ validate_amount!(options)
208
+ end
209
+ end
210
+
146
211
  # Validate params for transaction status.
147
212
  def validate_status_params!(options)
148
213
  if !options[:transaction_id] && !options[:payment_id]
@@ -157,29 +222,6 @@ module Buckaruby
157
222
  options[:account_iban] = iban
158
223
  end
159
224
 
160
- # Set Buckaroo mode from options, class setting or the default (test).
161
- def set_buckaroo_mode!(options)
162
- mode = options.key?(:mode) ? options[:mode] : Gateway.mode
163
- mode ||= :test
164
-
165
- if mode != :test && mode != :production
166
- raise ArgumentError, "Invalid Buckaroo mode provided: #{mode} (expected :test or :production)"
167
- end
168
-
169
- options[:mode] = mode
170
- end
171
-
172
- # Set the hash method from options or default (SHA-1).
173
- def set_hash_method!(options)
174
- hash_method = (options[:hash_method] || "SHA1").downcase.to_sym
175
-
176
- unless [:sha1, :sha256, :sha512].include?(hash_method)
177
- raise ArgumentError, "Invalid hash method provided: #{options[:hash_method]} (expected :sha1, :sha256 or :sha512)"
178
- end
179
-
180
- options[:hash_method] = hash_method
181
- end
182
-
183
225
  # Build and execute a request.
184
226
  def execute_request(request_type, options)
185
227
  request = build_request(request_type)
@@ -187,11 +229,17 @@ module Buckaruby
187
229
 
188
230
  case request_type
189
231
  when :setup_transaction
190
- SetupTransactionResponse.new(response, @options)
232
+ SetupTransactionResponse.new(response, config)
191
233
  when :recurrent_transaction
192
- RecurrentTransactionResponse.new(response, @options)
234
+ RecurrentTransactionResponse.new(response, config)
235
+ when :refund_transaction
236
+ RefundTransactionResponse.new(response, config)
237
+ when :refund_info
238
+ RefundInfoResponse.new(response, config)
193
239
  when :status
194
- StatusResponse.new(response, @options)
240
+ StatusResponse.new(response, config)
241
+ when :cancel
242
+ CancelResponse.new(response, config)
195
243
  end
196
244
  end
197
245
 
@@ -199,11 +247,17 @@ module Buckaruby
199
247
  def build_request(request_type)
200
248
  case request_type
201
249
  when :setup_transaction
202
- SetupTransactionRequest.new(@options)
250
+ SetupTransactionRequest.new(config)
203
251
  when :recurrent_transaction
204
- RecurrentTransactionRequest.new(@options)
252
+ RecurrentTransactionRequest.new(config)
253
+ when :refund_transaction
254
+ RefundTransactionRequest.new(config)
255
+ when :refund_info
256
+ RefundInfoRequest.new(config)
205
257
  when :status
206
- StatusRequest.new(@options)
258
+ StatusRequest.new(config)
259
+ when :cancel
260
+ CancelRequest.new(config)
207
261
  end
208
262
  end
209
263
  end