mtgox 0.9.1 → 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.
data.tar.gz.sig CHANGED
Binary file
@@ -1,14 +1,15 @@
1
1
  require 'faraday'
2
+ require 'json'
2
3
 
3
4
  module Faraday
4
5
  class Response::RaiseMtGoxError < Response::Middleware
5
6
  def on_complete(env)
6
7
  if 200 == env[:status] && 'MySQL error, please retry later' == env[:body]
7
8
  raise MtGox::MysqlError, "MySQL error, please retry later"
8
- elsif 403 == env[:status] && MultiJson.load(env[:body])["result"] == "error"
9
- raise MtGox::UnauthorizedError, MultiJson.load(env[:body])["error"]
10
- elsif 404 != env[:status] && MultiJson.load(env[:body])["result"] == "error"
11
- raise MtGox::Error, MultiJson.load(env[:body])["error"]
9
+ elsif 403 == env[:status] && JSON.load(env[:body])["result"] == "error"
10
+ raise MtGox::UnauthorizedError, JSON.load(env[:body])["error"]
11
+ elsif 404 != env[:status] && JSON.load(env[:body])["result"] == "error"
12
+ raise MtGox::Error, JSON.load(env[:body])["error"]
12
13
  end
13
14
  end
14
15
  end
@@ -1,10 +1,12 @@
1
+ require 'bigdecimal'
2
+
1
3
  module MtGox
2
4
  class Balance
3
5
  attr_accessor :currency, :amount
4
6
 
5
7
  def initialize(currency=nil, amount=nil)
6
8
  self.currency = currency.to_s.upcase
7
- self.amount = amount.to_f
9
+ self.amount = BigDecimal(amount.to_s)
8
10
  end
9
11
  end
10
12
  end
@@ -267,7 +267,7 @@ module MtGox
267
267
  orders.delete_if{|o| o['oid'] == res['oid']}
268
268
  parse_orders(orders)
269
269
  else
270
- raise Faraday::Error::ResourceNotFound, {status: 404, headers: {}, body: 'Order not found.'}
270
+ raise MtGox::OrderNotFoundError
271
271
  end
272
272
  end
273
273
  alias cancel_order cancel
@@ -1,4 +1,5 @@
1
1
  require 'mtgox/version'
2
+ require 'bigdecimal'
2
3
 
3
4
  module MtGox
4
5
  module Configuration
@@ -9,7 +10,7 @@ module MtGox
9
10
  :secret,
10
11
  ]
11
12
 
12
- DEFAULT_COMMISSION = 0.0065.freeze
13
+ DEFAULT_COMMISSION = BigDecimal('0.0065').freeze
13
14
 
14
15
  attr_accessor *VALID_OPTIONS_KEYS
15
16
 
@@ -4,5 +4,6 @@ module MtGox
4
4
  class MysqlError < Error; end
5
5
  class UnauthorizedError < Error; end
6
6
  class FilthyRichError < Error; end
7
+ class OrderNotFoundError < Error; end
7
8
  end
8
9
 
@@ -1,10 +1,12 @@
1
+ require 'bigdecimal'
2
+
1
3
  module MtGox
2
4
  class Lag
3
5
  attr_accessor :microseconds, :seconds, :text, :length
4
6
 
5
7
  def initialize(lag=nil, lag_secs=nil, lag_text=nil, length=nil)
6
8
  self.microseconds = lag.to_i
7
- self.seconds = lag_secs.to_f
9
+ self.seconds = BigDecimal(lag_secs.to_s)
8
10
  self.text = lag_text
9
11
  self.length = length.to_i
10
12
  end
@@ -1,14 +1,18 @@
1
1
  require 'mtgox/offer'
2
+ require 'bigdecimal'
2
3
 
3
4
  module MtGox
4
5
  class Order < Offer
5
- attr_accessor :id, :date
6
+ attr_accessor :id, :date, :item, :status, :currency
6
7
 
7
8
  def initialize(order={})
8
9
  self.id = order['oid']
9
10
  self.date = Time.at(order['date'].to_i)
10
- self.amount = order['amount']['value'].to_f
11
- self.price = order['price']['value'].to_f
11
+ self.amount = BigDecimal(order['amount']['value'])
12
+ self.price = BigDecimal(order['price']['value'])
13
+ self.item = order['item']
14
+ self.status = order['status']
15
+ self.currency = order['currency']
12
16
  end
13
17
  end
14
18
  end
@@ -1,3 +1,5 @@
1
+ require 'bigdecimal'
2
+
1
3
  module MtGox
2
4
  module PriceTicker
3
5
  attr_reader :previous_price, :price
@@ -8,15 +10,15 @@ module MtGox
8
10
  end
9
11
 
10
12
  def up?
