zaala 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 23d2b71b2a1a767732f1e981ec456ee03d30dfa9aae6da0b331d7f19aee61050
4
- data.tar.gz: 060b17d5d44dda277f3c463358f94083dc03e8f55ae75715ea13322b37298208
3
+ metadata.gz: 3e7ce8d64c7b4f13fb5c03dfc38a431595842dd4d4d34d7c3444014ca458976a
4
+ data.tar.gz: 8d1bcb796c6b71649bfe92fb8a46fc8c42657ad24fbbe1ceea457301c6977dc9
5
5
  SHA512:
6
- metadata.gz: 91778343fc0ee1a12d34e217e72b6486330a4533d28fd0654a0a9ad900b12769731bcd88e453d49a48c17d7686201c148d1cb473abf46498ffb0d82186f1fa86
7
- data.tar.gz: '085382d92b9b1e165d10e071fa1fe0fa5486c3024b8a8848b6074507ee5b775ed95e88437fda5b07e8dd34cc89a90bf58ff7aaf5f80e0b4de6c6b35cf1d02a4c'
6
+ metadata.gz: df99053a8a416b55b7fb4967ae021ce1315257d7123b3a72b8547c1e4cfd72e668c40983701ed014c17d0377b7428ea5237e9d0eb71512d51a3088e21afdefe1
7
+ data.tar.gz: db5b6b6d59c76d4fdfcec8e0ecd995db275fa70c243e3424bb0c07eb9093c54699af2cf464643e3307d6a974b96f5fc21e6193a053ac220c35ad036c08315c43
@@ -13,8 +13,8 @@ module Zaala::API
13
13
  symbolize_keys = lambda { |key| key.to_sym }
