Skip to content

Commit ad0960e

Browse files
authored
Merge pull request #107 from face/master
ruby 3.x support, bump dependencies
2 parents 063014b + dfcbdc1 commit ad0960e

File tree

13 files changed

+386
-18
lines changed

13 files changed

+386
-18
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,5 @@ tmp
2222
mkmf.log
2323
.env
2424
todo
25+
*.sw?
26+
.ruby-version

.rspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--require spec_helper

CHANGELOG

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
1.1.0
2+
- Bump dependencies for ruby 3.x
3+
- Replace faraday_adapter_socks with custom class
4+
15
1.0.11
26
- Fixes nonce issue to be compatible with other libraries
37

Gemfile

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ source 'https://rubygems.org'
22

33
gemspec
44

5-
gem 'faraday_adapter_socks'
65
gem 'dotenv'
76
gem 'emittr'
87
gem 'zlib'
98

10-
group :test do
9+
group :development, :test do
1110
gem 'rspec'
12-
gem 'simplecov'
13-
gem 'webmock', '~> 1.22.6'
11+
gem 'simplecov', require: false
12+
gem 'webmock', '~> 3.14.0'
1413
end
15-

bitfinex-rb.gemspec

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
44

55
Gem::Specification.new do |spec|
66
spec.name = 'bitfinex-rb'
7-
spec.version = '1.0.11'
7+
spec.version = '1.1.0'
88
spec.authors = ['Bitfinex']
99
spec.email = ['[email protected]']
1010
spec.summary = %q{Bitfinex API Wrapper}
@@ -15,14 +15,15 @@ Gem::Specification.new do |spec|
1515
spec.files = Dir['lib/**/*']
1616
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
1717
spec.require_paths = ['lib']
18-
spec.add_runtime_dependency 'faraday', '~> 0.15.3', '>= 0.15.3'
19-
spec.add_runtime_dependency 'eventmachine', '~> 1.2.7', '>= 1.2.7'
20-
spec.add_runtime_dependency 'faraday-detailed_logger', '~> 2.1.2', '>= 2.1.2'
21-
spec.add_runtime_dependency 'faye-websocket', '~> 0.10.7'
22-
spec.add_runtime_dependency 'json', '~> 2.2.0','>= 2.2.0'
23-
spec.add_runtime_dependency 'faraday_middleware', '~> 0.12.2', '>= 0.12.2'
24-
spec.add_runtime_dependency 'emittr', '~> 0.1.0', '>= 0.1.0'
25-
spec.add_runtime_dependency 'dotenv', '~> 2.5.0', '>= 2.5.0'
26-
spec.add_runtime_dependency 'faraday_adapter_socks', '~> 0.1.1', '>= 0.1.1'
27-
spec.add_runtime_dependency 'zlib', '~> 1.0.0', '>= 1.0.0'
18+
19+
spec.add_runtime_dependency 'faraday', '~> 1.10.3'
20+
spec.add_runtime_dependency 'eventmachine', '~> 1.2.7'
21+
spec.add_runtime_dependency 'faraday-detailed_logger', '~> 2.5.0'
22+
spec.add_runtime_dependency 'faye-websocket', '~> 0.11.3'
23+
spec.add_runtime_dependency 'json', '~> 2.0', '>= 2.2.0'
24+
spec.add_runtime_dependency 'faraday_middleware', '~> 1.2.0'
25+
spec.add_runtime_dependency 'emittr', '~> 0.1.0'
26+
spec.add_runtime_dependency 'dotenv', '~> 2.7.6'
27+
spec.add_runtime_dependency 'socksify', '~> 1.7.1'
28+
spec.add_runtime_dependency 'zlib', '~> 1.0.0'
2829
end

lib/bitfinex.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
require 'base64'
33
require 'openssl'
44
require 'faraday'
5+
require 'socksify'
6+
require 'socksify/http'
57
require 'json'
68
require 'faraday_middleware'
79
require 'dotenv/load'
@@ -11,6 +13,7 @@
1113
require_relative './rest/v2'
1214
require_relative './ws/ws2'
1315

16+
require_relative './faraday/adapter/net_http_socks'
1417
require_relative './models/alert'
1518
require_relative './models/balance_info'
1619
require_relative './models/candle'
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class NetHttpSocks < Faraday::Adapter::NetHttp
2+
SOCKS_SCHEMES = ['socks', 'socks4', 'socks5']
3+
4+
def net_http_connection(env)
5+
proxy = env[:request][:proxy]
6+
7+
net_http_class = if proxy
8+
if SOCKS_SCHEMES.include?(proxy[:uri].scheme)
9+
Net::HTTP::SOCKSProxy(proxy[:uri].host, proxy[:uri].port)
10+
else
11+
Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:user], proxy[:password])
12+
end
13+
else
14+
Net::HTTP
15+
end
16+
17+
net_http_class.new(env[:url].host, env[:url].port)
18+
end
19+
end
20+
21+
Faraday::Adapter.register_middleware(net_http_socks: NetHttpSocks)

