paysio 1.0.0 → 1.0.2

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 (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
@@ -3,7 +3,3 @@ rvm:
3
3
  - 1.8.7
4
4
  - 1.9.2
5
5
  - 1.9.3
6
- gemfile:
7
- - gemfiles/default-with-activesupport.gemfile
8
- - gemfiles/json.gemfile
9
- - gemfiles/yajl.gemfile
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- paysio (1.0.0)
5
- multi_json (>= 1.0.4, < 2)
4
+ paysio (1.0.1)
5
+ activesupport
6
+ oj (> 2)
6
7
  rest-client (~> 1.4)
7
8
 
8
9
  GEM
@@ -11,32 +12,17 @@ GEM
11
12
  activesupport (3.2.12)
12
13
  i18n (~> 0.6)
13
14
  multi_json (~> 1.0)
14
- bourne (1.1.2)
15
- mocha (= 0.10.5)
16
15
  i18n (0.6.1)
17
- metaclass (0.0.1)
18
16
  mime-types (1.21)
19
- mocha (0.10.5)
20
- metaclass (~> 0.0.1)
21
17
  multi_json (1.6.0)
18
+ oj (2.0.4)
22
19
  rake (10.0.3)
23
20
  rest-client (1.6.7)
24
21
  mime-types (>= 1.16)
25
- shoulda (3.3.2)
26
- shoulda-context (~> 1.0.1)
27
- shoulda-matchers (~> 1.4.1)
28
- shoulda-context (1.0.2)
29
- shoulda-matchers (1.4.2)
30
- activesupport (>= 3.0.0)
31
- bourne (~> 1.1.2)
32
- test-unit (2.5.4)
33
22
 
34
23
  PLATFORMS
35
24
  ruby
36
25
 
37
26
  DEPENDENCIES
38
- mocha
39
27
  paysio!
40
28
  rake
41
- shoulda
42
- test-unit
@@ -5,8 +5,25 @@
5
5
  == Usage
6
6
 
7
7
  Paysio.api_key = 'YOUR_API_KEY'
8
- Paysio::Charges.all
8
+ Paysio::Charge.all
9
9
 
10
- == Development
10
+ == Paysio Objects
11
+ Paysio::Charge.all # get list of charges
12
+ Paysio::Wallet.all # get list of wallets
13
+ Paysio::Coupon.all # get list of coupons
14
+ Paysio::Reward.all # get list of rewards
15
+ Paysio::Event.all # get list of events
16
+ Paysio::Log.all # get list of logs
17
+ Paysio::Customer.all # get list of customers
11
18
 
12
- Test cases can be run with: `bundle exec rake test`
19
+ == Actions: update
20
+ customer = Paysio::Customer.find("cs_1111111")
21
+ customer.update(description: "test user")
22
+
23
+ == Actions: destroy
24
+ customer = Paysio::Customer.find("cs_1111111")
25
+ customer.destroy
26
+
27
+ == Actions: refund charge
28
+ charge = Paysio::Charge.find("ch_1111111")
29
+ charge.refund
data/Rakefile CHANGED
@@ -1,12 +1,2 @@
1
- task :default => [:test]
2
-
3
- task :test do
4
- ret = true
5
- Dir["test/**/*.rb"].each do |f|
6
- ret = ret && ruby(f, '')
7
- end
8
- exit(ret)
9
- end
10
-
11
1
  require 'bundler'
12
2
  Bundler::GemHelper.install_tasks
@@ -1,252 +1,39 @@
1
- # Paysio Ruby bindings
2
- # API spec at https://paysio.com/docs/api
3
- require 'cgi'
4
- require 'set'
5
- require 'rubygems'
6
- require 'openssl'
7
-
8
- gem 'rest-client', '~> 1.4'
9
- require 'rest_client'
10
- require 'multi_json'
11
-
12
- # Version
13
- require 'paysio/version'
14
-
15
- # API operations
16
- require 'paysio/api_operations/create'
17
- require 'paysio/api_operations/update'
18
- require 'paysio/api_operations/delete'
19
- require 'paysio/api_operations/list'
20
-
21
- # Resources
22
- require 'paysio/util'
1
+ require 'active_support/deprecation'
2
+ require 'active_support/core_ext/module'
3
+ require 'active_support/core_ext/hash'
4
+ require 'active_support/inflector'
5
+ require 'rest-client'
6
+ require 'oj'
7
+
8
+ # utils
9
+ require 'paysio/client'
23
10
  require 'paysio/json'
24
- require 'paysio/paysio_object'
25
- require 'paysio/api_resource'
26
- require 'paysio/singleton_api_resource'
27
- require 'paysio/list_object'
28
- require 'paysio/account'
29
- require 'paysio/customer'
30
- require 'paysio/charge'
31
- require 'paysio/coupon'
32
- require 'paysio/event'
33
-
34
- # Errors
35
- require 'paysio/errors/paysio_error'
36
- require 'paysio/errors/api_error'
37
- require 'paysio/errors/api_connection_error'
38
- require 'paysio/errors/card_error'
39
- require 'paysio/errors/invalid_request_error'
40
- require 'paysio/errors/authentication_error'
11
+ require 'paysio/resource'
12
+
13
+ # actions
14
+ require 'paysio/actions/list'
15
+ require 'paysio/actions/create'
16
+ require 'paysio/actions/update'
17
+ require 'paysio/actions/destroy'
18
+ require 'paysio/actions/find'
19
+
20
+ # resources
21
+ require 'paysio/resources/list'
22
+ require 'paysio/resources/charge'
23
+ require 'paysio/resources/wallet'
24
+ require 'paysio/resources/customer'
25
+ require 'paysio/resources/reward'
26
+ require 'paysio/resources/coupon'
27
+ require 'paysio/resources/event'
28
+ require 'paysio/resources/log'
41
29
 
42
30
  module Paysio
43
- @@ssl_bundle_path = File.join(File.dirname(__FILE__), 'data/ca-certificates.crt')
44
31
  @@api_key = nil
45
32
  @@api_base = 'api.paysio.com'
46
- @@verify_ssl_certs = true
47
- @@api_version = nil
48
-
49
- def self.api_url(url='')
50
- "https://#{api_key}@#{api_base}/#{url}"
51
- end
52
-
53
- def self.api_key=(api_key)
54
- @@api_key = api_key
55
- end
56
-
57
- def self.api_key
58
- @@api_key
59
- end
60
-
61
- def self.api_base=(api_base)
62
- @@api_base = api_base
63
- end
64
-
65
- def self.api_base
66
- @@api_base
67
- end
68
-
69
- def self.verify_ssl_certs=(verify)
70
- @@verify_ssl_certs = verify
71
- end
72
-
73
- def self.verify_ssl_certs
74
- @@verify_ssl_certs
75
- end
76
-
77
- def self.api_version=(version)
78
- @@api_version = version
79
- end
80
-
81
- def self.api_version
82
- @@api_version
83
- end
84
-
85
- def self.request(method, url, api_key, params={}, headers={})
86
- api_key ||= @@api_key
87
- raise AuthenticationError.new('No API key provided. (HINT: set your API key using "Paysio.api_key = <API-KEY>". You can generate API keys from the Paysio web interface. See https://paysio.com/api for details, or email support@paysio.com if you have any questions.)') unless api_key
88
-
89
- if !verify_ssl_certs
90
- unless @no_verify
91
- $stderr.puts "WARNING: Running without SSL cert verification. Execute 'Paysio.verify_ssl_certs = true' to enable verification."
92
- @no_verify = true
93
- end
94
- ssl_opts = { :verify_ssl => false }
95
- elsif !Util.file_readable(@@ssl_bundle_path)
96
- unless @no_bundle
97
- $stderr.puts "WARNING: Running without SSL cert verification because #{@@ssl_bundle_path} isn't readable"
98
- @no_bundle = true
99
- end
100
- ssl_opts = { :verify_ssl => false }
101
- else
102
- ssl_opts = {
103
- :verify_ssl => OpenSSL::SSL::VERIFY_PEER,
104
- :ssl_ca_file => @@ssl_bundle_path
105
- }
106
- end
107
- uname = (@@uname ||= RUBY_PLATFORM =~ /linux|darwin/i ? `uname -a 2>/dev/null`.strip : nil)
108
- lang_version = "#{RUBY_VERSION} p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE})"
109
- ua = {
110
- :bindings_version => Paysio::VERSION,
111
- :lang => 'ruby',
112
- :lang_version => lang_version,
113
- :platform => RUBY_PLATFORM,
114
- :publisher => 'paysio',
115
- :uname => uname
116
- }
117
-
118
- params = Util.objects_to_ids(params)
119
- url = self.api_url(url)
120
- case method.to_s.downcase.to_sym
121
- when :get, :head, :delete
122
- # Make params into GET parameters
123
- if params && params.count > 0
124
- query_string = Util.flatten_params(params).collect{|key, value| "#{key}=#{Util.url_encode(value)}"}.join('&')
125
- url += "?#{query_string}"
126
- end
127
- payload = nil
128
- else
129
- payload = Util.flatten_params(params).collect{|(key, value)| "#{key}=#{Util.url_encode(value)}"}.join('&')
130
- end
131
-
132
- begin
133
- headers = { :x_paysio_client_user_agent => Paysio::JSON.dump(ua) }.merge(headers)
134
- rescue => e
135
- headers = {
136
- :x_paysio_client_raw_user_agent => ua.inspect,
137
- :error => "#{e} (#{e.class})"
138
- }.merge(headers)
139
- end
140
-
141
- headers = {
142
- :user_agent => "Paysio/v1 RubyBindings/#{Paysio::VERSION}",
143
- :content_type => 'application/x-www-form-urlencoded'
144
- }.merge(headers)
145
-
146
- if self.api_version
147
- headers[:paysio_version] = self.api_version
148
- end
149
-
150
- opts = {
151
- :method => method,
152
- :url => url,
153
- :headers => headers,
154
- :open_timeout => 30,
155
- :payload => payload,
156
- :timeout => 80
157
- }.merge(ssl_opts)
158
-
159
- begin
160
- response = execute_request(opts)
161
- rescue SocketError => e
162
- self.handle_restclient_error(e)
163
- rescue NoMethodError => e
164
- # Work around RestClient bug
165
- if e.message =~ /\WRequestFailed\W/
166
- e = APIConnectionError.new('Unexpected HTTP response code')
167
- self.handle_restclient_error(e)
168
- else
169
- raise
170
- end
171
- rescue RestClient::ExceptionWithResponse => e
172
- if rcode = e.http_code and rbody = e.http_body
173
- self.handle_api_error(rcode, rbody)
174
- else
175
- self.handle_restclient_error(e)
176
- end
177
- rescue RestClient::Exception, Errno::ECONNREFUSED => e
178
- self.handle_restclient_error(e)
179
- end
180
-
181
- rbody = response.body
182
- rcode = response.code
183
- begin
184
- # Would use :symbolize_names => true, but apparently there is
185
- # some library out there that makes symbolize_names not work.
186
- resp = Paysio::JSON.load(rbody)
187
- rescue MultiJson::DecodeError
188
- raise APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody)
189
- end
190
-
191
- resp = Util.symbolize_names(resp)
192
- [resp, api_key]
193
- end
194
-
195
- private
196
-
197
- def self.execute_request(opts)
198
- RestClient::Request.execute(opts)
199
- end
200
-
201
- def self.handle_api_error(rcode, rbody)
202
- begin
203
- error_obj = Paysio::JSON.load(rbody)
204
- error_obj = Util.symbolize_names(error_obj)
205
- error = error_obj[:error] or raise PaysioError.new # escape from parsing
206
- rescue MultiJson::DecodeError, PaysioError
207
- raise APIError.new("Invalid response object from API: #{rbody.inspect} (HTTP response code was #{rcode})", rcode, rbody)
208
- end
209
-
210
- case rcode
211
- when 400, 404 then
212
- raise invalid_request_error(error, rcode, rbody, error_obj)
213
- when 401
214
- raise authentication_error(error, rcode, rbody, error_obj)
215
- when 402
216
- raise card_error(error, rcode, rbody, error_obj)
217
- else
218
- raise api_error(error, rcode, rbody, error_obj)
219
- end
220
- end
221
-
222
- def self.invalid_request_error(error, rcode, rbody, error_obj)
223
- InvalidRequestError.new(error[:message], error[:param], rcode, rbody, error_obj)
224
- end
225
-
226
- def self.authentication_error(error, rcode, rbody, error_obj)
227
- AuthenticationError.new(error[:message], rcode, rbody, error_obj)
228
- end
229
-
230
- def self.card_error(error, rcode, rbody, error_obj)
231
- CardError.new(error[:message], error[:param], error[:code], rcode, rbody, error_obj)
232
- end
233
-
234
- def self.api_error(error, rcode, rbody, error_obj)
235
- APIError.new(error[:message], rcode, rbody, error_obj)
236
- end
33
+ @@api_version = 'v1'
34
+ mattr_accessor :api_key, :api_base, :api_version
237
35
 