11
- price.to_f > previous_price.to_f
13
+ BigDecimal(price.to_s) > BigDecimal(previous_price.to_s)
12
14
  end
13
15
 
14
16
  def down?
15
- price.to_f < previous_price.to_f
17
+ BigDecimal(price.to_s) < BigDecimal(previous_price.to_s)
16
18
  end
17
19
 
18
20
  def changed?
19
- price.to_f != previous_price.to_f
21
+ BigDecimal(price.to_s) != BigDecimal(previous_price.to_s)
20
22
  end
21
23
 
22
24
  def unchanged?
@@ -1,5 +1,5 @@
1
1
  require 'faraday'
2
- require 'multi_json'
2
+ require 'json'
3
3
 
4
4
  module MtGox
5
5
  module Response
@@ -10,7 +10,7 @@ module MtGox
10
10
  when /\A^\s*$\z/, nil
11
11
  nil
12
12
  else
13
- MultiJson.decode(body)
13
+ JSON.load(body)
14
14
  end
15
15
  end
16
16
 
@@ -6,8 +6,8 @@ module MtGox
6
6
  def initialize(trade={})
7
7
  self.id = trade['tid'].to_i
8
8
  self.date = Time.at(trade['date'].to_i)
9
- self.amount = trade['amount'].to_f
10
- self.price = trade['price'].to_f
9
+ self.amount = BigDecimal(trade['amount'])
10
+ self.price = BigDecimal(trade['price'])
11
11
  end
12
12
  end
13
13
  end
@@ -1,3 +1,5 @@
1
+ require 'bigdecimal'
2
+
1
3
  # In the "old API", currency- and amount-values (price, volume,...)
2
4
  # were given as float. These values are likely being deprecated and
3
5
  # replaced by fields of the same name with "_int" as suffix. These are
@@ -18,7 +20,7 @@ module MtGox
18
20
  # @authenticated false
19
21
  # @return [Float]
20
22
  def value_currency(value, key = 'value_int')
21
- floatify(value[key].to_i, :usd)
23
+ decimalify(value[key].to_i, :usd)
22
24
  end
23
25
 
24
26
  # Takes a hash return by the API and convert some value_int to
@@ -29,25 +31,25 @@ module MtGox
29
31
  # @authenticated false
30
32
  # @return [Float] a float BTC value
31
33
  def value_bitcoin(value, key = 'value_int')
32
- floatify(value[key], :btc)
34
+ decimalify(value[key], :btc)
33
35
  end
34
36
 
35
- # Convert a float value to an int using the MtGox conversion rules.
37
+ # Convert a BigDecimal value to an int using the MtGox conversion rules.
36
38
  #
37
- # param float [Float] to convert
39
+ # param decimal [BigDecimal] to convert
38
40
  # param currency [Symbol] currency conversion rule to use amongst [:btc, :usd, :jpy]
39
41
  # return an int
40
- def intify(float, currency)
41
- (float * INT_MULTIPLIERS[currency]).to_i
42
+ def intify(decimal, currency)
43
+ (decimal * INT_MULTIPLIERS[currency]).to_i
42
44
  end
43
45
 
44
- # Convert an int value to a float using the MtGox conversion rules.
46
+ # Convert an int value to a decimal using the MtGox conversion rules.
45
47
  #
46
48
  # param int [Fixnum] to convert
47
49
  # param currency [Symbol] currency conversion rule to use amongst [:btc, :usd, :jpy]
48
- # return a [Float]
49
- def floatify(int, currency)
50
- (int.to_f / INT_MULTIPLIERS[currency])
50
+ # return a [BigDecimal]
51
+ def decimalify(int, currency)
52
+ (BigDecimal(int.to_s) / INT_MULTIPLIERS[currency])
51
53
  end
52
54
  end
53
55
  end
@@ -1,30 +1,32 @@
1
1
  module MtGox
2
2
  class Version
3
+ class << self
3
4
 
4
- # @return [Integer]
5
- def self.major
6
- 0
7
- end
5
+ # @return [Integer]
6
+ def major
7
+ 1
8
+ end
8
9
 
9
- # @return [Integer]
10
- def self.minor
11
- 9
12
- end
10
+ # @return [Integer]
11
+ def minor
12
+ 0
13
+ end
13
14
 
14
- # @return [Integer]
15
- def self.patch
16
- 1
17
- end
15
+ # @return [Integer]
16
+ def patch
17
+ 0
18
+ end
18
19
 
19
- # @return [String, NilClass]
20
- def self.pre
21
- nil
22
- end
20
+ # @return [String, NilClass]
21
+ def pre
22
+ nil
23
+ end
23
24
 
24
- # @return [String]
25
- def self.to_s
26
- [major, minor, patch, pre].compact.join('.')
27
- end
25
+ # @return [String]
26
+ def to_s
27
+ [major, minor, patch, pre].compact.join('.')
28
+ end
28
29
 
