binance_client 2.1.0 → 3.0.1

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: 92d03cdb49a0580cae0efce1cbcaf3f908994f2959473801eccfcabb46cd8c1d
4
- data.tar.gz: 8eadce8b6bdb99dad54e1e58724c65595f79a843006e13cc0c4618ee5d62bf88
3
+ metadata.gz: d0ffbedc335b6922f76dc12d791c2e362e012408ec15d89ccbc9a601277874d2
4
+ data.tar.gz: d260ca781537671f0efa3cbefad3543f681b5d8c8616d52ceaa8f411dda02d02
5
5
  SHA512:
6
- metadata.gz: f31e20576e0c83a044f2f59a3e4a5a8bddb0dfce7eab0a73494ef101dbfce4cefee7c3404b004bd3b1d1438f1accd155d151d819d4028405d9c36c2c10a4ab11
7
- data.tar.gz: 7f24cd955d6a8e2ca3ab560b0f45900c514f12001e49e5cfcbfd206b49b24ad7a105111dbc1f673b8831f4091d01486fe6a97922ca0ce12c9dd8116cf6635c7d
6
+ metadata.gz: ae418449f912f5acab8efea9cb2369d221ff25477254f973e4dc87e44b54d1a4eb9b4835cb2e926af9b725a3187a974a105d1c815dd704f4b03d78e2eb61871a
7
+ data.tar.gz: 81b69e1a4cbb64e0a22459a98909f605421a6fbf9286a94a448868cf951d4004cd468e2a08a2ab2d47843b2e18d774dd1284ac6acb242ded188182799a0629a1
data/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.0.1]
8
+ ### Fixed
9
+ - `Coin#network_list` is initialized properly
10
+ - Return decimal for the following methods of `Network`:
11
+ - `#withdraw_fee`
12
+ - `#withdraw_integer_multiple`
13
+ - `#withdraw_max`
14
+ - `#withdraw_min`
15
+
16
+ ## [3.0.0]
17
+ ### Changed
18
+ - Rename `#get_all` to `#coins_info` and give access to info via the response's `#coins` method
19
+
20
+ ### Fixed
21
+ - `Deposit#insert_time` returns `Time` and not an Integer of milliseconds
22
+
23
+ ### Added
24
+ - Add Deposit, RateLimit factories
25
+
7
26
  ## [2.1.0]
8
27
  ### Added
9
28
  - `exchange_info` endpoint
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- binance_client (2.1.0)
4
+ binance_client (3.0.1)
5
5
  activesupport
6
6
  api_client_base (~> 1.11)
7
7
  typhoeus
data/README.md CHANGED
@@ -34,7 +34,7 @@ We provide one method per API endpoint.
34
34
  ```
35
35
  client.system_status
36
36
  client.account_snapshot
37
- client.get_all
37
+ client.coins_info
38
38
  client.book_ticker(symbol: "BTCETH")
39
39
  client.order_book_depth(symbol: "BTCUSDT", limit: 100)
40
40
  ```
@@ -5,7 +5,7 @@ module BinanceClient
5
5
  api_action :account
6
6
  api_action :system_status
7
7
  api_action :account_snapshot
8
- api_action :get_all
8
+ api_action :coins_info
9
9
  api_action :exchange_info
10
10
  api_action :book_ticker
11
11
  api_action :order_book_depth
@@ -10,4 +10,59 @@ FactoryBot.define do
10
10
  end
11
11
  end
12
12
 
