conekta 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/.gitignore +18 -0
  2. data/CONTRIBUTORS +9 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +57 -0
  5. data/History.txt +4 -0
  6. data/LICENSE +23 -0
  7. data/README.rdoc +22 -0
  8. data/Rakefile +14 -0
  9. data/VERSION +1 -0
  10. data/bin/conekta-console +7 -0
  11. data/conekta.gemspec +27 -0
  12. data/gemfiles/default-with-activesupport.gemfile +3 -0
  13. data/gemfiles/json.gemfile +4 -0
  14. data/gemfiles/yajl.gemfile +4 -0
  15. data/lib/conekta.rb +292 -0
  16. data/lib/conekta/account.rb +4 -0
  17. data/lib/conekta/api_operations/create.rb +16 -0
  18. data/lib/conekta/api_operations/delete.rb +11 -0
  19. data/lib/conekta/api_operations/list.rb +16 -0
  20. data/lib/conekta/api_operations/update.rb +16 -0
  21. data/lib/conekta/api_resource.rb +33 -0
  22. data/lib/conekta/charge.rb +43 -0
  23. data/lib/conekta/conekta_object.rb +158 -0
  24. data/lib/conekta/errors/api_connection_error.rb +4 -0
  25. data/lib/conekta/errors/api_error.rb +4 -0
  26. data/lib/conekta/errors/authentication_error.rb +4 -0
  27. data/lib/conekta/errors/card_error.rb +11 -0
  28. data/lib/conekta/errors/conekta_error.rb +20 -0
  29. data/lib/conekta/errors/malformed_request_error.rb +10 -0
  30. data/lib/conekta/errors/parameter_validation_error.rb +10 -0
  31. data/lib/conekta/errors/resource_not_found_error.rb +10 -0
  32. data/lib/conekta/event.rb +5 -0
  33. data/lib/conekta/json.rb +21 -0
  34. data/lib/conekta/list_object.rb +35 -0
  35. data/lib/conekta/log.rb +5 -0
  36. data/lib/conekta/singleton_api_resource.rb +20 -0
  37. data/lib/conekta/util.rb +99 -0
  38. data/lib/conekta/version.rb +3 -0
  39. data/lib/data/ca-certificates.crt +3918 -0
  40. data/spec/conekta_spec.rb +743 -0
  41. data/spec/conekta_with_active_support_spec.rb +3 -0
  42. data/spec/test_helper.rb +302 -0
  43. metadata +177 -0
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_support/all'
3
+ load File.expand_path(File.join(File.dirname(__FILE__), 'conekta_spec.rb'))
@@ -0,0 +1,302 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require 'conekta'
4
+ require 'mocha/setup'
5
+ include Mocha
6
+
7
+ #monkeypatch request methods
8
+ module Conekta
9
+ @mock_rest_client = nil
10
+
11
+ def self.mock_rest_client=(mock_client)
12
+ @mock_rest_client = mock_client
13
+ end
14
+
15
+ def self.execute_request(opts)
16
+ get_params = (opts[:headers] || {})[:params]
17
+ post_params = opts[:payload]
18
+ case opts[:method]
19
+ when :get then @mock_rest_client.get opts[:url], get_params, post_params
20
+ when :post then @mock_rest_client.post opts[:url], get_params, post_params
21
+ when :delete then @mock_rest_client.delete opts[:url], get_params, post_params
22
+ end
23
+ end
24
+ end
25
+
26
+ def test_response(body, code=200)
27
+ # When an exception is raised, restclient clobbers method_missing. Hence we
28
+ # can't just use the stubs interface.
29
+ body = MultiJson.dump(body) if !(body.kind_of? String)
30
+ m = double
31
+ m.instance_variable_set('@conekta_values', { :body => body, :code => code })
32
+ def m.body; @conekta_values[:body]; end
33
+ def m.code; @conekta_values[:code]; end
34
+ m
35
+ end
36
+
37
+ def test_customer(params={})
38
+ {
39
+ :subscription_history => [],
40
+ :bills => [],
41
+ :charges => [],
42
+ :livemode => false,
43
+ :object => "customer",
44
+ :id => "c_test_customer",
45
+ :default_card => "cc_test_card",
46
+ :created => 1304114758,
47
+ :cards => test_card_array('c_test_customer')
48
+ }.merge(params)
49
+ end
50
+
51
+ def test_customer_array
52
+ {
53
+ :data => [test_customer, test_customer, test_customer],
54
+ :object => 'list',
55
+ :url => '/customers'
56
+ }
57
+ end
58
+
59
+ def test_charge(params={})
60
+ {
61
+ :refunded => false,
62
+ :paid => true,
63
+ :amount => 100,
64
+ :card => {
65
+ :type => "Visa",
66
+ :last4 => "4242",
67
+ :exp_month => 11,
68
+ :country => "US",
69
+ :exp_year => 2012,
70
+ :id => "cc_test_card",
71
+ :object => "card"
72
+ },
73
+ :id => "ch_test_charge",
74
+ :reason => "execute_charge",
75
+ :livemode => false,
76
+ :currency => "usd",
77
+ :object => "charge",
78
+ :created => 1304114826
79
+ }.merge(params)
80
+ end
81
+
82
+ def test_charge_array_filtered
83
+ {
84
+ :data => [test_charge, test_charge, test_charge],
85
+ :object => 'list',
86
+ :url => '/charges.json?amount=500'
87
+ }
88
+ end
89
+
90
+ def test_charge_array
91
+ {
92
+ :data => [test_charge, test_charge, test_charge],
93
+ :object => 'list',
94
+ :url => '/charges'
95
+ }
96
+ end
97
+
98
+ def test_card_array(customer_id)
99
+ {
100
+ :data => [test_card, test_card, test_card],
101
+ :object => 'list',
102
+ :url => '/customers/' + customer_id + '/cards'
103
+ }
104
+ end
105
+
106
+ def test_card(params={})
107
+ {
108
+ :type => "Visa",
109
+ :last4 => "4242",
110
+ :exp_month => 11,
111
+ :country => "US",
112
+ :exp_year => 2012,
113
+ :id => "cc_test_card",
114
+ :customer => 'c_test_customer',
115
+ :object => "card"
116
+ }.merge(params)
117
+ end
118
+
119
+ def test_coupon(params={})
120
+ {
121
+ :duration => 'repeating',
122
+ :duration_in_months => 3,
123
+ :percent_off => 25,
124
+ :id => "co_test_coupon",
125
+ :object => "coupon"
126
+ }.merge(params)
127
+ end
128
+
129
+ #FIXME nested overrides would be better than hardcoding plan_id
130
+ def test_subscription(plan_id="gold")
131
+ {
132
+ :current_period_end => 1308681468,
133
+ :status => "trialing",
134
+ :plan => {
135
+ :interval => "month",
136
+ :amount => 7500,
137
+ :trial_period_days => 30,
138
+ :object => "plan",
139
+ :identifier => plan_id
140
+ },
141
+ :current_period_start => 1308595038,
142
+ :start => 1308595038,
143
+ :object => "subscription",
144
+ :trial_start => 1308595038,
145
+ :trial_end => 1308681468,
146
+ :customer => "c_test_customer"
147
+ }
148
+ end
149
+
150
+ def test_invoice
151
+ {
152
+ :id => 'in_test_invoice',
153
+ :object => 'invoice',
154
+ :livemode => false,
155
+ :amount_due => 1000,
156
+ :attempt_count => 0,
157
+ :attempted => false,
158
+ :closed => false,
159
+ :currency => 'usd',
160
+ :customer => 'c_test_customer',
161
+ :date => 1349738950,
162
+ :lines => {
163
+ "invoiceitems" => [
164
+ {
165
+ :id => 'ii_test_invoice_item',
166
+ :object => '',
167
+ :livemode => false,
168
+ :amount => 1000,
169
+ :currency => 'usd',
170
+ :customer => 'c_test_customer',
171
+ :date => 1349738950,
172
+ :description => "A Test Invoice Item",
173
+ :invoice => 'in_test_invoice'
174
+ },
175
+ ],
176
+ },
177
+ :paid => false,
178
+ :period_end => 1349738950,
179
+ :period_start => 1349738950,
180
+ :starting_balance => 0,
181
+ :subtotal => 1000,
182
+ :total => 1000,
183
+ :charge => nil,
184
+ :discount => nil,
185
+ :ending_balance => nil,
186
+ :next_payemnt_attempt => 1349825350,
187
+ }
188
+ end
189
+
190
+ def test_paid_invoice
191
+ test_invoice.merge({
192
+ :attempt_count => 1,
193
+ :attempted => true,
194
+ :closed => true,
195
+ :paid => true,
196
+ :charge => 'ch_test_charge',
197
+ :ending_balance => 0,
198
+ :next_payment_attempt => nil,
199
+ })
200
+ end
201
+
202
+ def test_invoice_customer_array
203
+ {
204
+ :data => [test_invoice],
205
+ :object => 'list',
206
+ :url => '/invoices?customer=test_customer'
207
+ }
208
+ end
209
+
210
+ def test_recipient(params={})
211
+ {
212
+ :name => "Conekta User",
213
+ :type => "individual",
214
+ :livemode => false,
215
+ :object => "recipient",
216
+ :id => "rp_test_recipient",
217
+ :active_account => {
218
+ :last4 => "6789",
219
+ :bank_name => "STRIPE TEST BANK",
220
+ :country => "US",
221
+ :object => "bank_account"
222
+ },
223
+ :created => 1304114758,
224
+ :verified => true
225
+ }.merge(params)
226
+ end
227
+
228
+ def test_recipient_array
229
+ {
230
+ :data => [test_recipient, test_recipient, test_recipient],
231
+ :object => 'list',
232
+ :url => '/recipients'
233
+ }
234
+ end
235
+
236
+ def test_transfer(params={})
237
+ {
238
+ :status => 'pending',
239
+ :amount => 100,
240
+ :account => {
241
+ :object => 'bank_account',
242
+ :country => 'US',
243
+ :bank_name => 'STRIPE TEST BANK',
244
+ :last4 => '6789'
245
+ },
246
+ :recipient => 'test_recipient',
247
+ :fee => 0,
248
+ :fee_details => [],
249
+ :id => "tr_test_transfer",
250
+ :livemode => false,
251
+ :currency => "usd",
252
+ :object => "transfer",
253
+ :date => 1304114826
254
+ }.merge(params)
255
+ end
256
+
257
+ def test_transfer_array
258
+ {
259
+ :data => [test_transfer, test_transfer, test_transfer],
260
+ :object => 'list',
261
+ :url => '/transfers'
262
+ }
263
+ end
264
+
265
+ def test_invalid_api_key_error
266
+ {
267
+ "error" => {
268
+ "type" => "invalid_request_error",
269
+ "message" => "Invalid API Key provided: invalid"
270
+ }
271
+ }
272
+ end
273
+
274
+ def test_invalid_exp_year_error
275
+ {
276
+ "code" => "invalid_expiry_year",
277
+ "param" => "exp_year",
278
+ "type" => "card_error",
279
+ "message" => "Your card's expiration year is invalid"
280
+ }
281
+ end
282
+
283
+ def test_missing_id_error
284
+ {
285
+ :param => "id",
286
+ :type => "parameter_validation_error",
287
+ :message => "Invalid id value"
288
+ }
289
+ end
290
+
291
+ def test_api_error
292
+ {
293
+ :type => "api_error"
294
+ }
295
+ end
296
+
297
+ def test_delete_discount_response
298
+ {
299
+ :deleted => true,
300
+ :id => "di_test_coupon"
301
+ }
302
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: conekta
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Leo Fischer
9
+ - Mauricio Murga
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-12-13 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rest-client
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '1.4'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '1.4'
31
+ - !ruby/object:Gem::Dependency
32
+ name: multi_json
33
+ requirement: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: 1.0.4
39
+ - - <
40
+ - !ruby/object:Gem::Version
41
+ version: '2'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: 1.0.4
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: '2'
53
+ - !ruby/object:Gem::Dependency
54
+ name: shoulda
55
+ requirement: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ version: 3.4.0
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 3.4.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: rake
87
+ requirement: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ! '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ description: Easy payments and shipping, see http://conekta.mx for details.
102
+ email:
103
+ - leo@conekta.mx
104
+ - mauricio@conekta.com
105
+ executables:
106
+ - conekta-console
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - .gitignore
111
+ - CONTRIBUTORS
112
+ - Gemfile
113
+ - Gemfile.lock
114
+ - History.txt
115
+ - LICENSE
116
+ - README.rdoc
117
+ - Rakefile
118
+ - VERSION
119
+ - bin/conekta-console
120
+ - conekta.gemspec
121
+ - gemfiles/default-with-activesupport.gemfile
122
+ - gemfiles/json.gemfile
123
+ - gemfiles/yajl.gemfile
124
+ - lib/conekta.rb
125
+ - lib/conekta/account.rb
126
+ - lib/conekta/api_operations/create.rb
127
+ - lib/conekta/api_operations/delete.rb
128
+ - lib/conekta/api_operations/list.rb
129
+ - lib/conekta/api_operations/update.rb
130
+ - lib/conekta/api_resource.rb
131
+ - lib/conekta/charge.rb
132
+ - lib/conekta/conekta_object.rb
133
+ - lib/conekta/errors/api_connection_error.rb
134
+ - lib/conekta/errors/api_error.rb
135
+ - lib/conekta/errors/authentication_error.rb
136
+ - lib/conekta/errors/card_error.rb
137
+ - lib/conekta/errors/conekta_error.rb
138
+ - lib/conekta/errors/malformed_request_error.rb
139
+ - lib/conekta/errors/parameter_validation_error.rb
140
+ - lib/conekta/errors/resource_not_found_error.rb
141
+ - lib/conekta/event.rb
142
+ - lib/conekta/json.rb
143
+ - lib/conekta/list_object.rb
144
+ - lib/conekta/log.rb
145
+ - lib/conekta/singleton_api_resource.rb
146
+ - lib/conekta/util.rb
147
+ - lib/conekta/version.rb
148
+ - lib/data/ca-certificates.crt
149
+ - spec/conekta_spec.rb
150
+ - spec/conekta_with_active_support_spec.rb
151
+ - spec/test_helper.rb
152
+ homepage: http://conekta.mx/doc
153
+ licenses: []
154
+ post_install_message:
155
+ rdoc_options: []
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ none: false
160
+ requirements:
161
+ - - ! '>='
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ requirements: []
171
+ rubyforge_project:
172
+ rubygems_version: 1.8.23
173
+ signing_key:
174
+ specification_version: 3
175
+ summary: Ruby bindings for the Conekta API
176
+ test_files: []
177
+ has_rdoc: