coins_paid_api 1.0.7 → 1.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/.gitignore +1 -0
- data/.rubocop.yml +64 -0
- data/coins_paid_api.gemspec +1 -1
- data/lib/coins_paid/api/callback_data.rb +2 -0
- data/lib/coins_paid/api/take_address.rb +6 -1
- data/lib/coins_paid/api/withdrawal.rb +1 -1
- data/lib/coins_paid/api.rb +1 -1
- data/spec/callback_spec.rb +6 -11
- data/spec/currencies_list_spec.rb +3 -2
- data/spec/request_examples.rb +3 -3
- data/spec/spec_helper.rb +7 -0
- data/spec/take_address_spec.rb +49 -23
- data/spec/withdrawal_spec.rb +22 -13
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37ab167accc89938d66af72334820f588f3eb25c27394b648ddac3b98ab90ef1
|
4
|
+
data.tar.gz: 0efb54ff9fb942ad1c689ed350a5d8bef491f963181dba8918b6240cf1259a85
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df5a0d70589d54e6fc919da11bbdf37bcf1ca8ec4df40a80f2f14d424c0e2c56a73169fe6bf23a9bd142a0f1e7160ad5ada5b455292441722e2a455107c0f925
|
7
|
+
data.tar.gz: 0b0a112f21a5d88455af67b2be4aeefc0e45a7d125c1d341cafd3f4b1785d486864a6bdf73b19ee57c2600713ffbf2e1cddd3144e1108e6632babcdad416e58c
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
- rubocop-rails
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 2.7
|
6
|
+
NewCops: enable
|
7
|
+
SuggestExtensions: false
|
8
|
+
|
9
|
+
Naming/MethodParameterName:
|
10
|
+
MinNameLength: 1
|
11
|
+
Naming/VariableNumber:
|
12
|
+
Enabled: false
|
13
|
+
|
14
|
+
Lint/MissingCopEnableDirective:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Layout/EmptyLineAfterMagicComment:
|
18
|
+
Enabled: false
|
19
|
+
Layout/LineLength:
|
20
|
+
Max: 120
|
21
|
+
Layout/MultilineOperationIndentation:
|
22
|
+
Enabled: false
|
23
|
+
Layout/MultilineMethodCallIndentation:
|
24
|
+
EnforcedStyle: indented_relative_to_receiver
|
25
|
+
|
26
|
+
Style/AsciiComments:
|
27
|
+
Enabled: false
|
28
|
+
Style/ClassAndModuleChildren:
|
29
|
+
Enabled: false
|
30
|
+
Style/Documentation:
|
31
|
+
Enabled: false
|
32
|
+
Style/FormatStringToken:
|
33
|
+
Enabled: false
|
34
|
+
Style/Lambda:
|
35
|
+
Enabled: false
|
36
|
+
Style/LambdaCall:
|
37
|
+
Enabled: false
|
38
|
+
Style/ModuleFunction:
|
39
|
+
Enabled: false
|
40
|
+
Style/PercentLiteralDelimiters:
|
41
|
+
PreferredDelimiters:
|
42
|
+
'%i': '()'
|
43
|
+
'%I': '()'
|
44
|
+
'%r': '{}'
|
45
|
+
'%w': '()'
|
46
|
+
'%W': '()'
|
47
|
+
Style/SignalException:
|
48
|
+
EnforcedStyle: 'only_raise'
|
49
|
+
|
50
|
+
Metrics/AbcSize:
|
51
|
+
Exclude:
|
52
|
+
- 'config/**/*'
|
53
|
+
- 'db/**/*'
|
54
|
+
- 'spec/**/*'
|
55
|
+
Metrics/BlockLength:
|
56
|
+
Exclude:
|
57
|
+
- 'config/**/*'
|
58
|
+
- 'db/**/*'
|
59
|
+
- 'spec/**/*'
|
60
|
+
Metrics/MethodLength:
|
61
|
+
Exclude:
|
62
|
+
- 'config/**/*'
|
63
|
+
- 'db/**/*'
|
64
|
+
- 'spec/**/*'
|
data/coins_paid_api.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'coins_paid_api'
|
3
3
|
s.authors = ['Artem Biserov(artembiserov)', 'Oleg Ivanov(morhekil)']
|
4
|
-
s.version = '1.0
|
4
|
+
s.version = '1.3.0'
|
5
5
|
s.files = `git ls-files`.split("\n")
|
6
6
|
s.summary = 'Coins Paid Integration'
|
7
7
|
s.license = 'MIT'
|
@@ -23,10 +23,12 @@ module CoinsPaid
|
|
23
23
|
end
|
24
24
|
|
25
25
|
attribute? :currency_sent do
|
26
|
+
attribute :currency, Types::String
|
26
27
|
attribute :amount, Types::String
|
27
28
|
end
|
28
29
|
|
29
30
|
attribute? :currency_received do
|
31
|
+
attribute :currency, Types::String
|
30
32
|
attribute :amount, Types::String
|
31
33
|
attribute? :amount_minus_fee, Types::String
|
32
34
|
end
|
@@ -6,7 +6,12 @@ module CoinsPaid
|
|
6
6
|
class Request < Dry::Struct
|
7
7
|
attribute :foreign_id, Types::Coercible::String
|
8
8
|
attribute :currency, Types::String
|
9
|
-
attribute :convert_to, Types::String
|
9
|
+
attribute :convert_to, Types::String.optional
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
convert_value = convert_to != currency ? convert_to : nil
|
13
|
+
super().merge(convert_to: convert_value).compact
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
class Response < Dry::Struct
|
@@ -7,8 +7,8 @@ module CoinsPaid
|
|
7
7
|
attribute :foreign_id, Types::Coercible::String
|
8
8
|
attribute :amount, Types::Coercible::String
|
9
9
|
attribute :currency, Types::String
|
10
|
-
attribute :convert_to, Types::String
|
11
10
|
attribute :address, Types::String
|
11
|
+
attribute? :convert_to, Types::String
|
12
12
|
attribute? :tag, Types::String
|
13
13
|
end
|
14
14
|
|
data/lib/coins_paid/api.rb
CHANGED
@@ -35,7 +35,7 @@ module CoinsPaid
|
|
35
35
|
yield self
|
36
36
|
end
|
37
37
|
|
38
|
-
def take_address(foreign_id:, currency:, convert_to:)
|
38
|
+
def take_address(foreign_id:, currency:, convert_to: nil)
|
39
39
|
Requester.call(
|
40
40
|
TakeAddress,
|
41
41
|
foreign_id: foreign_id, currency: currency, convert_to: convert_to
|
data/spec/callback_spec.rb
CHANGED
@@ -42,11 +42,8 @@ describe CoinsPaid::API, '.callback' do
|
|
42
42
|
{ transaction_type: 'blockchain', type: 'deposit', id: 714576 },
|
43
43
|
{ transaction_type: 'exchange', type: 'exchange', id: 714577 }
|
44
44
|
],
|
45
|
-
currency_sent: { amount: '0.01000000' },
|
46
|
-
currency_received: {
|
47
|
-
amount_minus_fee: '90',
|
48
|
-
amount: '84.17070222'
|
49
|
-
}
|
45
|
+
currency_sent: { currency: 'BTC', amount: '0.01000000' },
|
46
|
+
currency_received: { currency: 'EUR', amount_minus_fee: '90', amount: '84.17070222' }
|
50
47
|
}
|
51
48
|
end
|
52
49
|
|
@@ -91,10 +88,8 @@ describe CoinsPaid::API, '.callback' do
|
|
91
88
|
{ transaction_type: 'exchange', type: 'exchange', id: 1 },
|
92
89
|
{ transaction_type: 'blockchain', type: 'withdrawal', id: 1 }
|
93
90
|
],
|
94
|
-
currency_sent: { amount: '381' },
|
95
|
-
currency_received: {
|
96
|
-
amount: '0.01000000'
|
97
|
-
}
|
91
|
+
currency_sent: { currency: 'EUR', amount: '381' },
|
92
|
+
currency_received: { currency: 'BTC', amount: '0.01000000' }
|
98
93
|
}
|
99
94
|
end
|
100
95
|
|
@@ -132,8 +127,8 @@ describe CoinsPaid::API, '.callback' do
|
|
132
127
|
status: 'confirmed',
|
133
128
|
foreign_id: '',
|
134
129
|
error: '',
|
135
|
-
currency_sent: { amount:
|
136
|
-
currency_received: { amount:
|
130
|
+
currency_sent: { currency: 'ETH', amount: '0.56114000'},
|
131
|
+
currency_received: { currency: 'EUR', amount: '80.21790617'},
|
137
132
|
transactions: [
|
138
133
|
{ transaction_type: 'exchange', type: 'exchange', id: 714576 },
|
139
134
|
]
|
@@ -3,7 +3,8 @@
|
|
3
3
|
require_relative './request_examples'
|
4
4
|
|
5
5
|
describe CoinsPaid::API, '.currencies_list' do
|
6
|
-
endpoint
|
6
|
+
let(:endpoint) { 'https://app.coinspaid.com/api/v2/currencies/list' }
|
7
|
+
let(:request_body) { "{}" }
|
7
8
|
include_context 'CoinsPaid API request'
|
8
9
|
|
9
10
|
let(:expected_currencies) do
|
@@ -65,5 +66,5 @@ describe CoinsPaid::API, '.currencies_list' do
|
|
65
66
|
expect(response).to match_array currencies
|
66
67
|
end
|
67
68
|
|
68
|
-
it_behaves_like 'CoinsPaid API error handling'
|
69
|
+
it_behaves_like 'CoinsPaid API error handling'
|
69
70
|
end
|
data/spec/request_examples.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.shared_context 'CoinsPaid API request' do
|
3
|
+
RSpec.shared_context 'CoinsPaid API request' do
|
4
4
|
let(:signature) { 'c01dc0ffee' }
|
5
5
|
let(:request_signature_headers) do
|
6
6
|
{
|
@@ -10,11 +10,11 @@ RSpec.shared_context 'CoinsPaid API request' do |request_data: {}|
|
|
10
10
|
end
|
11
11
|
|
12
12
|
before do
|
13
|
-
allow(CoinsPaid::API::Signature).to receive(:generate).with(
|
13
|
+
allow(CoinsPaid::API::Signature).to receive(:generate).with(request_body).and_return signature
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
RSpec.shared_examples 'CoinsPaid API error handling' do
|
17
|
+
RSpec.shared_examples 'CoinsPaid API error handling' do
|
18
18
|
context 'when coins paid responded with validation errors' do
|
19
19
|
let(:response_data) do
|
20
20
|
{
|
data/spec/spec_helper.rb
CHANGED
@@ -10,3 +10,10 @@ require 'webmock/rspec'
|
|
10
10
|
require 'pry'
|
11
11
|
require 'coins_paid_api'
|
12
12
|
Dir['./spec/support/**/*.rb'].each { |f| require f }
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
config.filter_run focus: true
|
16
|
+
config.alias_example_to :fit, focus: true
|
17
|
+
config.run_all_when_everything_filtered = true
|
18
|
+
config.example_status_persistence_file_path = 'spec/examples.txt'
|
19
|
+
end
|
data/spec/take_address_spec.rb
CHANGED
@@ -3,43 +3,69 @@
|
|
3
3
|
require_relative './request_examples'
|
4
4
|
|
5
5
|
describe CoinsPaid::API, '.take_address' do
|
6
|
-
endpoint
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
let(:expected_address_attributes) do
|
15
|
-
{
|
16
|
-
external_id: 1,
|
17
|
-
address: '12983h13ro1hrt24it432t',
|
18
|
-
tag: '123'
|
19
|
-
}
|
6
|
+
let(:endpoint) { 'https://app.coinspaid.com/api/v2/addresses/take' }
|
7
|
+
|
8
|
+
let(:foreign_id) { 'user-id:2048' }
|
9
|
+
let(:currency) { 'BTC' }
|
10
|
+
|
11
|
+
let(:request_data) do
|
12
|
+
{ foreign_id: foreign_id, currency: currency, convert_to: api_convert_to }.compact
|
20
13
|
end
|
21
|
-
|
14
|
+
let(:request_body) { request_data.to_json }
|
15
|
+
|
16
|
+
include_context 'CoinsPaid API request'
|
22
17
|
|
23
18
|
let(:response_data) do
|
24
19
|
{
|
25
20
|
'data' => {
|
26
21
|
'id' => 1,
|
27
22
|
'currency' => 'BTC',
|
28
|
-
'convert_to' =>
|
23
|
+
'convert_to' => api_convert_to,
|
29
24
|
'address' => '12983h13ro1hrt24it432t',
|
30
25
|
'tag' => 123,
|
31
26
|
'foreign_id' => 'user-id:2048'
|
32
|
-
}
|
27
|
+
}.compact
|
33
28
|
}
|
34
29
|
end
|
35
30
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
31
|
+
let(:args) do
|
32
|
+
{ foreign_id: 'user-id:2048', currency: 'BTC', convert_to: args_convert_to }.compact
|
33
|
+
end
|
34
|
+
subject(:take_address) { described_class.take_address(args) }
|
35
|
+
|
36
|
+
shared_examples 'successful request' do
|
37
|
+
it 'returns valid response' do
|
38
|
+
stub_request(:post, endpoint)
|
39
|
+
.with(body: request_body, headers: request_signature_headers)
|
40
|
+
.to_return(status: 201, body: response_data.to_json)
|
41
|
+
|
42
|
+
expected_address_attributes = {
|
43
|
+
external_id: 1,
|
44
|
+
address: '12983h13ro1hrt24it432t',
|
45
|
+
tag: '123'
|
46
|
+
}
|
47
|
+
expect(take_address).to be_struct_with_params(
|
48
|
+
CoinsPaid::API::TakeAddress::Response, expected_address_attributes
|
49
|
+
)
|
50
|
+
end
|
51
|
+
end
|
40
52
|
|
41
|
-
|
53
|
+
context 'with explicit convert_to not matching address currency' do
|
54
|
+
let(:args_convert_to) { 'EUR' }
|
55
|
+
let(:api_convert_to) { 'EUR' }
|
56
|
+
it_behaves_like 'successful request'
|
57
|
+
it_behaves_like 'CoinsPaid API error handling'
|
42
58
|
end
|
43
59
|
|
44
|
-
|
60
|
+
context 'with explicit convert_to matching address currency' do
|
61
|
+
let(:args_convert_to) { 'BTC' }
|
62
|
+
let(:api_convert_to) { nil }
|
63
|
+
it_behaves_like 'successful request'
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'with nil convert_to' do
|
67
|
+
let(:args_convert_to) { nil }
|
68
|
+
let(:api_convert_to) { nil }
|
69
|
+
it_behaves_like 'successful request'
|
70
|
+
end
|
45
71
|
end
|
data/spec/withdrawal_spec.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
require_relative './request_examples'
|
4
4
|
|
5
|
-
RSpec.shared_examples 'CoinsPaid API withdrawal' do
|
6
|
-
endpoint
|
5
|
+
RSpec.shared_examples 'CoinsPaid API withdrawal' do
|
6
|
+
let(:endpoint) { 'https://app.coinspaid.com/api/v2/withdrawal/crypto' }
|
7
7
|
|
8
|
-
include_context 'CoinsPaid API request'
|
8
|
+
include_context 'CoinsPaid API request'
|
9
9
|
|
10
10
|
let(:response_data) do
|
11
11
|
{
|
@@ -44,19 +44,28 @@ RSpec.shared_examples 'CoinsPaid API withdrawal' do |request_data:|
|
|
44
44
|
end
|
45
45
|
|
46
46
|
describe CoinsPaid::API, '.withdraw' do
|
47
|
-
base_request_data
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
47
|
+
let(:base_request_data) do
|
48
|
+
{
|
49
|
+
foreign_id: 'user-id:2048',
|
50
|
+
amount: '0.01',
|
51
|
+
currency: 'BTC',
|
52
|
+
address: 'abc123'
|
53
|
+
}
|
54
|
+
end
|
55
|
+
let(:request_body) { request_data.to_json }
|
56
|
+
|
57
|
+
context 'request does not include tag parameter or convert_to' do
|
58
|
+
let(:request_data) { base_request_data }
|
59
|
+
it_behaves_like 'CoinsPaid API withdrawal'
|
60
|
+
end
|
54
61
|
|
55
62
|
context 'request includes tag parameter' do
|
56
|
-
|
63
|
+
let(:request_data) { base_request_data.merge(tag: 'thetag') }
|
64
|
+
it_behaves_like 'CoinsPaid API withdrawal'
|
57
65
|
end
|
58
66
|
|
59
|
-
context 'request
|
60
|
-
|
67
|
+
context 'request includes convert_to' do
|
68
|
+
let(:request_data) { base_request_data.merge(currency: 'EUR', convert_to: 'BTC') }
|
69
|
+
it_behaves_like 'CoinsPaid API withdrawal'
|
61
70
|
end
|
62
71
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: coins_paid_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artem Biserov(artembiserov)
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-04-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-struct
|
@@ -90,6 +90,7 @@ files:
|
|
90
90
|
- ".circleci/config.yml"
|
91
91
|
- ".gitignore"
|
92
92
|
- ".rspec"
|
93
|
+
- ".rubocop.yml"
|
93
94
|
- Gemfile
|
94
95
|
- coins_paid_api.gemspec
|
95
96
|
- lib/coins_paid/api.rb
|