13
+ factory :binance_client_deposit, class: "BinanceClient::Deposit" do
14
+ sequence(:sub_account_id) { |n| n.to_s }
15
+ sequence(:address) { |n| "address#{n}" }
16
+ sequence(:address_tag) { |n| "address_tag#{n}" }
17
+ sequence(:amount) { |n| n * 10 }
18
+ sequence(:coin) { |n| "coin#{n}" }
19
+ sequence(:insert_time) { |n| Time.now }
20
+ sequence(:network) { |n| "network#{n}" }
21
+ sequence(:status) { |n| "status#{n}" }
22
+ sequence(:tx_id) { |n| "tx_id#{n}" }
23
+ sequence(:source_address) { |n| "source_address#{n}" }
24
+ sequence(:confirm_times) { |n| "#{n}/#{n}" }
25
+ end
26
+
27
+ factory :binance_client_rate_limit, class: "BinanceClient::RateLimit" do
28
+ rate_limit_type { "REQUEST_WEIGHT" }
29
+ interval { %w[SECOND MINUTE DAY].sample }
30
+ sequence(:interval_num) { |n| n }
31
+ sequence(:limit) { |n| n }
32
+ end
33
+
34
+ factory :binance_client_coin, class: "BinanceClient::Coin" do
35
+ sequence(:coin) { |n| "ASSET#{n}" }
36
+ sequence(:name) { |n| "Asset #{n}" }
37
+ free { 0.001 }
38
+ freeze { 0.001 }
39
+ ipoable { 0.002 }
40
+ ipoing { 0.003 }
41
+ locked { 0.004 }
42
+ storage { 0.005 }
43
+ withdrawing { 0.006 }
44
+ end
45
+
46
+ factory :binance_client_network, class: "BinanceClient::Network" do
47
+ address_regex { "^(bnb1)[0-9a-z]{38}$" }
48
+ coin { "BTC" }
49
+ deposit_desc { "Wallet Maintenance" }
50
+ deposit_enable { false }
51
+ is_default { false }
52
+ memo_regex { "^[0-9A-Za-z\\-_]{1,120}$" }
53
+ min_confirm { 1 }
54
+ name { "BEP2" }
55
+ network { "BNB" }
56
+ reset_address_status { false }
57
+ special_tips { "Both a MEMO is required" }
58
+ un_lock_confirm { 0 }
59
+ withdraw_desc { "Wallet Maintenance" }
60
+ withdraw_enable { false }
61
+ withdraw_fee { "0.00000220" }
62
+ withdraw_integer_multiple { "0.00000001" }
63
+ withdraw_max { "9999999999.99999999" }
64
+ withdraw_min { "0.00000440" }
65
+ same_address { true }
66
+ end
67
+
13
68
  end
@@ -3,5 +3,12 @@ module BinanceClient
3
3
 
4
4
  include Virtus.model
5
5
 
6
+ private
7
+
8
+ def memoize_results(key)
9
+ return instance_variable_get(key) if instance_variable_defined?(key)
10
+ instance_variable_set key, yield
11
+ end
12
+
6
13
  end
7
14
  end
@@ -0,0 +1,70 @@
1
+ module BinanceClient
2
+ class Coin < BaseModel
3
+
4
+ STR_METHODS = %i[
5
+ coin
6
+ name
7
+ ].freeze
8
+
9
+ DECIMAL_METHODS = %i[
10
+ free
11
+ freeze
12
+ ipoable
13
+ ipoing
14
+ locked
15
+ storage
16
+ withdrawing
17
+ ].freeze
18
+
19
+ BOOL_MAP = {
20
+ deposit_all_enable: :deposit_all_enabled?,
21
+ is_legal_money: :legal_money?,
22
+ trading: :trading?,
23
+ withdraw_all_enable: :withdraw_all_enabled?,
24
+ }.freeze
25
+
26
+ METHODS = (STR_METHODS + DECIMAL_METHODS + BOOL_MAP.keys).freeze
27
+
28
+ attr_accessor :raw_hash
29
+ attr_writer *METHODS
30
+
31
+ def initialize(**kwargs)
32
+ kwargs.each do |key, value|
33
+ self.send("#{key}=", value)
34
+ end
35
+ end
36
+
37
+ STR_METHODS.each do |method_name|
38
+ define_method method_name do
39
+ memoize_results "@#{method_name}" do
40
+ raw_hash[method_name.to_s.camelcase(:lower)]
41
+ end
42
+ end
43
+ end
44
+
45
+ DECIMAL_METHODS.each do |method_name|
46
+ define_method method_name do
47
+ memoize_results "@#{method_name}" do
48
+ raw_hash[method_name.to_s.camelcase(:lower)].to_d
49
+ end
50
+ end
51
+ end
52
+
53
+ BOOL_MAP.each do |original_method_name, alias_method_name|
54
+ define_method original_method_name do
55
+ memoize_results "@#{original_method_name}" do
56
+ raw_hash[original_method_name.to_s.camelcase(:lower)]
57
+ end
58
+ end
59
+
60
+ alias_method alias_method_name, original_method_name
61
+ end
62
+
63
+ def network_list
64
+ @network_list ||= raw_hash["networkList"].map do |network_hash|
65
+ Network.new(raw_hash: network_hash)
66
+ end
67
+ end
68
+
69
+ end
70
+ end
@@ -1,5 +1,5 @@
1
1
  module BinanceClient