30
+ end
29
31
  end
30
32
  end
@@ -5,7 +5,7 @@ require 'mtgox/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.add_dependency 'faraday', ['~> 0.8', '< 0.10']
8
- spec.add_dependency 'multi_json', '~> 1.0'
8
+ spec.add_dependency 'json', ['~> 1.7', '>= 1.7.7']
9
9
  spec.add_development_dependency 'bundler', '~> 1.0'
10
10
  spec.author = "Erik Michaels-Ober"
11
11
  spec.bindir = 'bin'
@@ -7,8 +7,10 @@ describe Faraday::Response do
7
7
  to_return(status: 200, body: fixture('mysql_error'))
8
8
  end
9
9
 
10
- it "should raise MtGox::MysqlError" do
11
- expect { MtGox.trades }.to raise_error(MtGox::MysqlError)
10
+ it "raises MtGox::MysqlError" do
11
+ expect {
12
+ MtGox.trades
13
+ }.to raise_error(MtGox::MysqlError)
12
14
  end
13
15
  end
14
16
 
@@ -18,8 +20,10 @@ describe Faraday::Response do
18
20
  to_return(status: 200, body: fixture('unknown_error.json'))
19
21
  end
20
22
 
21
- it "should raise MtGox::Error" do
22
- expect { MtGox.trades }.to raise_error(MtGox::Error)
23
+ it "raises MtGox::Error" do
24
+ expect {
25
+ MtGox.trades
26
+ }.to raise_error(MtGox::Error)
23
27
  end
24
28
 
25
29
  describe "UnauthorizedError" do
@@ -28,8 +32,10 @@ describe Faraday::Response do
28
32
  to_return(status: 403, body: fixture('error.json'))
29
33
  end
30
34
 
31
- it "should raise MtGox::UnauthorizedError" do
32
- expect { MtGox.trades }.to raise_error(MtGox::UnauthorizedError)
35
+ it "raises MtGox::UnauthorizedError" do
36
+ expect {
37
+ MtGox.trades
38
+ }.to raise_error(MtGox::UnauthorizedError)
33
39
  end
34
40
  end
35
41
 
@@ -7,11 +7,18 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
7
7
  ]
8
8
  SimpleCov.start
9
9
 
10
- require 'base64'
11
10
  require 'mtgox'
11
+ require 'base64'
12
+ require 'json'
12
13
  require 'rspec'
13
14
  require 'webmock/rspec'
14
15
 
16
+ RSpec.configure do |config|
17
+ config.expect_with :rspec do |c|
18
+ c.syntax = :expect
19
+ end
20
+ end
21
+
15
22
  WebMock.disable_net_connect!(:allow => 'coveralls.io')
16
23
 
17
24
  def a_get(path)
@@ -15,11 +15,10 @@ describe MtGox::Client do
15
15
  to_return(body: fixture('address.json'))
16
16
  end
17
17
 
18
- it "should fetch a deposit address" do
18
+ it "fetchs a deposit address" do
19
19
  address = @client.address
20
- a_post('/api/1/generic/bitcoin/address').
21
- should have_been_made
22
- address.should == '17A1vbzQ39o8cGNnpqx8UvXNrhqwAEP8wY'
20
+ expect(a_post('/api/1/generic/bitcoin/address')).to have_been_made
21
+ expect(address).to eq '17A1vbzQ39o8cGNnpqx8UvXNrhqwAEP8wY'
23
22
  end
24
23
  end
25
24
 
@@ -29,11 +28,10 @@ describe MtGox::Client do
29
28
  to_return(body: fixture('idkey.json'))
30
29
  end
31
30
 
32
- it "should fetch an idkey suitable to WS Api usage" do
31
+ it "fetches an idkey suitable to WS Api usage" do
33
32
  key = @client.idkey
34
- a_post('/api/1/generic/idkey').
35
- should have_been_made
36
- key.should == 'YCKvmyU4QsaHEqM/AvKlqAAAAABRbR5y0vCn1roteQx/Ux/lyLF27X8Em1e4AN/2etPECzIT6dU'
33
+ expect(a_post('/api/1/generic/idkey')).to have_been_made
34
+ expect(key).to eq 'YCKvmyU4QsaHEqM/AvKlqAAAAABRbR5y0vCn1roteQx/Ux/lyLF27X8Em1e4AN/2etPECzIT6dU'
37
35
  end
38
36
  end
39
37
 
@@ -43,29 +41,27 @@ describe MtGox::Client do
43
41
  to_return(body: fixture('ticker.json'))
44
42
  end
45
43
 
46
- it "should fetch the ticker" do
44
+ it "fetches the ticker" do
47
45
  ticker = @client.ticker
