pagarme 1.10.0 → 2.0.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.
- checksums.yaml +4 -4
- data/Rakefile +14 -14
- data/certs/cabundle.pem +3988 -0
- data/lib/pagarme.rb +0 -5
- data/lib/pagarme/errors.rb +4 -1
- data/lib/pagarme/object.rb +128 -130
- data/lib/pagarme/request.rb +44 -71
- data/lib/pagarme/transaction.rb +23 -23
- data/pagarme.gemspec +1 -1
- data/test/pagarme/subscription.rb +0 -12
- data/test/pagarme/transaction.rb +0 -10
- data/test/test_helper.rb +9 -9
- metadata +4 -3
- data/certs/public_key.pem +0 -9
data/lib/pagarme.rb
CHANGED
@@ -19,7 +19,6 @@ module PagarMe
|
|
19
19
|
@@api_key = nil
|
20
20
|
@@api_endpoint = 'https://api.pagar.me/1'
|
21
21
|
@@live = true
|
22
|
-
@@api_card_encryption_public_key = File.join(File.dirname(__FILE__), '..', 'certs/public_key.pem')
|
23
22
|
|
24
23
|
def self.api_endpoint=(api_endpoint)
|
25
24
|
@@api_endpoint = api_endpoint
|
@@ -37,10 +36,6 @@ module PagarMe
|
|
37
36
|
@@api_key
|
38
37
|
end
|
39
38
|
|
40
|
-
def self.api_card_encryption_public_key
|
41
|
-
@@api_card_encryption_public_key
|
42
|
-
end
|
43
|
-
|
44
39
|
def self.full_api_url(relative_path)
|
45
40
|
"#{@@api_endpoint}#{relative_path}"
|
46
41
|
end
|
data/lib/pagarme/errors.rb
CHANGED
@@ -13,12 +13,14 @@ module PagarMe
|
|
13
13
|
self.errors = []
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.
|
16
|
+
def self.fromServerResponse(response = {})
|
17
17
|
object = self.new
|
18
|
+
|
18
19
|
response['errors'].map do |error|
|
19
20
|
object.message += error['message'] + ', '
|
20
21
|
object.errors << PagarMeError.new(error['message'], error['parameter_name'], error['type'], response['url'])
|
21
22
|
end
|
23
|
+
|
22
24
|
object
|
23
25
|
end
|
24
26
|
|
@@ -36,3 +38,4 @@ module PagarMe
|
|
36
38
|
class ResponseError < PagarMeError
|
37
39
|
end
|
38
40
|
end
|
41
|
+
|
data/lib/pagarme/object.rb
CHANGED
@@ -2,134 +2,132 @@
|
|
2
2
|
require 'set'
|
3
3
|
|
4
4
|
module PagarMe
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
end
|
134
|
-
end
|
5
|
+
class PagarMeObject
|
6
|
+
def initialize(response = {})
|
7
|
+
#init @attributes - which are the attributes in the object
|
8
|
+
@attributes = {}
|
9
|
+
|
10
|
+
# Values that were changed in the object but weren't saved
|
11
|
+
@unsaved_values = Set.new
|
12
|
+
|
13
|
+
# Methods that already existed
|
14
|
+
@@existing_methods = Array.new
|
15
|
+
|
16
|
+
#Update object
|
17
|
+
update(response)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.build(attributes)
|
21
|
+
self.new(attributes)
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(attributes)
|
25
|
+
removed = Set.new(@attributes.keys - attributes.keys)
|
26
|
+
added = Set.new(attributes.keys - @attributes.keys)
|
27
|
+
|
28
|
+
instance_eval do
|
29
|
+
remove_attribute(removed)
|
30
|
+
add_attribute(added)
|
31
|
+
end
|
32
|
+
|
33
|
+
removed.each do |key|
|
34
|
+
@attributes.delete(key)
|
35
|
+
@unsaved_values.delete(key)
|
36
|
+
end
|
37
|
+
|
38
|
+
attributes.each do |key, value|
|
39
|
+
@attributes[key] = Util.convert_to_pagarme_object(value)
|
40
|
+
@unsaved_values.delete(key)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def each(&block)
|
45
|
+
@attributes.each(&block)
|
46
|
+
end
|
47
|
+
|
48
|
+
def []=(key,value)
|
49
|
+
@attributes[key] = value
|
50
|
+
end
|
51
|
+
|
52
|
+
def [](key)
|
53
|
+
@attributes[key.to_sym]
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_hash_value(value, type)
|
57
|
+
case value
|
58
|
+
when PagarMeObject
|
59
|
+
value.send type
|
60
|
+
when Array
|
61
|
+
value.map do |v|
|
62
|
+
to_hash_value v, type
|
63
|
+
end
|
64
|
+
else
|
65
|
+
value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def unsaved_values
|
70
|
+
Hash[@unsaved_values.map { |k| [k, to_hash_value(@attributes[k], 'unsaved_values')] }]
|
71
|
+
end
|
72
|
+
|
73
|
+
def to_hash
|
74
|
+
Hash[@attributes.map { |k, v| [k, to_hash_value(v, 'to_hash')] }]
|
75
|
+
end
|
76
|
+
|
77
|
+
protected
|
78
|
+
|
79
|
+
def metaclass
|
80
|
+
class << self; self; end
|
81
|
+
end
|
82
|
+
|
83
|
+
def remove_attribute(keys)
|
84
|
+
metaclass.instance_eval do
|
85
|
+
keys.each do |key|
|
86
|
+
key_sym = :"#{key}="
|
87
|
+
|
88
|
+
if !@@existing_methods.include?(key)
|
89
|
+
remove_method(key) if method_defined?(key)
|
90
|
+
end
|
91
|
+
|
92
|
+
remove_method(key_sym) if method_defined?(key_sym)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def add_attribute(keys)
|
98
|
+
metaclass.instance_eval do
|
99
|
+
keys.each do |key|
|
100
|
+
key_set = "#{key}="
|
101
|
+
|
102
|
+
if method_defined?(key)
|
103
|
+
@@existing_methods.push(key)
|
104
|
+
else
|
105
|
+
define_method(key) { @attributes[key] }
|
106
|
+
end
|
107
|
+
|
108
|
+
define_method(key_set) do |value|
|
109
|
+
@attributes[key] = value
|
110
|
+
@unsaved_values.add(key)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def method_missing(name, *args)
|
117
|
+
if name.to_s.end_with?('=')
|
118
|
+
attr = name.to_s[0...-1].to_sym
|
119
|
+
add_attribute([attr])
|
120
|
+
|
121
|
+
begin
|
122
|
+
m = method(name)
|
123
|
+
rescue NameError
|
124
|
+
raise NoMethodError.new("O atributo #{name} nao e permitido.")
|
125
|
+
end
|
126
|
+
|
127
|
+
m.call *args
|
128
|
+
else
|
129
|
+
@attributes[name] if @attributes.has_key?(name)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
135
133
|
end
|
data/lib/pagarme/request.rb
CHANGED
@@ -5,75 +5,48 @@ require File.join(File.dirname(__FILE__), '.', 'util')
|
|
5
5
|
require File.join(File.dirname(__FILE__), '.', 'errors')
|
6
6
|
|
7
7
|
module PagarMe
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
end
|
52
|
-
rescue RestClient::ExceptionWithResponse => e
|
53
|
-
parsed_error = parse_json_response(e.http_body)
|
54
|
-
if parsed_error['errors']
|
55
|
-
error = parsed_error
|
56
|
-
raise PagarMeError.initFromServerResponse(error)
|
57
|
-
else
|
58
|
-
raise PagarMeError.new(e.http_body)
|
59
|
-
end
|
60
|
-
rescue RestClient::Exception, Errno::ECONNREFUSED => e
|
61
|
-
error = "Error connecting to server: connection refused"
|
62
|
-
end
|
63
|
-
|
64
|
-
raise ConnectionError.new(error) if error
|
65
|
-
|
66
|
-
parse_json_response(response.body)
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def parse_json_response(response)
|
72
|
-
begin
|
73
|
-
MultiJson.load(response)
|
74
|
-
rescue MultiJson::LoadError => e
|
75
|
-
raise PagarMeError.new("Server response is not a valid JSON.")
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
8
|
+
class Request
|
9
|
+
attr_accessor :path, :method, :parameters, :headers, :query
|
10
|
+
|
11
|
+
def initialize(path, method)
|
12
|
+
self.path = path
|
13
|
+
self.method = method
|
14
|
+
self.parameters = {}
|
15
|
+
self.query = {}
|
16
|
+
self.headers = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
raise PagarMeError, "You need to configure a API key before performing requests." unless PagarMe.api_key
|
21
|
+
|
22
|
+
begin
|
23
|
+
response = RestClient::Request.execute({
|
24
|
+
:method => self.method,
|
25
|
+
:user => PagarMe.api_key,
|
26
|
+
:password => 'x',
|
27
|
+
:url => PagarMe.full_api_url(self.path) + '?' + URI.encode_www_form(query),
|
28
|
+
:payload => MultiJson.encode(parameters),
|
29
|
+
:open_timeout => 30,
|
30
|
+
:timeout => 90,
|
31
|
+
:ssl_ca_file => File.join(File.dirname(__FILE__), '..', '..', 'certs', 'cabundle.pem'),
|
32
|
+
:headers => {
|
33
|
+
'Content-Type' => 'application/json; charset=utf8',
|
34
|
+
'Accept' => 'application/json',
|
35
|
+
'User-Agent' => 'pagarme-ruby/1.0'
|
36
|
+
}
|
37
|
+
})
|
38
|
+
rescue RestClient::ExceptionWithResponse => e
|
39
|
+
parsed_error = MultiJson.decode(e.http_body)
|
40
|
+
|
41
|
+
if parsed_error['errors']
|
42
|
+
raise PagarMeError.fromServerResponse(parsed_error)
|
43
|
+
else
|
44
|
+
raise PagarMeError.new(e.http_body)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
MultiJson.decode response.body
|
49
|
+
end
|
50
|
+
end
|
79
51
|
end
|
52
|
+
|
data/lib/pagarme/transaction.rb
CHANGED
@@ -4,30 +4,30 @@ require 'base64'
|
|
4
4
|
require File.join(File.dirname(__FILE__), '..', 'pagarme')
|
5
5
|
|
6
6
|
module PagarMe
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
class Transaction < TransactionCommon
|
8
|
+
def self.calculate_installments(params)
|
9
|
+
request = PagarMe::Request.new('/transactions/calculate_installments_amount', 'GET')
|
10
|
+
request.query.merge!(params)
|
11
|
+
response = request.run
|
12
|
+
response
|
13
|
+
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def charge
|
16
|
+
create
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
def capture(params={})
|
20
|
+
request = PagarMe::Request.new(self.url + '/capture', 'POST')
|
21
|
+
request.parameters.merge!(params)
|
22
|
+
response = request.run
|
23
|
+
update(response)
|
24
|
+
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
def refund(params={})
|
27
|
+
request = PagarMe::Request.new(self.url + '/refund', 'POST')
|
28
|
+
request.parameters.merge!(params)
|
29
|
+
response = request.run
|
30
|
+
update(response)
|
31
|
+
end
|
32
|
+
end
|
33
33
|
end
|