2
- class Deposit
2
+ class Deposit < BaseModel
3
3
 
4
4
  METHODS = %i[
5
5
  sub_account_id
@@ -7,25 +7,34 @@ module BinanceClient
7
7
  address_tag
8
8
  amount
9
9
  coin
10
- insert_time
11
10
  network
12
11
  status
13
12
  tx_id
14
13
  source_address
15
14
  confirm_times
15
+ insert_time
16
16
  ].freeze
17
17
 
18
- attr_reader :raw_hash
18
+ attr_accessor :raw_hash
19
+ attr_writer *METHODS
19
20
 
20
- def initialize(raw_hash:)
21
- @raw_hash = raw_hash
21
+ def initialize(**kwargs)
22
+ kwargs.each do |key, value|
23
+ self.send("#{key}=", value)
24
+ end
22
25
  end
23
26
 
24
27
  METHODS.each do |method_name|
25
28
  define_method method_name do
26
- raw_hash[method_name.to_s.camelcase(:lower)]
29
+ memoize_results "@#{method_name}" do
30
+ raw_hash[method_name.to_s.camelcase(:lower)]
31
+ end
27
32
  end
28
33
  end
29
34
 
35
+ def insert_time
36
+ @insert_time ||= Time.at(raw_hash["insertTime"] / 1_000)
37
+ end
38
+
30
39
  end
31
40
  end
@@ -27,15 +27,20 @@ module BinanceClient
27
27
  is_margin_trading_allowed: :margin_trading_allowed?,
28
28
  }.freeze
29
29
 
30
- attr_reader :raw_hash
30
+ attr_accessor :raw_hash
31
+ attr_writer *METHODS
31
32
 
32
- def initialize(raw_hash:)
33
- @raw_hash = raw_hash
33
+ def initialize(**kwargs)
34
+ kwargs.each do |key, value|
35
+ self.send("#{key}=", value)
36
+ end
34
37
  end
35
38
 
36
39
  METHODS.each do |method_name|
37
40
  define_method method_name do
38
- raw_hash[method_name.to_s.camelcase(:lower)]
41
+ memoize_results "@#{method_name}" do
42
+ raw_hash[method_name.to_s.camelcase(:lower)]
43
+ end
39
44
  end
40
45
  end
41
46
 
