quadrigacx 0.12.3 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8afbc179363d7022196a8b44b2a37a00a9c801cd
4
- data.tar.gz: 3fe1a87bf68c6e75906141a72bd73b2ecd90b692
2
+ SHA256:
3
+ metadata.gz: 5a81826ca57d6b90285d391b7d25a7f499e0aec57206be2f3c8dace08091773e
4
+ data.tar.gz: da04524969be081183e4aae55b0102b8e1aee286fdd032cde6b644b6b4a6d50f
5
5
  SHA512:
6
- metadata.gz: 016c2c2d1b23e6cd194e27ceca3b481806423468429cf5c9928754e4260db4e815bedc85da8c8870dafdd76419333a4ddca197cce271c2324a7d42c00933b8b9
7
- data.tar.gz: 6a46f3f055ea575cc524bde4a53ff6ab35868e7c5b60de6872438b76448b06bf4d7caa1be3fbb1d77c572f3454bbcffe33889ca00cb295fb6a79f53962b1c996
6
+ metadata.gz: e0ba56d452f0ce62aed82cc6d300de433c72e542e7b5456c1f24945df0fda3b0d5268ea8e3ffd0f5dc184fdfa02dd09e30ffc3ad4543fa9d2ec6d69319c06d79
7
+ data.tar.gz: 64ab4f1172d5417086fef4ec9e28c373135ebbce4951aa25c9305405fdc463e1835e3ae6caa185162223878a8e55ac504f62d84ef33480facf9547278cf71ef2
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0
5
+ - 2.1
6
+ - 2.2
7
+ - 2.3
8
+ - 2.4
9
+ - 2.5
10
+
11
+ notifications:
12
+ email: false
13
+
14
+ script: bundle exec rspec
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![Gem Version](https://badge.fury.io/rb/quadrigacx.svg)](https://badge.fury.io/rb/quadrigacx)
2
+ [![Build Status](https://travis-ci.org/mhluska/quadrigacx.svg?branch=master)](https://travis-ci.org/mhluska/quadrigacx)
3
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f0ec6c87254b1cfafe46/maintainability)](https://codeclimate.com/github/mhluska/quadrigacx/maintainability)
4
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/f0ec6c87254b1cfafe46/test_coverage)](https://codeclimate.com/github/mhluska/quadrigacx/test_coverage)
5
+
1
6
  # Quadrigacx
2
7
 
3
8
  Ruby wrapper for the QuadrigaCX API.
@@ -101,36 +106,44 @@ Place a market order. Returns JSON describing the order.
101
106
  order = client.market_sell(amount: 0.01)
102
107
  ```
103
108
 
104
- #### Cancel
109
+ #### Cancel Order
105
110
 
106
111
  Cancel an order.
107
112
 
108
113
  ```ruby
109
- client.cancel(order.id)
114
+ client.cancel_order(id: order.id)
110
115
  ```
111
116
 
112
- #### Withdraw
117
+ #### Open Orders
113
118
 
114
- Withdraw bitcoins.
119
+ Return a JSON list of open orders.
115
120
 
116
121
  ```ruby
117
- response = client.withdraw(amount: 1, address: '1FAs1ywa3pqS6S5mvypXjCtHAzwCkymNUX')
122
+ response = client.open_orders
118
123
  ```
119
124
 
120
- #### Open Orders
125
+ #### Lookup Order
121
126
 
122
- Return a JSON list of open orders.
127
+ Returns a JSON list of details about 1 or more orders.
123
128
 
124
129
  ```ruby
125
- response = client.open_orders
130
+ response = client.lookup_order(id: order.id)
131
+ ```
132
+
133
+ #### Withdraw Coins
134
+
135
+ Withdraw coins (i.e., bitcoin).
136
+
137
+ ```ruby
138
+ response = client.withdraw(QuadrigaCX::Coin::BITCOIN, amount: 1, address: '1FAs1ywa3pqS6S5mvypXjCtHAzwCkymNUX')
126
139
  ```
127
140
 
128
- #### Wallet Address
141
+ #### Deposit Address
129
142
 
130
- Return a bitcoin deposit address.
143
+ Return a deposit address (i.e., bitcoin).
131
144
 
132
145
  ```ruby
133
- response = client.wallet_address
146
+ response = client.deposit_address(QuadrigaCX::Coin::BITCOIN)
134
147
  ```
135
148
 
136
149
  #### User Transactions
data/Rakefile CHANGED
@@ -1,2 +1,2 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
2
2
 
@@ -2,6 +2,7 @@ module QuadrigaCX
2
2
  autoload :Error, 'quadrigacx/error'
3
3
  autoload :Request, 'quadrigacx/request'
4
4
  autoload :Client, 'quadrigacx/client'
5
+ autoload :Coin, 'quadrigacx/coin'
5
6
  autoload :Version, 'quadrigacx/version'
6
7
 
7
8
  class << self
@@ -16,7 +16,7 @@ module QuadrigaCX
16
16
  #
17
17
  def initialize options={}
18
18
  unless options.kind_of?(Hash)
19
- raise ArgumentError, "Options hash required"
19
+ raise ArgumentError, 'Options hash required'
20
20
  end
21
21
 
22
22
  @client_id = options[:client_id]
@@ -8,9 +8,9 @@ module QuadrigaCX
8
8
 
9
9
  # Place a limit buy order. Returns JSON describing the order.
10
10
  #
11
- # amount - amount of major currency
12
- # price - price to buy at
13
- # book - optional, if not specified, will default to btc_cad
11
+ # amount - amount of major currency.
12
+ # price - price to buy at.
13
+ # book - optional, if not specified, will default to btc_cad.
14
14
  def limit_buy params={}
15
15
  raise ConfigurationError.new('No price specified for limit buy') unless params[:price]
16
16
  request(:post, '/buy', params)
@@ -18,9 +18,9 @@ module QuadrigaCX
18
18
 
19
19
  # Place a limit sell order. Returns JSON describing the order.
20
20
  #
21
- # amount - amount of major currency
22
- # price - price to sell at
23
- # book - optional, if not specified, will default to btc_cad
21
+ # amount - amount of major currency.
22
+ # price - price to sell at.
23
+ # book - optional, if not specified, will default to btc_cad.
24
24
  def limit_sell params={}
25
25
  raise ConfigurationError.new('No price specified for limit sell') unless params[:price]
26
26
  request(:post, '/sell', params)
@@ -28,53 +28,68 @@ module QuadrigaCX
28
28
 
29
29
  # Place a market order. Returns JSON describing the order.
30
30
  #
31
- # amount - amount of minor currency to spend
32
- # book - optional, if not specified, will default to btc_cad
31
+ # amount - amount of major currency to spend.
32
+ # book - optional, if not specified, will default to btc_cad.
33
33
  def market_buy params={}
34
34
  request(:post, '/buy', params)
35
35
  end
36
36
 
37
37
  # Place a market order. Returns JSON describing the order.
38
38
  #
39
- # amount - amount of minor currency to spend
40
- # book - optional, if not specified, will default to btc_cad
39
+ # amount - amount of major currency to sell.
40
+ # book - optional, if not specified, will default to btc_cad.
41
41
  def market_sell params={}
42
42
  request(:post, '/sell', params)
43
43
  end
44
44
 
45
45
  # Cancel an order.
46
46
  #
47
- # id – a 64 characters long hexadecimal string taken from the list of orders
48
- def cancel params={}
47
+ # id – a 64 characters long hexadecimal string taken from the list of orders.
48
+ def cancel_order params={}
49
49
  request(:post, '/cancel_order', params)
50
50
  end
51
51
 
52
- # Withdraw bitcoins.
53
- #
54
- # amount – The amount to withdraw
55
- # address – The bitcoin address we will send the amount to
56
- def withdraw params={}
57
- request(:post, '/bitcoin_withdrawal', params)
58
- end
59
-
60
52
  # Return a JSON list of open orders.
61
53
  #
62
- # book - optional, if not specified, will default to btc_cad
54
+ # book - optional, if not specified, will default to btc_cad.
63
55
  def open_orders params={}
64
56
  request(:post, '/open_orders', params)
65
57
  end
66
58
 
67
- # Return a bitcoin deposit address.
68
- def wallet_address params={}
69
- request(:post, '/bitcoin_deposit_address', params)
59
+ # Returns JSON list of details about 1 or more orders.
60
+ #
61
+ # id – a single or array of 64 characters long hexadecimal string taken from the list of orders.
62
+ def lookup_order params={}
63
+ request(:post, '/lookup_order', params)
70
64
  end
71
65
 
66
+ # Withdrawal of the specified coin type.
67
+ #
68
+ # coin – The coin type
69
+ # amount – The amount to withdraw.
70
+ # address – The coin type's address we will send the amount to.
71
+ def withdraw coin, params={}
72
+ raise ConfigurationError.new('No coin type specified') unless coin
73
+ raise ConfigurationError.new('Invalid coin type specified') unless Coin.valid?(coin)
74
+ request(:post, "/#{coin}_withdrawal", params)
75
+ end
76
+
77
+ # Return a deposit address for specific coin type.
78
+ #
79
+ # coin – The coin type
80
+ def deposit_address coin, params={}
81
+ raise ConfigurationError.new('No coin type specified') unless coin
82
+ raise ConfigurationError.new('Invalid coin type specified') unless Coin.valid?(coin)
83
+ request(:post, "/#{coin}_deposit_address", params)
84
+ end
85
+
86
+
72
87
  # Return a list of user transactions.
73
88
  #
74
89
  # offset - optional, skip that many transactions before beginning to return results. Default: 0.
75
- # limit - optional, limit result to that many transactions. Default: 100.
90
+ # limit - optional, limit result to that many transactions. Default: 50.
76
91
  # sort - optional, sorting by date and time (asc - ascending; desc - descending). Default: desc.
77
- # book - optional, if not specified, will default to btc_cad
92
+ # book - optional, if not specified, will default to btc_cad.
78
93
  def user_transactions params={}
79
94
  request(:post, '/user_transactions', params).each { |t| t.id = t.id.to_s }
80
95
  end
@@ -17,7 +17,7 @@ module QuadrigaCX
17
17
 
18
18
  # Return descending JSON list of recent trades.
19
19
  #
20
- # book - optional, book to return orders for (default btc_cad)
20
+ # book - optional, book to return orders for (default btc_cad).
21
21
  # time - optional, time frame for transaction export ("minute" - 1 minute, "hour" - 1 hour). Default: hour.
22
22
  def transactions params={}
23
23
  request(:get, '/transactions', params)
@@ -0,0 +1,23 @@
1
+ module QuadrigaCX
2
+ module Coin
3
+ BITCOIN = 'bitcoin'
4
+ BITCOIN_CASH = 'bitcoincash'
5
+ BITCOIN_GOLD = 'bitcoingold'
6
+ LITECOIN = 'litecoin'
7
+ ETHER = 'ether'
8
+
9
+ def self.valid? type
10
+ ALL_COINS.include?(type)
11
+ end
12
+
13
+ private
14
+
15
+ ALL_COINS = [
16
+ BITCOIN,
17
+ BITCOIN_CASH,
18
+ BITCOIN_GOLD,
19
+ LITECOIN,
20
+ ETHER
21
+ ]
22
+ end
23
+ end
@@ -23,10 +23,13 @@ module QuadrigaCX
23
23
  private
24
24
 
25
25
  def fix_json response
26
- # The `/cancel_order` route returns `"true"` instead of valid JSON.
27
- return true if response.strip == '"true"'
28
- return false if response.strip == '"false"'
29
- response[/"(.*)"/, 1] || response
26
+ # This handles all responses that cannot be parsed as JSON
27
+ # Usually such responses are a single String of the form "..."; otherwise,
28
+ # the body is returned as a String
29
+ response_body = response.body
30
+ return true if response_body.strip == '"true"'
31
+ return false if response_body.strip == '"false"'
32
+ response_body[/"(.*)"/, 1] || response_body
30
33
  end
31
34
 
32
35
  def hmac_request http_method, path, body={}
@@ -1,3 +1,3 @@
1
1
  module QuadrigaCX
2
- VERSION = '0.12.3'
2
+ VERSION = '1.0.0'
3
3
  end
@@ -16,14 +16,15 @@ Gem::Specification.new do |spec|
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
+ spec.required_ruby_version = '>= 2.0.0'
20
21
 
21
22
  spec.add_runtime_dependency 'json', '~> 1.8'
22
- spec.add_runtime_dependency 'rest-client', '~> 1.7'
23
+ spec.add_runtime_dependency 'rest-client', '~> 2.0.2'
23
24
 
24
25
  spec.add_development_dependency 'byebug', '~> 5.0'
25
26
  spec.add_development_dependency 'rspec', '~> 3.1'
26
- spec.add_development_dependency 'webmock', '~> 1.20'
27
+ spec.add_development_dependency 'webmock', '~> 3.2.0'
27
28
  spec.add_development_dependency 'vcr', '~> 2.9'
28
29
  spec.add_development_dependency 'gem-release', '~> 0.7'
29
30
  spec.add_development_dependency 'bundler', '~> 1.7'
@@ -37,7 +37,7 @@ describe QuadrigaCX::Client, :vcr do
37
37
 
38
38
  context 'when using the group option' do
39
39
  let!(:order) { safe_limit_buy }
40
- after { subject.cancel(id: order.id) }
40
+ after { subject.cancel_order(id: order.id) }
41
41
 
42
42
  it 'does not group same price orders' do
43
43
  ungrouped_bids = subject.order_book(group: 0).bids
@@ -93,7 +93,7 @@ describe QuadrigaCX::Client, :vcr do
93
93
  let(:order_cad) { safe_limit_buy }
94
94
  let(:order_usd) { safe_limit_buy(book: :btc_usd) }
95
95
 
96
- after { subject.cancel(id: order_cad.id) && subject.cancel(id: order_usd.id) }
96
+ after { subject.cancel_order(id: order_cad.id) && subject.cancel_order(id: order_usd.id) }
97
97
 
98
98
  it 'places a limit buy order_cad' do
99
99
  expect(order_cad.datetime).not_to be_nil
@@ -116,7 +116,7 @@ describe QuadrigaCX::Client, :vcr do
116
116
  let(:order_cad) { safe_limit_sell }
117
117
  let(:order_usd) { safe_limit_sell(book: :btc_usd) }
118
118
 
119
- after { subject.cancel(id: order_cad.id) && subject.cancel(id: order_usd.id) }
119
+ after { subject.cancel_order(id: order_cad.id) && subject.cancel_order(id: order_usd.id) }
120
120
 
121
121
  it 'places a limit sell order' do
122
122
  expect(order_cad.datetime).not_to be_nil
@@ -157,28 +157,21 @@ describe QuadrigaCX::Client, :vcr do
157
157
  end
158
158
  end
159
159
 
160
- describe '#cancel' do
160
+ describe '#cancel_order' do
161
161
  let(:order) { safe_limit_buy }
162
162
 
163
163
  it 'cancels an order' do
164
- response = subject.cancel(id: order.id)
164
+ response = subject.cancel_order(id: order.id)
165
165
  expect(response).to be true
166
166
  end
167
167
  end
168
168
 
169
- describe '#withdraw' do
170
- it 'withdraws bitcoins' do
171
- response = subject.withdraw(amount: 0.01, address: '1DVLFma28jEgTCUjQ32FUYe12bRzvywAfr')
172
- expect(response).to eq('ok')
173
- end
174
- end
175
-
176
169
  describe '#open_orders' do
177
170
  let(:open_orders_cad) { subject.open_orders }
178
171
  let(:open_orders_usd) { subject.open_orders(book: :btc_usd) }
179
172
  let!(:orders) { [safe_limit_buy, safe_limit_buy(book: :btc_usd)] }
180
173
 
181
- after { orders.each { |order| subject.cancel(id: order.id) }}
174
+ after { orders.each { |order| subject.cancel_order(id: order.id) }}
182
175
 
183
176
  it 'lists open orders' do
184
177
  expect(open_orders_cad.first.datetime).not_to be_nil
@@ -191,10 +184,73 @@ describe QuadrigaCX::Client, :vcr do
191
184
  end
192
185
  end
193
186
 
194
- describe '#wallet_address' do
195
- it 'returns a wallet address' do
196
- response = subject.wallet_address
197
- expect(response.length).to be_between(26, 35)
187
+ describe '#lookup_order' do
188
+ let(:lookup_order) { subject.lookup_order(id: '1na3tujn948erx1xlbfu8yw93f8y41vgja5if6zdegvwk8pcked34l48sh1or189') }
189
+
190
+ it 'looks up an order' do
191
+ expect(lookup_order.first.amount).to_not be_nil
192
+ expect(lookup_order.first.book).to_not be_nil
193
+ expect(lookup_order.first.created).to_not be_nil
194
+ expect(lookup_order.first.id).to_not be_nil
195
+ expect(lookup_order.first.price).to_not be_nil
196
+ expect(lookup_order.first.status).to_not be_nil
197
+ expect(lookup_order.first.type).to_not be_nil
198
+ expect(lookup_order.first.updated).to_not be_nil
199
+ end
200
+ end
201
+
202
+ describe '#withdraw' do
203
+ context 'valid coin type' do
204
+ it 'success in withdrawal' do
205
+ coin = QuadrigaCX::Coin::BITCOIN
206
+ response = subject.withdraw(coin, amount: 0.01, address: '1DVLFma28jEgTCUjQ32FUYe12bRzvywAfr')
207
+ expect(response).to eq('ok')
208
+ end
209
+ end
210
+
211
+ context 'no coin type' do
212
+ it 'failure in withdrawal' do
213
+ expect do
214
+ subject.withdraw(nil, amount: 0.01, address: '1DVLFma28jEgTCUjQ32FUYe12bRzvywAfr')
215
+ end.to raise_error(QuadrigaCX::ConfigurationError)
216
+ end
217
+ end
218
+
219
+ context 'invalid coin type' do
220
+ it 'failure in withdrawal' do
221
+ coin = "DummyCoin"
222
+ expect do
223
+ subject.withdraw(coin, amount: 0.01, address: '1DVLFma28jEgTCUjQ32FUYe12bRzvywAfr')
224
+ end.to raise_error(QuadrigaCX::ConfigurationError)
225
+ end
226
+ end
227
+ end
228
+
229
+ describe '#deposit_address' do
230
+ context 'valid coin type' do
231
+ it 'success in retrieving deposit address for valid coin type' do
232
+ coin = QuadrigaCX::Coin::BITCOIN
233
+ response = subject.deposit_address(coin)
234
+ expect(response.length).to be_between(26, 35)
235
+ expect(response.class).to eq(String)
236
+ end
237
+ end
238
+
239
+ context 'invalid coin type' do
240
+ it 'failure in retrieving deposit address' do
241
+ expect do
242
+ subject.deposit_address(nil)
243
+ end.to raise_error(QuadrigaCX::ConfigurationError)
244
+ end
245
+ end
246
+
247
+ context 'invalid coin type' do
248
+ it 'failure in retrieving deposit address' do
249
+ coin = "DummyCoin"
250
+ expect do
251
+ subject.deposit_address(coin)
252
+ end.to raise_error(QuadrigaCX::ConfigurationError)
253
+ end
198
254
  end
199
255
  end
200
256
 
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe QuadrigaCX::Coin do
4
+ describe '#valid?' do
5
+ it 'returns true for valid coin type' do
6
+ coin = QuadrigaCX::Coin::BITCOIN
7
+ expect(described_class.valid?(coin)).to be true
8
+ end
9
+
10
+ it 'returns false for invalid coin type' do
11
+ coin = 'DummyCoin'
12
+ expect(described_class.valid?(coin)).to be false
13
+ end
14
+ end
15
+ end
@@ -50,6 +50,7 @@ http_interactions:
50
50
  string: !binary |-
51
51
  H4sIAAAAAAAAA1MyNk+pyDPL9EnxTfKyLM5OL6zyLXW2dDTOdQvICzcuCHQt
52
52
  UAIAtr7WYyQAAAA=
53
- http_version:
53
+ http_version:
54
54
  recorded_at: Mon, 03 Aug 2015 13:59:46 GMT
55
55
  recorded_with: VCR 2.9.3
56
+
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.quadrigacx.com/v2/lookup_order
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"id":"1na3tujn948erx1xlbfu8yw93f8y41vgja5if6zdegvwk8pcked34l48sh1or189","key":"0000000000","nonce":"1516498144541","signature":"0000000000000000000000000000000000000000000000000000000000000000"}'
9
+ headers:
10
+ Accept:
11
+ - application/json
12
+ Accept-Encoding:
13
+ - gzip, deflate
14
+ User-Agent:
15
+ - rest-client/2.0.2 (darwin15.6.0 x86_64) ruby/2.3.1p112
16
+ Content-Type:
17
+ - application/json
18
+ Content-Length:
19
+ - '195'
20
+ Host:
21
+ - api.quadrigacx.com
22
+ response:
23
+ status:
24
+ code: 200
25
+ message: OK
26
+ headers:
27
+ Date:
28
+ - Sun, 21 Jan 2018 01:29:05 GMT
29
+ Content-Type:
30
+ - application/json
31
+ Content-Length:
32
+ - '179'
33
+ Connection:
34
+ - keep-alive
35
+ Set-Cookie:
36
+ - __cfduid=d14a9326a9d2dd89098e08c9a00f3ed931516498144; expires=Mon, 21-Jan-19
37
+ 01:29:04 GMT; path=/; domain=.quadrigacx.com; HttpOnly
38
+ Access-Control-Allow-Origin:
39
+ - "*"
40
+ Content-Encoding:
41
+ - gzip
42
+ Vary:
43
+ - Accept-Encoding
44
+ X-Content-Type-Options:
45
+ - nosniff
46
+ X-Frame-Options:
47
+ - SAMEORIGIN
48
+ X-Xss-Protection:
49
+ - 1; mode=block
50
+ Expect-Ct:
51
+ - max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
52
+ Server:
53
+ - cloudflare
54
+ Cf-Ray:
55
+ - 3e06801d1f475296-MIA
56
+ body:
57
+ encoding: ASCII-8BIT
58
+ string: !binary |-
59
+ H4sIAAAAAAAAA22OSQ7CIBiFr2JY24a/hQpcxRhDgdYOtoRCB413F1y7fN/L
60
+ G65vJJ9zmDwSCOcYUwwEMDqjep6HyGqv7krqCJQz0hsdWYGBZRiyAp/gIigV
61
+ v0CXLJhk6UM/ccKM22Ef6yawY+Nlww4Ca9tL2jXVS5t23QZm1WB0SUbClgfM
62
+ DhiPPdZ1yqQqyinJeUKLlz4saTkKf9hkp8lg9f9LlSAMfW5ffJhrC90AAAA=
63
+ http_version:
64
+ recorded_at: Sun, 21 Jan 2018 01:29:05 GMT
65
+ recorded_with: VCR 2.9.3
@@ -49,6 +49,7 @@ http_interactions:
49
49
  encoding: ASCII-8BIT
50
50
  string: !binary |-
51
51
  H4sIAAAAAAAAA1PKz1YCADzHnTsEAAAA
52
- http_version:
52
+ http_version:
53
53
  recorded_at: Mon, 03 Aug 2015 13:59:45 GMT
54
54
  recorded_with: VCR 2.9.3
55
+
@@ -1,3 +1,4 @@
1
+ require 'webmock/rspec'
1
2
  require 'vcr'
2
3
  require 'quadrigacx'
3
4
 
@@ -6,13 +7,13 @@ RSpec.configure do |config|
6
7
  end
7
8
 
8
9
  VCR.configure do |config|
9
- config.cassette_library_dir = "spec/fixtures/vcr_cassettes"
10
+ config.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
10
11
  config.hook_into :webmock
11
12
  config.configure_rspec_metadata!
12
13
  end
13
14
 
14
15
  QuadrigaCX.configure do |config|
15
- config.client_id = "client_id"
16
- config.api_key = "api_key"
17
- config.api_secret = "api_secret"
16
+ config.client_id = 'client_id'
17
+ config.api_key = 'api_key'
18
+ config.api_secret = 'api_secret'
18
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quadrigacx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maros Hluska
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-16 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.7'
33
+ version: 2.0.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.7'
40
+ version: 2.0.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: byebug
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.20'
75
+ version: 3.2.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.20'
82
+ version: 3.2.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: vcr
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -143,22 +143,25 @@ extensions: []
143
143
  extra_rdoc_files: []
144
144
  files:
145
145
  - ".gitignore"
146
+ - ".travis.yml"
146
147
  - Gemfile
147
148
  - LICENSE
148
- - LICENSE.txt
149
149
  - README.md
150
150
  - Rakefile
151
151
  - lib/quadrigacx.rb
152
152
  - lib/quadrigacx/client.rb
153
153
  - lib/quadrigacx/client/private.rb
154
154
  - lib/quadrigacx/client/public.rb
155
+ - lib/quadrigacx/coin.rb
155
156
  - lib/quadrigacx/error.rb
156
157
  - lib/quadrigacx/request.rb
157
158
  - lib/quadrigacx/version.rb
158
159
  - quadrigacx.gemspec
159
160
  - spec/client_spec.rb
161
+ - spec/coin_spec.rb
160
162
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_balance/returns_all_account_balances.yml
161
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_cancel/cancels_an_order.yml
163
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_cancel_order/cancels_an_order.yml
164
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_deposit_address/valid_coin_type/success_in_retrieving_deposit_address_for_valid_coin_type.yml
162
165
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_exceeding_available_balance.yml
163
166
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_exceeding_balance.yml
164
167
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_no_price_is_provided.yml
@@ -169,6 +172,7 @@ files:
169
172
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/errors/throws_an_error_when_no_price_is_provided.yml
170
173
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/places_a_USD_limit_sell_order.yml
171
174
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/places_a_limit_sell_order.yml
175
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_lookup_order/looks_up_an_order.yml
172
176
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_buy/places_a_USD_market_buy_order.yml
173
177
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_buy/places_a_market_buy_order.yml
174
178
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_sell/places_a_USD_market_sell_order.yml
@@ -178,8 +182,7 @@ files:
178
182
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_USD_transactions.yml
179
183
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_limited_transactions.yml
180
184
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_transactions.yml
181
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_wallet_address/returns_a_wallet_address.yml
182
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_withdraw/withdraws_bitcoins.yml
185
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_withdraw/valid_coin_type/success_in_withdrawal.yml
183
186
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/returns_a_USD_order_book.yml
184
187
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/returns_a_list_of_all_open_orders.yml
185
188
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/when_using_the_group_option/does_not_group_same_price_orders.yml
@@ -200,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
200
203
  requirements:
201
204
  - - ">="
202
205
  - !ruby/object:Gem::Version
203
- version: '0'
206
+ version: 2.0.0
204
207
  required_rubygems_version: !ruby/object:Gem::Requirement
205
208
  requirements:
206
209
  - - ">="
@@ -208,14 +211,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
211
  version: '0'
209
212
  requirements: []
210
213
  rubyforge_project:
211
- rubygems_version: 2.6.12
214
+ rubygems_version: 2.7.3
212
215
  signing_key:
213
216
  specification_version: 4
214
217
  summary: QuadrigaCX API wrapper
215
218
  test_files:
216
219
  - spec/client_spec.rb
220
+ - spec/coin_spec.rb
217
221
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_balance/returns_all_account_balances.yml
218
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_cancel/cancels_an_order.yml
222
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_cancel_order/cancels_an_order.yml
223
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_deposit_address/valid_coin_type/success_in_retrieving_deposit_address_for_valid_coin_type.yml
219
224
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_exceeding_available_balance.yml
220
225
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_exceeding_balance.yml
221
226
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_buy/errors/throws_an_error_when_no_price_is_provided.yml
@@ -226,6 +231,7 @@ test_files:
226
231
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/errors/throws_an_error_when_no_price_is_provided.yml
227
232
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/places_a_USD_limit_sell_order.yml
228
233
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_limit_sell/places_a_limit_sell_order.yml
234
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_lookup_order/looks_up_an_order.yml
229
235
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_buy/places_a_USD_market_buy_order.yml
230
236
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_buy/places_a_market_buy_order.yml
231
237
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_market_sell/places_a_USD_market_sell_order.yml
@@ -235,8 +241,7 @@ test_files:
235
241
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_USD_transactions.yml
236
242
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_limited_transactions.yml
237
243
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_user_transactions/returns_a_list_of_transactions.yml
238
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_wallet_address/returns_a_wallet_address.yml
239
- - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_withdraw/withdraws_bitcoins.yml
244
+ - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/private/_withdraw/valid_coin_type/success_in_withdrawal.yml
240
245
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/returns_a_USD_order_book.yml
241
246
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/returns_a_list_of_all_open_orders.yml
242
247
  - spec/fixtures/vcr_cassettes/QuadrigaCX_Client/public/_order_book/when_using_the_group_option/does_not_group_same_price_orders.yml
@@ -1,22 +0,0 @@
1
- Copyright (c) 2015 Maros Hluska
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.