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.
- data/.travis.yml +0 -4
- data/Gemfile.lock +4 -18
- data/README.rdoc +20 -3
- data/Rakefile +0 -10
- data/lib/paysio.rb +32 -245
- data/lib/paysio/actions/create.rb +17 -0
- data/lib/paysio/actions/destroy.rb +10 -0
- data/lib/paysio/actions/find.rb +16 -0
- data/lib/paysio/actions/list.rb +28 -0
- data/lib/paysio/actions/update.rb +11 -0
- data/lib/paysio/client.rb +55 -0
- data/lib/paysio/json.rb +7 -15
- data/lib/paysio/resource.rb +98 -0
- data/lib/paysio/resources/charge.rb +18 -0
- data/lib/paysio/resources/coupon.rb +13 -0
- data/lib/paysio/resources/customer.rb +13 -0
- data/lib/paysio/resources/event.rb +7 -0
- data/lib/paysio/resources/list.rb +19 -0
- data/lib/paysio/resources/log.rb +7 -0
- data/lib/paysio/resources/reward.rb +13 -0
- data/lib/paysio/resources/wallet.rb +13 -0
- data/lib/paysio/version.rb +1 -1
- data/paysio.gemspec +2 -4
- metadata +26 -79
- data/gemfiles/default-with-activesupport.gemfile +0 -3
- data/gemfiles/json.gemfile +0 -4
- data/gemfiles/yajl.gemfile +0 -4
- data/lib/data/ca-certificates.crt +0 -3918
- data/lib/paysio/account.rb +0 -4
- data/lib/paysio/api_operations/create.rb +0 -16
- data/lib/paysio/api_operations/delete.rb +0 -11
- data/lib/paysio/api_operations/list.rb +0 -16
- data/lib/paysio/api_operations/update.rb +0 -15
- data/lib/paysio/api_resource.rb +0 -33
- data/lib/paysio/charge.rb +0 -39
- data/lib/paysio/coupon.rb +0 -7
- data/lib/paysio/customer.rb +0 -51
- data/lib/paysio/errors/api_connection_error.rb +0 -4
- data/lib/paysio/errors/api_error.rb +0 -4
- data/lib/paysio/errors/authentication_error.rb +0 -4
- data/lib/paysio/errors/card_error.rb +0 -11
- data/lib/paysio/errors/invalid_request_error.rb +0 -10
- data/lib/paysio/errors/paysio_error.rb +0 -20
- data/lib/paysio/event.rb +0 -5
- data/lib/paysio/list_object.rb +0 -14
- data/lib/paysio/paysio_object.rb +0 -159
- data/lib/paysio/singleton_api_resource.rb +0 -20
- data/lib/paysio/util.rb +0 -100
- data/test/test_helper.rb +0 -162
- data/test/test_paysio.rb +0 -479
- data/test/test_paysio_with_active_support.rb +0 -2
@@ -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
|
data/lib/paysio/json.rb
CHANGED
@@ -1,21 +1,13 @@
|
|
1
1
|
module Paysio
|
2
|
-
|
3
|
-
|
4
|
-
def
|
5
|
-
|
2
|
+
class JSON
|
3
|
+
class << self
|
4
|
+
def decode(text)
|
5
|
+
Oj.load(text)
|
6
6
|
end
|
7
7
|
|
8
|
-
def
|
9
|
-
|
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,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,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
|
data/lib/paysio/version.rb
CHANGED
data/paysio.gemspec
CHANGED
@@ -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('
|
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.
|
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
|
+
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:
|
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: :
|
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:
|
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: '
|
92
|
-
type: :
|
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: '
|
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/
|
141
|
-
- lib/paysio/
|
142
|
-
- lib/paysio/
|
143
|
-
- lib/paysio/
|
144
|
-
- lib/paysio/
|
145
|
-
- lib/paysio/
|
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/
|
158
|
-
- lib/paysio/
|
159
|
-
- lib/paysio/
|
160
|
-
- lib/paysio/
|
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: []
|