openpay 1.0.1 → 1.0.2

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/.rakeTasks +1 -1
  3. data/.idea/OpenPay.iml +63 -28
  4. data/.idea/workspace.xml +1501 -0
  5. data/Gemfile +7 -2
  6. data/README.md +6 -15
  7. data/Rakefile +10 -7
  8. data/lib/OpenPay/Cards.rb +1 -2
  9. data/lib/OpenPay/Customers.rb +0 -1
  10. data/lib/OpenPay/Plans.rb +0 -5
  11. data/lib/OpenPay/bankaccounts.rb +0 -7
  12. data/lib/OpenPay/errors/openpay_exception_factory.rb +2 -0
  13. data/lib/OpenPay/open_pay_resource.rb +3 -3
  14. data/lib/OpenPay/openpay_api.rb +3 -6
  15. data/lib/openpay/bankaccounts.rb +59 -0
  16. data/lib/openpay/cards.rb +75 -0
  17. data/lib/openpay/charges.rb +77 -0
  18. data/lib/openpay/customers.rb +194 -0
  19. data/lib/openpay/errors/openpay_connection_exception.rb +3 -0
  20. data/lib/openpay/errors/openpay_exception.rb +29 -0
  21. data/lib/openpay/errors/openpay_exception_factory.rb +60 -0
  22. data/lib/openpay/errors/openpay_transaction_exception.rb +5 -0
  23. data/lib/openpay/fees.rb +5 -0
  24. data/lib/openpay/open_pay_resource.rb +242 -0
  25. data/lib/openpay/open_pay_resource_factory.rb +10 -0
  26. data/lib/openpay/openpay_api.rb +60 -0
  27. data/lib/openpay/payouts.rb +59 -0
  28. data/lib/openpay/plans.rb +23 -0
  29. data/lib/openpay/subscriptions.rb +58 -0
  30. data/lib/openpay/transfers.rb +43 -0
  31. data/lib/openpay.rb +5 -5
  32. data/lib/version.rb +2 -2
  33. data/openpay.gemspec +17 -5
  34. data/test/spec/bankaccounts_spec.rb +1 -2
  35. data/test/spec/cards_spec.rb +1 -1
  36. data/test/spec/charges_spec.rb +1 -2
  37. data/test/spec/customers_spec.rb +2 -2
  38. data/test/spec/exceptions_spec.rb +1 -1
  39. data/test/spec/fees_spec.rb +2 -2
  40. data/test/spec/openpayresource_spec.rb +1 -1
  41. data/test/spec/payouts_spec.rb +1 -1
  42. data/test/spec/plans_spec.rb +1 -1
  43. data/test/spec/subscriptions_spec.rb +1 -1
  44. data/test/spec/transfers_spec.rb +1 -1
  45. data/test/spec_helper.rb +7 -2
  46. metadata +91 -3
data/Gemfile CHANGED
@@ -1,10 +1,15 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
+
3
4
  gem 'rspec'
4
- gem 'rest-client'
5
- gem 'factory_girl'
5
+ gem 'rest-client', '~>1.6.7'
6
+ gem 'factory_girl' , '4.2.0'
6
7
  gem 'json_spec'
7
8
 
8
9
 
10
+
11
+
12
+
9
13
  # Specify your gem's dependencies in Openpay.gemspec
10
14
  gemspec
15
+
data/README.md CHANGED
@@ -1,5 +1,4 @@
1
- # openpay-ruby
2
-
1
+ # Openpay-Ruby
3
2
 
4
3
  ##Description
5
4
 
@@ -322,14 +321,6 @@ open_pay_resource.delete_all(customer_id=nil)
322
321
 
323
322
  customer_cards=cards.all(customer_id)
324
323
 
325
- - all merchant cards
326
-
327
- merchant_cards=cards.all
328
-
329
- - all customer card
330
-
331
- customer_cards=cards.all(customer_id)
332
-
333
324
  - delete merchant card
334
325
 
335
326
  cards.delete(card_id)
@@ -338,11 +329,11 @@ open_pay_resource.delete_all(customer_id=nil)
338
329
 
339
330
  cards.delete(card_id,customer_id)
340
331
 
341
- -delete all merchant cards
332
+ - delete all merchant cards
342
333
 
343
334
  cards.delete_all
344
335
 
345
- -delete all customer cards
336
+ - delete all customer cards
346
337
 
347
338
  cards.delete_all(customer_id)
348
339
 
@@ -662,7 +653,6 @@ rescue OpenpayApiTransactionError => e
662
653
  end
