conekta 0.3.3 → 0.3.5
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 +8 -8
- data/.gitignore +5 -11
- data/CHANGELOG +5 -0
- data/Gemfile +6 -1
- data/LICENSE.txt +22 -0
- data/README.md +59 -0
- data/Rakefile +1 -14
- data/conekta.gemspec +22 -22
- data/lib/conekta.rb +36 -290
- data/lib/conekta/card.rb +10 -34
- data/lib/conekta/charge.rb +14 -38
- data/lib/conekta/conekta_object.rb +64 -136
- data/lib/conekta/customer.rb +23 -25
- data/lib/conekta/error.rb +65 -0
- data/lib/conekta/event.rb +2 -2
- data/lib/conekta/operations/create.rb +19 -0
- data/lib/conekta/operations/create_member.rb +30 -0
- data/lib/conekta/operations/custom_action.rb +17 -0
- data/lib/conekta/operations/delete.rb +43 -0
- data/lib/conekta/operations/find.rb +28 -0
- data/lib/conekta/operations/update.rb +13 -0
- data/lib/conekta/operations/where.rb +28 -0
- data/lib/conekta/payment_method.rb +4 -0
- data/lib/conekta/plan.rb +8 -5
- data/lib/conekta/requestor.rb +55 -0
- data/lib/conekta/resource.rb +13 -0
- data/lib/conekta/subscription.rb +12 -26
- data/lib/conekta/token.rb +3 -2
- data/lib/conekta/util.rb +19 -91
- data/lib/conekta/version.rb +1 -1
- data/lib/ssl_data/ca_bundle.crt +66 -0
- data/spec/conekta_spec.rb +299 -808
- data/spec/spec_helper.rb +12 -0
- metadata +55 -72
- data/CONTRIBUTORS +0 -9
- data/Gemfile.lock +0 -57
- data/History.txt +0 -4
- data/LICENSE +0 -23
- data/README.rdoc +0 -30
- data/VERSION +0 -1
- data/bin/conekta-console +0 -7
- data/bin/test calls +0 -205
- data/gemfiles/default-with-activesupport.gemfile +0 -3
- data/gemfiles/json.gemfile +0 -4
- data/gemfiles/yajl.gemfile +0 -4
- data/lib/conekta/account.rb +0 -4
- data/lib/conekta/api_operations/create.rb +0 -16
- data/lib/conekta/api_operations/create_member.rb +0 -18
- data/lib/conekta/api_operations/delete.rb +0 -11
- data/lib/conekta/api_operations/list.rb +0 -16
- data/lib/conekta/api_operations/modify_member.rb +0 -12
- data/lib/conekta/api_operations/update.rb +0 -22
- data/lib/conekta/api_resource.rb +0 -33
- data/lib/conekta/errors/api_connection_error.rb +0 -4
- data/lib/conekta/errors/api_error.rb +0 -4
- data/lib/conekta/errors/authentication_error.rb +0 -4
- data/lib/conekta/errors/card_error.rb +0 -11
- data/lib/conekta/errors/conekta_error.rb +0 -20
- data/lib/conekta/errors/malformed_request_error.rb +0 -10
- data/lib/conekta/errors/parameter_validation_error.rb +0 -10
- data/lib/conekta/errors/resource_not_found_error.rb +0 -10
- data/lib/conekta/json.rb +0 -21
- data/lib/conekta/list_object.rb +0 -35
- data/lib/conekta/log.rb +0 -5
- data/lib/conekta/singleton_api_resource.rb +0 -20
- data/lib/data/ca-certificates.crt +0 -3918
- data/spec/conekta_with_active_support_spec.rb +0 -3
- data/spec/test_helper.rb +0 -338
data/lib/conekta/card.rb
CHANGED
@@ -1,40 +1,16 @@
|
|
1
1
|
module Conekta
|
2
|
-
class Card <
|
3
|
-
include Conekta::
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
def customer
|
8
|
-
@customer
|
9
|
-
end
|
10
|
-
|
11
|
-
def customer=(customer)
|
12
|
-
@customer = customer
|
13
|
-
end
|
14
|
-
|
15
|
-
def delete
|
16
|
-
response, api_key = Conekta.request(:delete, url, @api_key)
|
17
|
-
refresh_from(response, api_key)
|
18
|
-
deleted_card = self
|
19
|
-
i = 0
|
20
|
-
for card in self.customer.cards
|
21
|
-
if deleted_card.id == card.id
|
22
|
-
self.customer.cards.delete_at(i)
|
23
|
-
break
|
24
|
-
end
|
25
|
-
i = i + 1
|
26
|
-
end
|
27
|
-
deleted_card
|
28
|
-
end
|
29
|
-
|
2
|
+
class Card < Resource
|
3
|
+
include Conekta::Operations::Delete
|
4
|
+
include Conekta::Operations::Update
|
5
|
+
include Conekta::Operations::CustomAction
|
30
6
|
def url
|
31
|
-
|
32
|
-
raise
|
33
|
-
end
|
34
|
-
unless customer = self.customer
|
35
|
-
raise ParameterValidationError.new("Could not determine which URL to request: #{self.class} instance has invalid customer: #{customer.inspect}", 'customer')
|
7
|
+
if id == nil || id == ""
|
8
|
+
raise Error.new('Could not get the id of ' + self.class.class_name + ' instance.')
|
36
9
|
end
|
37
|
-
|
10
|
+
self.customer.url + self.class.url + "/" + id
|
11
|
+
end
|
12
|
+
def delete
|
13
|
+
self.delete_member('customer','cards')
|
38
14
|
end
|
39
15
|
end
|
40
16
|
end
|
data/lib/conekta/charge.rb
CHANGED
@@ -1,43 +1,19 @@
|
|
1
1
|
module Conekta
|
2
|
-
class Charge <
|
3
|
-
include Conekta::
|
4
|
-
include Conekta::
|
5
|
-
include Conekta::
|
6
|
-
|
7
|
-
def
|
8
|
-
|
9
|
-
refresh_from(response, api_key)
|
10
|
-
self
|
2
|
+
class Charge < Resource
|
3
|
+
include Conekta::Operations::Find
|
4
|
+
include Conekta::Operations::Where
|
5
|
+
include Conekta::Operations::Create
|
6
|
+
include Conekta::Operations::CustomAction
|
7
|
+
def capture
|
8
|
+
custom_action(:post, 'capture', nil)
|
11
9
|
end
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def update_dispute(params)
|
20
|
-
response, api_key = Conekta.request(:post, dispute_url, @api_key, params)
|
21
|
-
refresh_from({ :dispute => response }, api_key, true)
|
22
|
-
dispute
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def refund_url
|
28
|
-
url + '/refund'
|
29
|
-
end
|
30
|
-
|
31
|
-
def capture_url
|
32
|
-
url + '/capture'
|
33
|
-
end
|
34
|
-
|
35
|
-
def dispute_url
|
36
|
-
url + '/dispute'
|
37
|
-
end
|
38
|
-
|
39
|
-
def charges
|
40
|
-
Event.all({ :charge_id => id }, @api_key)
|
10
|
+
def refund(params=nil)
|
11
|
+
if params == nil
|
12
|
+
params = {"amount" => self.amount}
|
13
|
+
else
|
14
|
+
params = {"amount" => params}
|
15
|
+
end
|
16
|
+
custom_action(:post, 'refund', params)
|
41
17
|
end
|
42
18
|
end
|
43
19
|
end
|
@@ -1,158 +1,86 @@
|
|
1
1
|
module Conekta
|
2
|
-
class ConektaObject
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
# The default :id method is deprecated and isn't useful to us
|
9
|
-
if method_defined?(:id)
|
10
|
-
undef :id
|
2
|
+
class ConektaObject < Hash
|
3
|
+
attr_reader :id
|
4
|
+
attr_reader :values
|
5
|
+
def initialize(id=nil)
|
6
|
+
@values = Hash.new
|
7
|
+
@id = id.to_s
|
11
8
|
end
|
12
|
-
|
13
|
-
|
14
|
-
# parameter overloading!
|
15
|
-
if id.kind_of?(Hash)
|
16
|
-
@retrieve_options = id.dup
|
17
|
-
@retrieve_options.delete(:id)
|
18
|
-
id = id[:id]
|
19
|
-
else
|
20
|
-
@retrieve_options = {}
|
21
|
-
end
|
22
|
-
|
23
|
-
@api_key = api_key
|
24
|
-
@values = {}
|
25
|
-
# This really belongs in APIResource, but not putting it there allows us
|
26
|
-
# to have a unified inspect method
|
27
|
-
@unsaved_values = Set.new
|
28
|
-
@transient_values = Set.new
|
29
|
-
self.id = id if id
|
9
|
+
def set_val(k,v)
|
10
|
+
@values[k] = v
|
30
11
|
end
|
31
|
-
|
32
|
-
|
33
|
-
obj = self.new(values[:id], api_key)
|
34
|
-
obj.refresh_from(values, api_key)
|
35
|
-
obj
|
12
|
+
def unset_key(k)
|
13
|
+
@values.delete(k)
|
36
14
|
end
|
37
|
-
|
38
|
-
|
39
|
-
Conekta::JSON.dump(@values, :pretty => true)
|
15
|
+
def first
|
16
|
+
self[0]
|
40
17
|
end
|
41
|
-
|
42
|
-
|
43
|
-
id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
|
44
|
-
"#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + Conekta::JSON.dump(@values, :pretty => true)
|
18
|
+
def last
|
19
|
+
self[self.count - 1]
|
45
20
|
end
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
instance_eval do
|
57
|
-
remove_accessors(removed)
|
58
|
-
add_accessors(added)
|
59
|
-
end
|
60
|
-
removed.each do |k|
|
61
|
-
@values.delete(k)
|
62
|
-
@transient_values.add(k)
|
63
|
-
@unsaved_values.delete(k)
|
64
|
-
end
|
65
|
-
values.each do |k, v|
|
66
|
-
@values[k] = Util.convert_to_conekta_object(v, api_key)
|
67
|
-
@transient_values.delete(k)
|
68
|
-
@unsaved_values.delete(k)
|
21
|
+
def load_from(response)
|
22
|
+
if response.instance_of?(Array)
|
23
|
+
response.each_with_index do |v, i|
|
24
|
+
load_from_enumerable(i,v)
|
25
|
+
end
|
26
|
+
elsif response.kind_of?(Hash)
|
27
|
+
response = response.to_hash if response.class != Hash
|
28
|
+
response.each do |k,v|
|
29
|
+
load_from_enumerable(k,v)
|
30
|
+
end
|
69
31
|
end
|
70
32
|
end
|
71
|
-
|
72
|
-
|
73
|
-
@values[k.to_sym]
|
74
|
-
end
|
75
|
-
|
76
|
-
def []=(k, v)
|
77
|
-
send(:"#{k}=", v)
|
33
|
+
def to_s
|
34
|
+
@values.inspect
|
78
35
|
end
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
Conekta::JSON.dump(@values)
|
36
|
+
def inspect
|
37
|
+
if self.respond_to? :each
|
38
|
+
if self.class.class_name != "ConektaObject"
|
39
|
+
self.to_s
|
40
|
+
else
|
41
|
+
self.to_a.map{|x| x[1] }
|
42
|
+
end
|
43
|
+
else
|
44
|
+
super
|
45
|
+
end
|
90
46
|
end
|
91
|
-
|
92
|
-
|
93
|
-
@values.as_json(*a)
|
47
|
+
def self.class_name
|
48
|
+
self.name.split('::')[-1]
|
94
49
|
end
|
95
|
-
|
96
|
-
|
97
|
-
@values
|
50
|
+
def class_name
|
51
|
+
self.class.name.split('::')[-1]
|
98
52
|
end
|
99
|
-
|
100
|
-
|
101
|
-
|
53
|
+
def create_attr(k,v)
|
54
|
+
create_method( "#{k}=".to_sym ) { |val|
|
55
|
+
instance_variable_set( "@" + k, val)
|
56
|
+
}
|
57
|
+
self.send("#{k}=".to_sym, v)
|
58
|
+
self.class.send(:remove_method, "#{k}=".to_sym)
|
59
|
+
create_method( k.to_sym ) {
|
60
|
+
instance_variable_get( "@" + k )
|
61
|
+
}
|
102
62
|
end
|
103
|
-
|
104
63
|
protected
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
def remove_accessors(keys)
|
111
|
-
metaclass.instance_eval do
|
112
|
-
keys.each do |k|
|
113
|
-
next if @@permanent_attributes.include?(k)
|
114
|
-
k_eq = :"#{k}="
|
115
|
-
remove_method(k) if method_defined?(k)
|
116
|
-
remove_method(k_eq) if method_defined?(k_eq)
|
117
|
-
end
|
64
|
+
def to_hash
|
65
|
+
hash = Hash.new
|
66
|
+
self.values.each do |k,v|
|
67
|
+
hash[k] = v
|
118
68
|
end
|
69
|
+
hash
|
119
70
|
end
|
120
|
-
|
121
|
-
|
122
|
-
metaclass.instance_eval do
|
123
|
-
keys.each do |k|
|
124
|
-
next if @@permanent_attributes.include?(k)
|
125
|
-
k_eq = :"#{k}="
|
126
|
-
define_method(k) { @values[k] }
|
127
|
-
define_method(k_eq) do |v|
|
128
|
-
@values[k] = v
|
129
|
-
@unsaved_values.add(k)
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
71
|
+
def create_method( name, &block )
|
72
|
+
self.class.send( :define_method, name, &block )
|
133
73
|
end
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
if name.to_s.end_with?('=')
|
138
|
-
attr = name.to_s[0...-1].to_sym
|
139
|
-
@values[attr] = args[0]
|
140
|
-
@unsaved_values.add(attr)
|
141
|
-
add_accessors([attr])
|
142
|
-
return
|
143
|
-
else
|
144
|
-
return @values[name] if @values.has_key?(name)
|
74
|
+
def load_from_enumerable(k,v)
|
75
|
+
if v.respond_to? :each and !v.instance_of?(ConektaObject)
|
76
|
+
v = Conekta::Util.convert_to_conekta_object(v)
|
145
77
|
end
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
if @transient_values.include?(name)
|
151
|
-
raise NoMethodError.new(e.message + ". HINT: The '#{name}' attribute was set in the past, however. It was then wiped when refreshing the object with the result returned by Conekta's API, probably as a result of a save(). The attributes currently available on this object are: #{@values.keys.join(', ')}")
|
152
|
-
else
|
153
|
-
raise
|
154
|
-
end
|
78
|
+
if self.instance_of?(ConektaObject)
|
79
|
+
self[k] = v
|
80
|
+
else
|
81
|
+
self.create_attr(k,v)
|
155
82
|
end
|
83
|
+
self.set_val(k,v)
|
156
84
|
end
|
157
85
|
end
|
158
86
|
end
|
data/lib/conekta/customer.rb
CHANGED
@@ -1,34 +1,32 @@
|
|
1
1
|
module Conekta
|
2
|
-
class Customer <
|
3
|
-
include Conekta::
|
4
|
-
include Conekta::
|
5
|
-
include Conekta::
|
6
|
-
include Conekta::
|
7
|
-
include Conekta::
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
class Customer < Resource
|
3
|
+
include Conekta::Operations::Find
|
4
|
+
include Conekta::Operations::Where
|
5
|
+
include Conekta::Operations::Create
|
6
|
+
include Conekta::Operations::Delete
|
7
|
+
include Conekta::Operations::Update
|
8
|
+
include Conekta::Operations::CustomAction
|
9
|
+
include Conekta::Operations::CreateMember
|
10
|
+
def load_from(response=nil)
|
11
|
+
if response
|
12
|
+
super
|
13
|
+
end
|
11
14
|
customer = self
|
12
|
-
|
13
|
-
|
15
|
+
self.cards.each do |k,v|
|
16
|
+
if !v.respond_to? :deleted or !v.deleted
|
17
|
+
v.create_attr('customer', customer)
|
18
|
+
self.cards.set_val(k,v)
|
19
|
+
end
|
14
20
|
end
|
15
|
-
if
|
16
|
-
|
21
|
+
if self.respond_to? :subscription and self.subscription
|
22
|
+
self.subscription.create_attr('customer', customer)
|
17
23
|
end
|
18
24
|
end
|
19
|
-
|
20
|
-
|
21
|
-
subscription = create_member('subscription', params)
|
22
|
-
subscription.customer = self
|
23
|
-
self.subscription = subscription
|
24
|
-
subscription
|
25
|
+
def create_card(params)
|
26
|
+
self.create_member('cards', params)
|
25
27
|
end
|
26
|
-
|
27
|
-
|
28
|
-
card = create_member('cards', params)
|
29
|
-
card.customer = self
|
30
|
-
self.cards << card
|
31
|
-
card
|
28
|
+
def create_subscription(params)
|
29
|
+
self.create_member('subscription', params)
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module Conekta
|
2
|
+
class Error < Exception
|
3
|
+
attr_reader :message
|
4
|
+
attr_reader :type
|
5
|
+
attr_reader :code
|
6
|
+
attr_reader :param
|
7
|
+
|
8
|
+
def initialize(message=nil, type=nil, code=nil, param=nil)
|
9
|
+
@message = message
|
10
|
+
@type = type
|
11
|
+
@code = code
|
12
|
+
@param = param
|
13
|
+
end
|
14
|
+
def class_name
|
15
|
+
self.class.name.split('::')[-1]
|
16
|
+
end
|
17
|
+
def self.error_handler(resp, code)
|
18
|
+
if resp.instance_of?(Hash)
|
19
|
+
@message = resp["message"] if resp.has_key?('message')
|
20
|
+
@type = resp["type"] if resp.has_key?('type')
|
21
|
+
@code = resp["code"] if resp.has_key?('code')
|
22
|
+
@param = resp["param"] if resp.has_key?('param')
|
23
|
+
end
|
24
|
+
if code == nil or code == 0 or code == nil or code == ""
|
25
|
+
raise NoConnectionError.new("Could not connect to #{Conekta.api_base}", @type, @code, @param)
|
26
|
+
end
|
27
|
+
case code
|
28
|
+
when 400
|
29
|
+
raise MalformedRequestError.new(@message, @type, @code, @params)
|
30
|
+
when 401
|
31
|
+
raise AuthenticationError.new(@message, @type, @code, @params)
|
32
|
+
when 402
|
33
|
+
raise ProcessingError.new(@message, @type, @code, @params)
|
34
|
+
when 404
|
35
|
+
raise ResourceNotFoundError.new(@message, @type, @code, @params)
|
36
|
+
when 422
|
37
|
+
raise ParameterValidationError.new(@message, @type, @code, @params)
|
38
|
+
when 500
|
39
|
+
raise ApiError.new(@message, @type, @code, @params)
|
40
|
+
else
|
41
|
+
raise Error.new(@message, @type, @code, @params)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
class ApiError < Error
|
46
|
+
end
|
47
|
+
|
48
|
+
class NoConnectionError < Error
|
49
|
+
end
|
50
|
+
|
51
|
+
class AuthenticationError < Error
|
52
|
+
end
|
53
|
+
|
54
|
+
class ParameterValidationError < Error
|
55
|
+
end
|
56
|
+
|
57
|
+
class ProcessingError < Error
|
58
|
+
end
|
59
|
+
|
60
|
+
class ResourceNotFoundError < Error
|
61
|
+
end
|
62
|
+
|
63
|
+
class MalformedRequestError < Error
|
64
|
+
end
|
65
|
+
end
|