pr-pin 0.2.0 → 0.3.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 +1 -1
- data/lib/pr/pin.rb +2 -1
- 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/repositories.rb +1 -0
- data/lib/pr/pin/repositories/charges.rb +8 -0
- data/lib/pr/pin/repositories/concerns/common.rb +6 -6
- data/lib/pr/pin/version.rb +1 -1
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 915ba4a1b62cee7806b8e50335d40bc7b5ae6ad5f3feb54147eef6112d3a46a2
|
4
|
+
data.tar.gz: cb6e578f737a1102a284e9f6cb18bc2be0ec119c9dcad5287506529a413c0a11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b4e1ca34d765ae2d152e58c37495940a00335cbd4b18dea237e9a0c9a310497733a2604d98d9b0bc65a530862dcb4a88b5f1fdf0f9e805227b5f7e12c484c25
|
7
|
+
data.tar.gz: 1d415283974aecc4a07cce0b69c5757c359dab4665a091b5a6bad9a3507897c0c36e3a282ca705c300b212dd95c0a8d0a92a1837282331db13362aa2b686ed53
|
data/README.md
CHANGED
@@ -114,7 +114,7 @@ Coverage of https://pinpayments.com/developers/api-reference
|
|
114
114
|
| Charges | POST /charges | Creates a new charge | [:link:](https://pinpayments.com/developers/api-reference/charges#post-charges) | :heavy_check_mark: |
|
115
115
|
| Charges | PUT /charges/charge-token/capture | Captures a previously authorised charge | [:link:](https://pinpayments.com/developers/api-reference/charges#put-charges) | :x: |
|
116
116
|
| 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) | :
|
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) | :heavy_check_mark: |
|
118
118
|
| Charges | GET /charges/charge-token | Returns the details of a charge | [:link:](https://pinpayments.com/developers/api-reference/charges#get-charge) | :x: |
|
119
119
|
| Customers | POST /customers | Creates a new customer | [:link:](https://pinpayments.com/developers/api-reference/customers#post-customers) | :heavy_check_mark: |
|
120
120
|
| Customers | GET /customers | Returns a paginated list of all customers | [:link:](https://pinpayments.com/developers/api-reference/customers#get-customers) | :heavy_check_mark: |
|
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 }
|
@@ -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
|
data/lib/pr/pin/repositories.rb
CHANGED
@@ -3,6 +3,14 @@ module PR
|
|
3
3
|
module Repositories
|
4
4
|
class Charges < ROM::Repository[:charges]
|
5
5
|
include Concerns::Common
|
6
|
+
|
7
|
+
def search(**params)
|
8
|
+
relation = root.append_path('search').with_params(params)
|
9
|
+
|
10
|
+
API::PaginatedResult.wrap(relation) do
|
11
|
+
relation.paginate
|
12
|
+
end
|
13
|
+
end
|
6
14
|
end
|
7
15
|
end
|
8
16
|
end
|
@@ -14,12 +14,12 @@ module PR
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def list(page: 1, per_page: nil)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
relation = root.with_params(
|
18
|
+
page: page,
|
19
|
+
per_page: per_page
|
20
|
+
)
|
21
|
+
|
22
|
+
API::PaginatedResult.wrap(relation) { relation.paginate }
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
data/lib/pr/pin/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pr-pin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.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-02-25 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
|
@@ -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
|
@@ -172,6 +186,7 @@ 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
|
@@ -210,7 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
210
225
|
- !ruby/object:Gem::Version
|
211
226
|
version: '0'
|
212
227
|
requirements: []
|
213
|
-
rubygems_version: 3.
|
228
|
+
rubygems_version: 3.1.2
|
214
229
|
signing_key:
|
215
230
|
specification_version: 4
|
216
231
|
summary: Pin Payments API wrapper inplemented using rom-rb HTTP adapter.
|