pagarme 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +3 -2
  4. data/README.md +285 -4
  5. data/Rakefile +16 -19
  6. data/lib/pagarme.rb +17 -32
  7. data/lib/pagarme/core_ext.rb +9 -0
  8. data/lib/pagarme/errors.rb +39 -25
  9. data/lib/pagarme/model.rb +40 -45
  10. data/lib/pagarme/nested_model.rb +56 -0
  11. data/lib/pagarme/object.rb +133 -92
  12. data/lib/pagarme/request.rb +96 -46
  13. data/lib/pagarme/resources/address.rb +4 -0
  14. data/lib/pagarme/resources/antifraud_analysis.rb +4 -0
  15. data/lib/pagarme/resources/balance.rb +24 -0
  16. data/lib/pagarme/resources/balance_operation.rb +37 -0
  17. data/lib/pagarme/resources/bank_account.rb +4 -0
  18. data/lib/pagarme/resources/bulk_anticipation.rb +65 -0
  19. data/lib/pagarme/resources/card.rb +4 -0
  20. data/lib/pagarme/resources/company.rb +28 -0
  21. data/lib/pagarme/{customer.rb → resources/customer.rb} +0 -0
  22. data/lib/pagarme/resources/payable.rb +11 -0
  23. data/lib/pagarme/resources/phone.rb +4 -0
  24. data/lib/pagarme/{plan.rb → resources/plan.rb} +0 -2
  25. data/lib/pagarme/resources/postal_code.rb +15 -0
  26. data/lib/pagarme/resources/postback.rb +15 -0
  27. data/lib/pagarme/resources/recipient.rb +32 -0
  28. data/lib/pagarme/resources/split_rule.rb +4 -0
  29. data/lib/pagarme/resources/subscription.rb +43 -0
  30. data/lib/pagarme/resources/transaction.rb +41 -0
  31. data/lib/pagarme/{transfer.rb → resources/transfer.rb} +0 -3
  32. data/lib/pagarme/{phone.rb → resources/user.rb} +1 -1
  33. data/lib/pagarme/transaction_common.rb +39 -42
  34. data/lib/pagarme/version.rb +3 -0
  35. data/pagarme.gemspec +16 -13
  36. data/test/assertions.rb +195 -0
  37. data/test/fixtures.rb +222 -0
  38. data/test/pagarme/error_test.rb +13 -0
  39. data/test/pagarme/object_test.rb +19 -0
  40. data/test/pagarme/pagarme_test.rb +10 -0
  41. data/test/pagarme/resources/balance_test.rb +46 -0
  42. data/test/pagarme/resources/bank_account_test.rb +35 -0
  43. data/test/pagarme/resources/bulk_anticipation_test.rb +72 -0
  44. data/test/pagarme/resources/card_test.rb +22 -0
  45. data/test/pagarme/resources/payable_test.rb +30 -0
  46. data/test/pagarme/resources/plan_test.rb +57 -0
  47. data/test/pagarme/resources/postback_test.rb +18 -0
  48. data/test/pagarme/resources/recipient_test.rb +41 -0
  49. data/test/pagarme/resources/subscription_test.rb +100 -0
  50. data/test/pagarme/resources/transaction_test.rb +221 -0
  51. data/test/pagarme/resources/transfer_test.rb +23 -0
  52. data/test/pagarme/resources/zipcode_test.rb +15 -0
  53. data/test/test_helper.rb +52 -175
  54. metadata +102 -30
  55. data/lib/pagarme/address.rb +0 -4
  56. data/lib/pagarme/bank_account.rb +0 -9
  57. data/lib/pagarme/card.rb +0 -7
  58. data/lib/pagarme/subscription.rb +0 -43
  59. data/lib/pagarme/transaction.rb +0 -33
  60. data/lib/pagarme/util.rb +0 -78
  61. data/pagarme.rb +0 -12
  62. data/test/pagarme/bank_account.rb +0 -46
  63. data/test/pagarme/card.rb +0 -26
  64. data/test/pagarme/object.rb +0 -29
  65. data/test/pagarme/pagarme.rb +0 -10
  66. data/test/pagarme/plan.rb +0 -70
  67. data/test/pagarme/subscription.rb +0 -123
  68. data/test/pagarme/transaction.rb +0 -215
  69. data/test/pagarme/transfer.rb +0 -42
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class Address < PagarMeObject
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class AntifraudAnalysis < PagarMeObject
3
+ end
4
+ end
@@ -0,0 +1,24 @@
1
+ module PagarMe
2
+ class Balance < PagarMeObject
3
+
4
+ class << self
5
+ def url(recipient_id = nil)
6
+ if recipient_id
7
+ "/recipients/#{recipient_id}/balance"
8
+ else
9
+ '/balance'
10
+ end
11
+ end
12
+
13
+ def balance
14
+ PagarMe::Request.get(url).call
15
+ end
16
+
17
+ def find_by_recipient_id(recipient_id = nil)
18
+ raise RequestError.new('Invalid ID') unless recipient_id.present?
19
+ PagarMe::Request.get(url recipient_id).call
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,37 @@
1
+ module PagarMe
2
+ class BalanceOperation < PagarMeObject
3
+
4
+ def method_missing(name, *args, &block)
5
+ if @attributes['movement_object'] && @attributes['movement_object'].respond_to?(name)
6
+ return movement_object.public_send(name, *args, &block)
7
+ end
8
+
9
+ super name, *args, &block
10
+ end
11
+
12
+ class << self
13
+ def url(recipient_id = nil)
14
+ if recipient_id
15
+ "/recipients/#{recipient_id}/balance/operations"
16
+ else
17
+ '/balance/operations'
18
+ end
19
+ end
20
+
21
+ def balance_operations(page = 1, count = 10)
22
+ raise RequestError.new('Invalid page count') if page < 1 or count < 1
23
+
24
+ params = { page: page, count: count }
25
+ PagarMe::Request.get(url, params: params).call
26
+ end
27
+
28
+ def find_by_recipient_id(recipient_id, page = 1, count = 10)
29
+ raise RequestError.new('Invalid ID') unless recipient_id.present?
30
+
31
+ params = { page: page, count: count }
32
+ PagarMe::Request.get(url(recipient_id), params: params).call
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class BankAccount < Model
3
+ end
4
+ end
@@ -0,0 +1,65 @@
1
+ module PagarMe
2
+ class BulkAnticipation < NestedModel
3
+ def confirm
4
+ update self.class.confirm(parent_id, id).attributes
5
+ self
6
+ end
7
+
8
+ def delete
9
+ self.class.delete parent_id, id
10
+ end
11
+
12
+ def cancel
13
+ update self.class.cancel(parent_id, id).attributes
14
+ self
15
+ end
16
+
17
+ class << self
18
+ def parent_resource_name
19
+ 'recipients'
20
+ end
21
+
22
+ def confirm(recipient_id, id)
23
+ PagarMe::Request.post( url(recipient_id, id, 'confirm') ).call
24
+ end
25
+
26
+ def delete(recipient_id, id)
27
+ PagarMe::Request.delete( url(recipient_id, id) ).call
28
+ end
29
+
30
+ def cancel(recipient_id, id)
31
+ PagarMe::Request.post( url(recipient_id, id, 'cancel') ).call
32
+ end
33
+
34
+ def create(params = Hash.new)
35
+ super normalize_params(params)
36
+ end
37
+
38
+ def bulk_anticipations_limits(recipient_id, params = Hash.new)
39
+ PagarMe::Request.get(url(recipient_id, 'limits'), params: normalize_params(params) ).call
40
+ end
41
+
42
+ protected
43
+ def normalize_params(params = Hash.new)
44
+ normalized_params = Hash[ params.map{ |key, value| [key.to_sym, value] } ]
45
+ normalized_params[:timeframe] = :start if normalized_params[:timeframe].blank?
46
+
47
+ raise RequestError.new('Missing payment_date param') if normalized_params[:payment_date].blank?
48
+ normalized_params[:payment_date] = date_to_milliseconds_since_epoch normalized_params[:payment_date]
49
+
50
+ normalized_params
51
+ end
52
+
53
+ def date_to_milliseconds_since_epoch(date)
54
+ case date
55
+ when Date
56
+ date.to_time.to_i * 1000
57
+ when Time
58
+ date.to_i * 1000
59
+ else
60
+ date
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class Card < TransactionCommon
3
+ end
4
+ end
@@ -0,0 +1,28 @@
1
+ module PagarMe
2
+ class Company < PagarMeObject
3
+ def default_recipient
4
+ PagarMe::Recipient.find default_recipient_by_env
5
+ end
6
+
7
+ protected
8
+ def default_recipient_by_env
9
+ if ENV['production']
10
+ default_recipient_id.live
11
+ else
12
+ default_recipient_id.test
13
+ end
14
+ end
15
+
16
+ def self.default_recipient
17
+ company.default_recipient
18
+ end
19
+
20
+ def self.company
21
+ PagarMe::Request.get('/company').call
22
+ end
23
+
24
+ def self.temporary
25
+ PagarMe::Request.post('/companies/temporary').call
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ module PagarMe
2
+ class Payable < Model
3
+ def transaction
4
+ @transaction ||= PagarMe::Transaction.find transaction_id
5
+ end
6
+
7
+ def recipient
8
+ @recipient ||= PagarMe::Recipient.find recipient_id
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class Phone < PagarMeObject
3
+ end
4
+ end
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  module PagarMe
4
2
  class Plan < Model
