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.
@@ -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
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Quidax
4
+ VERSION = "0.1.0"
5
+ 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
@@ -0,0 +1,4 @@
1
+ module Quidax
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
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: []