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
@@ -0,0 +1,11 @@
1
+ module Paysio
2
+ module Actions
3
+ module Update
4
+ def update(attrs = {})
5
+ validate!(to_hash.merge(attrs))
6
+ response = Paysio::Client.request(:put, path, attrs)
7
+ refresh_from(response.to_hash)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,55 @@
1
+ module Paysio
2
+ class Client
3
+ class << self
4
+ def request(method, path, params = {}, headers = {})
5
+ headers = {
6
+ user_agent: "Pays.io RubyClient/#{Paysio::VERSION}",
7
+ content_type: 'application/x-www-form-urlencoded'
8
+ }.merge(headers)
9
+ opts = {
10
+ url: Paysio.api_url(path),
11
+ method: method,
12
+ timeout: 80,
13
+ headers: headers
14
+ }
15
+
16
+ # build params
17
+ case method.to_s.downcase.to_sym
18
+ when :get, :head, :delete
19
+ opts[:url] += "?#{stringify_params(params)}" if params.count > 0
20
+ else
21
+ opts[:payload] = stringify_params(params)
22
+ end
23
+ response = self.execute(opts)
24
+ body, code = response.body, response.code
25
+ begin
26
+ resp = Paysio::JSON.decode(body)
27
+ rescue Oj::ParseError
28
+ # raise APIError.new("Invalid response object from API: #{body.inspect} (#{code})", code, body)
29
+ end
30
+ Paysio::Resource.build_from(resp)
31
+ end
32
+
33
+ def execute(opts)
34
+ RestClient::Request.execute(opts)
35
+ end
36
+
37
+ def uri_escape(key)
38
+ URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
39
+ end
40
+
41
+ def flatten_params(params, parent_key = nil)
42
+ result = []
43
+ params.each do |key, value|
44
+ flatten_key = parent_key ? "#{parent_key}[#{uri_escape(key)}]" : uri_escape(key)
45
+ result += value.is_a?(Hash) ? flatten_params(value, flatten_key) : [[flatten_key, value]]
46
+ end
47
+ result
48
+ end
49
+
50
+ def stringify_params(params)
51
+ flatten_params(params).collect{|key, value| "#{key}=#{uri_escape(value)}"}.join('&')
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,21 +1,13 @@
1
1
  module Paysio
2
- module JSON
3
- if MultiJson.respond_to?(:dump)
4
- def self.dump(*args)
5
- MultiJson.dump(*args)
2
+ class JSON
3
+ class << self
4
+ def decode(text)
5
+ Oj.load(text)
6
6
  end
7
7
 
8
- def self.load(*args)
9
- MultiJson.load(*args)
10
- end
11
- else
12
- def self.dump(*args)
13
- MultiJson.encode(*args)
14
- end
15
-
16
- def self.load(*args)
17
- MultiJson.decode(*args)
8
+ def encode(json)
9
+ Oj.dump(json)
18
10
  end
19
11
  end
20
12
  end