48
- a_get('/api/1/BTCUSD/ticker').
49
- should have_been_made
50
- ticker.buy.should == 5.53587
51
- ticker.sell.should == 5.56031
52
- ticker.high.should == 5.70653
53
- ticker.low.should == 5.4145
54
- ticker.price.should == 5.5594
55
- ticker.volume.should == 55829.58960346
56
- ticker.vwap.should == 5.61048
57
- ticker.avg.should == 5.56112
58
- end
59
-
60
- it "should fetch the ticker and keep previous price" do
46
+ expect(a_get('/api/1/BTCUSD/ticker')).to have_been_made
47
+ expect(ticker.buy).to eq BigDecimal('5.53587')
48
+ expect(ticker.sell).to eq BigDecimal('5.56031')
49
+ expect(ticker.high).to eq BigDecimal('5.70653')
50
+ expect(ticker.low).to eq BigDecimal('5.4145')
51
+ expect(ticker.price).to eq BigDecimal('5.5594')
52
+ expect(ticker.volume).to eq BigDecimal('55829.58960346')
53
+ expect(ticker.vwap).to eq BigDecimal('5.61048')
54
+ expect(ticker.avg).to eq BigDecimal('5.56112')
55
+ end
56
+
57
+ it "fetches the ticker and keep previous price" do
61
58
  ticker = @client.ticker
62
59
  ticker = @client.ticker
63
- a_get('/api/1/BTCUSD/ticker').
64
- should have_been_made.twice
65
- ticker.up?.should == false
66
- ticker.down?.should == false
67
- ticker.changed?.should == false
68
- ticker.unchanged?.should == true
60
+ expect(a_get('/api/1/BTCUSD/ticker')).to have_been_made.twice
61
+ expect(ticker.up?).to be_false
62
+ expect(ticker.down?).to be_false
63
+ expect(ticker.changed?).to be_false
64
+ expect(ticker.unchanged?).to be_true
69
65
  end
70
66
  end
71
67
 
@@ -75,14 +71,13 @@ describe MtGox::Client do
75
71
  to_return(status:200, body: fixture('lag.json'))
76
72
  end
77
73
 
78
- it "should fetch the lag" do
74
+ it "fetches the lag" do
79
75
  lag = @client.lag
80
- a_get('/api/1/generic/order/lag').
81
- should have_been_made
82
- lag.microseconds.should == 535998
83
- lag.seconds.should == 0.535998
84
- lag.text.should == "0.535998 seconds"
85
- lag.length.should == 3
76
+ expect(a_get('/api/1/generic/order/lag')).to have_been_made
77
+ expect(lag.microseconds).to eq 535998
78
+ expect(lag.seconds).to eq BigDecimal('0.535998')
79
+ expect(lag.text).to eq "0.535998 seconds"
80
+ expect(lag.length).to eq 3
86
81
  end
87
82
  end
88
83
 
@@ -93,71 +88,66 @@ describe MtGox::Client do
93
88
  end
94
89
 
95
90
  describe '#asks' do
96
- it "should fetch open asks" do
91
+ it "fetches open asks" do
97
92
  asks = @client.asks
98
- a_get('/api/1/BTCUSD/depth/fetch').
99
- should have_been_made
100
- asks.first.price.should == 114
101
- asks.first.eprice.should == 114.74584801207851
102
- asks.first.amount.should == 0.43936758
93
+ expect(a_get('/api/1/BTCUSD/depth/fetch')).to have_been_made
94
+ expect(asks.first.price).to eq 114
95
+ expect(asks.first.eprice).to eq BigDecimal('114.745848012')
96
+ expect(asks.first.amount).to eq BigDecimal('0.43936758')
103
97
  end
104
98
 
105
99
  it "should be sorted in price-ascending order" do
106
100
  asks = @client.asks
107
- asks.sort_by{|ask| ask.price}.should == asks
101
+ expect(asks.sort_by(&:price)).to eq asks
108
102
  end
109
103
 
110
104
  end
111
105
 
112
106
  describe "#bids" do
113
- it "should fetch open bids" do
107
+ it "fetches open bids" do
114
108
  bids = @client.bids
115
- a_get('/api/1/BTCUSD/depth/fetch').
116
- should have_been_made
117
- bids.first.price.should == 113.0
118
- bids.first.eprice.should == 112.2655
119
- bids.first.amount.should == 124.69802063
109
+ expect(a_get('/api/1/BTCUSD/depth/fetch')).to have_been_made
110
+ expect(bids.first.price).to eq BigDecimal('113.0')
111
+ expect(bids.first.eprice).to eq BigDecimal('112.2655')
112
+ expect(bids.first.amount).to eq BigDecimal('124.69802063')
120
113
  end
121
114
 
122
115
  it "should be sorted in price-descending order" do
123
116
  bids = @client.bids
