promisepay 0.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.
- checksums.yaml +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +163 -0
- data/Rakefile +1 -0
- data/lib/promisepay.rb +13 -0
- data/lib/promisepay/client.rb +144 -0
- data/lib/promisepay/configurable.rb +49 -0
- data/lib/promisepay/default.rb +47 -0
- data/lib/promisepay/error.rb +92 -0
- data/lib/promisepay/models/account.rb +5 -0
- data/lib/promisepay/models/bank_account.rb +28 -0
- data/lib/promisepay/models/base_model.rb +23 -0
- data/lib/promisepay/models/card_account.rb +26 -0
- data/lib/promisepay/models/fee.rb +5 -0
- data/lib/promisepay/models/item.rb +197 -0
- data/lib/promisepay/models/paypal_account.rb +26 -0
- data/lib/promisepay/models/transaction.rb +24 -0
- data/lib/promisepay/models/user.rb +63 -0
- data/lib/promisepay/resources/account_resource.rb +5 -0
- data/lib/promisepay/resources/bank_account_resource.rb +32 -0
- data/lib/promisepay/resources/base_resource.rb +20 -0
- data/lib/promisepay/resources/card_account_resource.rb +32 -0
- data/lib/promisepay/resources/fee_resource.rb +47 -0
- data/lib/promisepay/resources/item_resource.rb +47 -0
- data/lib/promisepay/resources/paypal_account_resource.rb +32 -0
- data/lib/promisepay/resources/transaction_resource.rb +35 -0
- data/lib/promisepay/resources/user_resource.rb +47 -0
- data/lib/promisepay/version.rb +4 -0
- data/promisepay.gemspec +27 -0
- metadata +129 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Custom error class for rescuing from all Promisepau errors
|
3
|
+
class Error < StandardError
|
4
|
+
# Returns the appropriate Promisepay::Error subclass based on status
|
5
|
+
#
|
6
|
+
# @param [Faraday::Response] response Faraday HTTP response
|
7
|
+
# @return [Promisepay::Error]
|
8
|
+
def self.from_response(response)
|
9
|
+
klass = case response.status
|
10
|
+
when 400 then Promisepay::BadRequest
|
11
|
+
when 401 then Promisepay::Unauthorized
|
12
|
+
when 403 then Promisepay::Forbidden
|
13
|
+
when 404 then Promisepay::NotFound
|
14
|
+
when 405 then Promisepay::MethodNotAllowed
|
15
|
+
when 406 then Promisepay::NotAcceptable
|
16
|
+
when 409 then Promisepay::Conflict
|
17
|
+
when 422 then Promisepay::UnprocessableEntity
|
18
|
+
when 400..499 then Promisepay::ClientError
|
19
|
+
when 500 then Promisepay::InternalServerError
|
20
|
+
when 501 then Promisepay::NotImplemented
|
21
|
+
when 502 then Promisepay::BadGateway
|
22
|
+
when 503 then Promisepay::ServiceUnavailable
|
23
|
+
when 500..599 then Promisepay::ServerError
|
24
|
+
end
|
25
|
+
(klass) ? klass.new(response) : new(response)
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(response = nil)
|
29
|
+
@response = response
|
30
|
+
super(build_error_message)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def build_error_message
|
36
|
+
return nil if @response.nil? || @response.body.nil?
|
37
|
+
|
38
|
+
json_response = JSON.parse(@response.body)
|
39
|
+
message = ''
|
40
|
+
message << json_response['message'] if json_response.key?('message')
|
41
|
+
if json_response.key?('errors')
|
42
|
+
json_response['errors'].each do |attribute, content|
|
43
|
+
message << "#{attribute}: #{content}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
message
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Raised on errors in the 400-499 range
|
52
|
+
class ClientError < Error; end
|
53
|
+
|
54
|
+
# Raised when Promisepay returns a 400 HTTP status code
|
55
|
+
class BadRequest < ClientError; end
|
56
|
+
|
57
|
+
# Raised when Promisepay returns a 401 HTTP status code
|
58
|
+
class Unauthorized < ClientError; end
|
59
|
+
|
60
|
+
# Raised when Promisepay returns a 403 HTTP status code
|
61
|
+
class Forbidden < ClientError; end
|
62
|
+
|
63
|
+
# Raised when Promisepay returns a 404 HTTP status code
|
64
|
+
class NotFound < ClientError; end
|
65
|
+
|
66
|
+
# Raised when Promisepay returns a 405 HTTP status code
|
67
|
+
class MethodNotAllowed < ClientError; end
|
68
|
+
|
69
|
+
# Raised when Promisepay returns a 406 HTTP status code
|
70
|
+
class NotAcceptable < ClientError; end
|
71
|
+
|
72
|
+
# Raised when Promisepay returns a 409 HTTP status code
|
73
|
+
class Conflict < ClientError; end
|
74
|
+
|
75
|
+
# Raised when Promisepay returns a 422 HTTP status code
|
76
|
+
class UnprocessableEntity < ClientError; end
|
77
|
+
|
78
|
+
# Raised on errors in the 500-599 range
|
79
|
+
class ServerError < Error; end
|
80
|
+
|
81
|
+
# Raised when Promisepay returns a 500 HTTP status code
|
82
|
+
class InternalServerError < ServerError; end
|
83
|
+
|
84
|
+
# Raised when Promisepay returns a 501 HTTP status code
|
85
|
+
class NotImplemented < ServerError; end
|
86
|
+
|
87
|
+
# Raised when Promisepay returns a 502 HTTP status code
|
88
|
+
class BadGateway < ServerError; end
|
89
|
+
|
90
|
+
# Raised when Promisepay returns a 503 HTTP status code
|
91
|
+
class ServiceUnavailable < ServerError; end
|
92
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Manage Bank accounts
|
3
|
+
class BankAccount < Account
|
4
|
+
# Get the user the bank account belongs to.
|
5
|
+
#
|
6
|
+
# @see http://docs.promisepay.com/v2.2/docs/bank_accountsidusers
|
7
|
+
#
|
8
|
+
# @return [Promisepay::User]
|
9
|
+
def user
|
10
|
+
response = JSON.parse(@client.get("bank_accounts/#{send(:id)}/users").body)
|
11
|
+
Promisepay::User.new(@client, response['users'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Deletes a bank account for a user on a marketplace.
|
15
|
+
# Sets the account to in-active.
|
16
|
+
#
|
17
|
+
# @see http://docs.promisepay.com/v2.2/docs/bank_accountsid
|
18
|
+
#
|
19
|
+
# @param mobile_pin [String] Mobile PIN.
|
20
|
+
#
|
21
|
+
# @return [Boolean]
|
22
|
+
def deactivate(mobile_pin)
|
23
|
+
@client.delete("bank_accounts/#{id}", mobile_pin: mobile_pin)
|
24
|
+
@attributes['active'] = false
|
25
|
+
true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Base model for all the other models to inherit from
|
3
|
+
class BaseModel
|
4
|
+
def initialize(client, attributes = {})
|
5
|
+
@client = client
|
6
|
+
@attributes = stringify_keys(attributes)
|
7
|
+
end
|
8
|
+
|
9
|
+
def method_missing(name, *args, &block)
|
10
|
+
if @attributes.key?(name.to_s)
|
11
|
+
@attributes[name.to_s]
|
12
|
+
else
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def stringify_keys(hash)
|
20
|
+
Hash[hash.map { |k, v| [k.to_s, v] }]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Manage Card accounts
|
3
|
+
class CardAccount < Account
|
4
|
+
# Get the user the card account belongs to.
|
5
|
+
#
|
6
|
+
# @see http://docs.promisepay.com/v2.2/docs/card_accountsidusers
|
7
|
+
#
|
8
|
+
# @return [Promisepay::User]
|
9
|
+
def user
|
10
|
+
response = JSON.parse(@client.get("card_accounts/#{send(:id)}/users").body)
|
11
|
+
Promisepay::User.new(@client, response['users'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Deletes a card account for a user on a marketplace.
|
15
|
+
# Sets the account to in-active.
|
16
|
+
#
|
17
|
+
# @see http://docs.promisepay.com/v2.2/docs/card_accountsid
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def deactivate
|
21
|
+
@client.delete("card_accounts/#{id}")
|
22
|
+
@attributes['active'] = false
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,197 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Manage Items
|
3
|
+
class Item < BaseModel
|
4
|
+
# Update the attributes of an item.
|
5
|
+
#
|
6
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsiduseraction
|
7
|
+
#
|
8
|
+
# @param attributes [Hash] Item's attributes to be updated.
|
9
|
+
#
|
10
|
+
# @return [self]
|
11
|
+
def update(attributes)
|
12
|
+
response = JSON.parse(@client.patch("items/#{send(:id)}", attributes).body)
|
13
|
+
@attributes = response['items']
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
# Show the item status for a marketplace.
|
18
|
+
#
|
19
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidstatus
|
20
|
+
#
|
21
|
+
# @return [Hash]
|
22
|
+
def status
|
23
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/status").body)
|
24
|
+
response['items']
|
25
|
+
end
|
26
|
+
|
27
|
+
# Show the buyer detail for a single item for a marketplace.
|
28
|
+
#
|
29
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidbuyers
|
30
|
+
#
|
31
|
+
# @return [Promisepay::User]
|
32
|
+
def buyer
|
33
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/buyers").body)
|
34
|
+
Promisepay::User.new(@client, response['users'])
|
35
|
+
end
|
36
|
+
|
37
|
+
# Show the seller detail for a single item for a marketplace.
|
38
|
+
#
|
39
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidbuyers
|
40
|
+
#
|
41
|
+
# @return [Promisepay::User]
|
42
|
+
def seller
|
43
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/sellers").body)
|
44
|
+
Promisepay::User.new(@client, response['users'])
|
45
|
+
end
|
46
|
+
|
47
|
+
# Get fees associated to the item.
|
48
|
+
#
|
49
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidfees
|
50
|
+
#
|
51
|
+
# @param options [Hash] Optional options.
|
52
|
+
# @option options [Integer] :limit Can ask for up to 200 fees. default: 10
|
53
|
+
# @option options [Integer] :offset Pagination help. default: 0
|
54
|
+
#
|
55
|
+
# @return [Array<Promisepay::Fee>]
|
56
|
+
def fees(options = {})
|
57
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/fees", options).body)
|
58
|
+
fees = response.key?('fees') ? response['fees'] : []
|
59
|
+
fees.map { |attributes| Promisepay::Fee.new(@client, attributes) }
|
60
|
+
end
|
61
|
+
|
62
|
+
# Get historical transaction for the item.
|
63
|
+
#
|
64
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidtransactions
|
65
|
+
#
|
66
|
+
# @param options [Hash] Optional options.
|
67
|
+
# @option options [Integer] :limit Can ask for up to 200 transactions. default: 10
|
68
|
+
# @option options [Integer] :offset Pagination help. default: 0
|
69
|
+
#
|
70
|
+
# @return [Array<Promisepay::Transaction>]
|
71
|
+
def transactions(options = {})
|
72
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/transactions", options).body)
|
73
|
+
transactions = response.key?('transactions') ? response['transactions'] : []
|
74
|
+
transactions.map { |attributes| Promisepay::Transaction.new(@client, attributes) }
|
75
|
+
end
|
76
|
+
|
77
|
+
# Show the wire details for payment.
|
78
|
+
#
|
79
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidwire_details
|
80
|
+
#
|
81
|
+
# @return [Hash]
|
82
|
+
def wire_details
|
83
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/wire_details").body)
|
84
|
+
response['items']['wire_details']
|
85
|
+
end
|
86
|
+
|
87
|
+
# Show the bpay details details for payment.
|
88
|
+
#
|
89
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidbpay_details
|
90
|
+
#
|
91
|
+
# @return [Hash]
|
92
|
+
def bpay_details
|
93
|
+
response = JSON.parse(@client.get("items/#{send(:id)}/bpay_details").body)
|
94
|
+
response['items']['bpay_details']
|
95
|
+
end
|
96
|
+
|
97
|
+
# .
|
98
|
+
#
|
99
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidaction
|
100
|
+
#
|
101
|
+
# @return [Boolean]
|
102
|
+
def make_payment(options = {})
|
103
|
+
@client.patch("items/#{send(:id)}/make_payment", options).body
|
104
|
+
true
|
105
|
+
end
|
106
|
+
|
107
|
+
# .
|
108
|
+
#
|
109
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrequest_payment
|
110
|
+
#
|
111
|
+
# @return [Boolean]
|
112
|
+
def request_payment(options = {})
|
113
|
+
@client.patch("items/#{send(:id)}/request_payment", options).body
|
114
|
+
true
|
115
|
+
end
|
116
|
+
|
117
|
+
# .
|
118
|
+
#
|
119
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrequest_payment
|
120
|
+
#
|
121
|
+
# @return [Boolean]
|
122
|
+
def release_payment(options = {})
|
123
|
+
@client.patch("items/#{send(:id)}/release_payment", options).body
|
124
|
+
true
|
125
|
+
end
|
126
|
+
|
127
|
+
# .
|
128
|
+
#
|
129
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrequest_release
|
130
|
+
#
|
131
|
+
# @return [Boolean]
|
132
|
+
def request_release(options = {})
|
133
|
+
@client.patch("items/#{send(:id)}/request_release", options).body
|
134
|
+
true
|
135
|
+
end
|
136
|
+
|
137
|
+
# .
|
138
|
+
#
|
139
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidacknowledge_wire
|
140
|
+
#
|
141
|
+
# @return [Boolean]
|
142
|
+
def acknowledge_wire(options = {})
|
143
|
+
@client.patch("items/#{send(:id)}/acknowledge_wire", options).body
|
144
|
+
true
|
145
|
+
end
|
146
|
+
|
147
|
+
# .
|
148
|
+
#
|
149
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidacknowledge_paypal
|
150
|
+
#
|
151
|
+
# @return [Boolean]
|
152
|
+
def acknowledge_paypal(options = {})
|
153
|
+
@client.patch("items/#{send(:id)}/acknowledge_paypal", options).body
|
154
|
+
true
|
155
|
+
end
|
156
|
+
|
157
|
+
# .
|
158
|
+
#
|
159
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrevert_wire
|
160
|
+
#
|
161
|
+
# @return [Boolean]
|
162
|
+
def revert_wire(options = {})
|
163
|
+
@client.patch("items/#{send(:id)}/revert_wire", options).body
|
164
|
+
true
|
165
|
+
end
|
166
|
+
|
167
|
+
# .
|
168
|
+
#
|
169
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrequest_refund
|
170
|
+
#
|
171
|
+
# @return [Boolean]
|
172
|
+
def request_refund(options = {})
|
173
|
+
@client.patch("items/#{send(:id)}/request_refund", options).body
|
174
|
+
true
|
175
|
+
end
|
176
|
+
|
177
|
+
# .
|
178
|
+
#
|
179
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidrefund
|
180
|
+
#
|
181
|
+
# @return [Boolean]
|
182
|
+
def refund(options = {})
|
183
|
+
@client.patch("items/#{send(:id)}/refund", options).body
|
184
|
+
true
|
185
|
+
end
|
186
|
+
|
187
|
+
# .
|
188
|
+
#
|
189
|
+
# @see http://docs.promisepay.com/v2.2/docs/itemsidcancel
|
190
|
+
#
|
191
|
+
# @return [Boolean]
|
192
|
+
def cancel
|
193
|
+
@client.patch("items/#{id}/cancel")
|
194
|
+
true
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Manage Paypal accounts
|
3
|
+
class PaypalAccount < Account
|
4
|
+
# Get the user the paypal account belongs to.
|
5
|
+
#
|
6
|
+
# @see http://docs.promisepay.com/v2.2/docs/paypal_accountsidusers
|
7
|
+
#
|
8
|
+
# @return [Promisepay::User]
|
9
|
+
def user
|
10
|
+
response = JSON.parse(@client.get("paypal_accounts/#{send(:id)}/users").body)
|
11
|
+
Promisepay::User.new(@client, response['users'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Deletes a Paypal account for a user on a marketplace.
|
15
|
+
# Sets the account to in-active.
|
16
|
+
#
|
17
|
+
# @see http://docs.promisepay.com/v2.2/docs/paypal_accountsid
|
18
|
+
#
|
19
|
+
# @return [Boolean]
|
20
|
+
def deactivate
|
21
|
+
@client.delete("paypal_accounts/#{id}")
|
22
|
+
@attributes['active'] = false
|
23
|
+
true
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Promisepay
|
2
|
+
# Manage Transactions
|
3
|
+
class Transaction < Account
|
4
|
+
# .
|
5
|
+
#
|
6
|
+
# @see https://test.api.promisepay.com/transactions/:id/users
|
7
|
+
#
|
8
|
+
# @return [Promisepay::User]
|
9
|
+
def user
|
10
|
+
response = JSON.parse(@client.get("transactions/#{send(:id)}/users").body)
|
11
|
+
response.key?('users') ? Promisepay::User.new(@client, response['users']) : nil
|
12
|
+
end
|
13
|
+
|
14
|
+
# Gets a transactions fee details if applicable.
|
15
|
+
#
|
16
|
+
# @see http://docs.promisepay.com/v2.2/docs/transactionsidfees
|
17
|
+
#
|
18
|
+
# @return [Promisepay::Fee]
|
19
|
+
def fee
|
20
|
+
response = JSON.parse(@client.get("transactions/#{send(:id)}/fees").body)
|
21
|
+
response.key?('fees') ? Promisepay::Fee.new(@client, response['fees']) : nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
|
2
|
+
module Promisepay
|
3
|
+
# Manage Users
|
4
|
+
class User < BaseModel
|
5
|
+
# Lists items for a user on a marketplace.
|
6
|
+
#
|
7
|
+
# @see http://docs.promisepay.com/v2.2/docs/usersiditems
|
8
|
+
#
|
9
|
+
# @return [Array<Promisepay::Item>]
|
10
|
+
def items
|
11
|
+
response = JSON.parse(@client.get("users/#{send(:id)}/items").body)
|
12
|
+
users = response.key?('items') ? response['items'] : []
|
13
|
+
users.map { |attributes| Promisepay::Item.new(@client, attributes) }
|
14
|
+
end
|
15
|
+
|
16
|
+
# Gets Bank account for a user on a marketplace.
|
17
|
+
#
|
18
|
+
# @see http://docs.promisepay.com/v2.2/docs/usersidbank_accounts
|
19
|
+
#
|
20
|
+
# @return [Promisepay::BankAccount]
|
21
|
+
def bank_account
|
22
|
+
response = JSON.parse(@client.get("users/#{send(:id)}/bank_accounts").body)
|
23
|
+
Promisepay::BankAccount.new(@client, response['bank_accounts'])
|
24
|
+
rescue Promisepay::UnprocessableEntity
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
# Gets Card account for a user on a marketplace.
|
29
|
+
#
|
30
|
+
# @see http://docs.promisepay.com/v2.2/docs/usersidcard_accounts
|
31
|
+
#
|
32
|
+
# @return [Promisepay::CardAccount]
|
33
|
+
def card_account
|
34
|
+
response = JSON.parse(@client.get("users/#{send(:id)}/card_accounts").body)
|
35
|
+
Promisepay::CardAccount.new(@client, response['card_accounts'])
|
36
|
+
rescue Promisepay::UnprocessableEntity
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
# Gets PayPal account for a user on a marketplace.
|
41
|
+
#
|
42
|
+
# @see http://docs.promisepay.com/v2.2/docs/usersidpaypal_accounts
|
43
|
+
#
|
44
|
+
# @return [Promisepay::PaypalAccount]
|
45
|
+
def paypal_account
|
46
|
+
response = JSON.parse(@client.get("users/#{send(:id)}/paypal_accounts").body)
|
47
|
+
Promisepay::PaypalAccount.new(@client, response['paypal_accounts'])
|
48
|
+
rescue Promisepay::UnprocessableEntity
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# Set the disbursement account for a user.
|
53
|
+
#
|
54
|
+
# @see http://docs.promisepay.com/v2.2/docs/usersiddisbursement_account
|
55
|
+
#
|
56
|
+
# @return [Boolean]
|
57
|
+
def disbursement_account(account_id)
|
58
|
+
options = { account_id: account_id }
|
59
|
+
JSON.parse(@client.post("users/#{send(:id)}/disbursement_account", options).body)
|
60
|
+
true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|