5
3
  end
@@ -0,0 +1,15 @@
1
+ module PagarMe
2
+ class Zipcode < PagarMeObject
3
+ ZIPCODE_REGEXP = /\d{5}[-\.\_\s]?\d{3}/
4
+
5
+ def self.find(zipcode)
6
+ raise PagarMe::RequestError.new('invalid zipcode') unless valid_zipcode?(zipcode)
7
+ sanitized_zipcode = zipcode.gsub(/[-\.\_\s]/, '')
8
+ self.new PagarMe::Request.get("/zipcodes/#{sanitized_zipcode}").run
9
+ end
10
+
11
+ def self.valid_zipcode?(zipcode)
12
+ zipcode.match ZIPCODE_REGEXP
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module PagarMe
2
+ class Postback < PagarMeObject
3
+ def valid?
4
+ self.class.validate id, fingerprint
5
+ end
6
+
7
+ def self.validate(id, fingerprint)
8
+ fingerprint_for(id) == fingerprint
9
+ end
10
+
11
+ def self.fingerprint_for(id)
12
+ Digest::SHA1.hexdigest id.to_s + "#" + PagarMe.api_key
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ module PagarMe
2
+ class Recipient < Model
3
+ def bulk_anticipations_limits(params = Hash.new)
4
+ PagarMe::BulkAnticipation.bulk_anticipations_limits id, params
5
+ end
6
+
7
+ def bulk_anticipations(page = 1, count = 10)
8
+ raise RequestError.new('Invalid page count') if page < 1 or count < 1
9
+ PagarMe::BulkAnticipation.all id, page, count
10
+ end
11
+
12
+ def bulk_anticipate(params = Hash.new)
13
+ PagarMe::BulkAnticipation.create params.merge(parent_id: id)
14
+ end
15
+
16
+ def balance
17
+ PagarMe::Balance.find_by_recipient_id id
18
+ end
19
+
20
+ def balance_operations(*args)
21
+ PagarMe::BalanceOperation.find_by_recipient_id id, *args
22
+ end
23
+
24
+ def receive(amount)
25
+ PagarMe::Transfer.create recipient_id: id, amount: amount
26
+ end
27
+
28
+ def self.default
29
+ Company.default_recipient
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,4 @@
1
+ module PagarMe
2
+ class SplitRule < PagarMeObject
3
+ end
4
+ end
@@ -0,0 +1,43 @@
1
+ module PagarMe
2
+ class Subscription < TransactionCommon
3
+ def create
4
+ set_plan_id
5
+ super
6
+ end
7
+
8
+ def save
9
+ set_plan_id
10
+ super
11
+ end
12
+
13
+ # TODO: Test it
14
+ def postbacks
15
+ PagarMe::Request.get( url 'postbacks' ).call
16
+ end
17
+
18
+ def cancel
19
+ update PagarMe::Request.post( url 'cancel' ).run
20
+ end
21
+
22
+ def transactions
23
+ PagarMe::Request.get( url 'transactions' ).call
24
+ end
25
+
26
+ def charge(amount, installments = 1)
27
+ PagarMe::Request.post(url('transactions'), params: {
28
+ amount: amount,
29
+ installments: installments
30
+ }).run
31
+
32
+ update PagarMe::Request.get(url).run
33
+ end
34
+
35
+ protected
36
+ def set_plan_id
37
+ if plan
38
+ self.plan_id = plan.id
39
+ self.plan = nil
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ module PagarMe
2
+ class Transaction < TransactionCommon
3
+ alias :charge :create
4
+
5
+ def split_rules
6
+ PagarMe::Request.get( url 'split_rules' ).call
7
+ end
8
+
9
+ def antifraud_analyses
10
+ PagarMe::Request.get( url 'antifraud_analyses' ).call
11
+ end
12
+
13
+ def payables
14
+ PagarMe::Request.get( url 'payables' ).call
15
+ end
16
+
17
+ def postbacks
18
+ PagarMe::Request.get( url 'postbacks' ).call
19
+ end
20
+
21
+ def collect_payment(params={})
22
+ PagarMe::Request.post(url('collect_payment'), params: params).run
23
+ end
24
+
25
+ def capture(params={})
26
+ update PagarMe::Request.post(url('capture'), params: params).run
27
+ end
28
+
29
+ def refund(params={})
30
+ update PagarMe::Request.post(url('refund'), params: params).run
31
+ end
32
+
33
+ class << self
34
+ def calculate_installments(params)
35
+ PagarMe::Request.get(url('calculate_installments_amount'), query: params).run
36
+ end
37
+
38
+ alias :charge :create
39
+ end
40
+ end
41
+ end
@@ -1,7 +1,4 @@
1
- # encoding: utf-8
2
-
3
1
  module PagarMe
