pagarme 2.0.2 → 2.1.0

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 (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