@@ -0,0 +1,70 @@
1
+ module BinanceClient
2
+ class Network < BaseModel
3
+
4
+ PLAIN_METHODS = %i[
5
+ address_regex
6
+ coin
7
+ deposit_desc
8
+ memo_regex
9
+ min_confirm
10
+ name
11
+ network
12
+ special_tips
13
+ un_lock_confirm
14
+ withdraw_desc
15
+ ].freeze
16
+
17
+ DECIMAL_METHODS = %i[
18
+ withdraw_fee
19
+ withdraw_integer_multiple
20
+ withdraw_max
21
+ withdraw_min
22
+ ].freeze
23
+
24
+ BOOL_MAP = {
25
+ deposit_enable: :deposit_enabled?,
26
+ is_default: :default?,
27
+ reset_address_status: :reset_address_status?,
28
+ withdraw_enable: :withdraw_enabled?,
29
+ same_address: :same_address?
30
+ }.freeze
31
+
32
+ METHODS = (PLAIN_METHODS + DECIMAL_METHODS + BOOL_MAP.keys).freeze
33
+
34
+ attr_accessor :raw_hash
35
+ attr_writer *METHODS
36
+
37
+ def initialize(**kwargs)
38
+ kwargs.each do |key, value|
39
+ self.send("#{key}=", value)
40
+ end
41
+ end
42
+
43
+ PLAIN_METHODS.each do |method_name|
44
+ define_method method_name do
45
+ memoize_results "@#{method_name}" do
46
+ raw_hash[method_name.to_s.camelcase(:lower)]
47
+ end
48
+ end
49
+ end
50
+
51
+ DECIMAL_METHODS.each do |method_name|
52
+ define_method method_name do
53
+ memoize_results "@#{method_name}" do
54
+ raw_hash[method_name.to_s.camelcase(:lower)].to_d
55
+ end
56
+ end
57
+ end
58
+
59
+ BOOL_MAP.each do |original_method_name, alias_method_name|
60
+ define_method original_method_name do
61
+ memoize_results "@#{original_method_name}" do
62
+ raw_hash[original_method_name.to_s.camelcase(:lower)]
63
+ end
64
+ end
65
+
66
+ alias_method alias_method_name, original_method_name
67
+ end
68
+
69
+ end
70
+ end
@@ -1,6 +1,7 @@
1
1
  module BinanceClient
2
- class RateLimit
2
+ class RateLimit < BaseModel
3
3
 
4
+ INTERVALS = %w[SECOND MINUTE DAY].freeze
4
5
  METHODS = %i[
5
6
  rate_limit_type
6
7
  interval
@@ -8,15 +9,26 @@ module BinanceClient
8
9
  limit
9
10
  ].freeze
10
11
 
11
- attr_reader :raw_hash
12
+ attr_accessor :raw_hash
13
+ attr_writer *METHODS
12
14
 
13
- def initialize(raw_hash:)
14
- @raw_hash = raw_hash
15
+ def initialize(**kwargs)
16
+ kwargs.each do |key, value|
17
+ self.send("#{key}=", value)
18
+ end
15
19
  end
16
20
 
17
21
  METHODS.each do |method_name|
18
22
  define_method method_name do
19
- raw_hash[method_name.to_s.camelcase(:lower)]
23
+ memoize_results("@#{method_name}") do
24
+ raw_hash[method_name.to_s.camelcase(:lower)]
25
+ end
26
+ end
27
+ end
28
+
29
+ INTERVALS.each do |interval|
30
+ define_method "#{interval.downcase}?" do
31
+ interval == self.interval
20
32
  end
21
33
  end
22
34
 
@@ -1,5 +1,5 @@
1
1
  module BinanceClient
2
- class GetAllRequest < AuthenticatedBaseRequest
2
+ class CoinsInfoRequest < AuthenticatedBaseRequest
3
3
  private
4
4
 
5
5
  def path
@@ -0,0 +1,11 @@
1
+ module BinanceClient
2
+ class CoinsInfoResponse < BaseResponse
3
+
4
+ def coins
5
+ @coins ||= body.map do |coin_hash|
6
+ Coin.new(raw_hash: coin_hash)
7
+ end
8
+ end
9
+
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module BinanceClient
2
- VERSION = "2.1.0"
2
+ VERSION = "3.0.1"
3
3
  end