663
654
  ```
664
655
 
665
-
666
656
  ###These exceptions have the following attributes:
667
657
 
668
658
  - *category*
@@ -686,12 +676,13 @@ In the Openpay dashboard you are able to see every request and its corresponding
686
676
  - bank accounts for merchant cannot be created using the api. It should be done through the dashboard.
687
677
  - Is recommended to reset your account using the dashboard when running serious testing (assure clean state)
688
678
  - check openpay_ap.rb for Logger configuration
689
- - travis https://travis-ci.org/open-pay/openpay-ruby
679
+ - travis https://travis-ci.org/open-pay/openpay-ruby , if a test fails it will leave leave some records, it may affect posterior tests.
680
+ it is recommended to reset the console/account to assure a clean state after a failure occurs.
690
681
 
691
682
  ## More information
692
683
  For more use cases take a look at the *test/spec* folder
693
684
 
694
- 1. http://docs.openpay.mx/
685
+ 1. http://docs.openpay.mx/
695
686
 
696
687
 
697
688
 
data/Rakefile CHANGED
@@ -1,12 +1,15 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ require 'rspec'
2
+ require 'rspec/core/rake_task'
3
3
 
4
+ task :default => [:spec]
4
5
 
6
+ desc 'run specifications'
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.pattern = 'test/spec/*'
9
+ end
5
10
 
6
- task :default => [:spec]
7
11
 
8
- desc 'run specifications'
9
- RSpec::Core::RakeTask.new do |t|
10
- t.pattern = 'test/spec/*'
11
- end
12
+ RSpec::Core::RakeTask.new('bankaccounts') do |t|
13
+ t.pattern = 'test/spec/bankaccounts*'
14
+ end
12
15
 
data/lib/OpenPay/Cards.rb CHANGED
@@ -2,7 +2,6 @@ require 'open_pay_resource'
2
2
 
3
3
  class Cards < OpenPayResource
4
4
 
5
-
6
5
  def list(creation,before,after,offset=0,limit=10)
7
6
 
8
7
  end
@@ -73,4 +72,4 @@ class Cards < OpenPayResource
73
72
  end
74
73
 
75
74
 
76
- end
75
+ end
@@ -34,7 +34,6 @@ class Customers < OpenPayResource
34
34
  raise OpenpayException.new('This method is not supported on PRODUCTION',false)
35
35
  end
36
36
  each_bank_account(customer) do |account|
37
- warn "deleting bank_account: #{account['id']}"
38
37
  delete("#{customer}/bankaccounts/#{account['id']}")
39
38
  end
40
39
  end
data/lib/OpenPay/Plans.rb CHANGED
@@ -2,13 +2,10 @@ require 'open_pay_resource'
2
2
 
3
3
  class Plans < OpenPayResource
4
4
 
5
-
6
5
  def update(plan,plan_id)
7
6
  put(plan, "#{plan_id}")
8
7
  end
9
8
 
10
-
11
-
12
9
  def each_subscription(plan_id)
13
10
  get("#{plan_id}/subscriptions")
14
11
  end
@@ -23,6 +20,4 @@ class Plans < OpenPayResource
23
20
  end
24
21
 
25
22
 
26
-
27
-
28
23
  end
@@ -1,8 +1,6 @@
1
1
  require 'open_pay_resource'
2
2
 
3
3
 
4
-
5
- #TODO change name
6
4
  class Bankaccounts < OpenPayResource
7
5
 
8
6
 
@@ -58,9 +56,4 @@ class Bankaccounts < OpenPayResource
58
56
 
59
57
 
60
58
 
61
-
62
-
63
-
64
-
65
-
66
59
  end
@@ -5,6 +5,8 @@ class OpenpayExceptionFactory
5
5
  def OpenpayExceptionFactory::create(exception)
6
6
 
7
7
  LOG.warn("An exception has been raised (original exception class: #{exception.class})")
8
+ LOG.warn("An exception has been raised (original exception class: #{exception.message })")
9
+
8
10
 
9
11
  case exception
10
12
 
@@ -52,7 +52,6 @@ class OpenPayResource
52
52
  end
53
53
 
54
54
  each do |res|
55
- warn "deleting #{res}"
56
55
  self.delete(res['id'])
57
56
  end
58
57
 
@@ -136,7 +135,8 @@ class OpenPayResource
136
135
 
137
136
  LOG.debug("#{self.class.name.downcase}:")
138
137
  LOG.debug " POST URL:#{url(args)}"
139
- LOG.debug " json: #{json}"
138
+ #For security reasons we keep it hide
139
+ #LOG.debug " json: #{json}"
140
140
 
141
141
  begin
142
142
 
@@ -185,7 +185,7 @@ class OpenPayResource
185
185
 
186
186
 
187
187
  LOG.info "PUT URL:#{url}"
188
- LOG.info " json: #{json}"
188
+ #LOG.info " json: #{json}"
189
189
 
190
190
  begin
191
191
  res= RestClient::Request.new(
@@ -1,26 +1,23 @@
1
1
  require 'logger'
2
- require 'open_pay_resource_factory'
3
2
  require 'base64'
4
3
  require 'rest-client'
5
4
  require 'uri'
6
- require 'openpay/errors/openpay_exception'
7
5
 
6
+ require 'openpay/open_pay_resource_factory'
7
+ require 'errors/openpay_exception'
8
8
 
9
9
  LOG= Logger.new(STDOUT)
10
-
11
10
  #change to Logger::DEBUG if need trace information
12
11
  #due the nature of the information, we recommend to never use a log file when in debug
13
- LOG.level=Logger::INFO
12
+ LOG.level=Logger::ERROR
14
13
 
15
14
 
16
15
  class OpenpayApi
17
16
 
18
-
19
17
  #API Endpoints
20
18
  API_DEV='https://sandbox-api.openpay.mx/v1/'
21
19
  API_PROD='https://api.openpay.mx'
22
20
 
23
-
24
21
  #by default the testing environment is used
25
22
  def initialize(merchant_id, private_key,production=false)
26
23
  @merchant_id=merchant_id
@@ -0,0 +1,59 @@
1
+ require 'open_pay_resource'
2
+
3
+
4
+ class Bankaccounts < OpenPayResource
5
+
6
+
7
+ def create(bank_account,customer_id)
8
+ customers=@api_hook.create(:customers)
9
+ customers.create_bank_account(customer_id,bank_account)
10
+ end
11
+
12
+
13
+ def get(customer_id='',bank_account=nil)
14
+ customers=@api_hook.create(:customers)
15
+
16
+ if bank_account
17
+ customers.get_bank_account(customer_id,bank_account)
18
+ else
19
+ customers.get_bank_account(customer_id)
20
+ end
21
+
22
+ end
23
+
24
+
25
+ def delete(customer_id,bank_account)
26
+ customers=@api_hook.create(:customers)
27
+ customers.delete_bank_account(customer_id,bank_account)
28
+ end
29
+
30
+
31
+ def each(customer_id)
32
+ customers=@api_hook.create(:customers)
33
+ customers.each_bank_account(customer_id) do |acc|
34
+ yield acc
35
+ end
36
+
37
+ end
38
+
39
+
40
+ def all(customer_id)
41
+ customers=@api_hook.create(:customers)
42
+ customers.all_bank_accounts(customer_id)
43
+ end
44
+
45
+
46
+ def delete_all(customer_id)
47
+
48
+ if env == :production
49
+ raise OpenpayException.new('This method is not supported on PRODUCTION',false)
50
+ end
51
+
52
+ customers=@api_hook.create(:customers)
53
+ customers.delete_all_bank_accounts(customer_id)
54
+
55
+ end
56
+
57
+
58
+
59
+ end
@@ -0,0 +1,75 @@
1
+ require 'open_pay_resource'
2
+
3
+ class Cards < OpenPayResource
4
+
5
+ def list(creation,before,after,offset=0,limit=10)
6
+
7
+ end
8
+
9
+
10
+ def get(card='',customer_id=nil)
11
+ if customer_id
12
+ customers=@api_hook.create(:customers)
13
+ customers.get_card(customer_id,card)
14
+ else
15
+ super card
16
+ end
17
+ end
18
+
19
+
20
+ def create(card,customer_id=nil)
21
+ if customer_id
22
+ customers=@api_hook.create(:customers)
23
+ customers.create_card(customer_id,card)
24
+ else
25
+ super card
26
+ end
27
+ end
28
+
29
+
30
+ def delete(card_id,customer_id=nil)
31
+ if customer_id
32
+ customers=@api_hook.create(:customers)
33
+ customers.delete_card(customer_id,card_id)
34
+ else
35
+ super card_id
36
+ end
37
+ end
38
+
39
+
40
+ def delete_all(customer_id=nil)
41
+ if customer_id
42
+ customers=@api_hook.create(:customers)
43
+ customers.delete_all_cards(customer_id)
44
+ else
45
+ each do |card|
46
+ delete(card['id'])
47
+ end
48
+ end
49
+ end
50
+
51
+
52
+ def each(customer_id=nil)
53
+ if customer_id
54
+ all(customer_id).each do |card|
55
+ yield card
56
+ end
57
+ else
58
+ all.each do |card|
59
+ yield card
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ def all(customer_id=nil)
66
+ if customer_id
67
+ customers=@api_hook.create(:customers)
68
+ customers.all_cards(customer_id)
69
+ else
70
+ super ''
71
+ end
72
+ end
73
+
74
+
75
+ end
@@ -0,0 +1,77 @@
1
+ require 'open_pay_resource'
2
+
3
+ class Charges < OpenPayResource
4
+
5
+ def all(customer_id=nil)
6
+ if customer_id
7
+ customers=@api_hook.create(:customers)
8
+ customers.all_charges(customer_id)
9
+ else
10
+ super ''
11
+ end
12
+ end
13
+
14
+
15
+ def cancel(transaction_id,customer_id=nil)
16
+ if customer_id
17
+ customers=@api_hook.create(:customers)
18
+ customers.cancel_charge(customer_id, transaction_id)
19
+ else
20
+ post('', transaction_id+'/cancel')
21
+ end
22
+ end
23
+
24
+
25
+ def refund(transaction_id,description,customer_id=nil)
26
+ if customer_id
27
+ customers=@api_hook.create(:customers)
28
+ customers.refund_charge(customer_id,transaction_id,description)
29
+ else
30
+ post(description, transaction_id+'/refund')
31
+ end
32
+ end
33
+
34
+
35
+ def capture(transaction_id,customer_id=nil)
36
+ if customer_id
37
+ customers=@api_hook.create(:customers)
38
+ customers.capture_charge(customer_id,transaction_id )
39
+ else
40
+ post( '',transaction_id+'/capture')
41
+ end
42
+ end
43
+
44
+
45
+ def each(customer_id=nil)
46
+ if customer_id
47
+ all(customer_id).each do |card|
48
+ yield card
49
+ end
50
+ else
51
+ all.each do |card|
52
+ yield card
53
+ end
54
+ end
55
+ end
56
+
57
+
58
+
59
+ def get(charge='', customer_id=nil)
60
+ if customer_id
61
+ customers=@api_hook.create(:customers)
62
+ customers.get_charge(customer_id, charge)
63
+ else
64
+ super charge
65
+ end
66
+ end
67
+
68
+ def create(charge, customer_id=nil)
69
+ if customer_id
70
+ customers=@api_hook.create(:customers)
71
+ customers.create_charge(customer_id, charge)
72
+ else
73
+ super charge
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,194 @@
1
+ require 'open_pay_resource'
2
+
3
+
4
+
5
+ class Customers < OpenPayResource
6
+
7
+
8
+ #Bankaccount
9
+ def create_bank_account(customer,bank_account)
10
+ create(bank_account,"#{customer}/bankaccounts")
11
+ end
12
+
13
+ def get_bank_account(customer,bank_id)
14
+ get("#{customer}/bankaccounts/#{bank_id}")
15
+ end
16
+
17
+ def all_bank_accounts(customer)
18
+ get("#{customer}/bankaccounts/")
19
+ end
20
+
21
+ def each_bank_account(customer)
22
+ get("#{customer}/bankaccounts/").each do |account|
23
+ yield account
24
+ end
25
+ end
26
+
27
+
28
+ def delete_bank_account(customer,bank_id)
29
+ delete("#{customer}/bankaccounts/#{bank_id}")
30
+ end
31
+
32
+ def delete_all_bank_accounts(customer)
33
+ if env == :production
34
+ raise OpenpayException.new('This method is not supported on PRODUCTION',false)
35
+ end
36
+ each_bank_account(customer) do |account|
37
+ delete("#{customer}/bankaccounts/#{account['id']}")
38
+ end
39
+ end
40
+
41
+
42
+ #Charges
43
+ # customers.create_charge(customer_id,charge)
44
+ def create_charge(customer_id,charge)
45
+ create(charge,"#{customer_id}/charges")
46
+ end
47
+
48
+ #gets a charge_id for a given customer_id
49
+ def get_charge(customer_id,charge_id)
50
+ get("#{customer_id}/charges/#{charge_id}")
51
+ end
52
+
53
+ #return all charges for the given customer_id
54
+ def all_charges(customer_id)
55
+ get("#{customer_id}/charges/")
56
+ end
57
+
58
+ def cancel_charge(customer_id,charge_id)
59
+ post(charge_id,"#{customer_id}/charges/#{charge_id}/cancel")
60
+ end
61
+
62
+ def refund_charge(customer_id,charge_id,description)
63
+ post(description,"#{customer_id}/charges/#{charge_id}/refund")
64
+ end
65
+
66
+ def capture_charge(customer_id,charge_id)
67
+ post('',"#{customer_id}/charges/#{charge_id}/capture")
68
+ end
69
+
70
+
71
+
72
+ #Payouts
73
+ def create_payout(customer_id,payout)
74
+ post(payout,"#{customer_id}/payouts")
75
+ end
76
+
77
+ def all_payouts(customer_id)
78
+ get("#{customer_id}/payouts")
79
+ end
80
+
81
+ def get_payout(customer_id,payout_id)
82
+ get("#{customer_id}/payouts/#{payout_id}")
83
+ end
84
+
85
+ def each_payout(customer_id)
86
+ all_payouts(customer_id).each do |pay|
87
+ yield pay
88
+ end
89
+ end
90
+
91
+
92
+
93
+
94
+ #Transfers
95
+ def create_transfer(customer_id,transfer)
96
+ post(transfer,"#{customer_id}/transfers")
97
+ end
98
+
99
+ def all_transfers(customer_id)
100
+ get("#{customer_id}/transfers/")
101
+ end
102
+
103
+ def get_transfer(customer_id,transfer_id)
104
+ get("#{customer_id}/transfers/#{transfer_id}")
105
+ end
106
+
107
+ def each_transfer(customer_id)
108
+ all_transfers(customer_id).each do |trans|
109
+ yield trans
110
+ end
111
+ end
112
+
113
+
114
+
115
+
116
+ #Subscriptions
117
+ def create_subscription(subscription, plan_id)
118
+ post(subscription,"#{plan_id}/subscriptions")
119
+ end
120
+
121
+
122
+ def delete_subscription(customer_id,subscription_id)
123
+ delete("#{customer_id}/subscriptions/#{subscription_id}")
124
+ end
125
+
126
+
127
+ def get_subscription(customer_id,subscription_id)
128
+ get("#{customer_id}/subscriptions/#{subscription_id}")
129
+ end
130
+
131
+
132
+ def all_subscriptions(customer_id)
133
+ get("#{customer_id}/subscriptions/")
134
+ end
135
+
136
+ def each_subscription(customer_id)
137
+ all_subscriptions(customer_id).each do |cust|
138
+ yield cust
139
+ end
140
+ end
141
+
142
+
143
+ def delete_all_subscriptions(customer_id)
144
+ if env == :production
145
+ raise OpenPayError ('This method is not supported on PRODUCTION')
146
+ end
147
+ all_subscriptions(customer_id).each do |sub|
148
+ delete_subscription(customer_id,sub['id'])
149
+ end
150
+ end
151
+
152
+
153
+
154
+
155
+ #Card
156
+ def create_card(customer,card)
157
+ create(card,"#{customer}/cards")
158
+ end
159
+
160
+
161
+ def get_card(customer,card_id)
162
+ get("#{customer}/cards/#{card_id}")
163
+ end
164
+
165
+
166
+ def delete_card(customer,card_id)
167
+ delete("#{customer}/cards/#{card_id}")
168
+ end
169
+
170
+
171
+ def delete_all_cards(customer_id)
172
+ if env == :production
173
+ raise OpenPayError ('This method is not supported on PRODUCTION')
174
+ end
175
+ each_card(customer_id) do |card|
176
+ delete_card(customer_id,card['id'])
177
+ end
178
+ end
179
+
180
+
181
+ def each_card(customer)
182
+ get("#{customer}/cards").each do |card|
183
+ yield card
184
+ end
185
+ end
186
+
187
+
188
+ def all_cards(customer)
189
+ get("#{customer}/cards")
190
+ end
191
+
192
+
193
+
194
+ end
@@ -0,0 +1,3 @@
1
+ require 'openpay/errors/openpay_exception'
2
+ class OpenpayConnectionException < OpenpayException
3
+ end
@@ -0,0 +1,29 @@
1
+ class OpenpayException < StandardError
2
+
3
+ attr_reader :description
4
+ attr_reader :http_code
5
+ attr_reader :http_body
6
+ attr_reader :json_body
7
+ attr_reader :error_code
8
+ attr_reader :category
9
+
10
+ def initialize(message=nil,json_message=true)
11
+ #openpay errors have a json error string
12
+ if json_message
13
+ json= JSON.parse message
14
+ @description = json['description']
15
+ @http_code = json['http_code']
16
+ @error_code = json['error_code']
17
+ @json_body = message
18
+ @category = json['category']
19
+ #other errors may or not have a json error string, so this case is for them
20
+ else
21
+ @description = message
22
+ @http_code = ''
23
+ @http_body = ''
24
+ @json_body = ''
25
+ @error_code = ''
26
+ end
27
+ end
28
+
29
+ end