quidax 0.1.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +28 -0
- data/.vscode/launch.json +22 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +85 -0
- data/LICENSE.txt +21 -0
- data/README.md +86 -0
- data/Rakefile +12 -0
- data/lib/quidax/error.rb +11 -0
- data/lib/quidax/mocks/deposit_mock.rb +20 -0
- data/lib/quidax/mocks/fees_mock.rb +8 -0
- data/lib/quidax/mocks/markets_mock.rb +51 -0
- data/lib/quidax/mocks/order_mock.rb +23 -0
- data/lib/quidax/mocks/quotes_mock.rb +26 -0
- data/lib/quidax/mocks/user_mock.rb +63 -0
- data/lib/quidax/mocks/wallet_mock.rb +99 -0
- data/lib/quidax/mocks/withdrawal_mock.rb +27 -0
- data/lib/quidax/modules/api.rb +17 -0
- data/lib/quidax/objects/base.rb +60 -0
- data/lib/quidax/objects/beneficiary.rb +58 -0
- data/lib/quidax/objects/deposits.rb +40 -0
- data/lib/quidax/objects/fee.rb +17 -0
- data/lib/quidax/objects/instant_order.rb +120 -0
- data/lib/quidax/objects/markets.rb +115 -0
- data/lib/quidax/objects/order.rb +60 -0
- data/lib/quidax/objects/quote.rb +18 -0
- data/lib/quidax/objects/trade.rb +23 -0
- data/lib/quidax/objects/user.rb +41 -0
- data/lib/quidax/objects/wallet.rb +68 -0
- data/lib/quidax/objects/withdrawal.rb +33 -0
- data/lib/quidax/utils.rb +49 -0
- data/lib/quidax/validators/instant_order_validator.rb +32 -0
- data/lib/quidax/version.rb +5 -0
- data/lib/quidax.rb +41 -0
- data/sig/quidax.rbs +4 -0
- metadata +124 -0
data/lib/quidax/utils.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "error"
|
4
|
+
|
5
|
+
# Base Util
|
6
|
+
module Utils
|
7
|
+
def self.handle_server_error(event)
|
8
|
+
raise event if event.response.nil?
|
9
|
+
|
10
|
+
error = QuidaxServerError.new(event.response)
|
11
|
+
error_reponse_code = error.response.status
|
12
|
+
|
13
|
+
case error_reponse_code
|
14
|
+
when 400
|
15
|
+
raise error,
|
16
|
+
"HTTP Code 400: Bad request. Review the data sent in the request. Usually, this means a required piece of information is missing"
|
17
|
+
when 401
|
18
|
+
raise error,
|
19
|
+
"HTTP Code 401: Unauthorized. This happens when you provide an invalid or non-existent secret API key"
|
20
|
+
when 404
|
21
|
+
raise error, "HTTP Code 404: Resource not found. The data requested does not exist."
|
22
|
+
when 403
|
23
|
+
raise error, "HTTP Code 403: Forbidden. Not enough permission to perform this operation"
|
24
|
+
when 429
|
25
|
+
raise error, "HTTP Code 429: You're making too many requests!"
|
26
|
+
when 500, 501, 502, 503, 504
|
27
|
+
raise error, "HTTP Code #{error_reponse_code}: Server Error. Something went wrong."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.check_missing_keys(required_keys:, keys:, field:)
|
32
|
+
keys.map!(&:to_s)
|
33
|
+
missing_keys = required_keys - keys
|
34
|
+
has_missing_keys = missing_keys.empty?
|
35
|
+
error_message = "missing key(s) in :#{field} #{missing_keys.join(", ")}"
|
36
|
+
|
37
|
+
raise ArgumentError, error_message unless has_missing_keys
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.validate_value_in_array(array:, value:, field:)
|
41
|
+
error_message = ":#{field} must be one of: #{array.join(", ")}"
|
42
|
+
|
43
|
+
raise ArgumentError, error_message unless array.include?(value)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.validate_value_in_range(range:, value:, field:)
|
47
|
+
raise ArgumentError, "#{field} must be between #{range}" unless range.include?(value.to_i)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# validate instant orders
|
2
|
+
module InstantOrderValidator
|
3
|
+
def self.validate_buy_from_crypto_body(body)
|
4
|
+
required_body_keys = %w[bid ask volume]
|
5
|
+
|
6
|
+
Utils.check_missing_keys(required_keys: required_body_keys, keys: body.keys, field: "body")
|
7
|
+
validate_bid_currency(body["bid"])
|
8
|
+
validate_ask_currency(body["ask"])
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.validate_sell_crypto_to_fiat(body)
|
12
|
+
required_body_keys = %w[bid ask total]
|
13
|
+
|
14
|
+
Utils.check_missing_keys(required_keys: required_body_keys, keys: body.keys, field: "body")
|
15
|
+
validate_bid_currency(body["bid"])
|
16
|
+
validate_ask_currency(body["ask"])
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
private
|
21
|
+
|
22
|
+
def validate_bid_currency(bid_currency)
|
23
|
+
allowed_bid_currencies = %w[ngn usdt]
|
24
|
+
Utils.validate_value_in_array(array: allowed_bid_currencies, value: bid_currency, field: "bid")
|
25
|
+
end
|
26
|
+
|
27
|
+
def validate_ask_currency(ask_currency)
|
28
|
+
allowed_ask_currencies = %w[btc ltc eth xrp usdt dash usdc busd bnb]
|
29
|
+
Utils.validate_value_in_array(array: allowed_ask_currencies, value: ask_currency, field: "ask")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/quidax.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "faraday"
|
4
|
+
require_relative "quidax/version"
|
5
|
+
require_relative "quidax/error"
|
6
|
+
require_relative "quidax/utils"
|
7
|
+
require_relative "quidax/modules/api"
|
8
|
+
require_relative "quidax/objects/base"
|
9
|
+
require_relative "quidax/objects/user"
|
10
|
+
require_relative "quidax/objects/wallet"
|
11
|
+
require_relative "quidax/objects/withdrawal"
|
12
|
+
require_relative "quidax/objects/markets"
|
13
|
+
require_relative "quidax/objects/quote"
|
14
|
+
require_relative "quidax/objects/fee"
|
15
|
+
require_relative "quidax/objects/trade"
|
16
|
+
require_relative "quidax/objects/deposits"
|
17
|
+
require_relative "quidax/objects/beneficiary"
|
18
|
+
require_relative "quidax/objects/order"
|
19
|
+
require_relative "quidax/objects/instant_order"
|
20
|
+
|
21
|
+
# Intialize a quidax config object
|
22
|
+
class Quidax
|
23
|
+
attr_reader :secret_key
|
24
|
+
|
25
|
+
def initialize(secret_key)
|
26
|
+
raise ArgumentError, "Please pass your secret key" if secret_key.nil?
|
27
|
+
|
28
|
+
@secret_key = secret_key
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# custom Hash Methods
|
33
|
+
class Hash
|
34
|
+
def stringify_keys
|
35
|
+
transform_keys(&:to_s)
|
36
|
+
end
|
37
|
+
|
38
|
+
def stringify_keys!
|
39
|
+
transform_keys!(&:to_s)
|
40
|
+
end
|
41
|
+
end
|
data/sig/quidax.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: quidax
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Aremu Oluwagbamila
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-03-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dotenv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.8.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.8.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: webmock
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.19'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.19'
|
55
|
+
description: Ruby gem for Quidax
|
56
|
+
email:
|
57
|
+
- aremuoluwagbamila@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".rspec"
|
63
|
+
- ".rubocop.yml"
|
64
|
+
- ".vscode/launch.json"
|
65
|
+
- CHANGELOG.md
|
66
|
+
- Gemfile
|
67
|
+
- Gemfile.lock
|
68
|
+
- LICENSE.txt
|
69
|
+
- README.md
|
70
|
+
- Rakefile
|
71
|
+
- lib/quidax.rb
|
72
|
+
- lib/quidax/error.rb
|
73
|
+
- lib/quidax/mocks/deposit_mock.rb
|
74
|
+
- lib/quidax/mocks/fees_mock.rb
|
75
|
+
- lib/quidax/mocks/markets_mock.rb
|
76
|
+
- lib/quidax/mocks/order_mock.rb
|
77
|
+
- lib/quidax/mocks/quotes_mock.rb
|
78
|
+
- lib/quidax/mocks/user_mock.rb
|
79
|
+
- lib/quidax/mocks/wallet_mock.rb
|
80
|
+
- lib/quidax/mocks/withdrawal_mock.rb
|
81
|
+
- lib/quidax/modules/api.rb
|
82
|
+
- lib/quidax/objects/base.rb
|
83
|
+
- lib/quidax/objects/beneficiary.rb
|
84
|
+
- lib/quidax/objects/deposits.rb
|
85
|
+
- lib/quidax/objects/fee.rb
|
86
|
+
- lib/quidax/objects/instant_order.rb
|
87
|
+
- lib/quidax/objects/markets.rb
|
88
|
+
- lib/quidax/objects/order.rb
|
89
|
+
- lib/quidax/objects/quote.rb
|
90
|
+
- lib/quidax/objects/trade.rb
|
91
|
+
- lib/quidax/objects/user.rb
|
92
|
+
- lib/quidax/objects/wallet.rb
|
93
|
+
- lib/quidax/objects/withdrawal.rb
|
94
|
+
- lib/quidax/utils.rb
|
95
|
+
- lib/quidax/validators/instant_order_validator.rb
|
96
|
+
- lib/quidax/version.rb
|
97
|
+
- sig/quidax.rbs
|
98
|
+
homepage: https://github.com/aremu-smog/quidax-ruby
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata:
|
102
|
+
homepage_uri: https://github.com/aremu-smog/quidax-ruby
|
103
|
+
source_code_uri: https://github.com/aremu-smog/quidax-ruby
|
104
|
+
changelog_uri: https://github.com/aremu-smog/quidax-ruby
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: 2.6.0
|
114
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
requirements:
|
116
|
+
- - ">="
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
requirements: []
|
120
|
+
rubygems_version: 3.3.7
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Quidax gem for Ruby/Rails
|
124
|
+
test_files: []
|