124
- bids.sort_by{|bid| bid.price}.reverse.should == bids
117
+ expect(bids.sort_by(&:price).reverse).to eq bids
125
118
  end
126
119
  end
127
120
 
128
121
  describe "#offers" do
129
- it "should fetch both bids and asks, with only one call" do
122
+ it "fetches both bids and asks, with only one call" do
130
123
  offers = @client.offers
131
- a_get('/api/1/BTCUSD/depth/fetch').
132
- should have_been_made.once
133
- offers[:asks].first.price.should == 114
134
- offers[:asks].first.eprice.should == 114.74584801207851
135
- offers[:asks].first.amount.should == 0.43936758
136
- offers[:bids].first.price.should == 113.0
137
- offers[:bids].first.eprice.should == 112.2655
138
- offers[:bids].first.amount.should == 124.69802063
124
+ expect(a_get('/api/1/BTCUSD/depth/fetch')).to have_been_made.once
125
+ expect(offers[:asks].first.price).to eq 114
126
+ expect(offers[:asks].first.eprice).to eq BigDecimal('114.745848012')
127
+ expect(offers[:asks].first.amount).to eq BigDecimal('0.43936758')
128
+ expect(offers[:bids].first.price).to eq BigDecimal('113.0')
129
+ expect(offers[:bids].first.eprice).to eq BigDecimal('112.2655')
130
+ expect(offers[:bids].first.amount).to eq BigDecimal('124.69802063')
139
131
  end
140
132
  end
141
133
 
142
134
  describe '#min_ask' do
143
- it "should fetch the lowest priced ask" do
135
+ it "fetches the lowest priced ask" do
144
136
  min_ask = @client.min_ask
145
- a_get('/api/1/BTCUSD/depth/fetch').
146
- should have_been_made.once
147
- min_ask.price.should == 114
148
- min_ask.eprice.should == 114.74584801207851
149
- min_ask.amount.should == 0.43936758
137
+ expect(a_get('/api/1/BTCUSD/depth/fetch')).to have_been_made.once
138
+ expect(min_ask.price).to eq 114
139
+ expect(min_ask.eprice).to eq BigDecimal('114.745848012')
140
+ expect(min_ask.amount).to eq BigDecimal('0.43936758')
150
141
  end
151
142
  end
152
143
 
153
144
  describe '#max_bid' do
154
- it "should fetch the highest priced bid" do
145
+ it "fetches the highest priced bid" do
155
146
  max_bid = @client.max_bid
156
- a_get('/api/1/BTCUSD/depth/fetch').
157
- should have_been_made.once
158
- max_bid.price.should == 113
159
- max_bid.eprice.should == 112.2655
160
- max_bid.amount.should == 124.69802063
147
+ expect(a_get('/api/1/BTCUSD/depth/fetch')).to have_been_made.once
148
+ expect(max_bid.price).to eq 113
149
+ expect(max_bid.eprice).to eq BigDecimal('112.2655')
150
+ expect(max_bid.amount).to eq BigDecimal('124.69802063')
161
151
  end
162
152
  end
163
153
 
@@ -169,32 +159,29 @@ describe MtGox::Client do
169
159
  to_return(body: fixture('trades.json'))
170
160
  end
171
161
 
172
- it "should fetch trades" do
162
+ it "fetches trades" do
173
163
  trades = @client.trades
174
- a_get('/api/1/BTCUSD/trades/fetch').
175
- should have_been_made
176
- trades.last.date.should == Time.utc(2013, 4, 12, 15, 20, 3)
177
- trades.last.price.should == 73.19258
178
- trades.last.amount.should == 0.94043572
179
- trades.last.id.should == 1365780003374123
164
+ expect(a_get('/api/1/BTCUSD/trades/fetch')).to have_been_made
165
+ expect(trades.last.date).to eq Time.utc(2013, 4, 12, 15, 20, 3)
166
+ expect(trades.last.price).to eq BigDecimal('73.19258')
167
+ expect(trades.last.amount).to eq BigDecimal('0.94043572')
168
+ expect(trades.last.id).to eq 1365780003374123
180
169
  end
181
170
  end
182
171
 
183
172
  describe '#trades :since' do
184
173
  before do
185
- trades = MultiJson.load(fixture('trades.json'))
174
+ trades = JSON.load(fixture('trades.json'))
186
175
  stub_get('/api/1/BTCUSD/trades/fetch?since=1365780002144150').
187
- to_return(body: MultiJson.dump({result: 'success', return: trades['return'].select{|t| t['tid'] >= '1365780002144150'}}))
176
+ to_return(body: JSON.dump({result: 'success', return: trades['return'].select{|t| t['tid'] >= '1365780002144150'}}))
188
177
  end
189
178
 