lib/rest/rest_client.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
require 'faraday_adapter_socks'
2-
31
module Bitfinex
42
module RESTClient
53
def check_params(params, allowed_params)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
require 'spec_helper'
2+
require 'webmock/rspec'
3+
require 'hashdiff'
4+
require_relative '../../lib/bitfinex'
5+
6+
RSpec.describe 'Bitfinex::RESTv1 Integration' do
7+
before do
8+
# Stub the account info request
9+
stub_request(:post, "https://api.bitfinex.com/v1/account_infos")
10+
.with(body: '{}')
11+
.to_return(
12+
status: 200,
13+
body: '[
14+
{
15+
"leo_fee_disc_c2c":"0.0",
16+
"leo_fee_disc_c2s":"0.0",
17+
"leo_fee_disc_c2f":"0.0",
18+
"leo_fee_disc_c2d":"0.0",
19+
"leo_fee_disc_abs_c2c":"0.0",
20+
"leo_fee_disc_abs_c2s":"0.0",
21+
"leo_fee_disc_abs_c2f":"0.0",
22+
"leo_fee_disc_abs_c2d":"0.0",
23+
"leo_fee_maker_disc_abs_c2d":"0.0",
24+
"maker_fees":"0.1",
25+
"taker_fees":"0.2",
26+
"fees":[
27+
{"pairs":"BTC", "maker_fees":"0.1", "taker_fees":"0.2"},
28+
{"pairs":"ETH", "maker_fees":"0.1", "taker_fees":"0.2"},
29+
{"pairs":"IOT", "maker_fees":"0.1", "taker_fees":"0.2"},
30+
{"pairs":"XRP", "maker_fees":"0.1", "taker_fees":"0.2"},
31+
{"pairs":"REP", "maker_fees":"0.1", "taker_fees":"0.2"},
32+
{"pairs":"GRG", "maker_fees":"0.1", "taker_fees":"0.2"},
33+
{"pairs":"ZRX", "maker_fees":"0.1", "taker_fees":"0.2"},
34+
{"pairs":"MLN", "maker_fees":"0.1", "taker_fees":"0.2"},
35+
{"pairs":"SAN", "maker_fees":"0.1", "taker_fees":"0.2"},
36+
{"pairs":"AMP", "maker_fees":"0.1", "taker_fees":"0.2"},
37+
{"pairs":"DUSK", "maker_fees":"0.1", "taker_fees":"0.2"},
38+
{"pairs":"LNX", "maker_fees":"0.1", "taker_fees":"0.2"},
39+
{"pairs":"EOS", "maker_fees":"0.1", "taker_fees":"0.2"},
40+
{"pairs":"TESTBTC", "maker_fees":"0.1", "taker_fees":"0.2"},
41+
{"pairs":"TESTUSDT", "maker_fees":"0.1", "taker_fees":"0.2"},
42+
{"pairs":"TESTUSD", "maker_fees":"0.1", "taker_fees":"0.2"},
43+
{"pairs":"ETH2P", "maker_fees":"0.1", "taker_fees":"0.2"}
44+
]
45+
}
46+
]',
47+
headers: { 'Content-Type' => 'application/json' }
48+
)
49+
50+
# Stub the account fees request
51+
stub_request(:post, "https://api.bitfinex.com/v1/account_fees")
52+
.with(body: '{}')
53+
.to_return(
54+
status: 200,
55+
body: '{"withdraw":{"BTC":"0.000001","ETH":"0.0","IOT":"0.0","XRP":"0.0","GRG":"0.025367","ZRX":"0.00000249","MLN":"0.00036065","SAN":"33.819","AMP":"5.3018","DUSK":"0.08371","LNX":"0.000001","EOS":"0.0","TESTBTC":"0.0","TESTUSDT":"0.0","TESTUSD":"0.0","EXO":"0.0","BMN":"0.0"}}',
56+
headers: { 'Content-Type' => 'application/json' }
57+
)
58+
end
59+
60+
let(:client) do
61+
Bitfinex::RESTv1.new({
62+
api_key: 'dummy_api_key',
63+
api_secret: 'dummy_api_secret',
64+
url: 'https://api.bitfinex.com',
65+
})
66+
end
67+
68+
it 'fetches account info' do
69+
response = client.account_info
70+
expect(response).not_to be_nil
71+
expect(response).to be_a(Array)
72+
expect(response.first['maker_fees']).to eq('0.1')
73+
expect(response.first['taker_fees']).to eq('0.2')
74+
expect(response.first['fees']).to be_a(Array)
75+
expect(response.first['fees'].first['pairs']).to eq('BTC')
76+
end
77+
78+
it 'fetches fees' do
79+
response = client.fees
80+
expect(response).not_to be_nil
81+
expect(response).to be_a(Hash)
82+
expect(response['withdraw']['BTC']).to eq('0.000001')
83+
expect(response['withdraw']['ETH']).to eq('0.0')
84+
expect(response['withdraw']['GRG']).to eq('0.025367')
85+
end
86+
end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
require 'spec_helper'
2+
require 'webmock/rspec'
3+
require_relative '../../lib/bitfinex'
4+
5+
RSpec.describe 'Bitfinex::RESTv1 Proxy Integration' do
6+
before do
7+
stub_request(:post, "https://api.bitfinex.com/v1/account_infos")
8+
.with(body: '{}')
9+
.to_return(
10+
status: 200,
11+
body: '[{"maker_fees":"0.1","taker_fees":"0.2"}]',
12+
headers: { 'Content-Type' => 'application/json' }
13+
)
14+
end
15+
16+
let(:client) do
17+
Bitfinex::RESTv1.new({
18+
api_key: 'dummy_api_key',
19+
api_secret: 'dummy_api_secret',
20+
url: 'https://api.bitfinex.com',
21+
proxy: 'http://proxy.example.com:8080'
22+
})
23+
end
24+
25+
it 'fetches account info through proxy' do
26+
response = client.account_info
27+
expect(response).not_to be_nil
28+
expect(response).to be_a(Array)
29+
expect(response.first['maker_fees']).to eq('0.1')
30+
expect(response.first['taker_fees']).to eq('0.2')
31+
32+
# Verify that the request was made through the proxy
33+
expect(WebMock).to have_requested(:post, "https://api.bitfinex.com/v1/account_infos")
34+
.with(headers: { 'Proxy-Authorization' => 'Basic ' + Base64.encode64('proxy_user:proxy_pass').strip })
35+
end
36+
end

0 commit comments

Comments
 (0)