paysio 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. data/.travis.yml +0 -4
  2. data/Gemfile.lock +4 -18
  3. data/README.rdoc +20 -3
  4. data/Rakefile +0 -10
  5. data/lib/paysio.rb +32 -245
  6. data/lib/paysio/actions/create.rb +17 -0
  7. data/lib/paysio/actions/destroy.rb +10 -0
  8. data/lib/paysio/actions/find.rb +16 -0
  9. data/lib/paysio/actions/list.rb +28 -0
  10. data/lib/paysio/actions/update.rb +11 -0
  11. data/lib/paysio/client.rb +55 -0
  12. data/lib/paysio/json.rb +7 -15
  13. data/lib/paysio/resource.rb +98 -0
  14. data/lib/paysio/resources/charge.rb +18 -0
  15. data/lib/paysio/resources/coupon.rb +13 -0
  16. data/lib/paysio/resources/customer.rb +13 -0
  17. data/lib/paysio/resources/event.rb +7 -0
  18. data/lib/paysio/resources/list.rb +19 -0
  19. data/lib/paysio/resources/log.rb +7 -0
  20. data/lib/paysio/resources/reward.rb +13 -0
  21. data/lib/paysio/resources/wallet.rb +13 -0
  22. data/lib/paysio/version.rb +1 -1
  23. data/paysio.gemspec +2 -4
  24. metadata +26 -79
  25. data/gemfiles/default-with-activesupport.gemfile +0 -3
  26. data/gemfiles/json.gemfile +0 -4
  27. data/gemfiles/yajl.gemfile +0 -4
  28. data/lib/data/ca-certificates.crt +0 -3918
  29. data/lib/paysio/account.rb +0 -4
  30. data/lib/paysio/api_operations/create.rb +0 -16
  31. data/lib/paysio/api_operations/delete.rb +0 -11
  32. data/lib/paysio/api_operations/list.rb +0 -16
  33. data/lib/paysio/api_operations/update.rb +0 -15
  34. data/lib/paysio/api_resource.rb +0 -33
  35. data/lib/paysio/charge.rb +0 -39
  36. data/lib/paysio/coupon.rb +0 -7
  37. data/lib/paysio/customer.rb +0 -51
  38. data/lib/paysio/errors/api_connection_error.rb +0 -4
  39. data/lib/paysio/errors/api_error.rb +0 -4
  40. data/lib/paysio/errors/authentication_error.rb +0 -4
  41. data/lib/paysio/errors/card_error.rb +0 -11
  42. data/lib/paysio/errors/invalid_request_error.rb +0 -10
  43. data/lib/paysio/errors/paysio_error.rb +0 -20
  44. data/lib/paysio/event.rb +0 -5
  45. data/lib/paysio/list_object.rb +0 -14
  46. data/lib/paysio/paysio_object.rb +0 -159
  47. data/lib/paysio/singleton_api_resource.rb +0 -20
  48. data/lib/paysio/util.rb +0 -100
  49. data/test/test_helper.rb +0 -162
  50. data/test/test_paysio.rb +0 -479
  51. data/test/test_paysio_with_active_support.rb +0 -2