4
2
  class Transfer < Model
5
3
  end
6
4
  end
7
-
@@ -1,4 +1,4 @@
1
1
  module PagarMe
2
- class Phone < Model
2
+ class User < Model
3
3
  end
4
4
  end
@@ -1,44 +1,41 @@
1
- # encoding: utf-8
2
- require File.join(File.dirname(__FILE__), '..', 'pagarme')
3
-
4
1
  module PagarMe
5
- class TransactionCommon < Model
6
-
7
- def initialize(response = {})
8
- super(response)
9
-
10
- self.payment_method ||= 'credit_card'
11
- self.installments ||= 1
12
- self.status ||= 'local'
13
- end
14
-
15
- def create
16
- check_card_object
17
- super
18
- end
19
-
20
- def save
21
- check_card_object
22
- super
23
- end
24
-
25
- private
26
-
27
- def check_card_object
28
- if self.card
29
- if self.card.id
30
- self.card_id = self.card.id
31
- else
32
- self.card_number = self.card.card_number
33
- self.card_holder_name = self.card.card_holder_name
34
- self.card_expiration_year = self.card.card_expiration_year
35
- self.card_expiration_month = self.card.card_expiration_month
36
- self.card_cvv = self.card.card_cvv
37
- end
38
- self.card = nil
39
- end
40
-
41
- self.card_expiration_date ||= "#{self.card_expiration_month}#{self.card_expiration_year}"
42
- end
43
- end
2
+ class TransactionCommon < Model
3
+
4
+ def initialize(response = {})
5
+ super(response)
6
+
7
+ self.payment_method ||= 'credit_card'
8
+ self.installments ||= 1
9
+ self.status ||= 'local'
10
+ end
11
+
12
+ def create
13
+ check_card_object
14
+ super
15
+ end
16
+
17
+ def save
18
+ check_card_object
19
+ super
20
+ end
21
+
22
+ private
23
+ def check_card_object
24
+ if card
25
+ if card.id
26
+ self.card_id = self.card.id
27
+ else
28
+ self.card_number = card.card_number
29
+ self.card_holder_name = card.card_holder_name
30
+ self.card_expiration_year = card.card_expiration_year
31
+ self.card_expiration_month = card.card_expiration_month
32
+ self.card_cvv = card.card_cvv
33
+ self.card_expiration_date = "#{card_expiration_month}#{card_expiration_year}"
34
+ end
35
+ self.card = nil
36
+ end
37
+
38
+ self.card_expiration_date ||= "#{card_expiration_month}#{card_expiration_year}"
39
+ end
40
+ end
44
41
  end