mastercard_api 0.0.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.
@@ -0,0 +1,85 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFPDCCBCSgAwIBAgIETB3oLDANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC
3
+ VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
4
+ Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
5
+ KGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50cnVzdCBDZXJ0aWZp
6
+ Y2F0aW9uIEF1dGhvcml0eSAtIEwxQzAeFw0xMjA5MjUxMzM4MDhaFw0xNjA5MjUx
7
+ ODEyMjFaMIGKMQswCQYDVQQGEwJCRTERMA8GA1UEBxMIV2F0ZXJsb28xLjAsBgNV
8
+ BAoTJU1hc3RlcmNhcmQgSW50ZXJuYXRpb25hbCBJbmNvcnBvcmF0ZWQxEzARBgNV
9
+ BAsTCk5TMTAxIFNQUkQxIzAhBgNVBAMTGnNhbmRib3guYXBpLm1hc3RlcmNhcmQu
10
+ Y29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtWf2lp+QTPGcAiOB
11
+ dpFutfLYS7I1iqM7E3BdUfwTR4YItq6rdbHn4Nm8N2yd4yzLc/Qid9eQw9HmnVu5
12
+ 9aHKRjPppsuNjr5e4v3FWiD+KmYmSBUWyu5aE4YobHHDhV311zmKDF3o91hwgcGH
13
+ GotNtP/QYrJiWYvFJeXpyzz2g5D6/zoJiPHLr089C+7Y8doRLkJylmVtiKC0W9ez
14
+ 1xp8YrscEGkcZMaLxZbtfaFTEh4yqqM5q0yOiU1HAgidiVVxgzHlREoKSwCqcyTe
15
+ V3YjJPyuYcb1cACNm79RWOIWJyQt6L1E4k8T5+f5M+5Gxc6U97JuVjKkjYZC4Doe
16
+ DxjpcwIDAQABo4IBfzCCAXswCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUF
17
+ BwMBMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvbGV2
18
+ ZWwxYy5jcmwwZAYIKwYBBQUHAQEEWDBWMCMGCCsGAQUFBzABhhdodHRwOi8vb2Nz
19
+ cC5lbnRydXN0Lm5ldDAvBggrBgEFBQcwAoYjaHR0cDovL2FpYS5lbnRydXN0Lm5l
20
+ dC8yMDQ4LWwxYy5jZXIwSgYDVR0gBEMwQTA1BgkqhkiG9n0HSwIwKDAmBggrBgEF
21
+ BQcCARYaaHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwCAYGZ4EMAQICMCUGA1Ud
22
+ EQQeMByCGnNhbmRib3guYXBpLm1hc3RlcmNhcmQuY29tMB8GA1UdIwQYMBaAFB7x
23
+ q4kG+EkPATN37hR67hl8kyhNMB0GA1UdDgQWBBQ2XTNQbp2hAr2fpgq5IStFxr4W
24
+ eTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUAA4IBAQAEZTfuQL8lnq176nlWWjag
25
+ kf+2Tr6V6hStnhJCT1DKtx0/b491ceuKje3lGr1rKoPV34JWxEneZdw315DhVNm6
26
+ TogwI5Fos0rH03IbYtEd8DHKXp4x5wdarLmGZ4hL/FJnA2X1QxrL0xufocISIxyN
27
+ Qf+PYeUspWhOK6hDX4wgD1/Mg1P6r24ve26un7chKS+BaMXOhAVhqGLCaKjFcPyJ
28
+ CNj7AF/51oVC1YcD0c241iS8FlueBVOCkgsQQirMRSmIYid0vlhYQ+J1TG4s7Xwg
29
+ zkVQx4udcXFE/aWsSsX0XUERXi69RBoRHOETfCWp6uzjyvq9KIjMdKw4hg++j2Jl
30
+ -----END CERTIFICATE-----
31
+ -----BEGIN CERTIFICATE-----
32
+ MIIE9TCCA92gAwIBAgIETA6MOTANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
33
+ RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
34
+ bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
35
+ IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
36
+ ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0xMTExMTExNTQwNDBaFw0yMTEx
37
+ MTIwMjUxMTdaMIGxMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5j
38
+ LjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L3JwYSBpcyBpbmNvcnBvcmF0ZWQg
39
+ YnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwOSBFbnRydXN0LCBJbmMuMS4w
40
+ LAYDVQQDEyVFbnRydXN0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gTDFDMIIB
41
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6MtPJ7eBdoTwhGNnY7jf8dL
42
+ flqfs/9iq3PIKGu6EGSChxPNVxj/KM7A5g4GkVApg9Hywyrb2NtOBMwA64u2lty8
43
+ qvpSdwTB2xnkrpz9PIsD7028GgNl+cGxP3KG8jiqGa4QiHgo2nXDPQKCApy5wWV3
44
+ diRMmPdtMTj72/7bNwJ2oRiXpszeIAlJNiRpQvbkN2LxWW2pPO00nKOO29w61/cK
45
+ b+8u2NWTWnrtCElo4kHjWpDBhlX8UUOd4LLEZ7TLMjEl8FSfS9Fv29Td/K9ebHiQ
46
+ ld7KOki5eTybGdZ1BaD5iNfB6KUJ5BoV3IcjqrJ1jGMlh9j4PabCzGb/pWZoVQID
47
+ AQABo4IBDjCCAQowDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAw
48
+ MwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0
49
+ Lm5ldDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLmVudHJ1c3QubmV0LzIw
50
+ NDhjYS5jcmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6
51
+ Ly93d3cuZW50cnVzdC5uZXQvcnBhMB0GA1UdDgQWBBQe8auJBvhJDwEzd+4Ueu4Z
52
+ fJMoTTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDANBgkqhkiG9w0B
53
+ AQUFAAOCAQEAQJqHfojUzCanS/p4SiDV+aI2IbvuW6BPRI3PqvmXF5aEqchnm7vm
54
+ EN551lZqpHgUSdl87TBeaeptJEZaiDQ9JifPaUGEHATaGTgu24lBOX5lH51aOszh
55
+ DEw3oc5gk6i1jMo/uitdTBuBiXrKNjCc/4Tj/jrx93lxybXTMwPKd86wuinSNF1z
56
+ /6T98iW4NUV5eh+Xrsm+CmiEmXQ5qE56JvXN3iXiN4VlB6fKxQW3EzgNLfBtGc7e
57
+ mWEn7kVuxzn/9sWL4Mt8ih7VegcxKlJcOlAZOKlE+jyoz+95nWrZ5S6hjyko1+yq
58
+ wfsm5p9GJKaxB825DOgNghYAHZaS/KYIoA==
59
+ -----END CERTIFICATE-----
60
+ -----BEGIN CERTIFICATE-----
61
+ MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
62
+ RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
63
+ bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
64
+ IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
65
+ ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
66
+ MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
67
+ LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
68
+ YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
69
+ A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
70
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
71
+ K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
72
+ sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
73
+ MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
74
+ XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
75
+ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
76
+ 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
77
+ vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
78
+ CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
79
+ WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
80
+ oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
81
+ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
82
+ f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
83
+ B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
84
+ vUxFnmG6v4SBkgPR0ml8xQ==
85
+ -----END CERTIFICATE-----
Binary file
Binary file
@@ -0,0 +1,8 @@
1
+ require_relative "mastercard_api/version"
2
+
3
+ # require the common library
4
+ require_relative "mastercard_api/common/connector"
5
+ require_relative "mastercard_api/common/environment"
6
+ require_relative "mastercard_api/common/oauth_constants"
7
+ require_relative "mastercard_api/common/oauth_parameters"
8
+ require_relative "mastercard_api/common/url_util"
@@ -0,0 +1,235 @@
1
+ require 'base64'
2
+ require 'cgi'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'openssl'
6
+ require 'digest/sha1'
7
+ require 'securerandom'
8
+ require_relative '../common/oauth_parameters'
9
+ require_relative '../common/oauth_constants'
10
+
11
+ module Mastercard
12
+ module Common
13
+
14
+ class Connector
15
+
16
+ attr_accessor :signature_base_string
17
+ attr_accessor :auth_header
18
+ attr_accessor :signed_signature_base_string
19
+
20
+ NONCE_LENGTH = 8
21
+ VALID_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
22
+
23
+ OAUTH_START_STRING = 'OAuth '
24
+ ERROR_STATUS_BOUNDARY = 300
25
+ EMPTY_STRING = ""
26
+
27
+ POST = "POST"
28
+ GET = "GET"
29
+ DELETE = "DELETE"
30
+ PUT = "PUT"
31
+ UTF_8 = "UTF-8"
32
+ EQUALS = "="
33
+ AMP = '&'
34
+ COLON_2X_BACKSLASH = "://"
35
+ MESSAGE = "Message"
36
+ HTTP_CODE = "HttpCode"
37
+
38
+ SSL_CA_CER_PATH_LOCATION = 'data/Certs/EnTrust/cacert.pem'
39
+ USER_AGENT = 'MC Open API OAuth Framework v1.0-Ruby'
40
+
41
+ =begin
42
+ consumer_key = Key provided by MasterCard upon registering
43
+ private_key = private key object
44
+ =end
45
+ def initialize(consumer_key, private_key)
46
+ @consumer_key = consumer_key
47
+ @private_key = private_key
48
+ @signature_base_string = ''
49
+ @auth_header = ''
50
+ @signed_signature_base_string = ''
51
+ end
52
+ =begin
53
+ Method to generate base OAuth params
54
+ =end
55
+ def oauth_parameters_factory
56
+ oparams = Mastercard::Common::OAuthParameters.new
57
+ oparams.add_parameter(OAUTH_CONSUMER_KEY, @consumer_key)
58
+ oparams.add_parameter(OAUTH_NONCE, generate_nonce)
59
+ oparams.add_parameter(OAUTH_TIMESTAMP, generate_timestamp)
60
+ oparams.add_parameter(OAUTH_SIGNATURE_METHOD, "RSA-SHA1")
61
+ oparams.add_parameter(OAUTH_VERSION, "1.0")
62
+ oparams
63
+ end
64
+
65
+ =begin
66
+ Method to perform a request. Only Connector subclasses should access this method.
67
+ url - URL to connect to, includes query string parameters
68
+ body - XML body to send to MasterCard for PUT/POST/DELETE
69
+ oauth_params - often nil, may be populated for testing
70
+ =end
71
+ def do_request(url, request_method, body = nil, oauth_params = nil)
72
+ if @consumer_key == nil
73
+ raise 'Consumer Key may not be nil.'
74
+ end
75
+
76
+ if @private_key == nil
77
+ raise 'Private Key may not be nil.'
78
+ end
79
+ if oauth_params == nil
80
+ oauth_params = oauth_parameters_factory
81
+ end
82
+ if body != nil && body.length > 0
83
+ oauth_params = generate_body_hash(body, oauth_params)
84
+ end
85
+ response = connect(url, request_method, oauth_params, body)
86
+ check_response(response)
87
+ response.body
88
+ end
89
+ =begin
90
+ Method to connect via HTTP. This method subsequesntly builds and signs the Oauth
91
+ Header
92
+ =end
93
+ def connect(url, request_method, oauth_params, body=nil)
94
+ uri = URI.parse(url)
95
+ http = Net::HTTP.new(uri.host, uri.port)
96
+ http.use_ssl = true
97
+ http.ca_path = SSL_CA_CER_PATH_LOCATION
98
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE #todo VERIFY_PEER
99
+
100
+ if request_method.upcase == 'GET'
101
+ request = Net::HTTP::Get.new(uri.request_uri)
102
+ elsif request_method.upcase == 'PUT'
103
+ request = Net::HTTP::Put.new(uri.request_uri)
104
+ elsif request_method.upcase == 'POST'
105
+ request = Net::HTTP::Post.new(uri.request_uri)
106
+ elsif request_method.upcase == 'DELETE'
107
+ request = Net::HTTP::Delete.new(uri.request_uri)
108
+ else
109
+ raise 'Unsupported HTTP Action.'
110
+ end
111
+
112
+ if body != nil
113
+ add_headers(url, request, request_method, oauth_params, body)
114
+ request.body = body
115
+ else
116
+ add_headers(url, request, request_method, oauth_params)
117
+ end
118
+ http.request(request)
119
+ end
120
+ =begin
121
+ Method to build the OAuth headers.
122
+ =end
123
+ def add_headers(url, request, request_method, oauth_params, body=nil)
124
+ @auth_header = build_auth_header_string(url, request_method, oauth_params)
125
+ request['Authorization'] = auth_header
126
+ request['User-Agent'] = USER_AGENT
127
+ if body != nil
128
+ request['content-type'] = 'application/xml;charset=UTF-8'
129
+ body_length = body.length
130
+ request['content-length'] = body_length.to_s
131
+ end
132
+ request
133
+ end
134
+ =begin
135
+ Method to build the auth header for the HTTP request.
136
+ oauth_params - full populated oauth parameters
137
+ =end
138
+ def build_auth_header_string(url, request_method, oauth_params)
139
+ temp_params = Mastercard::Common::OAuthParameters.new
140
+ oauth_params_key_arr = oauth_params.params.keys.sort
141
+ oauth_params_key_arr.each do |p|
142
+ temp_params.add_parameter(p, oauth_params.send(p)) if p != :realm
143
+ end
144
+ generate_signature_base_string(url, request_method, temp_params)
145
+ sign(oauth_params)
146
+ header = ''
147
+ oauth_params_key_arr = oauth_params.params.keys.sort
148
+ oauth_params_key_arr.each do |p|
149
+ header << p.to_s << '="' << oauth_params.send(p) << '",' if oauth_params.send(p)
150
+ end
151
+ header = '' << OAUTH_START_STRING << header
152
+ #remove trailing comma
153
+ header = header[0...header.length-1]
154
+ end
155
+ =begin
156
+ Method to sign the signature base string using the private key.
157
+ =end
158
+ def sign(oauth_params)
159
+ if @signature_base_string == nil || @signature_base_string.length == 0
160
+ raise 'Signature Base String May Not Be Null.'
161
+ end
162
+ digest = OpenSSL::Digest::SHA1.new
163
+ @signed_signature_base_string = CGI.escape(Base64.encode64(@private_key.sign(digest,@signature_base_string)))
164
+ @signed_signature_base_string.gsub!('+','%20')
165
+ @signed_signature_base_string.gsub!('*','%2A')
166
+ @signed_signature_base_string.gsub!('~','%7E')
167
+ oauth_params.add_parameter("oauth_signature" , @signed_signature_base_string)
168
+ end
169
+ =begin
170
+ Method to generate the signature base string from the url, HTTP request method, and oauth_params
171
+ url - URL, including query string parameters, to access
172
+ request_method - case-insensitive HTTP request method, e.g. GET, POST, PUT, DELETE
173
+ oauth_params - populated oauth parameters object
174
+ =end
175
+ def generate_signature_base_string(url, request_method, oauth_params)
176
+ @signature_base_string = CGI.escape(request_method.upcase) << AMP << CGI.escape(normalize_url(url)) << AMP << CGI.escape(normalize_parameters(url, oauth_params))
177
+ end
178
+ =begin
179
+ Method to return "core" URL for signature base string generation. http://somesite.com:8080?blah becomes http://somesite.com, for example
180
+ url - URL to normalize
181
+ =end
182
+ def normalize_url(url)
183
+ tmp = url.clone
184
+ # strip query string section
185
+ idx = tmp.index('?')
186
+ if idx != nil
187
+ tmp = tmp[0..idx-1]
188
+ end
189
+ # strip port
190
+ if tmp.rindex(':') != nil && tmp.rindex(':') > 5 # implies port is given
191
+ tmp = tmp[0..tmp.rindex(':')-1]
192
+ end
193
+ tmp
194
+ end
195
+ =begin
196
+ The signature base string must be in lexical order prior to signing. This method does that required work.
197
+ url - url to access
198
+ oauth_params - OAuthParameters object used for building Signature Base String
199
+ =end
200
+ def normalize_parameters(url, oauth_params)
201
+ oauth_params_hash = oauth_params.params
202
+ CGI.parse(URI.parse(url).query).map{|k,v| oauth_params_hash[k.to_sym] = v[0]} if url.include? "?"
203
+ URI.encode(oauth_params_hash.keys.sort.map{|k| "#{k.to_s}=#{oauth_params_hash[k]}"}.join("&"))
204
+ end
205
+
206
+ def check_response(response)
207
+ if response.code.to_i >= ERROR_STATUS_BOUNDARY
208
+ raise 'Response Code: ' << response.code.to_s << "\n" << response.body
209
+ end
210
+ end
211
+
212
+ # if a body is present for sending to server, needs hashed as part of OAuth spec
213
+ def generate_body_hash(body, oauth_params)
214
+ if body != nil
215
+ oauth_body_hash = Digest::SHA1.base64digest(body)
216
+ oauth_params.add_parameter(:oauth_body_hash, oauth_body_hash)
217
+ end
218
+ oauth_params
219
+ end
220
+
221
+ # unique identifier for given timestamp (in seconds)
222
+ def generate_nonce
223
+ str = ''
224
+ for i in 1..NONCE_LENGTH
225
+ str << VALID_CHARS[SecureRandom.random_number(VALID_CHARS.length)]
226
+ end
227
+ @oauth_nonce = str
228
+ end
229
+ # number of seconds since epoch
230
+ def generate_timestamp
231
+ @oauth_timestamp = Time.now.to_i.to_s
232
+ end
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,8 @@
1
+ module Mastercard
2
+ module Common
3
+
4
+ SANDBOX = 'sandbox'
5
+ PRODUCTION = 'production'
6
+
7
+ end
8
+ end
@@ -0,0 +1,11 @@
1
+ module Mastercard
2
+ module Common
3
+ OAUTH_BODY_HASH = 'oauth_body_hash'
4
+ OAUTH_CONSUMER_KEY = 'oauth_consumer_key'
5
+ OAUTH_NONCE = 'oauth_nonce'
6
+ OAUTH_SIGNATURE = 'oauth_signature'
7
+ OAUTH_SIGNATURE_METHOD = 'oauth_signature_method'
8
+ OAUTH_TIMESTAMP = 'oauth_timestamp'
9
+ OAUTH_VERSION = 'oauth_version'
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ module Mastercard
2
+ module Common
3
+
4
+ class OAuthParameters
5
+
6
+ attr_accessor :params
7
+
8
+ def initialize()
9
+ self.params = Hash.new
10
+ end
11
+
12
+ # add a parameter to the hash and as an instance variable to the class
13
+ def add_parameter(key, value)
14
+ self.params[key.to_sym] = value
15
+ self.class.send(:define_method, key) do
16
+ value
17
+ end
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,17 @@
1
+ require 'cgi'
2
+
3
+ module Mastercard
4
+ module Common
5
+
6
+ class URLUtil
7
+
8
+ def add_query_parameter(url, descriptor, value)
9
+ if value != nil && value != ''
10
+ url = url << '&' << descriptor << '=' << value.to_s
11
+ end
12
+ url
13
+ end
14
+
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module MastercardApi
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mastercard_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brady Georgen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: The Common OpenAuth Connector classes for the Mastercard API
42
+ email:
43
+ - pbradygeorgen@me.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - LICENSE.txt
49
+ - README.md
50
+ - data/Certs/EnTrust/cacert.pem
51
+ - data/Certs/MCcert.crt
52
+ - data/StageMCOpenAPI.p12
53
+ - data/privateKey.p12
54
+ - lib/mastercard_api.rb
55
+ - lib/mastercard_api/common/connector.rb
56
+ - lib/mastercard_api/common/environment.rb
57
+ - lib/mastercard_api/common/oauth_constants.rb
58
+ - lib/mastercard_api/common/oauth_parameters.rb
59
+ - lib/mastercard_api/common/url_util.rb
60
+ - lib/mastercard_api/version.rb
61
+ homepage: ''
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.4.3
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: The Common OpenAuth Connector classes for the Mastercard API
85
+ test_files: []