14
14
  params = {
15
15
  wsdl: wsdl,
16
- open_timeout: 30, # in seconds
17
- read_timeout: 30, # in seconds
16
+ open_timeout: 30, # seconds
17
+ read_timeout: 30, # seconds
18
18
  convert_response_tags_to: symbolize_keys,
19
19
  log: log,
20
20
  proxy: proxy
@@ -43,14 +43,15 @@ module Zaala::API
43
43
  ensure_operation_exists(:pre_authorize)
44
44
  raise BadRequestError.new("pre_authorize operation requires an AuthorizationRequest parameter") unless req.is_a?(AuthorizationRequest)
45
45
 
46
- @kar.call(:pre_authorize) do
46
+ res = @kar.call(:pre_authorize) do
47
47
  message(authorizationRequest: req.to_message)
48
48
  end
49
+ AuthorizationResponse.from_message(res.body[:preAuthorizeResponse][:return])
49
50
  rescue Savon::SOAPFault => e
50
- # IS0003
51
- # TODO: Extract error code from response body
52
- # e.g. (The content of at least one field is invalid and did not pass the validation)
53
- raise BadRequestError.new(e)
51
+ # Extract bad request errors
52
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
53
+ # Fallback to standard errro
54
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
54
55
  end
55
56
 
56
57
  # Authorizes a purchase transaction.
@@ -63,8 +64,10 @@ module Zaala::API
63
64
  end
64
65
  AuthorizationResponse.from_message(res.body[:authorizeResponse][:return])
65
66
  rescue Savon::SOAPFault => e
66
- # e.g. (The content of at least one field is invalid and did not pass the validation)
67
- raise BadRequestError.new(e)
67
+ # Extract bad request errors
68
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
69
+ # Fallback to standard errro
70
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
68
71
  end
69
72
 
70
73
  # Cancel a previous reservation of funds.
@@ -72,12 +75,15 @@ module Zaala::API
72
75
  ensure_operation_exists(:cancel_authorization)
73
76
  raise BadRequestError.new("cancel_authorization operation requires a CancellationRequest parameter") unless req.is_a?(CancellationRequest)
74
77
 
75
- @kar.call(:cancel_authorization) do
78
+ res = @kar.call(:cancel_authorization) do
76
79
  message(cancellationRequest: req.to_message)
77
80
  end
81
+ CancellationResponse.from_message(res.body[:cancelAuthorizationResponse][:return])
78
82
  rescue Savon::SOAPFault => e
79
- # e.g. (The content of at least one field is invalid and did not pass the validation)
80
- raise BadRequestError.new(e)
83
+ # Extract bad request errors
84
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
85
+ # Fallback to standard errro
86
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
81
87
  end
82
88
 
83
89
  # Perform a solvency check.
@@ -85,12 +91,15 @@ module Zaala::API
85
91
  ensure_operation_exists(:check)
86
92
  raise BadRequestError.new("check operation requires a CheckRequest parameter") unless req.is_a?(CheckRequest)
87
93
 
88
- @kar.call(:check) do
94
+ res = @kar.call(:check) do
89
95
  message(checkRequest: req.to_message)
90
96
  end
97
+ CheckResponse.from_message(res.body[:checkResponse][:return])
91
98
  rescue Savon::SOAPFault => e
92
- # e.g. (The content of at least one field is invalid and did not pass the validation)
93
- raise BadRequestError.new(e)
99
+ # Extract bad request errors
100
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
101
+ # Fallback to standard errro
102
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
94
103
  end
95
104
 
96
105
  # Returns available information about an authorization-ID.
@@ -98,13 +107,15 @@ module Zaala::API
98
107
  ensure_operation_exists(:info)
99
108
  raise BadRequestError.new("info operation requires an InfoRequest parameter") unless req.is_a?(InfoRequest)
100
109
 
101
- @kar.call(:info) do
110
+ res = @kar.call(:info) do
102
111
  message(infoRequest: req.to_message)
103
112
  end
113
+ InfoResponse.from_message(res.body[:infoResponse][:return])
104
114
  rescue Savon::SOAPFault => e
105
- # TODO: Extract error code from response body
106
- # e.g. (The content of at least one field is invalid and did not pass the validation)
107
- raise BadRequestError.new(e)
115
+ # Extract bad request errors
116
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
117
+ # Fallback to standard errro
118
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
108
119
  end
109
120
 
110
121
  # Verifies the given MTAN.
@@ -112,13 +123,15 @@ module Zaala::API
112
123
  ensure_operation_exists(:verify)
113
124
  raise BadRequestError.new("info operation requires a VerifyRequest parameter") unless req.is_a?(VerifyRequest)
114
125
 
115
- @kar.call(:verify) do
126
+ res = @kar.call(:verify) do
116
127
  message(verifyRequest: req.to_message)
117
128
  end
129
+ VerifyResponse.from_message(res.body[:verifyResponse][:return])
118
130
  rescue Savon::SOAPFault => e
119
- # TODO: Extract error code from response body
120
- # e.g. (The content of at least one field is invalid and did not pass the validation)
121
- raise BadRequestError.new(e)
131
+ # Extract bad request errors
132
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
133
+ # Fallback to standard errro
134
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
122
135
  end
123
136
 
124
137
  # Submits a purchase transaction with a previous authorization of funds.
@@ -131,9 +144,10 @@ module Zaala::API
131
144
  end
132
145
  SubmissionResponse.from_message(res.body[:submitAuthorizationResponse][:return])
133
146
  rescue Savon::SOAPFault => e
134
- # TODO: Extract error code from response body
135
- # e.g. (The content of at least one field is invalid and did not pass the validation)
136
- raise BadRequestError.new(e)
147
+ # Extract bad request errors
148
+ maybe_raise_invalid_fields(e.to_hash[:Fault])
149
+ # Fallback to standard errro
150
+ raise StandardError, e.to_hash.dig(:Fault, :faultstring)
137
151
  end
138
152
 
139
153
  # Authorizes a credit transaction.
@@ -144,6 +158,15 @@ module Zaala::API
144
158
 
145
159
  private
146
160
 
161
+ def maybe_raise_invalid_fields(fault)
162
+ fields = fault.dig(:detail, :invalidFieldsFaultMessage, :invalidFields)
163
+ fields = [fields] if fields.kind_of?(Hash)
164
+ return [] unless fields.kind_of?(Array)
165
+
166
+ fields = fields.map { |f| FieldViolation.new(f[:code], f[:message]) }
167
+ raise BadRequestError.new(fault[:faultstring], fields) unless fields.empty?
168
+ end
169
+
147
170
  def ensure_operation_exists(op)
148
171
  raise(UnsupportedServiceEndpoint, op) unless @kar.operations.include?(op)
149
172
  end
@@ -1,7 +1,21 @@
1
1
  module Zaala::API
2
2
  class MissingError < StandardError
3
3
  end
4
+ class FieldViolation
5
+ attr_reader :field, :description
6
+
7
+ def initialize(field, description)
8
+ @field = field
9
+ @description = description
10
+ end
11
+ end
4
12
  class BadRequestError < StandardError
13
+ attr_reader :fields
14
+
15
+ def initialize(msg, fields = [])
16
+ super(msg)
17
+ @fields = fields
18
+ end
5
19
  end
6
20
  class PermissionError < StandardError
7
21
  end
@@ -804,7 +804,7 @@ module Zaala::API
804
804
  {
805
805
  identifier: identifier.to_message,
806
806
  additionalData: additional_data.to_message,
807
- verificationCode: verification_code,
807
+ verificationCode: verification_code
808
808
  }
809
809
  end
810
810
  end
@@ -830,4 +830,51 @@ module Zaala::API
830
830
  })
