mexbt 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/LICENSE.txt +1 -1
- data/README.md +9 -9
- data/lib/mexbt/client.rb +6 -1
- data/lib/mexbt/orders.rb +4 -0
- data/lib/mexbt/public.rb +15 -1
- data/lib/mexbt/version.rb +1 -1
- data/spec/private_api_spec.rb +8 -2
- data/spec/public_api_spec.rb +14 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fd935693905edbab1bda0eec07c1dc337446288
|
4
|
+
data.tar.gz: 8e19ba7bccb2585c3805a7df905ad845590d28ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a689255dbe126cba0dac1228e8eac535ea3a3f68dea148a1ec35638e701bf82467abdba516bb6e7f3492d695c6a54a6415117a0b2c262e0a78faabff8f67dff2
|
7
|
+
data.tar.gz: 74cc762b1724b3da51f8e8669522de45495644d1d2f65e1a4f629044b2f7e671661da7e1a1d313def0932c47eab2c59ab1608a7777b8ac6aab9932878c8e8f7a
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
mexbt (0.0.
|
4
|
+
mexbt (0.0.4)
|
5
5
|
activesupport (>= 4.1.8)
|
6
6
|
rest_client (= 1.8.2)
|
7
7
|
|
@@ -17,7 +17,7 @@ GEM
|
|
17
17
|
diff-lcs (1.2.5)
|
18
18
|
i18n (0.6.11)
|
19
19
|
json (1.8.1)
|
20
|
-
minitest (5.
|
20
|
+
minitest (5.5.0)
|
21
21
|
netrc (0.7.9)
|
22
22
|
rake (10.3.2)
|
23
23
|
rest_client (1.8.2)
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
This is a lightweight ruby client for the [meXBT](https://mexbt.com) exchange API. It doesn't try and do anything clever with the JSON response from the API, it simply
|
4
4
|
returns it as-is.
|
5
5
|
|
6
|
-
|
6
|
+
## Install
|
7
7
|
|
8
8
|
If using bundler simply this to your Gemfile:
|
9
9
|
|
@@ -11,11 +11,11 @@ If using bundler simply this to your Gemfile:
|
|
11
11
|
|
12
12
|
And run `bundle install` of course.
|
13
13
|
|
14
|
-
|
14
|
+
## Ruby version
|
15
15
|
|
16
16
|
You need to be using Ruby 2.1 or higher.
|
17
17
|
|
18
|
-
|
18
|
+
## Public API
|
19
19
|
|
20
20
|
You can access all the Public API functions with zero configuration. By default they will use the 'BTCMXN' currency pair.
|
21
21
|
|
@@ -34,10 +34,10 @@ Or alternatively you can set it per call:
|
|
34
34
|
|
35
35
|
Mexbt.ticker(currency_pair: 'BTCUSD')
|
36
36
|
|
37
|
-
|
37
|
+
## Private API
|
38
38
|
|
39
39
|
|
40
|
-
|
40
|
+
### Configuration
|
41
41
|
|
42
42
|
You need to generate an API key pair at https://mexbt.com/api/keys. However if you want to get started quickly we recommend having a play in the sandbox first, see the 'Sandbox' section below.
|
43
43
|
|
@@ -56,7 +56,7 @@ You need to generate an API key pair at https://mexbt.com/api/keys. However if y
|
|
56
56
|
Mexbt::Orders.cancel(id: 123, currency_pair: 'btcmxn')
|
57
57
|
Mexbt::Orders.cancel_all() # Cancel all orders for the default currency pair
|
58
58
|
|
59
|
-
|
59
|
+
### Account functions
|
60
60
|
|
61
61
|
Mexbt::Account.balance
|
62
62
|
Mexbt::Account.trades
|
@@ -64,7 +64,7 @@ You need to generate an API key pair at https://mexbt.com/api/keys. However if y
|
|
64
64
|
Mexbt::Account.deposit_addresses
|
65
65
|
Mexbt::Account.withdraw(amount: 1, currency: :btc, address: 'xxx') Mexbt::Account.info # Fetches your user info
|
66
66
|
|
67
|
-
|
67
|
+
### Sandbox
|
68
68
|
|
69
69
|
It's a good idea to first play with the API in the sandbox, that way you don't need any real money to start trading with the API. Just make sure you configure `sandbox = true`.
|
70
70
|
|
@@ -72,7 +72,7 @@ You can register a sandbox account at https://sandbox.mexbt.com/en/register. It
|
|
72
72
|
|
73
73
|
Your sandbox account will automatically have a bunch of cash to play with.
|
74
74
|
|
75
|
-
|
75
|
+
## API documentation
|
76
76
|
|
77
77
|
You can find API docs for the Public API at http://docs.mexbtpublicapi.apiary.io
|
78
78
|
|
@@ -81,7 +81,7 @@ API docs for the Private API are at http://docs.mexbtprivateapi.apiary.io
|
|
81
81
|
There are also docs for the Private API sandbox at http://docs.mexbtprivateapisandbox.apiary.io
|
82
82
|
|
83
83
|
|
84
|
-
|
84
|
+
## TODO
|
85
85
|
|
86
86
|
Mock out web calls with WebMock so that specs don't break everytime sandbox db is cleaned.
|
87
87
|
|
data/lib/mexbt/client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rest_client'
|
2
|
-
require 'active_support'
|
2
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
3
3
|
|
4
4
|
module Mexbt
|
5
5
|
module Client
|
@@ -39,5 +39,10 @@ module Mexbt
|
|
39
39
|
raise json_response[:rejectReason]
|
40
40
|
end
|
41
41
|
end
|
42
|
+
|
43
|
+
def call_data(path)
|
44
|
+
res = Request.execute(method: :get, url: "https://data.mexbt.com/#{path}", ssl_version: SSL_VERSION)
|
45
|
+
ActiveSupport::HashWithIndifferentAccess.new(JSON.parse(res))
|
46
|
+
end
|
42
47
|
end
|
43
48
|
end
|
data/lib/mexbt/orders.rb
CHANGED
@@ -5,6 +5,10 @@ module Mexbt
|
|
5
5
|
include Mexbt::Private
|
6
6
|
|
7
7
|
def create(amount:, price: nil, currency_pair: Mexbt.currency_pair, side: :buy, type: :market)
|
8
|
+
# Horribly hack because sandbox only accepts 6 decimal places thanks to AP
|
9
|
+
if Mexbt.sandbox
|
10
|
+
amount = BigDecimal.new(amount, 15).round(6).to_f
|
11
|
+
end
|
8
12
|
type =
|
9
13
|
case type
|
10
14
|
when :market, 1
|
data/lib/mexbt/public.rb
CHANGED
@@ -16,7 +16,21 @@ module Mexbt
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def order_book(currency_pair: Mexbt.currency_pair)
|
19
|
-
|
19
|
+
begin
|
20
|
+
call("order-book", { productPair: currency_pair })
|
21
|
+
rescue RestClient::RequestFailed => e
|
22
|
+
if currency_pair.to_s.downcase === "btcmxn"
|
23
|
+
data_order_book = call_data("order-book/btcmxn")
|
24
|
+
mapper = Proc.new do |o|
|
25
|
+
{px: o.first, qty: o.last}
|
26
|
+
end
|
27
|
+
data_order_book[:asks] = data_order_book[:asks].map(&mapper)
|
28
|
+
data_order_book[:bids] = data_order_book[:bids].map(&mapper)
|
29
|
+
data_order_book
|
30
|
+
else
|
31
|
+
raise e
|
32
|
+
end
|
33
|
+
end
|
20
34
|
end
|
21
35
|
|
22
36
|
alias :orders :order_book
|
data/lib/mexbt/version.rb
CHANGED
data/spec/private_api_spec.rb
CHANGED
@@ -29,8 +29,8 @@ describe Mexbt::Private do
|
|
29
29
|
|
30
30
|
before do
|
31
31
|
Mexbt.configure do |c|
|
32
|
-
c.public_key = "
|
33
|
-
c.private_key = "
|
32
|
+
c.public_key = "56dd4872e23f9e326c0184552791f6f7"
|
33
|
+
c.private_key = "23a9814d6cf3cbb641bc41eb0b2115de"
|
34
34
|
c.user_id = "test@mexbt.com"
|
35
35
|
c.sandbox = true
|
36
36
|
end
|
@@ -62,6 +62,12 @@ describe Mexbt::Private do
|
|
62
62
|
expect(res["serverOrderId"]).to be_a(Fixnum)
|
63
63
|
end
|
64
64
|
|
65
|
+
it "allows creating orders with 8 decimal places" do
|
66
|
+
res = Mexbt::Orders.create(amount: 0.12345678, currency_pair: "BTCUSD")
|
67
|
+
expect(res["isAccepted"]).to be true
|
68
|
+
expect(res["serverOrderId"]).to be_a(Fixnum)
|
69
|
+
end
|
70
|
+
|
65
71
|
it "allows creating limit orders" do
|
66
72
|
res = Mexbt::Orders.create(type: :limit, price: 100, amount: 0.1234, currency_pair: "BTCUSD")
|
67
73
|
expect(res["isAccepted"]).to be true
|
data/spec/public_api_spec.rb
CHANGED
@@ -22,6 +22,20 @@ describe Mexbt do
|
|
22
22
|
expect(res["trades"]).to eql([])
|
23
23
|
end
|
24
24
|
|
25
|
+
it "fetches btcmxn order book data from data API if AP API down" do
|
26
|
+
expect(Mexbt).to receive(:call).with("order-book", { productPair: :btcmxn }).and_raise("Boom")
|
27
|
+
order_book = Mexbt.order_book
|
28
|
+
expect(order_book["asks"].first["px"]).to be_a_kind_of(Numeric)
|
29
|
+
expect(order_book["asks"].first["qty"]).to be_a_kind_of(Numeric)
|
30
|
+
expect(order_book["bids"].first["px"]).to be_a_kind_of(Numeric)
|
31
|
+
expect(order_book["bids"].first["qty"]).to be_a_kind_of(Numeric)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "simulates market order using data api data if AP API down" do
|
35
|
+
expect(Mexbt).to receive(:call).with("order-book", { productPair: :btcmxn }).and_raise("Boom")
|
36
|
+
expect(Mexbt.simulate_market_order(second_currency: 100)["first_amount"]).to be_a_kind_of(Numeric)
|
37
|
+
end
|
38
|
+
|
25
39
|
context "simulating market orders" do
|
26
40
|
|
27
41
|
before do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mexbt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- williamcoates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|