kraken_ruby 0.2.1 → 0.3.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
2
  SHA1:
3
- metadata.gz: ec8b50b8dc92dd736d696e55e0c5a6d9d053afc0
4
- data.tar.gz: 93cd06c2b0f5985a6322290d4500238e27103a42
3
+ metadata.gz: 60837e2ad5baa1c1bc95134a33aee85b9e4fecd2
4
+ data.tar.gz: 8439a69deba784ef9bf3ea2e39f94d836c6fa157
5
5
  SHA512:
6
- metadata.gz: 076941c2f85cf77902c745bea8555bae9f5a607167038ffe6aabb1b3ccb6d0e168f707ff1c554296c316734ecddd942bb57e2946e4bbf9618154786c48b69f40
7
- data.tar.gz: 3ed194a84dddc2319d67dc509a84a6fc03c6e667f9a3fa9f6b20022f2247c01e0545bb492d182629f833bc50181331d74ad4d5b9303df809b904f5a55ddaaa20
6
+ metadata.gz: e1bd273af83305d4b321a6fa436fe68870ab7b703159d1a799c7069b97c84df4c554eeb51dbc1e1a4734ae1c82ceb2fe4ca793ee0f11094cd910aacc9c58004e
7
+ data.tar.gz: 894ec8af3e84cb059ff9dd853bb4c4d250af0880b08afe818e0d05b91fdec6d9d985ddc2de768949d6ea2617cd225acf422345ae08433ed1485e2eab882f59d3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kraken_ruby (0.2.0)
4
+ kraken_ruby (0.3.0)
5
5
  addressable
6
6
  hashie
7
7
  httparty
data/README.md CHANGED
@@ -189,4 +189,4 @@ volume = kraken.query_ledgers(asset_pairs)
189
189
  2. Create your feature branch (`git checkout -b my-new-feature`)
190
190
  3. Commit your changes (`git commit -am 'Add some feature'`)
191
191
  4. Push to the branch (`git push origin my-new-feature`)
192
- 5. Create new Pull Request
192
+ 5. Create new Pull Request
Binary file
@@ -1,6 +1,6 @@
1
1
  require 'httparty'
2
2
  require 'hashie'
3
- require 'Base64'
3
+ require 'base64'
4
4
  require 'addressable/uri'
5
5
 
6
6
 
@@ -35,7 +35,7 @@ module Kraken
35
35
  opts = { 'pair' => pairs }
36
36
  get_public 'Ticker', opts
37
37
  end
38
-
38
+
39
39
  def order_book(pair, opts={})
40
40
  opts['pair'] = pair
41
41
  get_public 'Depth', opts
@@ -111,7 +111,7 @@ module Kraken
111
111
  def add_order(opts={})
112
112
  required_opts = %w{pair, type, ordertype, volume}
113
113
  opts.keys.each do |key|
114
- unless required_opts.include?(1)
114
+ unless required_opts.include?(1)
115
115
  raise "Required options, not given. Input must include #{required_opts}"
116
116
  end
117
117
  end
@@ -131,7 +131,7 @@ module Kraken
131
131
 
132
132
  headers = {
133
133
  'API-Key' => @api_key,
134
- 'API-Sign' => generate_signature(method, post_data, opts)
134
+ 'API-Sign' => generate_signature(method, post_data, opts)
135
135
  }
136
136
 
137
137
  url = @base_uri + url_path(method)
@@ -139,8 +139,14 @@ module Kraken
139
139
  r['error'].empty? ? r['result'] : r['error']
140
140
  end
141
141
 
142
+ # Generate a 64-bit nonce where the 32 high bits come directly from the current
143
+ # timestamp and the low 32 bits are pseudorandom. We can't use a pure [P]RNG here
144
+ # because the Kraken API requires every request within a given session to use a
145
+ # monotonically increasing nonce value. This approach splits the difference.
142
146
  def nonce
143
- Time.now.to_i.to_s.ljust(16,'0')
147
+ high_bits = Time.now.to_i << 32
148
+ low_bits = SecureRandom.random_number(2 ** 32) & 0xffffffff
149
+ (high_bits | low_bits).to_s
144
150
  end
145
151
 
146
152
  def encode_options(opts)
@@ -167,6 +173,5 @@ module Kraken
167
173
  def url_path(method)
168
174
  '/' + @api_version + '/private/' + method
169
175
  end
170
-
171
176
  end
172
177
  end
@@ -1,3 +1,3 @@
1
1
  module KrakenRuby
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/spec/client_spec.rb CHANGED
@@ -2,11 +2,12 @@ require 'kraken_ruby'
2
2
 
3
3
  describe Kraken::Client do
4
4
 
5
- # YOU MUST REPLACE THE PLACEHOLDERS BELOW WITH YOUR API KEYS
6
- # TO TEST PRIVATE DATA QUERIES. PRIVATE TESTS WILL FAIL OTHERWISE
5
+ # YOU MUST SET ENVIRONMENT VARIABLES KRAKEN_API_KEY AND
6
+ # KRAKEN_API_SECRET TO TEST PRIVATE DATA QUERIES. PRIVATE
7
+ # TESTS WILL FAIL OTHERWISE.
7
8
 
8
- API_KEY = 'ADD YOUR KEY HERE'
9
- API_SECRET = 'ADD YOUR SECRET HERE'
9
+ API_KEY = ENV['KRAKEN_API_KEY']
10
+ API_SECRET = ENV['KRAKEN_API_SECRET']
10
11
 
11
12
  before :each do
12
13
  sleep 0.3 # to prevent rapidly pinging the Kraken server
@@ -52,10 +53,16 @@ describe Kraken::Client do
52
53
  end
53
54
  end
54
55
 
55
- context "private data" do # More tests to come
56
+ context "private data" do # More tests to come
56
57
  it "gets the user's balance" do
57
58
  expect(kraken.balance).to be_instance_of(Hash)
58
59
  end
60
+
61
+ it "uses a 64 bit nonce" do
62
+ nonce = kraken.send :nonce
63
+ expect(nonce.to_i.size).to eq(8)
64
+ expect(nonce.to_i).to be_instance_of(Bignum)
65
+ end
59
66
  end
60
67
 
61
- end
68
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kraken_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Leishman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-27 00:00:00.000000000 Z
11
+ date: 2014-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler