tray-checkout 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ == Version 0.2.0
2
+ - Support to production environment.
3
+ - Token account via configuration.
4
+ - Log HTTP requests and responses.
5
+
1
6
  == Version 0.1.0
2
7
  - Support to v1 API version.
3
8
  - A lot refactories.
data/README.rdoc CHANGED
@@ -130,6 +130,276 @@ Creating a successful transaction:
130
130
  response.customer[:email] # => "pedro@bo.com.br"
131
131
  response.customer[:cpf] # => "18565842673"
132
132
 
133
+ == Configurations
134
+
135
+ === Environment
136
+ Tray Checkout API works with two environments: <b>production</b> and <b>sandbox</b>. To config the environment use <b>Tray::Checkout</b> module.
137
+ Default environment is <b>:production</b>.
138
+
139
+ Tray::Checkout.configure do |config|
140
+ config.environment = :sandbox
141
+ end
142
+
143
+ === Token Account
144
+ To create transactions is necessary to provide a <b>token account</b>. You can supply it in Tray::Checkout::Transaction#create method params, for each method call, or to config token account once using <b>Tray::Checkout</b> module.
145
+
146
+ Tray::Checkout.configure do |config|
147
+ config.token_account = "123u5uu9ef36f7u"
148
+ end
149
+
150
+ === Timeout
151
+
152
+ For default, the timeout for a request to Tray Checkout API is <b>5 seconds</b>. If Tray Checkout API does not respond, a <b>Timeout::Error</b> exception will be raised.
153
+ You can configure this timeout using <b>Tray::Checkout</b> module.
154
+
155
+ Tray::Checkout.configure do |config|
156
+ config.request_timeout = 3 # It configures timeout to 3 seconds
157
+ end
158
+
159
+ === Log
160
+
161
+ For default, each request to Tray Checkout API is logged to STDOUT, with <b>:info</b> log level, using the gem {LogMe}[http://github.com/prodis/log-me].
162
+
163
+ Log example:
164
+ I, [2013-01-11T00:55:10.531780 #22692] INFO -- : Tray-Checkout Request:
165
+ POST http://api.sandbox.checkout.tray.com.br/api/v1/transactions/get_by_token
166
+ token=522045453u5uu32e0u8014f060uuu5uu
167
+
168
+ I, [2013-01-11T00:55:10.750308 #22692] INFO -- : Tray-Checkout Response:
169
+ HTTP/1.1 200 OK
170
+ <?xml version="1.0" encoding="UTF-8"?>
171
+ <transaction>
172
+ <data_response>
173
+ <transaction>
174
+ <order_number>F4326</order_number>
175
+ <free nil="true"/>
176
+ <transaction_id type="integer">632</transaction_id>
177
+ <status_name>Aguardando Pagamento</status_name>
178
+ <status_id type="integer">4</status_id>
179
+ <date_transaction>2012-12-27T10:26:21</date_transaction>
180
+ <split type="integer">1</split>
181
+ <price_payment type="decimal">37.86</price_payment>
182
+ <date_payment></date_payment>
183
+ <transaction_token>522045453u5uu32e0u8014f060uuu5uu</transaction_token>
184
+ <sub_store nil="true"/>
185
+ <available_payment_methods nil="true"/>
186
+ <url_notification>http://prodis.blog.br/tray_notification</url_notification>
187
+ <url_css nil="true"/>
188
+ <url_shipping nil="true"/>
189
+ <url_stock nil="true"/>
190
+ <url_success nil="true"/>
191
+ <url_process nil="true"/>
192
+ <url_cancel nil="true"/>
193
+ <schedule_credit></schedule_credit>
194
+ <price_seller type="decimal">35.05</price_seller>
195
+ <price_original type="decimal">37.86</price_original>
196
+ <price_additional type="decimal">0.0</price_additional>
197
+ <price_discount type="decimal">0.0</price_discount>
198
+ <shipping_price type="decimal">5.88</shipping_price>
199
+ <shipping_type>PAC</shipping_type>
200
+ <payment>
201
+ <price_payment type="decimal">37.86</price_payment>
202
+ <payment_response></payment_response>
203
+ <url_payment>http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu</url_payment>
204
+ <date_approval></date_approval>
205
+ <tid></tid>
206
+ <split type="integer">1</split>
207
+ <date_payment></date_payment>
208
+ <payment_method_id type="integer">6</payment_method_id>
209
+ <payment_method_name>Boleto Bancario</payment_method_name>
210
+ <card_id nil="true"/>
211
+ <number_proccess type="integer">869</number_proccess>
212
+ <linha_digitavel>34191.76007 00086.950144 50565.600009 1 55650000003786</linha_digitavel>
213
+ </payment>
214
+ <products type="array">
215
+ <product>
216
+ <code>LOGO-8278</code>
217
+ <description>Logo Prodis</description>
218
+ <extra nil="true"/>
219
+ <price_unit type="decimal">10.99</price_unit>
220
+ <quantity type="decimal">2.0</quantity>
221
+ <sku_code nil="true"/>
222
+ <url_img nil="true"/>
223
+ </product>
224
+ <product>
225
+ <code>877</code>
226
+ <description>Outro produto</description>
227
+ <extra nil="true"/>
228
+ <price_unit type="decimal">10.0</price_unit>
229
+ <quantity type="decimal">1.0</quantity>
230
+ <sku_code nil="true"/>
231
+ <url_img nil="true"/>
232
+ </product>
233
+ </products>
234
+ <transaction_affiliates type="array"/>
235
+ <customer>
236
+ <name>Pedro Bonamides</name>
237
+ <cpf>18565842673</cpf>
238
+ <email>pedro@bo.com.br</email>
239
+ <addresses type="array">
240
+ <address>
241
+ <street>Avenida Pedro Alvares Cabral</street>
242
+ <number>123</number>
243
+ <neighborhood>Parque Ibirapuera</neighborhood>
244
+ <postal_code>04094050</postal_code>
245
+ <completion></completion>
246
+ <city>São Paulo</city>
247
+ <state>SP</state>
248
+ </address>
249
+ </addresses>
250
+ <contacts type="array">
251
+ <contact>
252
+ <contact_id type="integer">345</contact_id>
253
+ <value>1137654321</value>
254
+ <type_contact>H</type_contact>
255
+ <primary type="boolean">true</primary>
256
+ </contact>
257
+ </contacts>
258
+ </customer>
259
+ </transaction>
260
+ </data_response>
261
+ <message_response>
262
+ <message>success</message>
263
+ </message_response>
264
+ </transaction>
265
+
266
+ If you configure log level to <b>:debug</b>, request and response HTTP headers will be logged too.
267
+ D, [2013-01-11T00:58:56.226742 #22692] DEBUG -- : Tray-Checkout Request:
268
+ POST http://api.sandbox.checkout.tray.com.br/api/v1/transactions/get_by_token
269
+ accept: */*
270
+ user-agent: Ruby
271
+ token=522045453u5uu32e0u8014f060uuu5uu
272
+
273
+ D, [2013-01-11T00:58:56.495131 #22692] DEBUG -- : Tray-Checkout Response:
274
+ HTTP/1.1 200 OK
275
+ content-type: application/xml; charset=utf-8
276
+ transfer-encoding: chunked
277
+ connection: close
278
+ status: 200
279
+ x-powered-by: Phusion Passenger (mod_rails/mod_rack) 3.0.18
280
+ x-ua-compatible: IE=Edge,chrome=1
281
+ etag: "f5466d3294e177f5bb5331d326283294"
282
+ cache-control: max-age=0, private, must-revalidate
283
+ x-request-id: 9d8b635650e69237a6a875971ead3bbb
284
+ x-runtime: 0.238734
285
+ date: Fri, 11 Jan 2013 03:58:56 GMT
286
+ x-rack-cache: invalidate, pass
287
+ server: nginx/1.2.5 + Phusion Passenger 3.0.18 (mod_rails/mod_rack)
288
+ <?xml version="1.0" encoding="UTF-8"?>
289
+ <transaction>
290
+ <data_response>
291
+ <transaction>
292
+ <order_number>F4326</order_number>
293
+ <free nil="true"/>
294
+ <transaction_id type="integer">632</transaction_id>
295
+ <status_name>Aguardando Pagamento</status_name>
296
+ <status_id type="integer">4</status_id>
297
+ <date_transaction>2012-12-27T10:26:21</date_transaction>
298
+ <split type="integer">1</split>
299
+ <price_payment type="decimal">37.86</price_payment>
300
+ <date_payment></date_payment>
301
+ <transaction_token>522045453u5uu32e0u8014f060uuu5uu</transaction_token>
302
+ <sub_store nil="true"/>
303
+ <available_payment_methods nil="true"/>
304
+ <url_notification>http://prodis.blog.br/tray_notification</url_notification>
305
+ <url_css nil="true"/>
306
+ <url_shipping nil="true"/>
307
+ <url_stock nil="true"/>
308
+ <url_success nil="true"/>
309
+ <url_process nil="true"/>
310
+ <url_cancel nil="true"/>
311
+ <schedule_credit></schedule_credit>
312
+ <price_seller type="decimal">35.05</price_seller>
313
+ <price_original type="decimal">37.86</price_original>
314
+ <price_additional type="decimal">0.0</price_additional>
315
+ <price_discount type="decimal">0.0</price_discount>
316
+ <shipping_price type="decimal">5.88</shipping_price>
317
+ <shipping_type>PAC</shipping_type>
318
+ <payment>
319
+ <price_payment type="decimal">37.86</price_payment>
320
+ <payment_response></payment_response>
321
+ <url_payment>http://checkout.sandbox.tray.com.br/payment/billet/u9uuu8731319u59u3073u9011uu6u6uu</url_payment>
322
+ <date_approval></date_approval>
323
+ <tid></tid>
324
+ <split type="integer">1</split>
325
+ <date_payment></date_payment>
326
+ <payment_method_id type="integer">6</payment_method_id>
327
+ <payment_method_name>Boleto Bancario</payment_method_name>
328
+ <card_id nil="true"/>
329
+ <number_proccess type="integer">869</number_proccess>
330
+ <linha_digitavel>34191.76007 00086.950144 50565.600009 1 55650000003786</linha_digitavel>
331
+ </payment>
332
+ <products type="array">
333
+ <product>
334
+ <code>LOGO-8278</code>
335
+ <description>Logo Prodis</description>
336
+ <extra nil="true"/>
337
+ <price_unit type="decimal">10.99</price_unit>
338
+ <quantity type="decimal">2.0</quantity>
339
+ <sku_code nil="true"/>
340
+ <url_img nil="true"/>
341
+ </product>
342
+ <product>
343
+ <code>877</code>
344
+ <description>Outro produto</description>
345
+ <extra nil="true"/>
346
+ <price_unit type="decimal">10.0</price_unit>
347
+ <quantity type="decimal">1.0</quantity>
348
+ <sku_code nil="true"/>
349
+ <url_img nil="true"/>
350
+ </product>
351
+ </products>
352
+ <transaction_affiliates type="array"/>
353
+ <customer>
354
+ <name>Pedro Bonamides</name>
355
+ <cpf>18565842673</cpf>
356
+ <email>pedro@bo.com.br</email>
357
+ <addresses type="array">
358
+ <address>
359
+ <street>Avenida Pedro Alvares Cabral</street>
360
+ <number>123</number>
361
+ <neighborhood>Parque Ibirapuera</neighborhood>
362
+ <postal_code>04094050</postal_code>
363
+ <completion></completion>
364
+ <city>São Paulo</city>
365
+ <state>SP</state>
366
+ </address>
367
+ </addresses>
368
+ <contacts type="array">
369
+ <contact>
370
+ <contact_id type="integer">345</contact_id>
371
+ <value>1137654321</value>
372
+ <type_contact>H</type_contact>
373
+ <primary type="boolean">true</primary>
374
+ </contact>
375
+ </contacts>
376
+ </customer>
377
+ </transaction>
378
+ </data_response>
379
+ <message_response>
380
+ <message>success</message>
381
+ </message_response>
382
+ </transaction>
383
+
384
+
385
+ To disable the log, change log level and configure other log output, use <b>Tray::Checkout</b> module:
386
+
387
+ Tray::Checkout.configure do |config|
388
+ config.log_enabled = false # It disables the log
389
+ config.log_level = :debug # It changes log level
390
+ config.logger = Rails.logger # It uses Rails logger
391
+ end
392
+
393
+ === A configuration example
394
+
395
+ Tray::Checkout.configure do |config|
396
+ config.environment = :sandbox
397
+ config.token_account = "123u5uu9ef36f7u"
398
+ config.request_timeout = 3
399
+ config.log_level = :debug
400
+ config.logger = Rails.logger
401
+ end
402
+
133
403
 
134
404
  == Author
135
405
  - {Fernando Hamasaki (prodis)}[http://prodis.blog.br]
@@ -155,7 +425,7 @@ Creating a successful transaction:
155
425
 
156
426
  http://prodis.net.br/images/prodis_150.gif
157
427
 
158
- Copyright (c) 2012 Prodis
428
+ Copyright (c) 2012-2013 Prodis
159
429
 
160
430
  Permission is hereby granted, free of charge, to any person obtaining
161
431
  a copy of this software and associated documentation files (the
@@ -0,0 +1,29 @@
1
+ # encoding: UTF-8
2
+ module Tray
3
+ module Checkout
4
+ module Config
5
+ DEFAULT_REQUEST_TIMEOUT = 5 #seconds
6
+ DEFAULT_ENVIRONMENT = :production
7
+
8
+ attr_accessor :token_account
9
+ attr_writer :environment
10
+ attr_writer :request_timeout
11
+
12
+ def environment
13
+ @environment ||= DEFAULT_ENVIRONMENT
14
+ end
15
+
16
+ def api_url
17
+ if environment == :production
18
+ "https://api.checkout.tray.com.br/api/transactions"
19
+ else
20
+ "http://api.sandbox.checkout.tray.com.br/api/v1/transactions"
21
+ end
22
+ end
23
+
24
+ def request_timeout
25
+ (@request_timeout ||= DEFAULT_REQUEST_TIMEOUT).to_i
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,8 +2,6 @@
2
2
  module Tray
3
3
  module Checkout
4
4
  class Transaction
5
- URL = "http://api.sandbox.checkout.tray.com.br/api/v1/transactions"
6
-
7
5
  def get(token)
8
6
  request("get_by_token", { token: token })
9
7
  end
@@ -15,8 +13,7 @@ module Tray
15
13
  private
16
14
 
17
15
  def request(path, params)
18
- xml = web_service.request!("#{URL}/#{path}", params)
19
- #puts xml
16
+ xml = web_service.request!("#{Tray::Checkout.api_url}/#{path}", params)
20
17
  parser.response(xml)
21
18
  end
22
19
 
@@ -7,6 +7,7 @@ module Tray
7
7
  end
8
8
 
9
9
  def parse
10
+ token_account! @params
10
11
  customer_map! @params[:customer]
11
12
  payment_map! @params[:payment]
12
13
  products_map! @params
@@ -15,6 +16,10 @@ module Tray
15
16
 
16
17
  private
17
18
 
19
+ def token_account!(params)
20
+ params[:token_account] = Tray::Checkout.token_account if params[:token_account].nil?
21
+ end
22
+
18
23
  def customer_map!(customer)
19
24
  return unless customer
20
25
  customer[:gender] = SEX[customer[:sex]] if customer[:sex]
@@ -0,0 +1,6 @@
1
+ # encoding: UTF-8
2
+ module URI
3
+ def ssl?
4
+ self.port == 443
5
+ end
6
+ end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  module Tray
3
3
  module Checkout
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
 
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'active_support/core_ext'
3
- require 'net/http'
3
+ require 'net/https'
4
4
  require 'uri'
5
5
 
6
6
  module Tray
@@ -9,9 +9,13 @@ module Tray
9
9
  def request!(url, params)
10
10
  uri = URI.parse(url)
11
11
  http = build_http(uri)
12
+
12
13
  request = build_request(uri, params)
14
+ log_request(request, url)
13
15
 
14
16
  response = http.request(request)
17
+ log_response(response)
18
+
15
19
  response.body
16
20
  end
17
21
 
@@ -20,6 +24,12 @@ module Tray
20
24
  def build_http(uri)
21
25
  http = Net::HTTP.new(uri.host, uri.port)
22
26
  http.open_timeout = Tray::Checkout.request_timeout
27
+
28
+ if uri.ssl?
29
+ http.use_ssl = true
30
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
31
+ end
32
+
23
33
  http
24
34
  end
25
35
 
@@ -28,6 +38,38 @@ module Tray
28
38
  request.body = params.to_param
29
39
  request
30
40
  end
41
+
42
+ def log_request(request, url)
43
+ message = format_message(request) do
44
+ message = with_line_break { "Tray-Checkout Request:" }
45
+ message << with_line_break { "POST #{url}" }
46
+ end
47
+
48
+ Tray::Checkout.log(message)
49
+ end
50
+
51
+ def log_response(response)
52
+ message = format_message(response) do
53
+ message = with_line_break { "Tray-Checkout Response:" }
54
+ message << with_line_break { "HTTP/#{response.http_version} #{response.code} #{response.message}" }
55
+ end
56
+
57
+ Tray::Checkout.log(message)
58
+ end
59
+
60
+ def format_message(http)
61
+ message = yield
62
+ message << with_line_break { format_headers_for(http) } if Tray::Checkout.log_level == :debug
63
+ message << with_line_break { http.body }
64
+ end
65
+
66
+ def format_headers_for(http)
67
+ http.each_header.map { |name, value| "#{name}: #{value}" }.join("\n")
68
+ end
69
+
70
+ def with_line_break
71
+ "#{yield}\n"
72
+ end
31
73
  end
32
74
  end
33
75
  end
data/lib/tray/checkout.rb CHANGED
@@ -3,17 +3,8 @@ require 'log-me'
3
3
 
4
4
  module Tray
5
5
  module Checkout
6
+ extend Config
6
7
  extend LogMe
7
-
8
- module Timeout
9
- DEFAULT_REQUEST_TIMEOUT = 5 #seconds
10
- attr_writer :request_timeout
11
-
12
- def request_timeout
13
- (@request_timeout ||= DEFAULT_REQUEST_TIMEOUT).to_i
14
- end
15
- end
16
-
17
8
  extend Timeout
18
9
  end
19
10
  end
data/lib/tray-checkout.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'rubygems'
3
- require 'tray/checkout'
3
+ require 'tray/checkout/config'
4
4
  require 'tray/checkout/constants'
5
5
  require 'tray/checkout/hash'
6
6
  require 'tray/checkout/parser'
@@ -8,4 +8,6 @@ require 'tray/checkout/response'
8
8
  require 'tray/checkout/response_parser'
9
9
  require 'tray/checkout/transaction'
10
10
  require 'tray/checkout/transaction_params_parser'
11
+ require 'tray/checkout/uri'
11
12
  require 'tray/checkout/web_service'
13
+ require 'tray/checkout'
data/spec/spec_helper.rb CHANGED
@@ -11,3 +11,7 @@ RSpec.configure do |config|
11
11
  end
12
12
 
13
13
  WebMock.disable_net_connect!
14
+
15
+ Tray::Checkout.configure do |config|
16
+ config.log_enabled = false
17
+ end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  def mock_request_for(response)
4
- url = Regexp.new(Tray::Checkout::Transaction::URL)
4
+ url = Regexp.new(Tray::Checkout.api_url)
5
5
  WebMock::API.stub_request(:post, url).to_return(:status => 200, :body => body_for(response))
6
6
  end
7
7
 
@@ -122,5 +122,31 @@ describe Tray::Checkout::TransactionParamsParser do
122
122
  transaction_params[:transaction_product][1][:price_unit].should == 10.00
123
123
  transaction_params[:transaction_product][1][:description].should == "Outro produto"
124
124
  end
125
+
126
+ it "keeps token account supplied in params" do
127
+ transaction_params[:token_account].should == params[:token_account]
128
+ end
129
+
130
+ context "when sets token account in configuration" do
131
+ around do |example|
132
+ Tray::Checkout.configure { |config| config.token_account = "1q2w3e4r5t6y7u8" }
133
+ example.run
134
+ Tray::Checkout.configure { |config| config.token_account = nil }
135
+ end
136
+
137
+ context "and token account is supplied in params" do
138
+ it "keeps token account supplied in params" do
139
+ transaction_params[:token_account].should == params[:token_account]
140
+ end
141
+ end
142
+
143
+ context "and token account is not supplied in params" do
144
+ it "uses token account from configuration" do
145
+ params.delete(:token_account)
146
+ transaction_params = Tray::Checkout::TransactionParamsParser.new(params).parse
147
+ transaction_params[:token_account].should == "1q2w3e4r5t6y7u8"
148
+ end
149
+ end
150
+ end
125
151
  end
126
152
  end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+ require 'spec_helper'
3
+
4
+ describe URI do
5
+ describe "#ssl?" do
6
+ context "when is SSL" do
7
+ it "returns true" do
8
+ uri = URI.parse("https://prodis.webstorelw.com.br")
9
+ uri.ssl?.should be_true
10
+ end
11
+ end
12
+
13
+ context "when is not SSL" do
14
+ it "returns false" do
15
+ uri = URI.parse("http://prodis.blog.br")
16
+ uri.ssl?.should be_false
17
+ end
18
+ end
19
+ end
20
+ end
@@ -7,7 +7,7 @@ describe Tray::Checkout::WebService do
7
7
 
8
8
  it "returns XML response" do
9
9
  mock_request_for("<xml><fake></fake>")
10
- url = Tray::Checkout::Transaction::URL
10
+ url = Tray::Checkout.api_url
11
11
  params = { token: "qwe123asd456poi098lkj765" }
12
12
  web_service.request!(url, params).should eql "<xml><fake></fake>"
13
13
  end
@@ -19,4 +19,44 @@ describe Tray::Checkout do
19
19
  end
20
20
  end
21
21
  end
22
+
23
+ describe "#token_account" do
24
+ it "default is nil" do
25
+ Tray::Checkout.token_account.should be_nil
26
+ end
27
+
28
+ context "when set token account" do
29
+ around do |example|
30
+ Tray::Checkout.configure { |config| config.token_account = "123u5uu9ef36f7u" }
31
+ example.run
32
+ Tray::Checkout.configure { |config| config.token_account = nil }
33
+ end
34
+
35
+ it "returns token account" do
36
+ Tray::Checkout.token_account.should == "123u5uu9ef36f7u"
37
+ end
38
+ end
39
+ end
40
+
41
+ describe "#environment" do
42
+ it "default is production" do
43
+ Tray::Checkout.environment.should == :production
44
+ end
45
+
46
+ { production: "https://api.checkout.tray.com.br/api/transactions",
47
+ sandbox: "http://api.sandbox.checkout.tray.com.br/api/v1/transactions"
48
+ }.each do |environment, url|
49
+ context "when environment is #{environment}" do
50
+ around do |example|
51
+ Tray::Checkout.configure { |config| config.environment = environment }
52
+ example.run
53
+ Tray::Checkout.configure { |config| config.environment = :production }
54
+ end
55
+
56
+ it "returns correct API URL" do
57
+ Tray::Checkout.api_url.should == url
58
+ end
59
+ end
60
+ end
61
+ end
22
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tray-checkout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-27 00:00:00.000000000 Z
12
+ date: 2013-01-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &14772640 !ruby/object:Gem::Requirement
16
+ requirement: &14772580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *14772640
24
+ version_requirements: *14772580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: log-me
27
- requirement: &14772410 !ruby/object:Gem::Requirement
27
+ requirement: &14772350 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.0.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *14772410
35
+ version_requirements: *14772350
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &14772220 !ruby/object:Gem::Requirement
38
+ requirement: &14772160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *14772220
46
+ version_requirements: *14772160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &14771950 !ruby/object:Gem::Requirement
49
+ requirement: &14771890 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '2.12'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *14771950
57
+ version_requirements: *14771890
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: webmock
60
- requirement: &14771700 !ruby/object:Gem::Requirement
60
+ requirement: &14771640 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '1.9'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *14771700
68
+ version_requirements: *14771640
69
69
  description: Tray Checkout API
70
70
  email:
71
71
  - prodis@gmail.com
@@ -81,6 +81,7 @@ files:
81
81
  - Rakefile
82
82
  - lib/tray-checkout.rb
83
83
  - lib/tray/checkout.rb
84
+ - lib/tray/checkout/config.rb
84
85
  - lib/tray/checkout/constants.rb
85
86
  - lib/tray/checkout/hash.rb
86
87
  - lib/tray/checkout/parser.rb
@@ -88,6 +89,7 @@ files:
88
89
  - lib/tray/checkout/response_parser.rb
89
90
  - lib/tray/checkout/transaction.rb
90
91
  - lib/tray/checkout/transaction_params_parser.rb
92
+ - lib/tray/checkout/uri.rb
91
93
  - lib/tray/checkout/version.rb
92
94
  - lib/tray/checkout/web_service.rb
93
95
  - spec/spec_helper.rb
@@ -104,6 +106,7 @@ files:
104
106
  - spec/tray/checkout/response_spec.rb
105
107
  - spec/tray/checkout/transaction_params_parser_spec.rb
106
108
  - spec/tray/checkout/transaction_spec.rb
109
+ - spec/tray/checkout/uri_spec.rb
107
110
  - spec/tray/checkout/web_service_spec.rb
108
111
  - spec/tray/checkout_spec.rb
109
112
  - tray-checkout.gemspec
@@ -128,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
131
  version: '0'
129
132
  segments:
130
133
  - 0
131
- hash: 269471549
134
+ hash: -922153133
132
135
  requirements: []
133
136
  rubyforge_project:
134
137
  rubygems_version: 1.8.16
@@ -150,5 +153,6 @@ test_files:
150
153
  - spec/tray/checkout/response_spec.rb
151
154
  - spec/tray/checkout/transaction_params_parser_spec.rb
152
155
  - spec/tray/checkout/transaction_spec.rb
156
+ - spec/tray/checkout/uri_spec.rb
153
157
  - spec/tray/checkout/web_service_spec.rb
154
158
  - spec/tray/checkout_spec.rb