@@ -1,4 +0,0 @@
1
- module Paysio
2
- class Account < SingletonAPIResource
3
- end
4
- end
@@ -1,16 +0,0 @@
1
- module Paysio
2
- module APIOperations
3
- module Create
4
- module ClassMethods
5
- def create(params={}, api_key=nil)
6
- response, api_key = Paysio.request(:post, self.url, api_key, params)
7
- Util.convert_to_paysio_object(response, api_key)
8
- end
9
- end
10
-
11
- def self.included(base)
12
- base.extend(ClassMethods)
13
- end
14
- end
15
- end
16
- end
@@ -1,11 +0,0 @@
1
- module Paysio
2
- module APIOperations
3
- module Delete
4
- def delete
5
- response, api_key = Paysio.request(:delete, url, @api_key)
6
- refresh_from(response, api_key)
7
- self
8
- end
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- module Paysio
2
- module APIOperations
3
- module List
4
- module ClassMethods
5
- def all(filters={}, api_key=nil)
6
- response, api_key = Paysio.request(:get, url, api_key, filters)
7
- Util.convert_to_paysio_object(response, api_key)
8
- end
9
- end
10
-
11
- def self.included(base)
12
- base.extend(ClassMethods)
13
- end
14
- end
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- module Paysio
2
- module APIOperations
3
- module Update
4
- def save
5
- if @unsaved_values.length > 0
6
- values = {}
7
- @unsaved_values.each { |k| values[k] = @values[k] }
8
- response, api_key = Paysio.request(:post, url, @api_key, values)
9
- refresh_from(response, api_key)
10
- end
11
- self
12
- end
13
- end
14
- end
15
- end
@@ -1,33 +0,0 @@
1
- module Paysio
2
- class APIResource < PaysioObject
3
- def self.class_name
4
- self.name.split('::')[-1]
5
- end
6
-
7
- def self.url()
8
- if self == APIResource
9
- raise NotImplementedError.new('APIResource is an abstract class. You should perform actions on its subclasses (Charge, Customer, etc.)')
10
- end
11
- "/v1/#{CGI.escape(class_name.downcase)}s"
12
- end
13
-
14
- def url
15
- unless id = self['id']
16
- raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", 'id')
17
- end
18
- "#{self.class.url}/#{CGI.escape(id)}"
19
- end
20
-
21
- def refresh
22
- response, api_key = Paysio.request(:get, url, @api_key, @retrieve_options)
23
- refresh_from(response, api_key)
24
- self
25
- end
26
-
27
- def self.retrieve(id, api_key=nil)
28
- instance = self.new(id, api_key)
29
- instance.refresh
30
- instance
31
- end
32
- end
33
- end
@@ -1,39 +0,0 @@
1
- module Paysio
2
- class Charge < APIResource
3
- include Paysio::APIOperations::List
4
- include Paysio::APIOperations::Create
5
- include Paysio::APIOperations::Update
6
-
7
- def refund(params={})
8
- response, api_key = Paysio.request(:post, refund_url, @api_key, params)
9
- refresh_from(response, api_key)
10
- self
11
- end
12
-
13
- def capture(params={})
14
- response, api_key = Paysio.request(:post, capture_url, @api_key, params)
15
- refresh_from(response, api_key)
16
- self
17
- end
18
-
19
- def update_dispute(params)
20
- response, api_key = Paysio.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
- end
39
- end
@@ -1,7 +0,0 @@
1
- module Paysio
2
- class Coupon < APIResource
3
- include Paysio::APIOperations::Create
4
- include Paysio::APIOperations::Delete
5
- include Paysio::APIOperations::List
6
- end
7
- end
@@ -1,51 +0,0 @@
1
- module Paysio
2
- class Customer < APIResource
3
- include Paysio::APIOperations::Create
4
- include Paysio::APIOperations::Delete
5
- include Paysio::APIOperations::Update
6
- include Paysio::APIOperations::List
7
-
8
- def add_invoice_item(params)
9
- InvoiceItem.create(params.merge(:customer => id), @api_key)
10
- end
11
-
12
- def invoices
13
- Invoice.all({ :customer => id }, @api_key)
14
- end
15
-
16
- def invoice_items
17
- InvoiceItem.all({ :customer => id }, @api_key)
18
- end
19
-
20
- def charges
21
- Charge.all({ :customer => id }, @api_key)
22
- end
23
-
24
- def cancel_subscription(params={})
25
- response, api_key = Paysio.request(:delete, subscription_url, @api_key, params)
26
- refresh_from({ :subscription => response }, api_key, true)
27
- subscription
28
- end
29
-
30
- def update_subscription(params)
31
- response, api_key = Paysio.request(:post, subscription_url, @api_key, params)
32
- refresh_from({ :subscription => response }, api_key, true)
33
- subscription
34
- end
35
-
36
- def delete_discount
37
- Paysio.request(:delete, discount_url, @api_key)
38
- refresh_from({ :discount => nil }, api_key, true)
39
- end
40
-
41
- private
42
-
43
- def discount_url
44
- url + '/discount'
45
- end
46
-
47
- def subscription_url
48
- url + '/subscription'
49
- end
50
- end
51
- end
@@ -1,4 +0,0 @@
1
- module Paysio
2
- class APIConnectionError < PaysioError
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Paysio
2
- class APIError < PaysioError
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Paysio
2
- class AuthenticationError < PaysioError
3
- end
4
- end
@@ -1,11 +0,0 @@
1
- module Paysio
2
- class CardError < PaysioError
3
- attr_reader :param, :code
4
-
5
- def initialize(message, param, code, http_status=nil, http_body=nil, json_body=nil)
6
- super(message, http_status, http_body, json_body)
7
- @param = param
8
- @code = code
9
- end
10
- end
11
- end
@@ -1,10 +0,0 @@
1
- module Paysio
2
- class InvalidRequestError < PaysioError
3
- attr_accessor :param
4
-
5
- def initialize(message, param, http_status=nil, http_body=nil, json_body=nil)
6
- super(message, http_status, http_body, json_body)
7
- @param = param
8
- end
9
- end
10
- end
@@ -1,20 +0,0 @@
1
- module Paysio
2
- class PaysioError < StandardError
3
- attr_reader :message
4
- attr_reader :http_status
5
- attr_reader :http_body
6
- attr_reader :json_body
7
-
8
- def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil)
9
- @message = message
10
- @http_status = http_status
11
- @http_body = http_body
12
- @json_body = json_body
13
- end
14
-
15
- def to_s
16
- status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
17
- "#{status_string}#{@message}"
18
- end
19
- end
20
- end
@@ -1,5 +0,0 @@
1
- module Paysio
2
- class Event < APIResource
3
- include Paysio::APIOperations::List
4
- end
5
- end
@@ -1,14 +0,0 @@
1
- module Paysio
2
- class ListObject < PaysioObject
3
-
4
- def each(&blk)
5
- self.data.each(&blk)
6
- end
7
-
8
- def all(filters={})
9
- response, api_key = Paysio.request(:get, url, api_key, filters)
10
- Util.convert_to_paysio_object(response, api_key)
11
- end
12
-
13
- end
14
- end
@@ -1,159 +0,0 @@
1
- module Paysio
2
- class PaysioObject
3
- include Enumerable
4
-
5
- attr_accessor :api_key
6
- @@permanent_attributes = Set.new([:api_key])
7
-
8
- # The default :id method is deprecated and isn't useful to us
9
- if method_defined?(:id)
10
- undef :id
11
- end
12
-
13
- def initialize(id=nil, api_key=nil)
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
30
- end
31
-
32
- def self.construct_from(values, api_key=nil)
33
- obj = self.new(values[:id], api_key)
34
- obj.refresh_from(values, api_key)
35
- obj
36
- end
37
-
38
- def to_s(*args)
39
- Paysio::JSON.dump(@values, :pretty => true)
40
- end
41
-
42
- def inspect()
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: " + Paysio::JSON.dump(@values, :pretty => true)
45
- end
46
-
47
- def refresh_from(values, api_key, partial=false)
48
- @api_key = api_key
49
-
50
- removed = partial ? Set.new : Set.new(@values.keys - values.keys)
51
- added = Set.new(values.keys - @values.keys)
52
- # Wipe old state before setting new. This is useful for e.g. updating a
53
- # customer, where there is no persistent card parameter. Mark those values
54
- # which don't persist as transient
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_paysio_object(v, api_key)
67
- @transient_values.delete(k)
68
- @unsaved_values.delete(k)
69
- end
70
- end
71
-
72
- def [](k)
73
- k = k.to_sym if k.kind_of?(String)
74
- @values[k]
75
- end
76
-
77
- def []=(k, v)
78
- send(:"#{k}=", v)
79
- end
80
-
81
- def keys
82
- @values.keys
83
- end
84
-
85
- def values
86
- @values.values
87
- end
88
-
89
- def to_json(*a)
90
- Paysio::JSON.dump(@values)
91
- end
92
-
93
- def as_json(*a)
94
- @values.as_json(*a)
95
- end
96
-
97
- def to_hash
98
- @values
99
- end
100
-
101
- def each(&blk)
102
- @values.each(&blk)
103
- end
104
-
105
- protected
106
-
107
- def metaclass
108
- class << self; self; end
109
- end
110
-
111
- def remove_accessors(keys)
112
- metaclass.instance_eval do
113
- keys.each do |k|
114
- next if @@permanent_attributes.include?(k)
115
- k_eq = :"#{k}="
116
- remove_method(k) if method_defined?(k)
117
- remove_method(k_eq) if method_defined?(k_eq)
118
- end
119
- end
120
- end
121
-
122
- def add_accessors(keys)
123
- metaclass.instance_eval do
124
- keys.each do |k|
125
- next if @@permanent_attributes.include?(k)
126
- k_eq = :"#{k}="
127
- define_method(k) { @values[k] }
128
- define_method(k_eq) do |v|
129
- @values[k] = v
130
- @unsaved_values.add(k)
131
- end
132
- end
133
- end
134
- end
135
-
136
- def method_missing(name, *args)
137
- # TODO: only allow setting in updateable classes.
138
- if name.to_s.end_with?('=')
139
- attr = name.to_s[0...-1].to_sym
140
- @values[attr] = args[0]
141
- @unsaved_values.add(attr)
142
- add_accessors([attr])
143
- return
144
- else
145
- return @values[name] if @values.has_key?(name)
146
- end
147
-
148
- begin
149
- super
150
- rescue NoMethodError => e
151
- if @transient_values.include?(name)
152
- 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 Paysio's API, probably as a result of a save(). The attributes currently available on this object are: #{@values.keys.join(', ')}")
153
- else
154
- raise
155
- end
156
- end
157
- end
158
- end
159
- end