@@ -19,6 +19,8 @@ require "binance_client/models/market"
19
19
  require "binance_client/models/market_filter"
20
20
  require "binance_client/models/rate_limit"
21
21
  require "binance_client/models/deposit"
22
+ require "binance_client/models/network"
23
+ require "binance_client/models/coin"
22
24
 
23
25
  require "binance_client/requests/base_request"
24
26
  require "binance_client/requests/authenticated_base_request"
@@ -26,7 +28,7 @@ require "binance_client/responses/base_response"
26
28
  require "binance_client/requests/system_status_request"
27
29
  require "binance_client/requests/account_snapshot_request"
28
30
  require "binance_client/requests/exchange_info_request"
29
- require "binance_client/requests/get_all_request"
31
+ require "binance_client/requests/coins_info_request"
30
32
  require "binance_client/requests/book_ticker_request"
31
33
  require "binance_client/requests/order_book_depth_request"
32
34
  require "binance_client/requests/sub_account_assets_request"
@@ -35,7 +37,7 @@ require "binance_client/requests/sub_account_deposit_history_request"
35
37
  require "binance_client/requests/account_request"
36
38
  require "binance_client/responses/system_status_response"
37
39
  require "binance_client/responses/account_snapshot_response"
38
- require "binance_client/responses/get_all_response"
40
+ require "binance_client/responses/coins_info_response"
39
41
  require "binance_client/responses/exchange_info_response"
40
42
  require "binance_client/responses/book_ticker_response"
41
43
  require "binance_client/responses/order_book_depth_response"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: binance_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AJ Villalobos
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-22 00:00:00.000000000 Z
11
+ date: 2021-12-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api_client_base
@@ -119,10 +119,12 @@ files:
119
119
  - lib/binance_client/factories.rb
120
120
  - lib/binance_client/models/asset_balance.rb
121
121
  - lib/binance_client/models/base_model.rb
122
+ - lib/binance_client/models/coin.rb
122
123
  - lib/binance_client/models/deposit.rb
123
124
  - lib/binance_client/models/deposit_address.rb
124
125
  - lib/binance_client/models/market.rb
125
126
  - lib/binance_client/models/market_filter.rb
127
+ - lib/binance_client/models/network.rb
126
128
  - lib/binance_client/models/order_book.rb
127
129
  - lib/binance_client/models/order_book_entry.rb
128
130
  - lib/binance_client/models/rate_limit.rb
@@ -131,8 +133,8 @@ files:
131
133
  - lib/binance_client/requests/authenticated_base_request.rb
132
134
  - lib/binance_client/requests/base_request.rb
133
135
  - lib/binance_client/requests/book_ticker_request.rb
136
+ - lib/binance_client/requests/coins_info_request.rb
134
137
  - lib/binance_client/requests/exchange_info_request.rb
135
- - lib/binance_client/requests/get_all_request.rb
136
138
  - lib/binance_client/requests/order_book_depth_request.rb
137
139
  - lib/binance_client/requests/sub_account_assets_request.rb
138
140
  - lib/binance_client/requests/sub_account_deposit_address_request.rb
@@ -142,8 +144,8 @@ files:
142
144
  - lib/binance_client/responses/account_snapshot_response.rb
143
145
  - lib/binance_client/responses/base_response.rb
144
146
  - lib/binance_client/responses/book_ticker_response.rb
147
+ - lib/binance_client/responses/coins_info_response.rb
145
148
  - lib/binance_client/responses/exchange_info_response.rb
146
- - lib/binance_client/responses/get_all_response.rb
147
149
  - lib/binance_client/responses/order_book_depth_response.rb
148
150
  - lib/binance_client/responses/sub_account_assets_response.rb
149
151
  - lib/binance_client/responses/sub_account_deposit_address_response.rb
@@ -1,4 +0,0 @@
1
- module BinanceClient
2
- class GetAllResponse < BaseResponse
3
- end
4
- end