238
- def self.handle_restclient_error(e)
239
- case e
240
- when RestClient::ServerBrokeConnection, RestClient::RequestTimeout
241
- message = "Could not connect to Paysio (#{@@api_base}). Please check your internet connection and try again. If this problem persists, you should check Paysio's service status at https://twitter.com/paysiostatus, or let us know at support@paysio.com."
242
- when RestClient::SSLCertificateNotVerified
243
- message = "Could not verify Paysio's SSL certificate. Please make sure that your network is not intercepting certificates. (Try going to https://api.paysio.com/v1 in your browser.) If this problem persists, let us know at support@paysio.com."
244
- when SocketError
245
- message = "Unexpected error communicating when trying to connect to Paysio. HINT: You may be seeing this message because your DNS is not working. To check, try running 'host paysio.com' from the command line."
246
- else
247
- message = "Unexpected error communicating with Paysio. If this problem persists, let us know at support@paysio.com."
248
- end
249
- message += "\n\n(Network error: #{e.message})"
250
- raise APIConnectionError.new(message)
36
+ def self.api_url(path = '')
37
+ "https://#{api_key}@#{api_base}/#{api_version}#{path}"
251
38
  end
252
- end
39
+ end
@@ -0,0 +1,17 @@
1
+ module Paysio
2
+ module Actions
3
+ module Create
4
+ module ClassMethods
5
+ def create(attrs = {})
6
+ validate!(attrs)
7
+ response = Paysio::Client.request(:post, path, attrs)
8
+ Resource.build_from(response)
9
+ end
10
+ end
11
+
12
+ def self.included(base)
13
+ base.extend(ClassMethods)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,10 @@
1
+ module Paysio
2
+ module Actions
3
+ module Destroy
4
+ def destroy(attrs = {})
5
+ response = Paysio::Client.request(:delete, path)
6
+ refresh_from(response.to_hash)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,16 @@
1
+ module Paysio
2
+ module Actions
3
+ module Find
4
+ module ClassMethods
5
+ def find(id)
6
+ response = Paysio::Client.request(:get, "#{path}/#{id}")
7
+ Resource.build_from(response)
8
+ end
9
+ end
10
+
11
+ def self.included(base)
12
+ base.extend(ClassMethods)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ module Paysio
2
+ module Actions
3
+ module List
4
+ module ClassMethods
5
+ def all
6
+ response = Paysio::Client.request(:get, path)
7
+ Resource.build_from(response)
8
+ end
9
+
10
+ def count
11
+ all.count
12
+ end
13
+
14
+ def first
15
+ all.first
16
+ end
17
+
18
+ def last
19
+ all.last
20
+ end
21
+ end
22
+
23
+ def self.included(base)
24
+ base.extend(ClassMethods)
25
+ end
26
+ end
27
+ end
28
+ end