pr-pin 0.2.0 → 0.7.0
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 +4 -4
- data/README.md +46 -13
- data/lib/pr/pin.rb +10 -1
- data/lib/pr/pin/adapter/commands.rb +3 -0
- data/lib/pr/pin/adapter/dataset.rb +2 -2
- data/lib/pr/pin/adapter/handlers/json_request.rb +16 -25
- data/lib/pr/pin/adapter/handlers/json_response.rb +2 -1
- data/lib/pr/pin/api/paginated_result.rb +39 -0
- data/lib/pr/pin/api/result.rb +9 -1
- data/lib/pr/pin/relations/charges.rb +2 -2
- data/lib/pr/pin/relations/customers.rb +5 -0
- data/lib/pr/pin/relations/ledger.rb +19 -0
- data/lib/pr/pin/relations/refunds.rb +22 -0
- data/lib/pr/pin/relations/subscriptions.rb +1 -1
- data/lib/pr/pin/repositories.rb +3 -1
- data/lib/pr/pin/repositories/charges.rb +30 -1
- data/lib/pr/pin/repositories/customers.rb +28 -1
- data/lib/pr/pin/repositories/ledger.rb +18 -0
- data/lib/pr/pin/repositories/plans.rb +28 -1
- data/lib/pr/pin/repositories/refunds.rb +41 -0
- data/lib/pr/pin/repositories/subscriptions.rb +28 -1
- data/lib/pr/pin/version.rb +1 -1
- metadata +40 -22
- data/lib/pr/pin/repositories/concerns/common.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: acab6275b496fc2676179e808b656594b3ef1974b5b6ddf4992f9cf0da1f1ba3
|
4
|
+
data.tar.gz: ca330a57e17884ee194a10db7bc60b7d08ae0b9307c5f2a3dc93b718c948ca9e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c7d7c6fd2d8344fb4fa2b9af38bfd6ffe0988daccdd8815f0e600f573af763b92ade467ec1adbfa77d03670d7d6bfebfd9392dd13ea4db72bd7737726f45718
|
7
|
+
data.tar.gz: 1c2dd8440d8cd94848bcac71a0caf45e8c6179dd579af54967afd93a154b1ab1b88fc96c1f89e0eec08f7e8622d9b05d667908a297481fa9055a80228eb28356
|
data/README.md
CHANGED
@@ -66,6 +66,10 @@ charge = PR::Pin.charges.create(
|
|
66
66
|
charge.success? # => true
|
67
67
|
charge.error? # => false
|
68
68
|
charge # => #<PR::Pin::Struct::Charge>
|
69
|
+
|
70
|
+
# Find a charge by token
|
71
|
+
PR::Pin.charges.find('ch_1ee2d1')
|
72
|
+
# => #<PR::Pin::Struct::Charge>
|
69
73
|
```
|
70
74
|
|
71
75
|
### Recurring payments
|
@@ -88,6 +92,35 @@ subscription = PR::Pin.subscriptions.create(
|
|
88
92
|
subscription.success? # => true
|
89
93
|
subscription.error? # => false
|
90
94
|
subscription # => #<PR::Pin::Struct::Subscription>
|
95
|
+
|
96
|
+
ledger = PR::Pin.ledger.for_subscription('sub_293857')
|
97
|
+
subscription.success? # => true
|
98
|
+
subscription.error? # => false
|
99
|
+
ledger
|
100
|
+
# => [
|
101
|
+
# #<PR::Pin::Struct::Ledger type="credit" annotation="charge_credit" amount=1026 currency="AUD" created_at=#<DateTime: 2020-07-02T02:19:50+00:00 ((2459033j,8390s,0n),+0s,2299161j)>>,
|
102
|
+
# #<PR::Pin::Struct::Ledger type="debit" annotation="interval_fee" amount=1026 currency="AUD" created_at=#<DateTime: 2020-07-02T02:19:47+00:00 ((2459033j,8387s,0n),+0s,2299161j)>>,
|
103
|
+
# #<PR::Pin::Struct::Ledger type="debit" annotation="setup_fee" amount=0 currency="AUD" created_at=#<DateTime: 2020-07-02T02:19:47+00:00 ((2459033j,8387s,0n),+0s,2299161j)>>
|
104
|
+
# ]
|
105
|
+
```
|
106
|
+
|
107
|
+
### Refunds
|
108
|
+
```ruby
|
109
|
+
# List refunds (paginated)
|
110
|
+
refunds = PR::Pin.refunds.list
|
111
|
+
# => [#<PR::Pin::Struct::Refund>, ...]
|
112
|
+
|
113
|
+
# Find a specific refund
|
114
|
+
refund = PR::Pin.refunds.find('rf_1e5429')
|
115
|
+
# => #<PR::Pin::Struct::Refund>
|
116
|
+
|
117
|
+
# Create a refund for a charge
|
118
|
+
PR::Pin.refunds.create_for_charge('ch_1ee2d1')
|
119
|
+
# => #<PR::Pin::Struct::Refund>
|
120
|
+
|
121
|
+
# List all refunds by charge
|
122
|
+
PR::Pin.refunds.for_charge('ch_1ee2d1')
|
123
|
+
# => [#<PR::Pin::Struct::Refund>, ...]
|
91
124
|
```
|
92
125
|
|
93
126
|
### Errors - See [PR::Pin::API::Error](https://github.com/PetRescue/pr-pin/blob/master/lib/pr/pin/api/error.rb)
|
@@ -114,12 +147,12 @@ Coverage of https://pinpayments.com/developers/api-reference
|
|
114
147
|
| Charges | POST /charges | Creates a new charge | [:link:](https://pinpayments.com/developers/api-reference/charges#post-charges) | :heavy_check_mark: |
|
115
148
|
| Charges | PUT /charges/charge-token/capture | Captures a previously authorised charge | [:link:](https://pinpayments.com/developers/api-reference/charges#put-charges) | :x: |
|
116
149
|
| Charges | GET /charges | Returns a paginated list of all charges | [:link:](https://pinpayments.com/developers/api-reference/charges#get-charges) | :heavy_check_mark: |
|
117
|
-
| Charges | GET /charges/search | Returns a paginated list of charges matching the search criteria | [:link:](https://pinpayments.com/developers/api-reference/charges#search-charges) | :
|
118
|
-
| Charges | GET /charges/charge-token | Returns the details of a charge | [:link:](https://pinpayments.com/developers/api-reference/charges#get-charge) | :
|
150
|
+
| Charges | GET /charges/search | Returns a paginated list of charges matching the search criteria | [:link:](https://pinpayments.com/developers/api-reference/charges#search-charges) | :heavy_check_mark: |
|
151
|
+
| Charges | GET /charges/charge-token | Returns the details of a charge | [:link:](https://pinpayments.com/developers/api-reference/charges#get-charge) | :heavy_check_mark: |
|
119
152
|
| Customers | POST /customers | Creates a new customer | [:link:](https://pinpayments.com/developers/api-reference/customers#post-customers) | :heavy_check_mark: |
|
120
153
|
| Customers | GET /customers | Returns a paginated list of all customers | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customers) | :heavy_check_mark: |
|
121
|
-
| Customers | GET /customers/customer-token | Returns the details of a customer | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customer) | :
|
122
|
-
| Customers | PUT /customers/customer-token | Updates the details of a customer | [:link:](https://pinpayments.com/developers/api-reference/customers#put-customer) | :
|
154
|
+
| Customers | GET /customers/customer-token | Returns the details of a customer | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customer) | :heavy_check_mark: |
|
155
|
+
| Customers | PUT /customers/customer-token | Updates the details of a customer | [:link:](https://pinpayments.com/developers/api-reference/customers#put-customer) | :heavy_check_mark: |
|
123
156
|
| Customers | DELETE /customers/customer-token | Deletes a customer and all of its cards | [:link:](https://pinpayments.com/developers/api-reference/customers#delete-customer) | :x: |
|
124
157
|
| Customers | GET /customers/customer-token/charges | Returns a paginated list of a customer's charges | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customers-charges) | :x: |
|
125
158
|
| Customers | GET /customers/customer-token/cards | Returns a paginated list of a customer's cards | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customers-cards) | :x: |
|
@@ -130,27 +163,27 @@ Coverage of https://pinpayments.com/developers/api-reference
|
|
130
163
|
| Events | GET /events/event-token | Returns the details of the specified event | [:link:](https://pinpayments.com/developers/api-reference/events#get-event) | :x: |
|
131
164
|
| Plans | POST /plans | Creates a new plan | [:link:](https://pinpayments.com/developers/api-reference/plans#post-plans) | :heavy_check_mark: |
|
132
165
|
| Plans | GET /plans | Returns a paginated list of all plans | [:link:](https://pinpayments.com/developers/api-reference/plans#get-plans) | :heavy_check_mark: |
|
133
|
-
| Plans | GET /plans/plan-token | Returns the details of a specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#get-plan) | :
|
134
|
-
| Plans | PUT /plans/plan-token | Update the specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#put-plan) | :
|
166
|
+
| Plans | GET /plans/plan-token | Returns the details of a specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#get-plan) | :heavy_check_mark: |
|
167
|
+
| Plans | PUT /plans/plan-token | Update the specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#put-plan) | :heavy_check_mark: |
|
135
168
|
| Plans | DELETE /plans/plan-token | Deletes a plan and all of its subscriptions | [:link:](https://pinpayments.com/developers/api-reference/plans#delete-plan) | :x: |
|
136
169
|
| Plans | POST /plans/plan-token/subscriptions | Creates a new subscription to the specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#create-plan-subscription) | :x: |
|
137
170
|
| Plans | GET /plans/plan-token/subscriptions | Returns a paginated list of subscriptions for a plan | [:link:](https://pinpayments.com/developers/api-reference/plans#get-plan-subscriptions) | :x: |
|
138
171
|
| Subscriptions | POST /subscriptions | Activate a new subscription and returns its details | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#post-subscriptions) | :heavy_check_mark: |
|
139
172
|
| Subscriptions | GET /subscriptions | Returns a paginated list of all subscriptions | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#get-subscriptions) | :heavy_check_mark: |
|
140
|
-
| Subscriptions | GET /subscriptions/sub-token | Returns the details of the subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#get-subscription) | :
|
141
|
-
| Subscriptions | PUT /subscriptions/sub-token | Updates the card associated with a subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#update-subscription) | :
|
173
|
+
| Subscriptions | GET /subscriptions/sub-token | Returns the details of the subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#get-subscription) | :heavy_check_mark: |
|
174
|
+
| Subscriptions | PUT /subscriptions/sub-token | Updates the card associated with a subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#update-subscription) | :heavy_check_mark: |
|
142
175
|
| Subscriptions | DELETE /subscriptions/sub-token | Cancels the subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#delete-subscription) | :x: |
|
143
176
|
| Subscriptions | PUT /subscriptions/sub-token/reactivate | Reactivates the subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#reactivate-subscription) | :x: |
|
144
|
-
| Subscriptions | GET /subscriptions/sub-token/ledger | Fetch the ledger entries relating to a subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#ledger-subscription) | :
|
177
|
+
| Subscriptions | GET /subscriptions/sub-token/ledger | Fetch the ledger entries relating to a subscription identified by subscription token | [:link:](https://pinpayments.com/developers/api-reference/subscriptions#ledger-subscription) | :heavy_check_mark: |
|
145
178
|
| Recipients | POST /recipients | Creates a new recipient | [:link:](https://pinpayments.com/developers/api-reference/recipients#post-recipients) | :x: |
|
146
179
|
| Recipients | GET /recipients | Returns a paginated list of all recipients | [:link:](https://pinpayments.com/developers/api-reference/recipients#get-recipients) | :x: |
|
147
180
|
| Recipients | GET /recipients/recipient-token | Returns the details of a recipient | [:link:](https://pinpayments.com/developers/api-reference/recipients#get-recipient) | :x: |
|
148
181
|
| Recipients | PUT /recipients/recipient-token | Updates the details of a recipient | [:link:](https://pinpayments.com/developers/api-reference/recipients#put-recipient) | :x: |
|
149
182
|
| Recipients | GET /recipients/recipient-token/transfers | Returns a paginated list of a recipient's transfers | [:link:](https://pinpayments.com/developers/api-reference/recipients#get-recipients-transfers) | :x: |
|
150
|
-
| Refunds | GET /refunds | Returns a paginated list of all refunds | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-refunds) | :
|
151
|
-
| Refunds | GET /refunds/refund-token | Returns the details of the specified refund | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-refund) | :
|
152
|
-
| Refunds | POST /charges/charge-token/refunds | Creates a new refund and returns its details | [:link:](https://pinpayments.com/developers/api-reference/refunds#post-refunds) | :
|
153
|
-
| Refunds | GET /charges/charge-token/refunds | Returns a list of all refunds for the specified charge | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-token-refunds) | :
|
183
|
+
| Refunds | GET /refunds | Returns a paginated list of all refunds | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-refunds) | :heavy_check_mark: |
|
184
|
+
| Refunds | GET /refunds/refund-token | Returns the details of the specified refund | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-refund) | :heavy_check_mark: |
|
185
|
+
| Refunds | POST /charges/charge-token/refunds | Creates a new refund and returns its details | [:link:](https://pinpayments.com/developers/api-reference/refunds#post-refunds) | :heavy_check_mark: |
|
186
|
+
| Refunds | GET /charges/charge-token/refunds | Returns a list of all refunds for the specified charge | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-token-refunds) | :heavy_check_mark: |
|
154
187
|
| Transfers | POST /transfers | Creates a new transfer | [:link:](https://pinpayments.com/developers/api-reference/transfers#post-transfers) | :x: |
|
155
188
|
| Transfers | GET /transfers | Returns a paginated list of all transfers | [:link:](https://pinpayments.com/developers/api-reference/transfers#get-transfers) | :x: |
|
156
189
|
| Transfers | GET /transfers/search | Returns a paginated list of transfers matching the search criteria | [:link:](https://pinpayments.com/developers/api-reference/transfers#search-transfers) | :x: |
|
data/lib/pr/pin.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'concurrent'
|
1
2
|
require 'dry-container'
|
2
3
|
require 'pr/pin/version'
|
3
4
|
require 'pr/pin/adapter'
|
@@ -13,7 +14,7 @@ module PR
|
|
13
14
|
extend Dry::Container::Mixin
|
14
15
|
|
15
16
|
register(:environments, memoize: true) do
|
16
|
-
|
17
|
+
{}
|
17
18
|
end
|
18
19
|
|
19
20
|
register(:default_error_handler) { |error| error }
|
@@ -56,10 +57,18 @@ module PR
|
|
56
57
|
Repositories::Customers.new(environments[identifier])
|
57
58
|
end
|
58
59
|
|
60
|
+
def ledger(identifier = :default)
|
61
|
+
Repositories::Ledger.new(environments[identifier])
|
62
|
+
end
|
63
|
+
|
59
64
|
def plans(identifier = :default)
|
60
65
|
Repositories::Plans.new(environments[identifier])
|
61
66
|
end
|
62
67
|
|
68
|
+
def refunds(identifier = :default)
|
69
|
+
Repositories::Refunds.new(environments[identifier])
|
70
|
+
end
|
71
|
+
|
63
72
|
def subscriptions(identifier = :default)
|
64
73
|
Repositories::Subscriptions.new(environments[identifier])
|
65
74
|
end
|
@@ -4,6 +4,7 @@ module PR
|
|
4
4
|
module Commands
|
5
5
|
class Create < ROM::HTTP::Commands::Create
|
6
6
|
adapter :pr_pin
|
7
|
+
restrictable true
|
7
8
|
|
8
9
|
def execute(*args, &block)
|
9
10
|
relation.new(super.map(&:to_h)).to_a
|
@@ -12,6 +13,7 @@ module PR
|
|
12
13
|
|
13
14
|
class Update < ROM::HTTP::Commands::Update
|
14
15
|
adapter :pr_pin
|
16
|
+
restrictable true
|
15
17
|
|
16
18
|
def execute(*args, &block)
|
17
19
|
relation.new(super.map(&:to_h)).to_a
|
@@ -20,6 +22,7 @@ module PR
|
|
20
22
|
|
21
23
|
class Delete < ROM::HTTP::Commands::Delete
|
22
24
|
adapter :pr_pin
|
25
|
+
restrictable true
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
@@ -2,8 +2,8 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module Adapter
|
4
4
|
class Dataset < ROM::HTTP::Dataset
|
5
|
-
config.default_request_handler = Handlers::JSONRequest
|
6
|
-
config.default_response_handler = Handlers::JSONResponse
|
5
|
+
config.default_request_handler = Handlers::JSONRequest.new
|
6
|
+
config.default_response_handler = Handlers::JSONResponse.new
|
7
7
|
|
8
8
|
option :secret_key, type: ROM::Types::Strict::String
|
9
9
|
option :error_handler
|
@@ -3,41 +3,32 @@ module PR
|
|
3
3
|
module Adapter
|
4
4
|
class Handlers
|
5
5
|
class JSONRequest
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
SSL_PORT = 443
|
7
|
+
|
8
|
+
def call(dataset)
|
9
|
+
uri = dataset.uri
|
10
|
+
|
11
|
+
http = Net::HTTP.new(uri.host, uri.port).tap do |client|
|
12
|
+
if SSL_PORT == client.port
|
12
13
|
client.use_ssl = true
|
13
14
|
client.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
14
15
|
end
|
15
16
|
end
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
request_class = Net::HTTP.const_get(
|
19
|
+
PR::Pin::Inflector.classify(dataset.request_method)
|
20
|
+
)
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
)
|
22
|
+
request = request_class.new(uri.request_uri)
|
23
|
+
request.basic_auth(dataset.secret_key, '')
|
23
24
|
|
24
|
-
|
25
|
-
request.
|
26
|
-
|
27
|
-
dataset.headers.each_with_object(request) do |(header, value), request|
|
28
|
-
request[header.to_s] = value
|
29
|
-
end
|
30
|
-
|
31
|
-
request.body = dataset.params.to_json if dataset.params.any?
|
32
|
-
|
33
|
-
client(uri.host, uri.port).request(request)
|
25
|
+
dataset.headers.each_with_object(request) do |(header, value), request|
|
26
|
+
request[header.to_s] = value
|
34
27
|
end
|
35
28
|
|
36
|
-
|
29
|
+
request.body = dataset.params.to_json if dataset.params.any?
|
37
30
|
|
38
|
-
|
39
|
-
@clients ||= Concurrent::Hash.new
|
40
|
-
end
|
31
|
+
http.request(request)
|
41
32
|
end
|
42
33
|
end
|
43
34
|
end
|
@@ -5,11 +5,12 @@ module PR
|
|
5
5
|
class JSONResponse
|
6
6
|
SUCCESS_CODES = %w(200 201).freeze
|
7
7
|
|
8
|
-
def
|
8
|
+
def call(response, dataset)
|
9
9
|
result = JSON.parse(
|
10
10
|
response.body,
|
11
11
|
symbolize_names: true
|
12
12
|
)
|
13
|
+
|
13
14
|
pagination_result = result.fetch(:pagination, false)
|
14
15
|
|
15
16
|
if SUCCESS_CODES.include?(response.code)
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module PR
|
2
|
+
module Pin
|
3
|
+
module API
|
4
|
+
class PaginatedResult < Result
|
5
|
+
def each_page(&_block)
|
6
|
+
return enum_for(:each_page) unless block_given?
|
7
|
+
|
8
|
+
page = self
|
9
|
+
|
10
|
+
loop do
|
11
|
+
yield(page)
|
12
|
+
|
13
|
+
break unless page.next_page
|
14
|
+
|
15
|
+
relation = __relation__.add_params(page: page.next_page)
|
16
|
+
page = self.class.wrap(relation) { relation.paginate }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def pages
|
21
|
+
page = self
|
22
|
+
|
23
|
+
return [page] unless page.next_page
|
24
|
+
|
25
|
+
to_fetch = page.next_page..page.total_pages
|
26
|
+
|
27
|
+
remaining_pages = to_fetch.map do |page_num|
|
28
|
+
Concurrent::Promises.future do
|
29
|
+
relation = __relation__.add_params(page: page_num)
|
30
|
+
self.class.wrap(relation) { relation.paginate }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
[page, *remaining_pages.map(&:value!)]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/pr/pin/api/result.rb
CHANGED
@@ -2,12 +2,20 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module API
|
4
4
|
class Result < SimpleDelegator
|
5
|
+
attr_reader :__relation__
|
6
|
+
private :__relation__
|
7
|
+
|
5
8
|
def self.wrap(relation, &block)
|
6
|
-
new(block.call)
|
9
|
+
new(block.call, relation)
|
7
10
|
rescue PR::Pin::Adapter::ResponseError => error
|
8
11
|
relation.dataset.error_handler.(Error.new(error))
|
9
12
|
end
|
10
13
|
|
14
|
+
def initialize(result, relation)
|
15
|
+
@__relation__ = relation
|
16
|
+
super(result)
|
17
|
+
end
|
18
|
+
|
11
19
|
def success?
|
12
20
|
true
|
13
21
|
end
|
@@ -16,8 +16,8 @@ module PR
|
|
16
16
|
attribute :card, Types::JSON::Hash
|
17
17
|
attribute :transfer, Types::Array.of(Types::JSON::Hash)
|
18
18
|
attribute :amount_refunded, Types::Strict::Integer
|
19
|
-
attribute :total_fees, Types::Strict::Integer
|
20
|
-
attribute :merchant_entitlement, Types::Strict::Integer
|
19
|
+
attribute :total_fees, Types::Strict::Integer.optional
|
20
|
+
attribute :merchant_entitlement, Types::Strict::Integer.optional
|
21
21
|
attribute :refund_pending, Types::Strict::Bool
|
22
22
|
attribute :authorisation_expired, Types::Strict::Bool
|
23
23
|
attribute :captured, Types::Strict::Bool
|
@@ -5,6 +5,11 @@ module PR
|
|
5
5
|
schema(:customers) do
|
6
6
|
attribute :token, Types::Strict::String
|
7
7
|
attribute :email, Types::Strict::String
|
8
|
+
attribute :first_name, Types::Strict::String.optional
|
9
|
+
attribute :last_name, Types::Strict::String.optional
|
10
|
+
attribute :phone_number, Types::Strict::String.optional
|
11
|
+
attribute :company, Types::Strict::String.optional
|
12
|
+
attribute :notes, Types::Strict::String.optional
|
8
13
|
attribute :created_at, Types::JSON::DateTime
|
9
14
|
attribute :card, Types::JSON::Hash
|
10
15
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module PR
|
2
|
+
module Pin
|
3
|
+
module Relations
|
4
|
+
class Ledger < ROM::Relation[:pr_pin]
|
5
|
+
schema(:ledger) do
|
6
|
+
attribute :type, Types::Strict::String
|
7
|
+
attribute :annotation, Types::Strict::String
|
8
|
+
attribute :amount, Types::Strict::Integer
|
9
|
+
attribute :currency, Types::Strict::String
|
10
|
+
attribute :created_at, Types::JSON::DateTime
|
11
|
+
end
|
12
|
+
|
13
|
+
def for_subscription(token)
|
14
|
+
with_base_path("/subscriptions/#{token}/ledger")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module PR
|
2
|
+
module Pin
|
3
|
+
module Relations
|
4
|
+
class Refunds < ROM::Relation[:pr_pin]
|
5
|
+
schema(:refunds) do
|
6
|
+
attribute :token, Types::Strict::String
|
7
|
+
attribute :success, Types::Bool.optional
|
8
|
+
attribute :amount, Types::Strict::Integer
|
9
|
+
attribute :currency, Types::Strict::String
|
10
|
+
attribute :charge, Types::Strict::String
|
11
|
+
attribute :error_message, Types::Strict::String.optional
|
12
|
+
attribute :status_message, Types::Strict::String
|
13
|
+
attribute :created_at, Types::JSON::DateTime
|
14
|
+
end
|
15
|
+
|
16
|
+
def for_charge(token)
|
17
|
+
with_base_path("/charges/#{token}/refunds")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -5,7 +5,7 @@ module PR
|
|
5
5
|
schema(:subscriptions) do
|
6
6
|
attribute :state, Types::Strict::String
|
7
7
|
attribute :next_billing_date, Types::JSON::DateTime
|
8
|
-
attribute :active_interval_started_at, Types::JSON::DateTime
|
8
|
+
attribute :active_interval_started_at, Types::JSON::DateTime.optional
|
9
9
|
attribute :active_interval_finishes_at, Types::JSON::DateTime.optional
|
10
10
|
attribute :cancelled_at, Types::JSON::DateTime.optional
|
11
11
|
attribute :created_at, Types::JSON::DateTime
|
data/lib/pr/pin/repositories.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'rom-repository'
|
2
2
|
require 'pr/pin/api/error'
|
3
3
|
require 'pr/pin/api/result'
|
4
|
+
require 'pr/pin/api/paginated_result'
|
4
5
|
require 'pr/pin/struct'
|
5
|
-
require 'pr/pin/repositories/concerns/common'
|
6
6
|
require 'pr/pin/repositories/charges'
|
7
7
|
require 'pr/pin/repositories/customers'
|
8
|
+
require 'pr/pin/repositories/ledger'
|
8
9
|
require 'pr/pin/repositories/plans'
|
10
|
+
require 'pr/pin/repositories/refunds'
|
9
11
|
require 'pr/pin/repositories/subscriptions'
|
@@ -2,7 +2,36 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module Repositories
|
4
4
|
class Charges < ROM::Repository[:charges]
|
5
|
-
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def create(*args)
|
8
|
+
API::Result.wrap(root) do
|
9
|
+
root.command(:create).call(*args)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def find(token)
|
14
|
+
relation = root.with_path(token)
|
15
|
+
|
16
|
+
API::Result.wrap(relation) { relation.one }
|
17
|
+
end
|
18
|
+
|
19
|
+
def list(page: 1, per_page: nil)
|
20
|
+
relation = root.with_params(
|
21
|
+
page: page,
|
22
|
+
per_page: per_page
|
23
|
+
)
|
24
|
+
|
25
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
26
|
+
end
|
27
|
+
|
28
|
+
def search(**params)
|
29
|
+
relation = root.append_path('search').with_params(params)
|
30
|
+
|
31
|
+
API::PaginatedResult.wrap(relation) do
|
32
|
+
relation.paginate
|
33
|
+
end
|
34
|
+
end
|
6
35
|
end
|
7
36
|
end
|
8
37
|
end
|
@@ -2,7 +2,34 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module Repositories
|
4
4
|
class Customers < ROM::Repository[:customers]
|
5
|
-
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def create(*args)
|
8
|
+
API::Result.wrap(root) do
|
9
|
+
root.command(:create).call(*args)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(token, *args)
|
14
|
+
API::Result.wrap(root) do
|
15
|
+
root.append_path(token).command(:update).call(*args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(token)
|
20
|
+
relation = root.with_path(token)
|
21
|
+
|
22
|
+
API::Result.wrap(relation) { relation.one }
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(page: 1, per_page: nil)
|
26
|
+
relation = root.with_params(
|
27
|
+
page: page,
|
28
|
+
per_page: per_page
|
29
|
+
)
|
30
|
+
|
31
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
32
|
+
end
|
6
33
|
end
|
7
34
|
end
|
8
35
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module PR
|
2
|
+
module Pin
|
3
|
+
module Repositories
|
4
|
+
class Ledger < ROM::Repository[:ledger]
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def for_subscription(token, page: 1, per_page: nil)
|
8
|
+
relation = root.for_subscription(token).with_params(
|
9
|
+
page: page,
|
10
|
+
per_page: per_page
|
11
|
+
)
|
12
|
+
|
13
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -2,7 +2,34 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module Repositories
|
4
4
|
class Plans < ROM::Repository[:plans]
|
5
|
-
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def create(*args)
|
8
|
+
API::Result.wrap(root) do
|
9
|
+
root.command(:create).call(*args)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(token, *args)
|
14
|
+
API::Result.wrap(root) do
|
15
|
+
root.append_path(token).command(:update).call(*args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(token)
|
20
|
+
relation = root.with_path(token)
|
21
|
+
|
22
|
+
API::Result.wrap(relation) { relation.one }
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(page: 1, per_page: nil)
|
26
|
+
relation = root.with_params(
|
27
|
+
page: page,
|
28
|
+
per_page: per_page
|
29
|
+
)
|
30
|
+
|
31
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
32
|
+
end
|
6
33
|
end
|
7
34
|
end
|
8
35
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module PR
|
2
|
+
module Pin
|
3
|
+
module Repositories
|
4
|
+
class Refunds < ROM::Repository[:refunds]
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def list(page: 1, per_page: nil)
|
8
|
+
relation = root.with_params(
|
9
|
+
page: page,
|
10
|
+
per_page: per_page
|
11
|
+
)
|
12
|
+
|
13
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
14
|
+
end
|
15
|
+
|
16
|
+
def find(token)
|
17
|
+
relation = root.with_path(token)
|
18
|
+
|
19
|
+
API::Result.wrap(relation) { relation.one }
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_for_charge(token, *args)
|
23
|
+
relation = root.for_charge(token)
|
24
|
+
|
25
|
+
API::Result.wrap(relation) do
|
26
|
+
relation.command(:create).call(*args)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def for_charge(token, page: 1, per_page: nil)
|
31
|
+
relation = root.for_charge(token).with_params(
|
32
|
+
page: page,
|
33
|
+
per_page: per_page
|
34
|
+
)
|
35
|
+
|
36
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -2,7 +2,34 @@ module PR
|
|
2
2
|
module Pin
|
3
3
|
module Repositories
|
4
4
|
class Subscriptions < ROM::Repository[:subscriptions]
|
5
|
-
|
5
|
+
struct_namespace PR::Pin::Struct
|
6
|
+
|
7
|
+
def create(*args)
|
8
|
+
API::Result.wrap(root) do
|
9
|
+
root.command(:create).call(*args)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def update(token, *args)
|
14
|
+
API::Result.wrap(root) do
|
15
|
+
root.append_path(token).command(:update).call(*args)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def find(token)
|
20
|
+
relation = root.with_path(token)
|
21
|
+
|
22
|
+
API::Result.wrap(relation) { relation.one }
|
23
|
+
end
|
24
|
+
|
25
|
+
def list(page: 1, per_page: nil)
|
26
|
+
relation = root.with_params(
|
27
|
+
page: page,
|
28
|
+
per_page: per_page
|
29
|
+
)
|
30
|
+
|
31
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
32
|
+
end
|
6
33
|
end
|
7
34
|
end
|
8
35
|
end
|
data/lib/pr/pin/version.rb
CHANGED
metadata
CHANGED
@@ -1,57 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pr-pin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AMHOL
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: webmock
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: concurrent-ruby
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: dry-container
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,28 +140,28 @@ dependencies:
|
|
126
140
|
name: rom
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
|
-
- -
|
143
|
+
- - ">="
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: 5.
|
145
|
+
version: 5.0.0
|
132
146
|
type: :runtime
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
|
-
- -
|
150
|
+
- - ">="
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: 5.
|
152
|
+
version: 5.0.0
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rom-http
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- -
|
157
|
+
- - ">="
|
144
158
|
- !ruby/object:Gem::Version
|
145
159
|
version: 0.8.0
|
146
160
|
type: :runtime
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- -
|
164
|
+
- - ">="
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: 0.8.0
|
153
167
|
description: Pin Payments API wrapper inplemented using rom-rb HTTP adapter.
|
@@ -172,18 +186,22 @@ files:
|
|
172
186
|
- lib/pr/pin/adapter/relation.rb
|
173
187
|
- lib/pr/pin/adapter/response.rb
|
174
188
|
- lib/pr/pin/api/error.rb
|
189
|
+
- lib/pr/pin/api/paginated_result.rb
|
175
190
|
- lib/pr/pin/api/result.rb
|
176
191
|
- lib/pr/pin/error.rb
|
177
192
|
- lib/pr/pin/inflector.rb
|
178
193
|
- lib/pr/pin/relations/charges.rb
|
179
194
|
- lib/pr/pin/relations/customers.rb
|
195
|
+
- lib/pr/pin/relations/ledger.rb
|
180
196
|
- lib/pr/pin/relations/plans.rb
|
197
|
+
- lib/pr/pin/relations/refunds.rb
|
181
198
|
- lib/pr/pin/relations/subscriptions.rb
|
182
199
|
- lib/pr/pin/repositories.rb
|
183
200
|
- lib/pr/pin/repositories/charges.rb
|
184
|
-
- lib/pr/pin/repositories/concerns/common.rb
|
185
201
|
- lib/pr/pin/repositories/customers.rb
|
202
|
+
- lib/pr/pin/repositories/ledger.rb
|
186
203
|
- lib/pr/pin/repositories/plans.rb
|
204
|
+
- lib/pr/pin/repositories/refunds.rb
|
187
205
|
- lib/pr/pin/repositories/subscriptions.rb
|
188
206
|
- lib/pr/pin/struct.rb
|
189
207
|
- lib/pr/pin/types.rb
|
@@ -210,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
228
|
- !ruby/object:Gem::Version
|
211
229
|
version: '0'
|
212
230
|
requirements: []
|
213
|
-
rubygems_version: 3.
|
231
|
+
rubygems_version: 3.1.2
|
214
232
|
signing_key:
|
215
233
|
specification_version: 4
|
216
234
|
summary: Pin Payments API wrapper inplemented using rom-rb HTTP adapter.
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module PR
|
2
|
-
module Pin
|
3
|
-
module Repositories
|
4
|
-
module Concerns
|
5
|
-
module Common
|
6
|
-
def self.included(mod)
|
7
|
-
mod.struct_namespace(PR::Pin::Struct)
|
8
|
-
end
|
9
|
-
|
10
|
-
def create(*args)
|
11
|
-
API::Result.wrap(root) do
|
12
|
-
root.command(:create).call(*args)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def list(page: 1, per_page: nil)
|
17
|
-
API::Result.wrap(root) do
|
18
|
-
root.with_params(
|
19
|
-
page: page,
|
20
|
-
per_page: per_page
|
21
|
-
).paginate
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|