21
- end
13
+ end
@@ -0,0 +1,98 @@
1
+ module Paysio
2
+ class Resource
3
+ def initialize(id = nil)
4
+ @values = {}
5
+ @id = id
6
+ end
7
+
8
+ def refresh_from(values)
9
+ values.each do |key, value|
10
+ @values[key] = Resource.build_from(value)
11
+ end
12
+ end
13
+
14
+ def to_s(*opts)
15
+ Paysio::JSON.encode(@values)
16
+ end
17
+
18
+ def inspect
19
+ id_string = !@id.nil? ? " id=#{@id}" : ""
20
+ "#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + Paysio::JSON.encode(@values)
21
+ end
22
+
23
+ def method_missing(name, *opts)
24
+ @values[name.to_s] if @values.has_key?(name.to_s)
25
+ end
26
+
27
+ def to_json(*opts)
28
+ Paysio::JSON.encode(@values)
29
+ end
30
+
31
+ def as_json(*opts)
32
+ @values.as_json(*a)
33
+ end
34
+
35
+ def to_hash
36
+ @values
37
+ end
38
+
39
+ def each(&blk)
40
+ @values.each(&blk)
41
+ end
42
+
43
+ def path
44
+ "#{self.class.path}/#{@id}"
45
+ end
46
+
47
+ def action_path(action)
48
+ "#{path}/#{action}"
49
+ end
50
+
51
+ class << self
52
+ def resource(resource_name)
53
+ @@registered_resources ||= []
54
+ @@registered_resources << resource_name.to_s
55
+ end
56
+
57
+ def validates_presence_of(field)
58
+ @validate_presence_of ||= []
59
+ @validate_presence_of << field.to_s
60
+ end
61
+
62
+ def valid?(attrs)
63
+ @validate_presence_of ||= []
64
+ @validate_presence_of.all? do |field|
65
+ attrs.symbolize_keys.has_key?(field.to_sym)
66
+ end
67
+ end
68
+
69
+ def validate!(attrs)
70
+ unless valid?(attrs)
71
+ raise "#{self.name} should have following attributes: #{@validate_presence_of.inspect}"
72
+ end
73
+ end
74
+
75
+ def path
76
+ "/#{self.name.demodulize.tableize}"
77
+ end
78
+
79
+ def build_from(resp)
80
+ case resp
81
+ when Array
82
+ resp.map { |values| build_from(values) }
83
+ when Hash
84
+ if @@registered_resources && @@registered_resources.include?(resp['object'])
85
+ klass = "Paysio::#{resp['object'].classify}".constantize
86
+ else
87
+ klass = Paysio::Resource
88
+ end
89
+ resource = klass.new(resp['id'])
90
+ resource.refresh_from(resp)
91
+ resource
92
+ else
93
+ resp
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,18 @@
1
+ module Paysio
2
+ class Charge < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Create
5
+ include Paysio::Actions::Update
6
+ include Paysio::Actions::Find
7
+ resource :charge
8
+
9
+ validates_presence_of :amount
10
+ validates_presence_of :payment_system_id
11
+ validates_presence_of :description
12
+
13
+ def refund(attrs = {})
14
+ response = Paysio::Client.request(:post, action_path(:refund), attrs)
15
+ refresh_from(response.to_hash)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module Paysio
2
+ class Coupon < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Create
5
+ include Paysio::Actions::Update
6
+ include Paysio::Actions::Destroy
7
+ include Paysio::Actions::Find
8
+ resource :coupon
9
+
10
+ validates_presence_of :code
11
+ validates_presence_of :percent_off
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Paysio
2
+ class Customer < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Create
5
+ include Paysio::Actions::Update
6
+ include Paysio::Actions::Destroy
7
+ include Paysio::Actions::Find
8
+ resource :customer
9
+
10
+ validates_presence_of :email
11
+ validates_presence_of :description
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Paysio
2
+ class Event < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Find
5
+ resource :event
6
+ end
7
+ end
@@ -0,0 +1,19 @@
1
+ module Paysio
2
+ class List < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Find
5
+ resource :list
6
+
7
+ def each(&blk)
8
+ self.data.each(&blk)
9
+ end
10
+
11
+ def first
12
+ self.data.first
13
+ end
14
+
15
+ def last
16
+ self.data.last
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,7 @@
1
+ module Paysio
2
+ class Log < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Find
5
+ resource :log
6
+ end
7
+ end
@@ -0,0 +1,13 @@
1
+ module Paysio
2
+ class Reward < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Create
5
+ include Paysio::Actions::Update
6
+ include Paysio::Actions::Destroy
7
+ include Paysio::Actions::Find
8
+ resource :reward
9
+
10
+ validates_presence_of :percent_off
11
+ validates_presence_of :title
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Paysio
2
+ class Wallet < Paysio::Resource
3
+ include Paysio::Actions::List
4
+ include Paysio::Actions::Create
5
+ include Paysio::Actions::Update
6
+ include Paysio::Actions::Destroy
7
+ include Paysio::Actions::Find
8
+ resource :wallet
9
+
10
+ validates_presence_of :type
11
+ validates_presence_of :account
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Paysio
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -14,11 +14,9 @@ spec = Gem::Specification.new do |s|
14
14
  s.require_paths = %w{lib}
15
15
 
16
16
  s.add_dependency('rest-client', '~> 1.4')
17
- s.add_dependency('multi_json', '>= 1.0.4', '< 2')
17
+ s.add_dependency('activesupport')
18
+ s.add_dependency('oj', '> 2')
18
19
 
19
- s.add_development_dependency('mocha')
20
- s.add_development_dependency('shoulda')
21
- s.add_development_dependency('test-unit')
22
20
  s.add_development_dependency('rake')
23
21
 
24
22
  s.files = `git ls-files`.split("\n")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paysio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-12 00:00:00.000000000 Z
12
+ date: 2013-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -28,52 +28,14 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.4'
30
30
  - !ruby/object:Gem::Dependency
