mastercard_masterpass_merchant 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +24 -0
  3. data/README.md +74 -0
  4. data/lib/mastercard_masterpass_merchant.rb +182 -0
  5. data/lib/mastercard_masterpass_merchant/api/checkout_api.rb +41 -0
  6. data/lib/mastercard_masterpass_merchant/api/decryption_api.rb +40 -0
  7. data/lib/mastercard_masterpass_merchant/api/express_checkout_api.rb +42 -0
  8. data/lib/mastercard_masterpass_merchant/api/merchant_initialization_api.rb +40 -0
  9. data/lib/mastercard_masterpass_merchant/api/postback_api.rb +39 -0
  10. data/lib/mastercard_masterpass_merchant/api/precheckout_data_api.rb +42 -0
  11. data/lib/mastercard_masterpass_merchant/api/session_key_signing_api.rb +40 -0
  12. data/lib/mastercard_masterpass_merchant/api/shopping_cart_api.rb +40 -0
  13. data/lib/mastercard_masterpass_merchant/models/acceptance_option.rb +177 -0
  14. data/lib/mastercard_masterpass_merchant/models/address.rb +243 -0
  15. data/lib/mastercard_masterpass_merchant/models/address_extension_point.rb +176 -0
  16. data/lib/mastercard_masterpass_merchant/models/authentication_options.rb +265 -0
  17. data/lib/mastercard_masterpass_merchant/models/base_card.rb +221 -0
  18. data/lib/mastercard_masterpass_merchant/models/brands.rb +165 -0
  19. data/lib/mastercard_masterpass_merchant/models/card.rb +244 -0
  20. data/lib/mastercard_masterpass_merchant/models/card_extension.rb +189 -0
  21. data/lib/mastercard_masterpass_merchant/models/card_type.rb +174 -0
  22. data/lib/mastercard_masterpass_merchant/models/card_types.rb +166 -0
  23. data/lib/mastercard_masterpass_merchant/models/checkout.rb +259 -0
  24. data/lib/mastercard_masterpass_merchant/models/checkout_dsrp.rb +210 -0
  25. data/lib/mastercard_masterpass_merchant/models/checkout_extension.rb +259 -0
  26. data/lib/mastercard_masterpass_merchant/models/contact.rb +275 -0
  27. data/lib/mastercard_masterpass_merchant/models/date_of_birth.rb +199 -0
  28. data/lib/mastercard_masterpass_merchant/models/decryption_request.rb +199 -0
  29. data/lib/mastercard_masterpass_merchant/models/decryption_response.rb +165 -0
  30. data/lib/mastercard_masterpass_merchant/models/detail.rb +176 -0
  31. data/lib/mastercard_masterpass_merchant/models/details.rb +176 -0
  32. data/lib/mastercard_masterpass_merchant/models/dsrp.rb +199 -0
  33. data/lib/mastercard_masterpass_merchant/models/dsrp_extension.rb +189 -0
  34. data/lib/mastercard_masterpass_merchant/models/dsrp_options.rb +188 -0
  35. data/lib/mastercard_masterpass_merchant/models/error.rb +222 -0
  36. data/lib/mastercard_masterpass_merchant/models/errors.rb +174 -0
  37. data/lib/mastercard_masterpass_merchant/models/express_checkout_request.rb +276 -0
  38. data/lib/mastercard_masterpass_merchant/models/express_checkout_response.rb +201 -0
  39. data/lib/mastercard_masterpass_merchant/models/extension_point.rb +163 -0
  40. data/lib/mastercard_masterpass_merchant/models/installment.rb +221 -0
  41. data/lib/mastercard_masterpass_merchant/models/installment_option.rb +198 -0
  42. data/lib/mastercard_masterpass_merchant/models/installment_options.rb +166 -0
  43. data/lib/mastercard_masterpass_merchant/models/installments.rb +176 -0
  44. data/lib/mastercard_masterpass_merchant/models/issuers.rb +165 -0
  45. data/lib/mastercard_masterpass_merchant/models/merchant_initialization_extension.rb +201 -0
  46. data/lib/mastercard_masterpass_merchant/models/merchant_initialization_request.rb +199 -0
  47. data/lib/mastercard_masterpass_merchant/models/merchant_initialization_response.rb +177 -0
  48. data/lib/mastercard_masterpass_merchant/models/merchant_initialization_response_extension.rb +165 -0
  49. data/lib/mastercard_masterpass_merchant/models/merchant_transaction.rb +274 -0
  50. data/lib/mastercard_masterpass_merchant/models/merchant_transactions.rb +176 -0
  51. data/lib/mastercard_masterpass_merchant/models/option.rb +197 -0
  52. data/lib/mastercard_masterpass_merchant/models/pairing_data_type.rb +186 -0
  53. data/lib/mastercard_masterpass_merchant/models/pairing_data_types.rb +188 -0
  54. data/lib/mastercard_masterpass_merchant/models/payment_acceptance.rb +166 -0
  55. data/lib/mastercard_masterpass_merchant/models/payment_acceptance_types_extension.rb +166 -0
  56. data/lib/mastercard_masterpass_merchant/models/payment_options_extensions.rb +178 -0
  57. data/lib/mastercard_masterpass_merchant/models/precheckout_card.rb +288 -0
  58. data/lib/mastercard_masterpass_merchant/models/precheckout_cards.rb +188 -0
  59. data/lib/mastercard_masterpass_merchant/models/precheckout_data.rb +259 -0
  60. data/lib/mastercard_masterpass_merchant/models/precheckout_data_request.rb +178 -0
  61. data/lib/mastercard_masterpass_merchant/models/precheckout_data_response.rb +211 -0
  62. data/lib/mastercard_masterpass_merchant/models/precheckout_reward_program.rb +243 -0
  63. data/lib/mastercard_masterpass_merchant/models/precheckout_shipping_address.rb +298 -0
  64. data/lib/mastercard_masterpass_merchant/models/precheckout_shipping_addresses.rb +188 -0
  65. data/lib/mastercard_masterpass_merchant/models/private_data.rb +177 -0
  66. data/lib/mastercard_masterpass_merchant/models/private_datas.rb +166 -0
  67. data/lib/mastercard_masterpass_merchant/models/reward_program.rb +221 -0
  68. data/lib/mastercard_masterpass_merchant/models/reward_programs.rb +188 -0
  69. data/lib/mastercard_masterpass_merchant/models/risk_decisioning.rb +178 -0
  70. data/lib/mastercard_masterpass_merchant/models/session_key_signing_request.rb +199 -0
  71. data/lib/mastercard_masterpass_merchant/models/session_key_signing_response.rb +210 -0
  72. data/lib/mastercard_masterpass_merchant/models/shipping_address.rb +265 -0
  73. data/lib/mastercard_masterpass_merchant/models/shopping_cart.rb +210 -0
  74. data/lib/mastercard_masterpass_merchant/models/shopping_cart_item.rb +210 -0
  75. data/lib/mastercard_masterpass_merchant/models/shopping_cart_request.rb +189 -0
  76. data/lib/mastercard_masterpass_merchant/models/shopping_cart_request_extension_point.rb +165 -0
  77. data/lib/mastercard_masterpass_merchant/models/shopping_cart_response.rb +177 -0
  78. data/lib/mastercard_masterpass_merchant/models/tokenization.rb +188 -0
  79. data/lib/mastercard_masterpass_merchant/models/types.rb +174 -0
  80. data/lib/mastercard_masterpass_merchant/models/wallet.rb +177 -0
  81. data/lib/mastercard_masterpass_merchant/tracker/sdk_api_tracker.rb +57 -0
  82. data/lib/mastercard_masterpass_merchant/version.rb +3 -0
  83. metadata +240 -0