190
- it "should fetch trades since an id" do
179
+ it "fetches trades since an id" do
191
180
  trades = @client.trades :since => 1365780002144150
192
- #puts trades.inspect
193
- a_get('/api/1/BTCUSD/trades/fetch?since=1365780002144150').
194
- should have_been_made
195
- trades.first.price.should == 72.98274
196
- trades.first.amount.should == 11.76583944
197
- trades.first.id.should == 1365780002144150
181
+ expect(a_get('/api/1/BTCUSD/trades/fetch?since=1365780002144150')).to have_been_made
182
+ expect(trades.first.price).to eq BigDecimal('72.98274')
183
+ expect(trades.first.amount).to eq BigDecimal('11.76583944')
184
+ expect(trades.first.id).to eq 1365780002144150
198
185
  end
199
186
  end
200
187
 
@@ -205,15 +192,13 @@ describe MtGox::Client do
205
192
  to_return(body: fixture('info.json'))
206
193
  end
207
194
 
208
- it "should fetch balance" do
195
+ it "fetches balance" do
209
196
  balance = @client.balance
210
- a_post("/api/1/generic/info").
211
- with(body: test_body, headers: test_headers(@client)).
212
- should have_been_made
213
- balance.first.currency.should == "BTC"
214
- balance.first.amount.should == 42.0
215
- balance.last.currency.should == "EUR"
216
- balance.last.amount.should == 23.0
197
+ expect(a_post("/api/1/generic/info").with(body: test_body, headers: test_headers(@client))).to have_been_made
198
+ expect(balance.first.currency).to eq "BTC"
199
+ expect(balance.first.amount).to eq BigDecimal('42.0')
200
+ expect(balance.last.currency).to eq "EUR"
201
+ expect(balance.last.amount).to eq BigDecimal('23.0')
217
202
  end
218
203
  end
219
204
 
@@ -225,37 +210,35 @@ describe MtGox::Client do
225
210
  end
226
211
 
227
212
  describe "#buys" do
228
- it "should fetch orders" do
213
+ it "fetches orders" do
229
214
  buys = @client.buys
230
- a_post("/api/1/generic/orders").
231
- with(body: test_body, headers: test_headers(@client)).
232
- should have_been_made
233
- buys.last.price.should == 7
234
- buys.last.date.should == Time.utc(2011, 6, 27, 18, 20, 38)
215
+ expect(a_post("/api/1/generic/orders").with(body: test_body, headers: test_headers(@client))).to have_been_made
216
+ expect(buys.last.price).to eq 7
217
+ expect(buys.last.date).to eq Time.utc(2011, 6, 27, 18, 20, 38)
218
+ expect(buys.last.amount).to eq BigDecimal("0.2")
219
+ expect(buys.last.status).to eq "open"
220
+ expect(buys.last.currency).to eq "USD"
221
+ expect(buys.last.item).to eq "BTC"
235
222
  end
236
223
  end
237
224
 
238
225
  describe "#sells" do
239
- it "should fetch sells" do
226
+ it "fetches sells" do
240
227
  sells = @client.sells
241
- a_post("/api/1/generic/orders").
242
- with(body: test_body, headers: test_headers(@client)).
243
- should have_been_made
244
- sells.last.price.should == 99.0
245
- sells.last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
228
+ expect(a_post("/api/1/generic/orders").with(body: test_body, headers: test_headers(@client))).to have_been_made
229
+ expect(sells.last.price).to eq BigDecimal('99.0')
230
+ expect(sells.last.date).to eq Time.utc(2011, 6, 27, 18, 20, 20)
246
231
  end
247
232
  end
248
233
 
249
234
  describe "#orders" do
250
- it "should fetch both buys and sells, with only one call" do
235
+ it "fetches both buys and sells, with only one call" do
251
236
  orders = @client.orders