831
831
  end
832
832
  end
833
+
834
+ class CheckRequest < Dry::Struct
835
+ # Environment parameters and information to identify the caller.
836
+ attribute :identifier, Zaala::API::RequestIdentifier
837
+ # Personal data of the customer.
838
+ attribute :personal_data, Zaala::API::PersonalData
839
+ # Invoice address of the purchase.
840
+ attribute :invoice_address, Zaala::API::InvoiceAddress
841
+ # Key-value pairs holding information of the service's client (e.g. IPv4 address).
842
+ # attribute :client_info, Zaala::API::ClientInfo
843
+ # Requested amount of the preauthorization/authorization.
844
+ # It corresponds to the total amount, which has to be authorized.
845
+ # Mandatory if no Basket is provided in the request.
846
+ # (IF0001) If a Basket is provided in the request, this value is ignored.
847
+ attribute :requested_amount, Types::Strict::Float
848
+ # Additional purchase related information.
849
+ attribute :additional_data, Zaala::API::AdditionalData
850
+
851
+ def to_message
852
+ {
853
+ identifier: identifier.to_message,
854
+ personal_data: personal_data.to_message,
855
+ invoice_address: invoice_address.to_message,
856
+ client_info: client_info.to_message,
857
+ requested_amount: requested_amount,
858
+ additional_data: additional_data.to_message
859
+ }
860
+ end
861
+ end
862
+
863
+ class CheckResponse < Dry::Struct
864
+ # Contains information to identify the authorization in a future request.
865
+ attribute :identifier, Zaala::API::ResponseIdentifier
866
+ # Contains additional information concerning the authorization.
867
+ attribute :decision, Zaala::API::Decision
868
+
869
+ # Contains additional information concerning the authorization.
870
+ attribute :info, Zaala::API::Info.optional.default(nil)
871
+
872
+ def self.from_message(h)
873
+ VerifyResponse.new({
874
+ identifier: Zaala::API::ResponseIdentifier.from_message(h[:identifier]),
875
+ decision: Zaala::API::Decision.from_message(h[:decision]),
876
+ info: h[:info] ? Zaala::API::Info.from_message(h[:info]) : nil,
877
+ })
878
+ end
879
+ end
833
880
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zaala
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Denteo AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-08 00:00:00.000000000 Z
11
+ date: 2021-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-types