@@ -0,0 +1,165 @@
1
+ require 'date'
2
+ require 'roxml'
3
+
4
+
5
+ module MastercardMasterpassMerchant
6
+ # This class return the response for DSRP during merchant initialization service.
7
+ class MerchantInitializationResponseExtension
8
+ include ROXML
9
+
10
+ xml_name "MerchantInitializationResponseExtension"
11
+
12
+ # @!attribute unpredictable_number
13
+ # @return [String] the unpredictable number.
14
+ xml_accessor :unpredictable_number, :from =>"UnpredictableNumber"
15
+
16
+
17
+ # Attribute mapping from ruby-style variable name to JSON key.
18
+ def self.attribute_map
19
+ {
20
+ :unpredictable_number => :UnpredictableNumber
21
+
22
+ }
23
+ end
24
+
25
+ def initialize(attributes = {})
26
+ return unless attributes.is_a?(Hash)
27
+
28
+ # convert string to symbol for hash key
29
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
30
+
31
+
32
+ if attributes.has_key?(:UnpredictableNumber) || attributes.has_key?(:unpredictable_number)
33
+ self.unpredictable_number = attributes[:UnpredictableNumber] || attributes[:unpredictable_number]
34
+ end
35
+
36
+ end
37
+
38
+
39
+
40
+
41
+ # Check equality by comparing each attribute.
42
+ def ==(o)
43
+ return true if self.equal?(o)
44
+ self.class == o.class &&
45
+ unpredictable_number == o.unpredictable_number
46
+ end
47
+
48
+ # @see the `==` method
49
+ def eql?(o)
50
+ self == o
51
+ end
52
+
53
+ # Calculate hash code according to all attributes.
54
+ def hash
55
+ [unpredictable_number].hash
56
+ end
57
+
58
+ # build the object from hash
59
+ def build_from_hash(attributes)
60
+ return nil unless attributes.is_a?(Hash)
61
+ self.class.datatype_map.each_pair do |key, type|
62
+ if type =~ /^Array<(.*)>/i
63
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
64
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
65
+ else
66
+ #TODO show warning in debug mode
67
+ end
68
+ elsif !attributes[self.class.attribute_map[key]].nil?
69
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
70
+ else
71
+ # data not found in attributes(hash), not an issue as the data can be optional
72
+ end
73
+ end
74
+
75
+ self
76
+ end
77
+
78
+ def _deserialize(type, value)
79
+ case type.to_sym
80
+ when :DateTime
81
+ DateTime.parse(value)
82
+ when :Date
83
+ Date.parse(value)
84
+ when :String
85
+ value.to_s
86
+ when :Integer
87
+ value.to_i
88
+ when :Float
89
+ value.to_f
90
+ when :BOOLEAN
91
+ if value =~ /^(true|t|yes|y|1)$/i
92
+ true
93
+ else
94
+ false
95
+ end
96
+ when /\AArray<(?<inner_type>.+)>\z/
97
+ inner_type = Regexp.last_match[:inner_type]
98
+ value.map { |v| _deserialize(inner_type, v) }
99
+ when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
100
+ k_type = Regexp.last_match[:k_type]
101
+ v_type = Regexp.last_match[:v_type]
102
+ {}.tap do |hash|
103
+ value.each do |k, v|
104
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
105
+ end
106
+ end
107
+ else # model
108
+ _model = MastercardMasterpassMerchant.const_get(type).new
109
+ _model.build_from_hash(value)
110
+ end
111
+ end
112
+
113
+ def to_s
114
+ to_hash.to_s
115
+ end
116
+
117
+ # to_body is an alias to to_body (backward compatibility))
118
+ def to_body
119
+ to_hash
120
+ end
121
+
122
+ # return the object in the form of hash
123
+ def to_hash
124
+ hash = {}
125
+ self.class.attribute_map.each_pair do |attr, param|
126
+ value = self.send(attr)
127
+ next if value.nil?
128
+ hash[param] = _to_hash(value)
129
+ end
130
+ hash
131
+ end
132
+
133
+ # Method to output non-array value in the form of hash
134
+ # For object, use to_hash. Otherwise, just return the value
135
+ def _to_hash(value)
136
+ if value.is_a?(Array)
137
+ value.compact.map{ |v| _to_hash(v) }
138
+ elsif value.is_a?(Hash)
139
+ {}.tap do |hash|
140
+ value.each { |k, v| hash[k] = _to_hash(v) }
141
+ end
142
+ elsif value.respond_to? :to_hash
143
+ value.to_hash
144
+ else
145
+ value
146
+ end
147
+ end
148
+
149
+
150
+ private
151
+ def after_parse
152
+ self.send(:remove_instance_variable, :@roxml_references) if defined? self.roxml_references
153
+ end
154
+
155
+ # Attribute datatype mapping.
156
+ def self.datatype_map
157
+ {
158
+ :unpredictable_number => 'String'
159
+
160
+ }
161
+ end
162
+ end
163
+
164
+
165
+ end
@@ -0,0 +1,274 @@
1
+ require 'date'
2
+ require 'roxml'
3
+ require_relative '../../mastercard_masterpass_merchant/models/extension_point'
4
+
5
+
6
+ module MastercardMasterpassMerchant
7
+ # This class contains different methods for to send and retrieve transaction details.
8
+ class MerchantTransaction
9
+ include ROXML
10
+
11
+ xml_name "MerchantTransaction"
12
+
13
+ # @!attribute transaction_id
14
+ # @return [String] the transaction Id.
15
+ xml_accessor :transaction_id, :from =>"TransactionId"
16
+
17
+ # @!attribute consumer_key
18
+ # @return [String] the consumer key from checkout project.
19
+ xml_accessor :consumer_key, :from =>"ConsumerKey"
20
+
21
+ # @!attribute currency
22
+ # @return [String] the currency for the transaction, for example, USD.
23
+ xml_accessor :currency, :from =>"Currency"
24
+
25
+ # @!attribute order_amount
26
+ # @return [Integer] the transaction order amount, for example, 1500 (for USD 15 transaction amount)
27
+ xml_accessor :order_amount, :from =>"OrderAmount"
28
+
29
+ # @!attribute purchase_date
30
+ # @return [String] the date of purchase.
31
+ xml_accessor :purchase_date, :from =>"PurchaseDate"
32
+
33
+ # @!attribute transaction_status
34
+ # @return [String] the status of transaction. Valid values are, SUCCESS: For approved transaction and FAILURE: For declined transaction.
35
+ xml_accessor :transaction_status, :from =>"TransactionStatus"
36
+
37
+ # @!attribute approval_code
38
+ # @return [String] the six-digit approval code returned by payment API.
39
+ xml_accessor :approval_code, :from =>"ApprovalCode"
40
+
41
+ # @!attribute pre_checkout_transaction_id
42
+ # @return [String] the precheckout transaction id element of the PrecheckoutData.(This is not required for Standard Checkout)
43
+ xml_accessor :pre_checkout_transaction_id, :from =>"PreCheckoutTransactionId"
44
+
45
+ # @!attribute express_checkout_indicator
46
+ # @return [BOOLEAN] the express checkout indicator. Set to true for express checkout
47
+ xml_accessor :express_checkout_indicator, :from =>"ExpressCheckoutIndicator"
48
+
49
+ # @!attribute extension_point
50
+ # @return [ExtensionPoint] the ExtensionPoint for future enhancement.
51
+ xml_accessor :extension_point, :from =>"ExtensionPoint",:as => ExtensionPoint
52
+
53
+
54
+ # Attribute mapping from ruby-style variable name to JSON key.
55
+ def self.attribute_map
56
+ {
57
+ :transaction_id => :TransactionId ,
58
+ :consumer_key => :ConsumerKey ,
59
+ :currency => :Currency ,
60
+ :order_amount => :OrderAmount ,
61
+ :purchase_date => :PurchaseDate ,
62
+ :transaction_status => :TransactionStatus ,
63
+ :approval_code => :ApprovalCode ,
64
+ :pre_checkout_transaction_id => :PreCheckoutTransactionId ,
65
+ :express_checkout_indicator => :ExpressCheckoutIndicator ,
66
+ :extension_point => :ExtensionPoint
67
+
68
+ }
69
+ end
70
+
71
+ def initialize(attributes = {})
72
+ return unless attributes.is_a?(Hash)
73
+
74
+ # convert string to symbol for hash key
75
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
76
+
77
+
78
+ if attributes.has_key?(:TransactionId) || attributes.has_key?(:transaction_id)
79
+ self.transaction_id = attributes[:TransactionId] || attributes[:transaction_id]
80
+ end
81
+
82
+ if attributes.has_key?(:ConsumerKey) || attributes.has_key?(:consumer_key)
83
+ self.consumer_key = attributes[:ConsumerKey] || attributes[:consumer_key]
84
+ end
85
+
86
+ if attributes.has_key?(:Currency) || attributes.has_key?(:currency)
87
+ self.currency = attributes[:Currency] || attributes[:currency]
88
+ end
89
+
90
+ if attributes.has_key?(:OrderAmount) || attributes.has_key?(:order_amount)
91
+ self.order_amount = attributes[:OrderAmount] || attributes[:order_amount]
92
+ end
93
+
94
+ if attributes.has_key?(:PurchaseDate) || attributes.has_key?(:purchase_date)
95
+ self.purchase_date = attributes[:PurchaseDate] || attributes[:purchase_date]
96
+ end
97
+
98
+ if attributes.has_key?(:TransactionStatus) || attributes.has_key?(:transaction_status)
99
+ self.transaction_status = attributes[:TransactionStatus] || attributes[:transaction_status]
100
+ end
101
+
102
+ if attributes.has_key?(:ApprovalCode) || attributes.has_key?(:approval_code)
103
+ self.approval_code = attributes[:ApprovalCode] || attributes[:approval_code]
104
+ end
105
+
106
+ if attributes.has_key?(:PreCheckoutTransactionId) || attributes.has_key?(:pre_checkout_transaction_id)
107
+ self.pre_checkout_transaction_id = attributes[:PreCheckoutTransactionId] || attributes[:pre_checkout_transaction_id]
108
+ end
109
+
110
+ if attributes.has_key?(:ExpressCheckoutIndicator) || attributes.has_key?(:express_checkout_indicator)
111
+ self.express_checkout_indicator = attributes[:ExpressCheckoutIndicator] || attributes[:express_checkout_indicator]
112
+ end
113
+
114
+ if attributes.has_key?(:ExtensionPoint) || attributes.has_key?(:extension_point)
115
+ self.extension_point = attributes[:ExtensionPoint] || attributes[:extension_point]
116
+ end
117
+
118
+ end
119
+
120
+
121
+
122
+
123
+ # Custom attribute writer method checking allowed values (enum).
124
+ def transaction_status=(transaction_status)
125
+ allowed_values = ["Success", "Failure"]
126
+ if transaction_status && !allowed_values.include?(transaction_status)
127
+ fail "invalid value for 'transaction_status', must be one of #{allowed_values}"
128
+ end
129
+ @transaction_status = transaction_status
130
+ end
131
+
132
+ # Check equality by comparing each attribute.
133
+ def ==(o)
134
+ return true if self.equal?(o)
135
+ self.class == o.class &&
136
+ transaction_id == o.transaction_id &&
137
+ consumer_key == o.consumer_key &&
138
+ currency == o.currency &&
139
+ order_amount == o.order_amount &&
140
+ purchase_date == o.purchase_date &&
141
+ transaction_status == o.transaction_status &&
142
+ approval_code == o.approval_code &&
143
+ pre_checkout_transaction_id == o.pre_checkout_transaction_id &&
144
+ express_checkout_indicator == o.express_checkout_indicator &&
145
+ extension_point == o.extension_point
146
+ end
147
+
148
+ # @see the `==` method
149
+ def eql?(o)
150
+ self == o
151
+ end
152
+
153
+ # Calculate hash code according to all attributes.
154
+ def hash
155
+ [transaction_id, consumer_key, currency, order_amount, purchase_date, transaction_status, approval_code, pre_checkout_transaction_id, express_checkout_indicator, extension_point].hash
156
+ end
157
+
158
+ # build the object from hash
159
+ def build_from_hash(attributes)
160
+ return nil unless attributes.is_a?(Hash)
161
+ self.class.datatype_map.each_pair do |key, type|
162
+ if type =~ /^Array<(.*)>/i
163
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
164
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
165
+ else
166
+ #TODO show warning in debug mode
167
+ end
168
+ elsif !attributes[self.class.attribute_map[key]].nil?
169
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
170
+ else
171
+ # data not found in attributes(hash), not an issue as the data can be optional
172
+ end
173
+ end
174
+
175
+ self
176
+ end
177
+
178
+ def _deserialize(type, value)
179
+ case type.to_sym
180
+ when :DateTime
181
+ DateTime.parse(value)
182
+ when :Date
183
+ Date.parse(value)
184
+ when :String
185
+ value.to_s
186
+ when :Integer
187
+ value.to_i
188
+ when :Float
189
+ value.to_f
190
+ when :BOOLEAN
191
+ if value =~ /^(true|t|yes|y|1)$/i
192
+ true
193
+ else
194
+ false
195
+ end
196
+ when /\AArray<(?<inner_type>.+)>\z/
197
+ inner_type = Regexp.last_match[:inner_type]
198
+ value.map { |v| _deserialize(inner_type, v) }
199
+ when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
200
+ k_type = Regexp.last_match[:k_type]
201
+ v_type = Regexp.last_match[:v_type]
202
+ {}.tap do |hash|
203
+ value.each do |k, v|
204
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
205
+ end
206
+ end
207
+ else # model
208
+ _model = MastercardMasterpassMerchant.const_get(type).new
209
+ _model.build_from_hash(value)
210
+ end
211
+ end
212
+
213
+ def to_s
214
+ to_hash.to_s
215
+ end
216
+
217
+ # to_body is an alias to to_body (backward compatibility))
218
+ def to_body
219
+ to_hash
220
+ end
221
+
222
+ # return the object in the form of hash
223
+ def to_hash
224
+ hash = {}
225
+ self.class.attribute_map.each_pair do |attr, param|
226
+ value = self.send(attr)
227
+ next if value.nil?
228
+ hash[param] = _to_hash(value)
229
+ end
230
+ hash
231
+ end
232
+
233
+ # Method to output non-array value in the form of hash
234
+ # For object, use to_hash. Otherwise, just return the value
235
+ def _to_hash(value)
236
+ if value.is_a?(Array)
237
+ value.compact.map{ |v| _to_hash(v) }
238
+ elsif value.is_a?(Hash)
239
+ {}.tap do |hash|
240
+ value.each { |k, v| hash[k] = _to_hash(v) }
241
+ end
242
+ elsif value.respond_to? :to_hash
243
+ value.to_hash
244
+ else
245
+ value
246
+ end
247
+ end
248
+
249
+
250
+ private
251
+ def after_parse
252
+ self.send(:remove_instance_variable, :@roxml_references) if defined? self.roxml_references
253
+ end
254
+
255
+ # Attribute datatype mapping.
256
+ def self.datatype_map
257
+ {
258
+ :transaction_id => 'String',
259
+ :consumer_key => 'String',
260
+ :currency => 'String',
261
+ :order_amount => 'Integer',
262
+ :purchase_date => 'String',
263
+ :transaction_status => 'String',
264
+ :approval_code => 'String',
265
+ :pre_checkout_transaction_id => 'String',
266
+ :express_checkout_indicator => 'BOOLEAN',
267
+ :extension_point => 'ExtensionPoint'
268
+
269
+ }
270
+ end
271
+ end
272
+
273
+
274
+ end
@@ -0,0 +1,176 @@
1
+ require 'date'
2
+ require 'roxml'
3
+ require_relative '../../mastercard_masterpass_merchant/models/merchant_transaction'
4
+
5
+
6
+ module MastercardMasterpassMerchant
7
+ # This class contains methods to post the result of success and fail transactions. This contains information require for a service call from the merchant to MasterPass.
8
+ class MerchantTransactions
9
+ include ROXML
10
+
11
+ xml_name "MerchantTransactions"
12
+
13
+ # @!attribute merchant_transactions
14
+ # @return [Array<MerchantTransaction>] the merchant transaction details.
15
+ xml_accessor :merchant_transactions, :from =>"MerchantTransactions", :as =>[MerchantTransaction]
16
+
17
+
18
+ # Attribute mapping from ruby-style variable name to JSON key.
19
+ def self.attribute_map
20
+ {
21
+ :merchant_transactions => :MerchantTransactions
22
+
23
+ }
24
+ end
25
+
26
+ def initialize(attributes = {})
27
+ return unless attributes.is_a?(Hash)
28
+
29
+ # convert string to symbol for hash key
30
+ attributes = attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
31
+
32
+
33
+ if attributes.has_key?(:MerchantTransactions) || attributes.has_key?(:merchant_transactions)
34
+ self.merchant_transactions = attributes[:MerchantTransactions] || attributes[:merchant_transactions]
35
+ end
36
+
37
+ end
38
+
39
+
40
+ # Overriding setter method merchant_transactions
41
+ # @param value
42
+ def merchant_transactions=(value)
43
+ if (value.is_a?(Array))
44
+ @merchant_transactions = value
45
+ else
46
+ @merchant_transactions = [] if !@merchant_transactions
47
+ @merchant_transactions.push value
48
+ end
49
+ end
50
+
51
+
52
+ # Check equality by comparing each attribute.
53
+ def ==(o)
54
+ return true if self.equal?(o)
55
+ self.class == o.class &&
56
+ merchant_transactions == o.merchant_transactions
57
+ end
58
+
59
+ # @see the `==` method
60
+ def eql?(o)
61
+ self == o
62
+ end
63
+
64
+ # Calculate hash code according to all attributes.
65
+ def hash
66
+ [merchant_transactions].hash
67
+ end
68
+
69
+ # build the object from hash
70
+ def build_from_hash(attributes)
71
+ return nil unless attributes.is_a?(Hash)
72
+ self.class.datatype_map.each_pair do |key, type|
73
+ if type =~ /^Array<(.*)>/i
74
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
75
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map{ |v| _deserialize($1, v) } )
76
+ else
77
+ #TODO show warning in debug mode
78
+ end
79
+ elsif !attributes[self.class.attribute_map[key]].nil?
80
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
81
+ else
82
+ # data not found in attributes(hash), not an issue as the data can be optional
83
+ end
84
+ end
85
+
86
+ self
87
+ end
88
+
89
+ def _deserialize(type, value)
90
+ case type.to_sym
91
+ when :DateTime
92
+ DateTime.parse(value)
93
+ when :Date
94
+ Date.parse(value)
95
+ when :String
96
+ value.to_s
97
+ when :Integer
98
+ value.to_i
99
+ when :Float
100
+ value.to_f
101
+ when :BOOLEAN
102
+ if value =~ /^(true|t|yes|y|1)$/i
103
+ true
104
+ else
105
+ false
106
+ end
107
+ when /\AArray<(?<inner_type>.+)>\z/
108
+ inner_type = Regexp.last_match[:inner_type]
109
+ value.map { |v| _deserialize(inner_type, v) }
110
+ when /\AHash<(?<k_type>.+), (?<v_type>.+)>\z/
111
+ k_type = Regexp.last_match[:k_type]
112
+ v_type = Regexp.last_match[:v_type]
113
+ {}.tap do |hash|
114
+ value.each do |k, v|
115
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
116
+ end
117
+ end
118
+ else # model
119
+ _model = MastercardMasterpassMerchant.const_get(type).new
120
+ _model.build_from_hash(value)
121
+ end
122
+ end
123
+
124
+ def to_s
125
+ to_hash.to_s
126
+ end
127
+
128
+ # to_body is an alias to to_body (backward compatibility))
129
+ def to_body
130
+ to_hash
131
+ end
132
+
133
+ # return the object in the form of hash
134
+ def to_hash
135
+ hash = {}
136
+ self.class.attribute_map.each_pair do |attr, param|
137
+ value = self.send(attr)
138
+ next if value.nil?
139
+ hash[param] = _to_hash(value)
140
+ end
141
+ hash
142
+ end
143
+
144
+ # Method to output non-array value in the form of hash
145
+ # For object, use to_hash. Otherwise, just return the value
146
+ def _to_hash(value)
147
+ if value.is_a?(Array)
148
+ value.compact.map{ |v| _to_hash(v) }
149
+ elsif value.is_a?(Hash)
150
+ {}.tap do |hash|
151
+ value.each { |k, v| hash[k] = _to_hash(v) }
152
+ end
153
+ elsif value.respond_to? :to_hash
154
+ value.to_hash
155
+ else
156
+ value
157
+ end
158
+ end
159
+
160
+
161
+ private
162
+ def after_parse
163
+ self.send(:remove_instance_variable, :@roxml_references) if defined? self.roxml_references
164
+ end
165
+
166
+ # Attribute datatype mapping.
167
+ def self.datatype_map
168
+ {
169
+ :merchant_transactions => 'Array<MerchantTransaction>'
170
+
171
+ }
172
+ end
173
+ end
174
+
175
+
176
+ end