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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e52cacf6c475aff3f5bce1ae540a40311d62907bb7384b797a63daa8e064434d
4
- data.tar.gz: 8f45f062ed9148fb0a8c3e85b6d8ce3b3176193404b2479d4fc3404421457b48
3
+ metadata.gz: acab6275b496fc2676179e808b656594b3ef1974b5b6ddf4992f9cf0da1f1ba3
4
+ data.tar.gz: ca330a57e17884ee194a10db7bc60b7d08ae0b9307c5f2a3dc93b718c948ca9e
5
5
  SHA512:
6
- metadata.gz: 7647fc611ae51dd161fa406344f7fed7dca217aba9779e01ef06287f556a1f9ac2a29a5163183bd8dd8421c471ee06f123e1fe3121b8aec3b49061e8b88c72a2
7
- data.tar.gz: b6a18bd913ec606128be3a7db21dddc3a42d62bd4cc24cfaec6a2158670811bb4d27eb2955353ea09b026a64f7e0afe04a64eb1243825cc77446d1a597571bee
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) | :x: |
118
- | Charges | GET /charges/charge-token | Returns the details of a charge | [:link:](https://pinpayments.com/developers/api-reference/charges#get-charge) | :x: |
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) | :x: |
122
- | Customers | PUT /customers/customer-token | Updates the details of a customer | [:link:](https://pinpayments.com/developers/api-reference/customers#put-customer) | :x: |
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) | :x: |
134
- | Plans | PUT /plans/plan-token | Update the specified plan | [:link:](https://pinpayments.com/developers/api-reference/plans#put-plan) | :x: |
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) | :x: |
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) | :x: |
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) | :x: |
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) | :x: |
151
- | Refunds | GET /refunds/refund-token | Returns the details of the specified refund | [:link:](https://pinpayments.com/developers/api-reference/refunds#get-refund) | :x: |
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) | :x: |
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) | :x: |
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: |
@@ -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
- Concurrent::Hash.new
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
- class << self
7
- def client(host, port)
8
- clients["#{host}:#{port}"] ||= Net::HTTP.new(
9
- host,
10
- port
11
- ).tap do |client|
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
- def call(dataset)
18
- uri = dataset.uri
18
+ request_class = Net::HTTP.const_get(
19
+ PR::Pin::Inflector.classify(dataset.request_method)
20
+ )
19
21
 
20
- request_class = Net::HTTP.const_get(
21
- PR::Pin::Inflector.classify(dataset.request_method)
22
- )
22
+ request = request_class.new(uri.request_uri)
23
+ request.basic_auth(dataset.secret_key, '')
23
24
 
24
- request = request_class.new(uri.request_uri)
25
- request.basic_auth(dataset.secret_key, '')
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
- private
29
+ request.body = dataset.params.to_json if dataset.params.any?
37
30
 
38
- def clients
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 self.call(response, dataset)
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
@@ -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
@@ -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
- include Concerns::Common
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
- include Concerns::Common
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
- include Concerns::Common
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
- include Concerns::Common
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
@@ -1,5 +1,5 @@
1
1
  module PR
2
2
  module Pin
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.7.0'.freeze
4
4
  end
5
5
  end
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.2.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: 2019-11-20 00:00:00.000000000 Z
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: '1.17'
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: '1.17'
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: '10.0'
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: '10.0'
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: '3.0'
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: '3.0'
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.1.2
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.1.2
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.0.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