31
- name: multi_json
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 1.0.4
38
- - - <
39
- - !ruby/object:Gem::Version
40
- version: '2'
41
- type: :runtime
42
- prerelease: false
43
- version_requirements: !ruby/object:Gem::Requirement
44
- none: false
45
- requirements:
46
- - - ! '>='
47
- - !ruby/object:Gem::Version
48
- version: 1.0.4
49
- - - <
50
- - !ruby/object:Gem::Version
51
- version: '2'
52
- - !ruby/object:Gem::Dependency
53
- name: mocha
54
- requirement: !ruby/object:Gem::Requirement
55
- none: false
56
- requirements:
57
- - - ! '>='
58
- - !ruby/object:Gem::Version
59
- version: '0'
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- none: false
64
- requirements:
65
- - - ! '>='
66
- - !ruby/object:Gem::Version
67
- version: '0'
68
- - !ruby/object:Gem::Dependency
69
- name: shoulda
31
+ name: activesupport
70
32
  requirement: !ruby/object:Gem::Requirement
71
33
  none: false
72
34
  requirements:
73
35
  - - ! '>='
74
36
  - !ruby/object:Gem::Version
75
37
  version: '0'
76
- type: :development
38
+ type: :runtime
77
39
  prerelease: false
78
40
  version_requirements: !ruby/object:Gem::Requirement
79
41
  none: false
@@ -82,21 +44,21 @@ dependencies:
82
44
  - !ruby/object:Gem::Version
83
45
  version: '0'
84
46
  - !ruby/object:Gem::Dependency
85
- name: test-unit
47
+ name: oj
86
48
  requirement: !ruby/object:Gem::Requirement
87
49
  none: false
88
50
  requirements:
89
- - - ! '>='
51
+ - - ! '>'
90
52
  - !ruby/object:Gem::Version
91
- version: '0'
92
- type: :development
53
+ version: '2'
54
+ type: :runtime
93
55
  prerelease: false
94
56
  version_requirements: !ruby/object:Gem::Requirement
95
57
  none: false
96
58
  requirements:
97
- - - ! '>='
59
+ - - ! '>'
98
60
  - !ruby/object:Gem::Version
99
- version: '0'
61
+ version: '2'
100
62
  - !ruby/object:Gem::Dependency
101
63
  name: rake
102
64
  requirement: !ruby/object:Gem::Requirement
@@ -132,37 +94,25 @@ files:
132
94
  - Rakefile
133
95
  - VERSION
134
96
  - bin/paysio
135
- - gemfiles/default-with-activesupport.gemfile
136
- - gemfiles/json.gemfile
137
- - gemfiles/yajl.gemfile
138
- - lib/data/ca-certificates.crt
139
97
  - lib/paysio.rb
140
- - lib/paysio/account.rb
141
- - lib/paysio/api_operations/create.rb
142
- - lib/paysio/api_operations/delete.rb
143
- - lib/paysio/api_operations/list.rb
144
- - lib/paysio/api_operations/update.rb
145
- - lib/paysio/api_resource.rb
146
- - lib/paysio/charge.rb
147
- - lib/paysio/coupon.rb
148
- - lib/paysio/customer.rb
149
- - lib/paysio/errors/api_connection_error.rb
150
- - lib/paysio/errors/api_error.rb
151
- - lib/paysio/errors/authentication_error.rb
152
- - lib/paysio/errors/card_error.rb
153
- - lib/paysio/errors/invalid_request_error.rb
154
- - lib/paysio/errors/paysio_error.rb
155
- - lib/paysio/event.rb
98
+ - lib/paysio/actions/create.rb
99
+ - lib/paysio/actions/destroy.rb
100
+ - lib/paysio/actions/find.rb
101
+ - lib/paysio/actions/list.rb
102
+ - lib/paysio/actions/update.rb
103
+ - lib/paysio/client.rb
156
104
  - lib/paysio/json.rb
157
- - lib/paysio/list_object.rb
158
- - lib/paysio/paysio_object.rb
159
- - lib/paysio/singleton_api_resource.rb
160
- - lib/paysio/util.rb
105
+ - lib/paysio/resource.rb
106
+ - lib/paysio/resources/charge.rb
107
+ - lib/paysio/resources/coupon.rb
108
+ - lib/paysio/resources/customer.rb
109
+ - lib/paysio/resources/event.rb
110
+ - lib/paysio/resources/list.rb
111
+ - lib/paysio/resources/log.rb
112
+ - lib/paysio/resources/reward.rb
113
+ - lib/paysio/resources/wallet.rb
161
114
  - lib/paysio/version.rb
162
115
  - paysio.gemspec
163
- - test/test_helper.rb
164
- - test/test_paysio.rb
165
- - test/test_paysio_with_active_support.rb
166
116
  homepage: https://paysio.com
167
117
  licenses: []
168
118
  post_install_message:
@@ -187,7 +137,4 @@ rubygems_version: 1.8.25
187
137
  signing_key:
188
138
  specification_version: 3
189
139
  summary: Ruby bindings for the Pays.io API
190
- test_files:
191
- - test/test_helper.rb
192
- - test/test_paysio.rb
193
- - test/test_paysio_with_active_support.rb
140
+ test_files: []