252
- a_post("/api/1/generic/orders").
253
- with(body: test_body, headers: test_headers(@client)).
254
- should have_been_made
255
- orders[:buys].last.price.should == 7.0
256
- orders[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 20, 38)
257
- orders[:sells].last.price.should == 99.0
258
- orders[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
237
+ expect(a_post("/api/1/generic/orders").with(body: test_body, headers: test_headers(@client))).to have_been_made
238
+ expect(orders[:buys].last.price).to eq BigDecimal('7.0')
239
+ expect(orders[:buys].last.date).to eq Time.utc(2011, 6, 27, 18, 20, 38)
240
+ expect(orders[:sells].last.price).to eq BigDecimal('99.0')
241
+ expect(orders[:sells].last.date).to eq Time.utc(2011, 6, 27, 18, 20, 20)
259
242
  end
260
243
  end
261
244
  end
@@ -264,7 +247,6 @@ describe MtGox::Client do
264
247
  before do
265
248
  body = test_body({"type" => "bid", "amount_int" => "88000000", "price_int" => "89000"})
266
249
  body_market = test_body({"type" => "bid", "amount_int" => "88000000"})
267
-
268
250
  stub_post('/api/1/BTCUSD/order/add').
269
251
  with(body: body, headers: test_headers(@client, body)).
270
252
  to_return(body: fixture('buy.json'))
@@ -276,19 +258,15 @@ describe MtGox::Client do
276
258
  it "should place a bid" do
277
259
  buy = @client.buy!(0.88, 0.89)
278
260
  body = test_body({"type" => "bid", "amount_int" => "88000000", "price_int" => "89000"})
279
- a_post("/api/1/BTCUSD/order/add").
280
- with(body: body, headers: test_headers(@client, body)).
281
- should have_been_made
282
- buy.should == "490a214f-9a30-449f-acb8-780f9046502f"
261
+ expect(a_post("/api/1/BTCUSD/order/add").with(body: body, headers: test_headers(@client, body))).to have_been_made
262
+ expect(buy).to eq "490a214f-9a30-449f-acb8-780f9046502f"
283
263
  end
284
264
 
285
265
  it "should place a market bid" do
286
266
  buy = @client.buy!(0.88, :market)
287
267
  body_market = test_body({"type" => "bid", "amount_int" => "88000000"})
288
- a_post("/api/1/BTCUSD/order/add").
289
- with(body: body_market, headers: test_headers(@client, body_market)).
290
- should have_been_made
291
- buy.should == "490a214f-9a30-449f-acb8-780f9046502f"
268
+ expect(a_post("/api/1/BTCUSD/order/add").with(body: body_market, headers: test_headers(@client, body_market))).to have_been_made
269
+ expect(buy).to eq "490a214f-9a30-449f-acb8-780f9046502f"
292
270
  end
293
271
  end
294
272
 
@@ -308,19 +286,15 @@ describe MtGox::Client do
308
286
  it "should place an ask" do
309
287
  body = test_body({"type" => "ask", "amount_int" => "88000000", "price_int" => "8900000"})
310
288
  sell = @client.sell!(0.88, 89.0)
311
- a_post("/api/1/BTCUSD/order/add").
312
- with(body: body, headers: test_headers(@client, body)).
313
- should have_been_made
314
- sell.should == "a20329fe-c0d5-4378-b204-79a7800d41e7"
289
+ expect(a_post("/api/1/BTCUSD/order/add").with(body: body, headers: test_headers(@client, body))).to have_been_made
290
+ expect(sell).to eq "a20329fe-c0d5-4378-b204-79a7800d41e7"
315
291
  end
316
292
 
317
293
  it "should place a market ask" do
318
294
  body_market = test_body({"type" => "ask", "amount_int" => "88000000"})
319
295
  sell = @client.sell!(0.88, :market)
320
- a_post("/api/1/BTCUSD/order/add").
321
- with(body: body_market, headers: test_headers(@client, body_market)).
322
- should have_been_made
323
- sell.should == "a20329fe-c0d5-4378-b204-79a7800d41e7"
296
+ expect(a_post("/api/1/BTCUSD/order/add").with(body: body_market, headers: test_headers(@client, body_market))).to have_been_made
297
+ expect(sell).to eq "a20329fe-c0d5-4378-b204-79a7800d41e7"
324
298
  end
325
299
  end
326
300
 
@@ -339,19 +313,15 @@ describe MtGox::Client do
339
313
  it "should cancel an order" do
340
314
  cancel = @client.cancel("fda8917a-63d3-4415-b827-758408013690")
341
315
  cancel_body = test_body({"oid" => "fda8917a-63d3-4415-b827-758408013690"})
342
- a_post("/api/1/generic/orders").
343
- with(body: test_body, headers: test_headers(@client)).
344
- should have_been_made.once
345
- a_post('/api/1/BTCUSD/order/cancel').
346
- with(body: cancel_body, headers: test_headers(@client, cancel_body)).
347
- should have_been_made
348
- cancel[:buys].length.should == 0
316
+ expect(a_post("/api/1/generic/orders").with(body: test_body, headers: test_headers(@client))).to have_been_made.once
317
+ expect(a_post('/api/1/BTCUSD/order/cancel').with(body: cancel_body, headers: test_headers(@client, cancel_body))).to have_been_made
318
+ expect(cancel[:buys].length).to eq 0
349
319
  end
350
320
  end
351
321
 
352
322
  context "with an invalid oid passed" do
353
323
  it "should raise an error" do
354
- expect { @client.cancel(1234567890) }.to raise_error(Faraday::Error::ResourceNotFound)
324
+ expect { @client.cancel(1234567890) }.to raise_error(MtGox::OrderNotFoundError)
355
325
  end
356
326
  end
357
327
 
@@ -359,12 +329,10 @@ describe MtGox::Client do
359
329
  it "should cancel an order" do
360
330
  cancel = @client.cancel({'oid' => "fda8917a-63d3-4415-b827-758408013690", 'type' => 2})
361
331
  body = test_body({"oid" => "fda8917a-63d3-4415-b827-758408013690"})
362
- a_post('/api/1/BTCUSD/order/cancel').
363
- with(body: body, headers: test_headers(@client, body)).
364
- should have_been_made
365
- cancel[:buys].length.should == 0
366
- cancel[:sells].last.price.should == 99.0
367
- cancel[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
332
+ expect(a_post('/api/1/BTCUSD/order/cancel').with(body: body, headers: test_headers(@client, body))).to have_been_made
333
+ expect(cancel[:buys].length).to eq 0
334
+ expect(cancel[:sells].last.price).to eq BigDecimal('99.0')
335
+ expect(cancel[:sells].last.date).to eq Time.utc(2011, 6, 27, 18, 20, 20)
368
336
  end
369
337
  end
370
338
  end
@@ -380,15 +348,14 @@ describe MtGox::Client do
380
348
  it "should withdraw funds" do
381
349
  withdraw = @client.withdraw!(1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L")
382
350
  body = test_body({"amount_int" => "100000000", "address" => "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"})
383
- a_post("/api/1/generic/bitcoin/send_simple").
384
- with(body: body, headers: test_headers(@client, body)).
385
- should have_been_made
386
- withdraw.should == "311295deadbeef390a13c038e2b8ba77feebdaed2c1a59e6e0bdf001656e1314"
351
+ expect(a_post("/api/1/generic/bitcoin/send_simple").with(body: body, headers: test_headers(@client, body))).to have_been_made
352
+ expect(withdraw).to eq "311295deadbeef390a13c038e2b8ba77feebdaed2c1a59e6e0bdf001656e1314"
387
353
  end
388
354
 
389
355
  it "pays attention to too big withdrawals" do
390
- lambda { @client.withdraw!(10000, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L") }.
391
- should raise_error(MtGox::FilthyRichError)
356
+ expect {
357
+ @client.withdraw!(10000, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L")
358
+ }.to raise_error(MtGox::FilthyRichError)
392
359
  end
393
360
  end
394
361
  end
@@ -2,20 +2,20 @@ require 'helper'
2
2
 
3
3
  describe MtGox do
4
4
  describe ".new" do
5
- it "should return a MtGox::Client" do
6
- MtGox.new.should be_a MtGox::Client
5
+ it "returns a MtGox::Client" do
6
+ expect(MtGox.new).to be_a MtGox::Client
7
7
  end
8
8
  end
9
9
 
10
10
  describe ".configure" do
11
- it "should set 'key' and 'secret'" do
11
+ it "sets key and secret" do
12
12
  MtGox.configure do |config|
13
13
  config.key = "key"
14
14
  config.secret = "secret"
15
15
  end
16
16
 
17
- MtGox.key.should == "key"
18
- MtGox.secret.should == "secret"
17
+ expect(MtGox.key).to eq "key"
18
+ expect(MtGox.secret).to eq "secret"
19
19
  end
20
20
  end
21
21
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mtgox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,7 +36,7 @@ cert_chain:
36
36
  U0xxV3ZRUnNCbHlwSGZoczZKSnVMbHlaUEdoVTNSL3YKU2YzbFZLcEJDV2dS
37
37
  cEdUdnk0NVhWcEIrNTl5MzNQSm1FdVExUFRFT1l2UXlhbzlVS01BQWFBTi83
38
38
  cVdRdGpsMApobHc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
39
- date: 2013-05-06 00:00:00.000000000 Z
39
+ date: 2013-05-12 00:00:00.000000000 Z
40
40
  dependencies:
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday
@@ -61,13 +61,16 @@ dependencies:
61
61
  - !ruby/object:Gem::Version
62
62
  version: '0.10'
63
63
  - !ruby/object:Gem::Dependency
64
- name: multi_json
64
+ name: json
65
65
  requirement: !ruby/object:Gem::Requirement
66
66
  none: false
67
67
  requirements:
68
68
  - - ~>
69
69
  - !ruby/object:Gem::Version
70
- version: '1.0'
70
+ version: '1.7'
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: 1.7.7
71
74
  type: :runtime
72
75
  prerelease: false
73
76
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,7 +78,10 @@ dependencies:
75
78
  requirements:
76
79
  - - ~>
77
80
  - !ruby/object:Gem::Version
78
- version: '1.0'
81
+ version: '1.7'
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.7.7
79
85
  - !ruby/object:Gem::Dependency
80
86
  name: bundler
81
87
  requirement: !ruby/object:Gem::Requirement
metadata.gz.sig CHANGED
Binary file