mastercard_api_core 1.4.0 → 1.4.1
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 +4 -4
- data/lib/mastercard/core/baseobject.rb +87 -0
- data/lib/mastercard/core/constants.rb +4 -0
- data/lib/mastercard/core/exceptions.rb +71 -236
- data/lib/mastercard/core/model.rb +7 -74
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eaace8e42ca4512e5c646aeb38a80e618f24ac15
|
4
|
+
data.tar.gz: 2103ad5fd5f01b2c32463eac4f2cebc8e1619bfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbfecc3d34189d931472d46032f186305aea93451d966f8095e1a30876438902c61141eab82239613de84b2fa1255e1357a9188d64f341b9005ce3b9f5a53bf3
|
7
|
+
data.tar.gz: 1b29b096869b4b6048db37068c1d851b183b4fb1fe546bbf3385bd744db0906765e87bda82bd18362e7a6e6c859365de0750be9467cae4936d8ca8a8c11293a9
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require "mastercard/core/controller"
|
2
|
+
require "mastercard/core/model"
|
3
|
+
|
4
|
+
module MasterCard
|
5
|
+
module Core
|
6
|
+
module Model
|
7
|
+
################################################################################
|
8
|
+
# BaseObject
|
9
|
+
################################################################################
|
10
|
+
|
11
|
+
class BaseObject < RequestMap
|
12
|
+
include MasterCard::Core::Controller
|
13
|
+
include MasterCard::Core::Model
|
14
|
+
|
15
|
+
def initialize(requestMap = nil)
|
16
|
+
|
17
|
+
#call the base class constructor
|
18
|
+
super()
|
19
|
+
|
20
|
+
unless requestMap.nil?
|
21
|
+
setAll(requestMap.getObject())
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def self.getOperationConfig(uuid)
|
30
|
+
raise NotImplementedError.new("Child class must define getOperationConfig method to use this class")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.getOperationMetadata()
|
34
|
+
raise NotImplementedError.new("Child class must define getOperationMetadata method to use this class")
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.execute(operationUUID,inputObject)
|
38
|
+
|
39
|
+
|
40
|
+
config = inputObject.class.getOperationConfig(operationUUID)
|
41
|
+
metadata = inputObject.class.getOperationMetadata()
|
42
|
+
|
43
|
+
response = APIController.new.execute(config,metadata,inputObject.getObject())
|
44
|
+
returnObjClass = inputObject.class
|
45
|
+
|
46
|
+
if config.getAction().upcase == APIController::ACTION_LIST
|
47
|
+
returnObj = []
|
48
|
+
|
49
|
+
if response.is_a?(Hash) && response.key?(RequestMap::KEY_LIST)
|
50
|
+
response = response[RequestMap::KEY_LIST]
|
51
|
+
end
|
52
|
+
|
53
|
+
if response.is_a?(Hash)
|
54
|
+
|
55
|
+
response.each do |key,value|
|
56
|
+
|
57
|
+
requestMap = RequestMap.new
|
58
|
+
requestMap.setAll(value)
|
59
|
+
returnObj.push(returnObjClass.new(requestMap))
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
elsif response.is_a?(Array)
|
64
|
+
|
65
|
+
response.each do |value|
|
66
|
+
requestMap = RequestMap.new
|
67
|
+
requestMap.setAll(value)
|
68
|
+
returnObj.push(returnObjClass.new(requestMap))
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
return returnObj
|
74
|
+
else
|
75
|
+
|
76
|
+
requestMap = RequestMap.new
|
77
|
+
requestMap.setAll(response)
|
78
|
+
return returnObjClass.new(requestMap)
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -34,6 +34,8 @@ module MasterCard
|
|
34
34
|
module Environment
|
35
35
|
PRODUCTION = "production"
|
36
36
|
SANDBOX = "sandbox"
|
37
|
+
SANDBOX_MTF = "sandbox_mtf"
|
38
|
+
SANDBOX_ITF = "sandbox_itf"
|
37
39
|
STAGE = "stage"
|
38
40
|
DEV = "dev"
|
39
41
|
PRODUCTION_MTF = "production_mtf"
|
@@ -45,6 +47,8 @@ module MasterCard
|
|
45
47
|
MAPPING = {
|
46
48
|
"production" => ["https://api.mastercard.com", nil],
|
47
49
|
"sandbox" => ["https://sandbox.api.mastercard.com", nil],
|
50
|
+
"sandbox_mtf" => ["https://sandbox.api.mastercard.com", "mtf"],
|
51
|
+
"sandbox_itf" => ["https://sandbox.api.mastercard.com", "itf"],
|
48
52
|
"stage" => ["https://stage.api.mastercard.com", nil],
|
49
53
|
"dev" => ["https://dev.api.mastercard.com", nil],
|
50
54
|
"production_mtf" => ["https://api.mastercard.com", "mtf"],
|
@@ -24,6 +24,9 @@
|
|
24
24
|
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
25
25
|
# SUCH DAMAGE.
|
26
26
|
#
|
27
|
+
|
28
|
+
require 'mastercard/core/model'
|
29
|
+
|
27
30
|
module MasterCard
|
28
31
|
module Core
|
29
32
|
module Exceptions
|
@@ -32,69 +35,80 @@ module MasterCard
|
|
32
35
|
# APIException
|
33
36
|
################################################################################
|
34
37
|
class APIException < StandardError
|
38
|
+
include MasterCard::Core::Model
|
35
39
|
#
|
36
40
|
# Base Class for all the API exceptions
|
37
|
-
def initialize(message,
|
41
|
+
def initialize(message,http_status=nil, error_data=nil)
|
38
42
|
#Call the base class constructor
|
39
43
|
super(message)
|
40
44
|
|
41
45
|
@message = message
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@
|
46
|
+
@http_status = http_status
|
47
|
+
@raw_error_data = error_data
|
48
|
+
@reason_code = nil
|
49
|
+
@source = nil
|
50
|
+
@description = nil
|
45
51
|
|
46
52
|
#If error_data is not nil set the appropriate message
|
47
53
|
unless error_data.nil?
|
48
54
|
|
49
|
-
|
50
|
-
|
51
|
-
if error_data.is_a?(Hash) && error_data.key?("Errors") && error_data["Errors"].key?("Error")
|
55
|
+
@raw_error_data = SmartMap.new
|
56
|
+
@raw_error_data.setAll(error_data);
|
52
57
|
|
53
|
-
|
58
|
+
error_data_case_insensitive = parseMap(error_data)
|
59
|
+
|
60
|
+
# If error_data is of type hash and has Key 'Errors' which has a key 'Error'
|
61
|
+
if error_data_case_insensitive.key?("errors") && error_data_case_insensitive["errors"].key?("error")
|
62
|
+
error_hash = error_data_case_insensitive["errors"]["error"]
|
54
63
|
|
55
64
|
#Case of multiple errors take the first one
|
56
|
-
if error_hash.is_a?(
|
65
|
+
if error_hash.is_a?(Hash)
|
66
|
+
initDataFromHash(error_hash)
|
67
|
+
|
68
|
+
#If error Data is of Type Array
|
69
|
+
elsif error_hash.is_a?(Array)
|
70
|
+
#Take the first error
|
57
71
|
error_hash = error_hash[0]
|
72
|
+
initDataFromHash(error_hash)
|
58
73
|
end
|
59
|
-
|
60
|
-
initDataFromHash(error_hash)
|
61
|
-
|
62
|
-
#If error Data is of Type Array
|
63
|
-
elsif error_data.is_a?(Array)
|
64
|
-
#Take the first error
|
65
|
-
error_hash = error_data[0]
|
66
|
-
initDataFromHash(error_hash)
|
67
74
|
end
|
68
75
|
end
|
69
|
-
|
70
76
|
end
|
71
77
|
|
72
78
|
def getMessage()
|
73
|
-
|
79
|
+
if @description.nil?
|
80
|
+
return @message
|
81
|
+
else
|
82
|
+
return @description
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def getHttpStatus()
|
87
|
+
return @http_status
|
74
88
|
end
|
75
89
|
|
76
|
-
def
|
77
|
-
return @
|
90
|
+
def getReasonCode()
|
91
|
+
return @reason_code
|
78
92
|
end
|
79
93
|
|
80
|
-
def
|
81
|
-
return @
|
94
|
+
def getSource()
|
95
|
+
return @source
|
82
96
|
end
|
83
97
|
|
84
|
-
def
|
85
|
-
return @
|
98
|
+
def getRawErrorData()
|
99
|
+
return @raw_error_data
|
86
100
|
end
|
87
101
|
|
88
102
|
def describe()
|
89
103
|
exception = self.class.name
|
90
104
|
exception << ": \""
|
91
105
|
exception << getMessage()
|
92
|
-
exception << "\" (
|
93
|
-
exception << "%s" %
|
94
|
-
errorCode =
|
106
|
+
exception << "\" (http_status: "
|
107
|
+
exception << "%s" % getHttpStatus()
|
108
|
+
errorCode = getReasonCode()
|
95
109
|
unless errorCode.nil?
|
96
|
-
exception << ",
|
97
|
-
exception << "%s" %
|
110
|
+
exception << ", reason_code: "
|
111
|
+
exception << "%s" % getReasonCode()
|
98
112
|
end
|
99
113
|
exception << ")"
|
100
114
|
return exception
|
@@ -107,219 +121,40 @@ module MasterCard
|
|
107
121
|
private
|
108
122
|
|
109
123
|
def initDataFromHash(error_hash)
|
110
|
-
@
|
111
|
-
@
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
if status.nil?
|
127
|
-
status = 500
|
128
|
-
end
|
129
|
-
|
130
|
-
#Call the base class constructor
|
131
|
-
super(message,status,error_data)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
|
136
|
-
################################################################################
|
137
|
-
# ObjectNotFoundException
|
138
|
-
################################################################################
|
139
|
-
|
140
|
-
class ObjectNotFoundException < APIException
|
141
|
-
#
|
142
|
-
#Exception raised when the endpoint does not exist.
|
143
|
-
def initialize(message=nil,status=nil,error_data=nil)
|
144
|
-
|
145
|
-
|
146
|
-
if status.nil?
|
147
|
-
status = 404
|
148
|
-
end
|
149
|
-
|
150
|
-
#Call the base class constructor
|
151
|
-
super(message,status,error_data)
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
################################################################################
|
156
|
-
# AuthenticationException
|
157
|
-
################################################################################
|
158
|
-
|
159
|
-
class AuthenticationException < APIException
|
160
|
-
#
|
161
|
-
#Exception raised where there are problems authenticating a request.
|
162
|
-
def initialize(message=nil,status=nil,error_data=nil)
|
163
|
-
|
164
|
-
|
165
|
-
if status.nil?
|
166
|
-
status = 401
|
167
|
-
end
|
168
|
-
|
169
|
-
#Call the base class constructor
|
170
|
-
super(message,status,error_data)
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
174
|
-
################################################################################
|
175
|
-
# InvalidRequestException
|
176
|
-
################################################################################
|
177
|
-
|
178
|
-
class InvalidRequestException < APIException
|
179
|
-
#
|
180
|
-
#Exception raised when the API request contains errors.
|
181
|
-
|
182
|
-
def initialize(message=nil,status=nil,error_data=nil)
|
183
|
-
|
184
|
-
if status.nil?
|
185
|
-
status = 400
|
186
|
-
end
|
187
|
-
|
188
|
-
#Call the base class constructor
|
189
|
-
super(message,status,error_data)
|
190
|
-
|
191
|
-
@fieldErrors = []
|
192
|
-
|
193
|
-
#If error_data is not nil set the appropriate message
|
194
|
-
unless error_data.nil?
|
195
|
-
|
196
|
-
error_hash = Hash.new
|
197
|
-
# If error_data is of type hash and has Key 'Errors' which has a key 'Error'
|
198
|
-
if error_data.is_a?(Hash) && error_data.key?("Errors") && error_data["Errors"].key?("Error")
|
199
|
-
|
200
|
-
error_hash = error_data["Errors"]["Error"]
|
201
|
-
|
202
|
-
#Case of multiple errors take the first one
|
203
|
-
if error_hash.is_a?(Array)
|
204
|
-
error_hash = error_hash[0]
|
205
|
-
end
|
206
|
-
|
207
|
-
initFieldDataFromHash(error_hash)
|
208
|
-
|
209
|
-
#If error Data is of Type Array
|
210
|
-
elsif error_data.is_a?(Array)
|
211
|
-
#Take the first error
|
212
|
-
error_hash = error_data[0]
|
213
|
-
initFieldDataFromHash(error_hash)
|
124
|
+
@reason_code = error_hash.fetch("reasoncode",nil)
|
125
|
+
@description = error_hash.fetch("description",@message)
|
126
|
+
@source = error_hash.fetch("source",nil)
|
127
|
+
end
|
128
|
+
|
129
|
+
def parseMap(map)
|
130
|
+
parsedMap = {}
|
131
|
+
map.each do |k, v|
|
132
|
+
if v.is_a?(Array)
|
133
|
+
parsedMap[k.to_s.downcase] = parseList(v)
|
134
|
+
elsif v.is_a?(Hash)
|
135
|
+
parsedMap[k.to_s.downcase] = parseMap(v)
|
136
|
+
else
|
137
|
+
parsedMap[k.to_s.downcase] = v
|
214
138
|
end
|
215
139
|
end
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
def
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
des = super()
|
229
|
-
@fieldErrors.each do |field_error|
|
230
|
-
des << "\n #{field_error}"
|
231
|
-
end
|
232
|
-
return des
|
233
|
-
end
|
234
|
-
|
235
|
-
def to_s
|
236
|
-
return "%s"%describe()
|
237
|
-
end
|
238
|
-
|
239
|
-
private
|
240
|
-
|
241
|
-
def initFieldDataFromHash(error_hash)
|
242
|
-
if error_hash.key?("FieldErrors")
|
243
|
-
error_hash.fetch("FieldErrors").each do |field_error|
|
244
|
-
@fieldErrors << "%s"%FieldError.new(field_error)
|
140
|
+
return parsedMap
|
141
|
+
end
|
142
|
+
|
143
|
+
def parseList(l)
|
144
|
+
parsedList = []
|
145
|
+
l.each do |v|
|
146
|
+
if v.is_a?(Array)
|
147
|
+
parsedList << parseList(v)
|
148
|
+
elsif v.is_a?(Hash)
|
149
|
+
parsedList << parseMap(v)
|
150
|
+
else
|
151
|
+
parsedList << v
|
245
152
|
end
|
246
153
|
end
|
154
|
+
return parsedList
|
247
155
|
end
|
248
156
|
|
249
|
-
|
250
|
-
|
251
157
|
end
|
252
|
-
|
253
|
-
################################################################################
|
254
|
-
# NotAllowedException
|
255
|
-
################################################################################
|
256
|
-
|
257
|
-
class NotAllowedException < APIException
|
258
|
-
#
|
259
|
-
#Exception when a request was not allowed.
|
260
|
-
def initialize(message=nil,status=nil,error_data=nil)
|
261
|
-
|
262
|
-
|
263
|
-
if status.nil?
|
264
|
-
status = 403
|
265
|
-
end
|
266
|
-
|
267
|
-
#Call the base class constructor
|
268
|
-
super(message,status,error_data)
|
269
|
-
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
|
274
|
-
################################################################################
|
275
|
-
# SystemException
|
276
|
-
################################################################################
|
277
|
-
|
278
|
-
class SystemException < APIException
|
279
|
-
#
|
280
|
-
#Exception when there was a system error processing a request.
|
281
|
-
def initialize(message=nil,status=nil,error_data=nil)
|
282
|
-
|
283
|
-
|
284
|
-
if status.nil?
|
285
|
-
status = 500
|
286
|
-
end
|
287
|
-
|
288
|
-
#Call the base class constructor
|
289
|
-
super(message,status,error_data)
|
290
|
-
end
|
291
|
-
end
|
292
|
-
|
293
|
-
################################################################################
|
294
|
-
# FieldError
|
295
|
-
################################################################################
|
296
|
-
|
297
|
-
class FieldError
|
298
|
-
|
299
|
-
def initialize(params)
|
300
|
-
|
301
|
-
@name = params.fetch("field","")
|
302
|
-
@message = params.fetch("message","")
|
303
|
-
@code = params.fetch("code")
|
304
|
-
end
|
305
|
-
|
306
|
-
def getFieldName
|
307
|
-
return @name
|
308
|
-
end
|
309
|
-
|
310
|
-
def getErrorMessage
|
311
|
-
return @message
|
312
|
-
end
|
313
|
-
|
314
|
-
def getErrorCode
|
315
|
-
return @code
|
316
|
-
end
|
317
|
-
|
318
|
-
def to_s
|
319
|
-
return "Field Error: #{@name} \"#{@message}\" (#{@code})"
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
158
|
end
|
324
159
|
end
|
325
160
|
end
|
@@ -24,16 +24,14 @@
|
|
24
24
|
# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
25
25
|
# SUCH DAMAGE.
|
26
26
|
#
|
27
|
-
require "mastercard/core/controller"
|
28
|
-
|
29
27
|
module MasterCard
|
30
28
|
module Core
|
31
29
|
module Model
|
32
30
|
################################################################################
|
33
|
-
#
|
31
|
+
# SmartMap
|
34
32
|
################################################################################
|
35
33
|
|
36
|
-
class
|
34
|
+
class SmartMap
|
37
35
|
|
38
36
|
KEY_LIST = "list"
|
39
37
|
|
@@ -400,83 +398,18 @@ module MasterCard
|
|
400
398
|
end
|
401
399
|
|
402
400
|
################################################################################
|
403
|
-
#
|
401
|
+
# RequestMap
|
404
402
|
################################################################################
|
405
403
|
|
406
|
-
class
|
407
|
-
|
408
|
-
|
409
|
-
def initialize(requestMap = nil)
|
410
|
-
|
404
|
+
class RequestMap < SmartMap
|
405
|
+
def initialize
|
411
406
|
#call the base class constructor
|
412
407
|
super()
|
413
|
-
|
414
|
-
unless requestMap.nil?
|
415
|
-
setAll(requestMap.getObject())
|
416
|
-
end
|
417
|
-
|
418
|
-
end
|
419
|
-
|
420
|
-
|
421
|
-
protected
|
422
|
-
|
423
|
-
def self.getOperationConfig(uuid)
|
424
|
-
raise NotImplementedError.new("Child class must define getOperationConfig method to use this class")
|
425
|
-
end
|
426
|
-
|
427
|
-
def self.getOperationMetadata()
|
428
|
-
raise NotImplementedError.new("Child class must define getOperationMetadata method to use this class")
|
429
|
-
end
|
430
|
-
|
431
|
-
def self.execute(operationUUID,inputObject)
|
432
|
-
|
433
|
-
|
434
|
-
config = inputObject.class.getOperationConfig(operationUUID)
|
435
|
-
metadata = inputObject.class.getOperationMetadata()
|
436
|
-
|
437
|
-
response = APIController.new.execute(config,metadata,inputObject.getObject())
|
438
|
-
returnObjClass = inputObject.class
|
439
|
-
|
440
|
-
if config.getAction().upcase == APIController::ACTION_LIST
|
441
|
-
returnObj = []
|
442
|
-
|
443
|
-
if response.is_a?(Hash) && response.key?(RequestMap::KEY_LIST)
|
444
|
-
response = response[RequestMap::KEY_LIST]
|
445
|
-
end
|
446
|
-
|
447
|
-
if response.is_a?(Hash)
|
448
|
-
|
449
|
-
response.each do |key,value|
|
450
|
-
|
451
|
-
requestMap = RequestMap.new
|
452
|
-
requestMap.setAll(value)
|
453
|
-
returnObj.push(returnObjClass.new(requestMap))
|
454
|
-
|
455
|
-
end
|
456
|
-
|
457
|
-
elsif response.is_a?(Array)
|
458
|
-
|
459
|
-
response.each do |value|
|
460
|
-
requestMap = RequestMap.new
|
461
|
-
requestMap.setAll(value)
|
462
|
-
returnObj.push(returnObjClass.new(requestMap))
|
463
|
-
|
464
|
-
end
|
465
|
-
|
466
|
-
end
|
467
|
-
return returnObj
|
468
|
-
else
|
469
|
-
|
470
|
-
requestMap = RequestMap.new
|
471
|
-
requestMap.setAll(response)
|
472
|
-
return returnObjClass.new(requestMap)
|
473
|
-
|
474
|
-
end
|
475
|
-
|
476
408
|
end
|
477
|
-
|
478
409
|
end
|
479
410
|
|
411
|
+
|
412
|
+
|
480
413
|
|
481
414
|
end
|
482
415
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mastercard_api_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- MasterCard Worldwide
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -46,6 +46,7 @@ executables: []
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
+
- lib/mastercard/core/baseobject.rb
|
49
50
|
- lib/mastercard/core/config.rb
|
50
51
|
- lib/mastercard/core/constants.rb
|
51
52
|
- lib/mastercard/core/controller.rb
|