mtgox 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -61,7 +61,7 @@ Usage Examples
61
61
  config.pass = YOUR_MTGOX_PASSWORD
62
62
  end
63
63
 
64
- # Get your current balance
64
+ # Fetch your current balance
65
65
  puts MtGox.balance
66
66
 
67
67
  # Place a limit order to buy one bitcoin for $0.011
@@ -0,0 +1,10 @@
1
+ module MtGox
2
+ class Balance
3
+ attr_accessor :currency, :amount
4
+
5
+ def initialize(currency=nil, amount=nil)
6
+ self.currency = currency.to_s.upcase
7
+ self.amount = amount.to_f
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,6 @@
1
+ require 'mtgox/order'
2
+
3
+ module MtGox
4
+ class Buy < Order
5
+ end
6
+ end
@@ -1,10 +1,15 @@
1
1
  require 'faraday/error'
2
2
  require 'mtgox/ask'
3
+ require 'mtgox/balance'
3
4
  require 'mtgox/bid'
5
+ require 'mtgox/buy'
4
6
  require 'mtgox/connection'
5
7
  require 'mtgox/max_bid'
6
8
  require 'mtgox/min_ask'
7
9
  require 'mtgox/request'
10
+ require 'mtgox/sell'
11
+ require 'mtgox/ticker'
12
+ require 'mtgox/trade'
8
13
 
9
14
  module MtGox
10
15
  class Client
@@ -16,60 +21,65 @@ module MtGox
16
21
  # Fetch the latest ticker data
17
22
  #
18
23
  # @authenticated false
19
- # @return [Hashie::Rash] with keys `buy` - current highest bid price, `sell` - current lowest ask price, `high` - highest price trade for the day, `low` - lowest price trade for the day, `last` - price of most recent trade, and `vol`
24
+ # @return [MtGox::Ticker]
20
25
  # @example
21
- # MtGox.ticker #=> <#Hashie::Rash buy=19.29 high=19.96 last=19.36 low=19.01 sell=19.375 vol=29470>
26
+ # MtGox.ticker
22
27
  def ticker
23
- get('/code/data/ticker.php')['ticker']
28
+ ticker = get('/code/data/ticker.php')['ticker']
29
+ Ticker.instance.buy = ticker['buy'].to_f
30
+ Ticker.instance.high = ticker['high'].to_f
31
+ Ticker.instance.price = ticker['last'].to_f
32
+ Ticker.instance.low = ticker['low'].to_f
33
+ Ticker.instance.sell = ticker['sell'].to_f
34
+ Ticker.instance.volume = ticker['vol'].to_f
35
+ Ticker.instance
24
36
  end
25
37
 
26
38
  # Fetch both bids and asks in one call, for network efficiency
27
39
  #
28
40
  # @authenticated false
29
- # @return [Hashie::Rash] a hash with keys :asks and :bids, which contain arrays as described in #asks and #bids.
41
+ # @return [Hash] with keys :asks and :asks, which contain arrays as described in {MtGox::Client#asks} and {MtGox::Clients#bids}
30
42
  # @example
31
- # offers = MtGox.offers
32
- # offers.asks[0, 3]
33
- # offers.bids[0, 3]
43
+ # MtGox.offers
34
44
  def offers
35
45
  offers = get('/code/data/getDepth.php')
36
- offers['asks'] = offers['asks'].sort_by do |ask|
46
+ asks = offers['asks'].sort_by do |ask|
37
47
  ask[0].to_f
38
48
  end.map! do |ask|
39
49
  Ask.new(*ask)
40
50
  end
41
- offers['bids'] = offers['bids'].sort_by do |bid|
51
+ bids = offers['bids'].sort_by do |bid|
42
52
  -bid[0].to_f
43
53
  end.map! do |bid|
44
54
  Bid.new(*bid)
45
55
  end
46
- offers
56
+ {:asks => asks, :bids => bids}
47
57
  end
48
58
 
49
59
  # Fetch open asks
50
60
  #
51
61
  # @authenticated false
52
- # @return [Array<Ask>] in the form `[price, amount]`, sorted in price ascending order
62
+ # @return [Array<MtGox::Ask>] an array of open asks, sorted in price ascending order
53
63
  # @example
54
- # MtGox.asks[0, 3]
64
+ # MtGox.asks
55
65
  def asks
56
- offers['asks']
66
+ offers[:asks]
57
67
  end
58
68
 
59
69
  # Fetch open bids
60
70
  #
61
71
  # @authenticated false
62
- # @return [Array<Bid>] in the form `[price, amount]`, sorted in price descending order
72
+ # @return [Array<MtGox::Bid>] an array of open bids, sorted in price descending order
63
73
  # @example
64
- # MtGox.bids[0, 3]
74
+ # MtGox.bids
65
75
  def bids
66
- offers['bids']
76
+ offers[:bids]
67
77
  end
68
78
 
69
79
  # Fetch the lowest priced ask
70
80
  #
71
81
  # @authenticated false
72
- # @return [MinAsk]
82
+ # @return [MtGox::MinAsk]
73
83
  # @example
74
84
  # MtGox.min_ask
75
85
  def min_ask
@@ -82,7 +92,7 @@ module MtGox
82
92
  # Fetch the highest priced bid
83
93
  #
84
94
  # @authenticated false
85
- # @return [MinBid]
95
+ # @return [MtGox::MinBid]
86
96
  # @example
87
97
  # MtGox.max_bid
88
98
  def max_bid
@@ -95,33 +105,31 @@ module MtGox
95
105
  # Fetch recent trades
96
106
  #
97
107
  # @authenticated false
98
- # @return [Array<Hashie::Rash>] an array of trades, sorted in chronological order. Each trade is a `Hashie::Rash` with keys `amount` - number of bitcoins traded, `price` - price they were traded at in US dollars, `date` - time and date of the trade (a `Time` object), and `tid` - the trade ID.
108
+ # @return [Array<MtGox::Trade>] an array of trades, sorted in chronological order
99
109
  # @example
100
- # MtGox.trades[0, 3] #=> [<#Hashie::Rash amount=41 date=2011-06-14 11:26:32 -0700 price=18.5 tid="183747">, <#Hashie::Rash amount=5 date=2011-06-14 11:26:44 -0700 price=18.5 tid="183748">, <#Hashie::Rash amount=5 date=2011-06-14 11:27:00 -0700 price=18.42 tid="183749">]
110
+ # MtGox.trades
101
111
  def trades
102
- get('/code/data/getTrades.php').each do |trade|
103
- trade['amount'] = trade['amount'].to_f
104
- trade['date'] = Time.at(trade['date'])
105
- trade['price'] = trade['price'].to_f
112
+ get('/code/data/getTrades.php').sort_by{|trade| trade['date']}.map do |trade|
113
+ Trade.new(trade)
106
114
  end
107
115
  end
108
116
 
109
- # Fetch your balance
117
+ # Fetch your current balance
110
118
  #
111
119
  # @authenticated true
112
- # @return [Hashie::Rash] with keys `btcs` - amount of bitcoins in your account and `usds` - amount of US dollars in your account
120
+ # @return [Array<MtGox::Balance>]
113
121
  # @example
114
- # MtGox.balance #=> <#Hashie::Rash btcs=3.7 usds=12>
122
+ # MtGox.balance
115
123
  def balance
116
- post('/code/getFunds.php', pass_params)
124
+ parse_balance(post('/code/getFunds.php', pass_params))
117
125
  end
118
126
 
119
127
  # Fetch your open orders, both buys and sells, for network efficiency
120
128
  #
121
129
  # @authenticated true
122
- # @return [<Hashie::Rash>] with keys `buy` and `sell`, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Client#sells}
130
+ # @return [Hash] with keys :buys and :sells, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Clients#sells}
123
131
  # @example
124
- # MtGox.orders[0, 3] #=> [<#Hashie::Rash amount=0.73 dark="0" date=2011-06-13 00:13:16 -0700 oid="929284" price=2 status=:active type=2>, <#Hashie::Rash amount=0.36 dark="0" date=2011-06-13 00:13:21 -0700 oid="929288" price=4 status=:active type=2>, <#Hashie::Rash amount=0.24 dark="0" date=2011-06-13 00:13:32 -0700 oid="929292" price=6 status=:active type=2>]
132
+ # MtGox.orders
125
133
  def orders
126
134
  parse_orders(post('/code/getOrders.php', pass_params)['orders'])
127
135
  end
@@ -129,25 +137,21 @@ module MtGox
129
137
  # Fetch your open buys
130
138
  #
131
139
  # @authenticated true
132
- # @return [Array<Hashie::Rash>] an array of your open bids, sorted in price ascending order with the keys `amount`, `dark`, `date`, `oid`, `price`, `status`, and `type`
140
+ # @return [Array<MtGox::Buy>] an array of your open bids, sorted by date
133
141
  # @example
134
- # MtGox.buys[0, 3] #=> [<#Hashie::Rash amount=0.73 dark="0" date=2011-06-13 00:13:16 -0700 oid="929284" price=2 status=:active type=2>, <#Hashie::Rash amount=0.36 dark="0" date=2011-06-13 00:13:21 -0700 oid="929288" price=4 status=:active type=2>, <#Hashie::Rash amount=0.24 dark="0" date=2011-06-13 00:13:32 -0700 oid="929292" price=6 status=:active type=2>]
142
+ # MtGox.buys
135
143
  def buys
136
- orders.select do |o|
137
- o['type'] == ORDER_TYPES[:buy]
138
- end
144
+ orders[:buys]
139
145
  end
140
146
 
141
147
  # Fetch your open sells
142
148
  #
143
149
  # @authenticated true
144
- # @return [Array<Hashie::Rash>] an array of your open asks, sorted in price ascending order with the keys `amount`, `dark`, `date`, `oid`, `price`, `status`, and `type`
150
+ # @return [Array<MtGox::Sell>] an array of your open asks, sorted by date
145
151
  # @example
146
- # MtGox.sells[0, 3] #=> [<#Hashie::Rash amount=0.1 dark="0" date=2011-06-13 00:16:24 -0700 oid="663465" price=24.92 status=nil type=1>, <#Hashie::Rash amount=0.12 dark="0" date=2011-06-13 00:16:31 -0700 oid="663468" price=25.65 status=nil type=1>, <#Hashie::Rash amount=0.15 dark="0" date=2011-06-13 00:16:36 -0700 oid="663470" price=26.38 status=nil type=1>]
152
+ # MtGox.sells
147
153
  def sells
148
- orders.select do |o|
149
- o['type'] == ORDER_TYPES[:sell]
150
- end
154
+ orders[:sells]
151
155
  end
152
156
 
153
157
  # Place a limit order to buy BTC
@@ -155,7 +159,7 @@ module MtGox
155
159
  # @authenticated true
156
160
  # @param amount [Numeric] the number of bitcoins to purchase
157
161
  # @param price [Numeric] the bid price in US dollars
158
- # @return [Array<Hashie::Rash>]
162
+ # @return [Hash] with keys :buys and :sells, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Clients#sells}
159
163
  # @example
160
164
  # # Buy one bitcoin for $0.011
161
165
  # MtGox.buy! 1.0, 0.011
@@ -168,7 +172,7 @@ module MtGox
168
172
  # @authenticated true
169
173
  # @param amount [Numeric] the number of bitcoins to sell
170
174
  # @param price [Numeric] the ask price in US dollars
171
- # @return [Array<Hashie::Rash>]
175
+ # @return [Hash] with keys :buys and :sells, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Clients#sells}
172
176
  # @example
173
177
  # # Sell one bitcoin for $100
174
178
  # MtGox.sell! 1.0, 100.0
@@ -181,29 +185,30 @@ module MtGox
181
185
  # @authenticated true
182
186
  # @overload cancel(oid)
183
187
  # @param oid [String] an order ID
184
- # @return Array<Hashie::Rash>
188
+ # @return [Hash] with keys :buys and :sells, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Clients#sells}
185
189
  # @example
186
190
  # my_order = MtGox.orders.first
187
191
  # MtGox.cancel my_order.oid
188
192
  # MtGox.cancel 1234567890
189
193
  # @overload cancel(order)
190
194
  # @param order [Hash] a hash-like object, with keys `oid` - the order ID of the transaction to cancel and `type` - the type of order to cancel (`1` for sell or `2` for buy)
191
- # @return Array<Hashie::Rash>
195
+ # @return [Hash] with keys :buys and :sells, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Clients#sells}
192
196
  # @example
193
197
  # my_order = MtGox.orders.first
194
198
  # MtGox.cancel my_order
195
- # MtGox.cancel {"oid" => "1234567890", "type" => 2}
199
+ # MtGox.cancel {'oid' => '1234567890', 'type' => 2}
196
200
  def cancel(args)
197
201
  if args.is_a?(Hash)
198
202
  order = args.delete_if{|k, v| !['oid', 'type'].include?(k.to_s)}
199
- post('/code/cancelOrder.php', pass_params.merge(order))
203
+ parse_orders(post('/code/cancelOrder.php', pass_params.merge(order))['orders'])
200
204
  else
201
- order = orders.select{|o| o['oid'] == args.to_s}.first
205
+ orders = post('/code/getOrders.php', pass_params)['orders']
206
+ order = orders.find{|order| order['oid'] == args.to_s}
202
207
  if order
203
208
  order = order.delete_if{|k, v| !['oid', 'type'].include?(k.to_s)}
204
- post('/code/cancelOrder.php', pass_params.merge(order))
209
+ parse_orders(post('/code/cancelOrder.php', pass_params.merge(order))['orders'])
205
210
  else
206
- raise Faraday::Error::ResourceNotFound, {:status => 404, :headers => {}, :body => "Order not found."}
211
+ raise Faraday::Error::ResourceNotFound, {:status => 404, :headers => {}, :body => 'Order not found.'}
207
212
  end
208
213
  end
209
214
  end
@@ -213,22 +218,35 @@ module MtGox
213
218
  # @authenticated true
214
219
  # @param amount [Numeric] the number of bitcoins to withdraw
215
220
  # @param btca [String] the bitcoin address to send to
216
- # @return [Array<Hashie::Rash>]
221
+ # @return [Array<MtGox::Balance>]
217
222
  # @example
218
223
  # # Withdraw 1 BTC from your account
219
- # MtGox.withdraw! 1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"
224
+ # MtGox.withdraw! 1.0, '1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L'
220
225
  def withdraw!(amount, btca)
221
- post('/code/withdraw.php', pass_params.merge({:group1 => "BTC", :amount => amount, :btca => btca}))
226
+ parse_balance(post('/code/withdraw.php', pass_params.merge({:group1 => 'BTC', :amount => amount, :btca => btca})))
222
227
  end
223
228
 
224
229
  private
225
230
 
231
+ def parse_balance(balance)
232
+ balances = []
233
+ balances << Balance.new('BTC', balance['btcs'])
234
+ balances << Balance.new('USD', balance['usds'])
235
+ balances
236
+ end
237
+
226
238
  def parse_orders(orders)
227
- orders.each do |order|
228
- order['amount'] = order['amount'].to_f
229
- order['date'] = Time.at(order['date'])
230
- order['price'] = order['price'].to_f
239
+ buys = []
240
+ sells = []
241
+ orders.sort_by{|order| order['date']}.each do |order|
242
+ case order['type']
243
+ when ORDER_TYPES[:sell]
244
+ sells << Sell.new(order)
245
+ when ORDER_TYPES[:buy]
246
+ buys << Buy.new(order)
247
+ end
231
248
  end
249
+ {:buys => buys, :sells => sells}
232
250
  end
233
251
 
234
252
  def pass_params
@@ -1,7 +1,6 @@
1
1
  require 'faraday'
2
2
  require 'faraday/request/url_encoded'
3
3
  require 'faraday/response/raise_error'
4
- require 'faraday/response/rashify'
5
4
  require 'faraday/response/parse_json'
6
5
  require 'faraday/response/raise_mtgox_error'
7
6
  require 'faraday_middleware'
@@ -24,7 +23,6 @@ module MtGox
24
23
  Faraday.new(options) do |connection|
25
24
  connection.use Faraday::Request::UrlEncoded
26
25
  connection.use Faraday::Response::RaiseError
27
- connection.use Faraday::Response::Rashify
28
26
  connection.use Faraday::Response::ParseJson
29
27
  connection.use Faraday::Response::RaiseMtGoxError
30
28
  connection.adapter(Faraday.default_adapter)
@@ -1,32 +1,10 @@
1
1
  require 'mtgox/bid'
2
+ require 'mtgox/price_ticker'
2
3
  require 'singleton'
3
4
 
4
5
  module MtGox
5
6
  class MaxBid < Bid
6
7
  include Singleton
7
- attr_accessor :previous_price
8
-
9
- def price=(price)
10
- @previous_price = @price
11
- @price = price
12
- end
13
-
14
- def up?
15
- price.to_f > previous_price.to_f
16
- end
17
-
18
- def down?
19
- price.to_f < previous_price.to_f
20
- end
21
-
22
- def changed?
23
- price.to_f != previous_price.to_f
24
- end
25
-
26
- def unchanged?
27
- !changed?
28
- end
29
- alias :unch? :unchanged?
30
-
8
+ include PriceTicker
31
9
  end
32
10
  end
@@ -1,32 +1,10 @@
1
1
  require 'mtgox/ask'
2
+ require 'mtgox/price_ticker'
2
3
  require 'singleton'
3
4
 
4
5
  module MtGox
5
6
  class MinAsk < Ask
6
7
  include Singleton
7
- attr_accessor :previous_price
8
-
9
- def price=(price)
10
- @previous_price = @price
11
- @price = price
12
- end
13
-
14
- def up?
15
- price.to_f > previous_price.to_f
16
- end
17
-
18
- def down?
19
- price.to_f < previous_price.to_f
20
- end
21
-
22
- def changed?
23
- price.to_f != previous_price.to_f
24
- end
25
-
26
- def unchanged?
27
- !changed?
28
- end
29
- alias :unch? :unchanged?
30
-
8
+ include PriceTicker
31
9
  end
32
10
  end
@@ -0,0 +1,14 @@
1
+ require 'mtgox/offer'
2
+
3
+ module MtGox
4
+ class Order < Offer
5
+ attr_accessor :id, :date
6
+
7
+ def initialize(order={})
8
+ self.id = order['oid']
9
+ self.date = Time.at(order['date'].to_i)
10
+ self.amount = order['amount'].to_f
11
+ self.price = order['price'].to_f
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,27 @@
1
+ module MtGox
2
+ module PriceTicker
3
+ attr_reader :previous_price, :price
4
+
5
+ def price=(price)
6
+ @previous_price = @price
7
+ @price = price
8
+ end
9
+
10
+ def up?
11
+ price.to_f > previous_price.to_f
12
+ end
13
+
14
+ def down?
15
+ price.to_f < previous_price.to_f
16
+ end
17
+
18
+ def changed?
19
+ price.to_f != previous_price.to_f
20
+ end
21
+
22
+ def unchanged?
23
+ !changed?
24
+ end
25
+ alias :unch? :unchanged?
26
+ end
27
+ end
@@ -0,0 +1,6 @@
1
+ require 'mtgox/order'
2
+
3
+ module MtGox
4
+ class Sell < Order
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'mtgox/price_ticker'
2
+ require 'singleton'
3
+
4
+ module MtGox
5
+ class Ticker
6
+ include Singleton
7
+ include PriceTicker
8
+ attr_accessor :buy, :sell, :high, :low, :volume
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ require 'mtgox/order'
2
+
3
+ module MtGox
4
+ class Trade < Order
5
+
6
+ def initialize(trade={})
7
+ self.id = trade['tid'].to_i
8
+ self.date = Time.at(trade['date'].to_i)
9
+ self.amount = trade['amount'].to_f
10
+ self.price = trade['price'].to_f
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module MtGox
2
- VERSION = "0.6.0".freeze unless defined? ::MtGox::VERSION
2
+ VERSION = "0.7.0".freeze unless defined? ::MtGox::VERSION
3
3
  end
@@ -25,7 +25,5 @@ Gem::Specification.new do |gem|
25
25
 
26
26
  gem.add_runtime_dependency 'faraday', '~> 0.6.1'
27
27
  gem.add_runtime_dependency 'faraday_middleware', '~> 0.6.3'
28
- gem.add_runtime_dependency 'hashie', '~> 1.0.0'
29
28
  gem.add_runtime_dependency 'multi_json', '~> 1.0.3'
30
- gem.add_runtime_dependency 'rash', '~> 0.3.0'
31
29
  end
@@ -17,8 +17,14 @@ describe MtGox::Client do
17
17
 
18
18
  it "should fetch the ticker" do
19
19
  ticker = @client.ticker
20
- a_get('/code/data/ticker.php').should have_been_made
21
- ticker.last.should == 26.5
20
+ a_get('/code/data/ticker.php').
21
+ should have_been_made
22
+ ticker.buy.should == 26.4
23
+ ticker.sell.should == 26.6099
24
+ ticker.high.should == 28.678
25
+ ticker.low.should == 18.4
26
+ ticker.price.should == 26.5
27
+ ticker.volume.should == 80531.0
22
28
  end
23
29
  end
24
30
 
@@ -31,7 +37,8 @@ describe MtGox::Client do
31
37
  describe '#asks' do
32
38
  it "should fetch open asks" do
33
39
  asks = @client.asks
34
- a_get('/code/data/getDepth.php').should have_been_made
40
+ a_get('/code/data/getDepth.php').
41
+ should have_been_made
35
42
  asks.last.price.should == 23.75
36
43
  asks.last.eprice.should == 23.905385002516354
37
44
  asks.last.amount.should == 50
@@ -47,7 +54,8 @@ describe MtGox::Client do
47
54
  describe "#bids" do
48
55
  it "should fetch open bids" do
49
56
  bids = @client.bids
50
- a_get('/code/data/getDepth.php').should have_been_made
57
+ a_get('/code/data/getDepth.php').
58
+ should have_been_made
51
59
  bids.last.price.should == 14.62101
52
60
  bids.last.eprice.should == 14.525973435000001
53
61
  bids.last.amount.should == 5
@@ -62,20 +70,22 @@ describe MtGox::Client do
62
70
  describe "#offers" do
63
71
  it "should fetch both bids and asks, with only one call" do
64
72
  offers = @client.offers
65
- a_get('/code/data/getDepth.php').should have_been_made.once
66
- offers.asks.last.price.should == 23.75
67
- offers.asks.last.eprice.should == 23.905385002516354
68
- offers.asks.last.amount.should == 50
69
- offers.bids.last.price.should == 14.62101
70
- offers.bids.last.eprice.should == 14.525973435000001
71
- offers.bids.last.amount.should == 5
73
+ a_get('/code/data/getDepth.php').
74
+ should have_been_made.once
75
+ offers[:asks].last.price.should == 23.75
76
+ offers[:asks].last.eprice.should == 23.905385002516354
77
+ offers[:asks].last.amount.should == 50
78
+ offers[:bids].last.price.should == 14.62101
79
+ offers[:bids].last.eprice.should == 14.525973435000001
80
+ offers[:bids].last.amount.should == 5
72
81
  end
73
82
  end
74
83
 
75
84
  describe '#min_ask' do
76
85
  it "should fetch the lowest priced ask" do
77
86
  min_ask = @client.min_ask
78
- a_get('/code/data/getDepth.php').should have_been_made.once
87
+ a_get('/code/data/getDepth.php').
88
+ should have_been_made.once
79
89
  min_ask.price.should == 17.00009
80
90
  min_ask.eprice.should == 17.11131353799698
81
91
  min_ask.amount.should == 36.22894353
@@ -85,7 +95,8 @@ describe MtGox::Client do
85
95
  describe '#max_bid' do
86
96
  it "should fetch the highest priced bid" do
87
97
  max_bid = @client.max_bid
88
- a_get('/code/data/getDepth.php').should have_been_made.once
98
+ a_get('/code/data/getDepth.php').
99
+ should have_been_made.once
89
100
  max_bid.price.should == 17.0
90
101
  max_bid.eprice.should == 16.8895
91
102
  max_bid.amount.should == 82.53875035
@@ -102,11 +113,12 @@ describe MtGox::Client do
102
113
 
103
114
  it "should fetch trades" do
104
115
  trades = @client.trades
105
- a_get('/code/data/getTrades.php').should have_been_made
116
+ a_get('/code/data/getTrades.php').
117
+ should have_been_made
106
118
  trades.last.date.should == Time.utc(2011, 6, 27, 18, 28, 8)
107
119
  trades.last.price.should == 17.00009
108
120
  trades.last.amount.should == 0.5
109
- trades.last.tid.should == "1309199288687054"
121
+ trades.last.id.should == 1309199288687054
110
122
  end
111
123
 
112
124
  it "should be sorted in chronological order" do
@@ -127,8 +139,10 @@ describe MtGox::Client do
127
139
  a_post("/code/getFunds.php").
128
140
  with(:body => {"name" => "my_name", "pass" => "my_password"}).
129
141
  should have_been_made
130
- balance.usds.should == 3.7
131
- balance.btcs.should == 22.0
142
+ balance.first.currency.should == "BTC"
143
+ balance.first.amount.should == 22.0
144
+ balance.last.currency.should == "USD"
145
+ balance.last.amount.should == 3.7
132
146
  end
133
147
  end
134
148
 
@@ -156,8 +170,8 @@ describe MtGox::Client do
156
170
  a_post("/code/getOrders.php").
157
171
  with(:body => {"name" => "my_name", "pass" => "my_password"}).
158
172
  should have_been_made
159
- sells.last.price.should == 101
160
- sells.last.date.should == Time.utc(2011, 6, 27, 18, 20, 7)
173
+ sells.last.price.should == 99.0
174
+ sells.last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
161
175
  end
162
176
  end
163
177
 
@@ -167,8 +181,10 @@ describe MtGox::Client do
167
181
  a_post("/code/getOrders.php").
168
182
  with(:body => {"name" => "my_name", "pass" => "my_password"}).
169
183
  should have_been_made
170
- orders.last.price.should == 101
171
- orders.last.date.should == Time.utc(2011, 6, 27, 18, 20, 7)
184
+ orders[:buys].last.price.should == 7.0
185
+ orders[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 20, 38)
186
+ orders[:sells].last.price.should == 99.0
187
+ orders[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
172
188
  end
173
189
  end
174
190
  end
@@ -181,10 +197,14 @@ describe MtGox::Client do
181
197
  end
182
198
 
183
199
  it "should place a bid" do
184
- @client.buy!(0.88, 0.89)
200
+ buy = @client.buy!(0.88, 0.89)
185
201
  a_post("/code/buyBTC.php").
186
202
  with(:body => {"name" => "my_name", "pass" => "my_password", "amount" => "0.88", "price" => "0.89"}).
187
203
  should have_been_made
204
+ buy[:buys].last.price.should == 2.0
205
+ buy[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 26, 21)
206
+ buy[:sells].last.price.should == 99.0
207
+ buy[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
188
208
  end
189
209
  end
190
210
 
@@ -196,10 +216,14 @@ describe MtGox::Client do
196
216
  end
197
217
 
198
218
  it "should place an ask" do
199
- @client.sell!(0.88, 89.0)
219
+ sell = @client.sell!(0.88, 89.0)
200
220
  a_post("/code/sellBTC.php").
201
221
  with(:body => {"name" => "my_name", "pass" => "my_password", "amount" => "0.88", "price" => "89.0"}).
202
222
  should have_been_made
223
+ sell[:buys].last.price.should == 2.0
224
+ sell[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 26, 21)
225
+ sell[:sells].last.price.should == 200
226
+ sell[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 27, 54)
203
227
  end
204
228
  end
205
229
 
@@ -215,13 +239,17 @@ describe MtGox::Client do
215
239
 
216
240
  context "with a valid oid passed" do
217
241
  it "should cancel an order" do
218
- @client.cancel("bddd042c-e837-4a88-a92e-3b7c05e483df")
242
+ cancel = @client.cancel("bddd042c-e837-4a88-a92e-3b7c05e483df")
219
243
  a_post("/code/getOrders.php").
220
244
  with(:body => {"name" => "my_name", "pass" => "my_password"}).
221
245
  should have_been_made.once
222
246
  a_post('/code/cancelOrder.php').
223
247
  with(:body => {"name" => "my_name", "pass" => "my_password", "oid" => "bddd042c-e837-4a88-a92e-3b7c05e483df", "type" => "2"}).
224
248
  should have_been_made
249
+ cancel[:buys].last.price.should == 7.0
250
+ cancel[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 20, 38)
251
+ cancel[:sells].last.price.should == 99.0
252
+ cancel[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
225
253
  end
226
254
  end
227
255
 
@@ -235,10 +263,14 @@ describe MtGox::Client do
235
263
 
236
264
  context "with an order passed" do
237
265
  it "should cancel an order" do
238
- @client.cancel({'oid' => "bddd042c-e837-4a88-a92e-3b7c05e483df", 'type' => 2})
266
+ cancel = @client.cancel({'oid' => "bddd042c-e837-4a88-a92e-3b7c05e483df", 'type' => 2})
239
267
  a_post('/code/cancelOrder.php').
240
268
  with(:body => {"name" => "my_name", "pass" => "my_password", "oid" => "bddd042c-e837-4a88-a92e-3b7c05e483df", "type" => "2"}).
241
269
  should have_been_made
270
+ cancel[:buys].last.price.should == 7.0
271
+ cancel[:buys].last.date.should == Time.utc(2011, 6, 27, 18, 20, 38)
272
+ cancel[:sells].last.price.should == 99.0
273
+ cancel[:sells].last.date.should == Time.utc(2011, 6, 27, 18, 20, 20)
242
274
  end
243
275
  end
244
276
  end
@@ -251,10 +283,14 @@ describe MtGox::Client do
251
283
  end
252
284
 
253
285
  it "should withdraw funds" do
254
- @client.withdraw!(1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L")
286
+ withdraw = @client.withdraw!(1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L")
255
287
  a_post("/code/withdraw.php").
256
288
  with(:body => {"name" => "my_name", "pass" => "my_password", "group1" => "BTC", "amount" => "1.0", "btca" => "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"}).
257
289
  should have_been_made
290
+ withdraw.first.currency.should == "BTC"
291
+ withdraw.first.amount.should == 9.0
292
+ withdraw.last.currency.should == "USD"
293
+ withdraw.last.amount.should == 64.59
258
294
  end
259
295
  end
260
296
  end
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.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-12 00:00:00.000000000 -07:00
12
+ date: 2011-07-14 00:00:00.000000000 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: ZenTest
17
- requirement: &70226142918300 !ruby/object:Gem::Requirement
17
+ requirement: &70132543720480 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '4.5'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70226142918300
25
+ version_requirements: *70132543720480
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: maruku
28
- requirement: &70226142917500 !ruby/object:Gem::Requirement
28
+ requirement: &70132543701720 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: '0.6'
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70226142917500
36
+ version_requirements: *70132543701720
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rake
39
- requirement: &70226142916860 !ruby/object:Gem::Requirement
39
+ requirement: &70132543700940 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0.9'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *70226142916860
47
+ version_requirements: *70132543700940
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &70226142916160 !ruby/object:Gem::Requirement
50
+ requirement: &70132543698220 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '2.6'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *70226142916160
58
+ version_requirements: *70132543698220
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: simplecov
61
- requirement: &70226142915420 !ruby/object:Gem::Requirement
61
+ requirement: &70132543697720 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0.4'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *70226142915420
69
+ version_requirements: *70132543697720
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: webmock
72
- requirement: &70226142914740 !ruby/object:Gem::Requirement
72
+ requirement: &70132543697000 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '1.6'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *70226142914740
80
+ version_requirements: *70132543697000
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: yard
83
- requirement: &70226142914080 !ruby/object:Gem::Requirement
83
+ requirement: &70132543696260 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ~>
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0.7'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *70226142914080
91
+ version_requirements: *70132543696260
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: faraday
94
- requirement: &70226142913360 !ruby/object:Gem::Requirement
94
+ requirement: &70132543695520 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ~>
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: 0.6.1
100
100
  type: :runtime
101
101
  prerelease: false
102
- version_requirements: *70226142913360
102
+ version_requirements: *70132543695520
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: faraday_middleware
105
- requirement: &70226142911920 !ruby/object:Gem::Requirement
105
+ requirement: &70132543694360 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,21 +110,10 @@ dependencies:
110
110
  version: 0.6.3
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70226142911920
114
- - !ruby/object:Gem::Dependency
115
- name: hashie
116
- requirement: &70226142926600 !ruby/object:Gem::Requirement
117
- none: false
118
- requirements:
119
- - - ~>
120
- - !ruby/object:Gem::Version
121
- version: 1.0.0
122
- type: :runtime
123
- prerelease: false
124
- version_requirements: *70226142926600
113
+ version_requirements: *70132543694360
125
114
  - !ruby/object:Gem::Dependency
126
115
  name: multi_json
127
- requirement: &70226142926000 !ruby/object:Gem::Requirement
116
+ requirement: &70132543693700 !ruby/object:Gem::Requirement
128
117
  none: false
129
118
  requirements:
130
119
  - - ~>
@@ -132,18 +121,7 @@ dependencies:
132
121
  version: 1.0.3
133
122
  type: :runtime
134
123
  prerelease: false
135
- version_requirements: *70226142926000
136
- - !ruby/object:Gem::Dependency
137
- name: rash
138
- requirement: &70226142925380 !ruby/object:Gem::Requirement
139
- none: false
140
- requirements:
141
- - - ~>
142
- - !ruby/object:Gem::Version
143
- version: 0.3.0
144
- type: :runtime
145
- prerelease: false
146
- version_requirements: *70226142925380
124
+ version_requirements: *70132543693700
147
125
  description: Ruby wrapper for the Mt. Gox Trade API. Mt. Gox allows you to trade US
148
126
  Dollars (USD) for Bitcoins (BTC) or Bitcoins for US Dollars.
149
127
  email: sferik@gmail.com
@@ -164,7 +142,9 @@ files:
164
142
  - lib/faraday/response/raise_mtgox_error.rb
165
143
  - lib/mtgox.rb
166
144
  - lib/mtgox/ask.rb
145
+ - lib/mtgox/balance.rb
167
146
  - lib/mtgox/bid.rb
147
+ - lib/mtgox/buy.rb
168
148
  - lib/mtgox/client.rb
169
149
  - lib/mtgox/configuration.rb
170
150
  - lib/mtgox/connection.rb
@@ -172,7 +152,12 @@ files:
172
152
  - lib/mtgox/max_bid.rb
173
153
  - lib/mtgox/min_ask.rb
174
154
  - lib/mtgox/offer.rb
155
+ - lib/mtgox/order.rb
156
+ - lib/mtgox/price_ticker.rb
175
157
  - lib/mtgox/request.rb
158
+ - lib/mtgox/sell.rb
159
+ - lib/mtgox/ticker.rb
160
+ - lib/mtgox/trade.rb
176
161
  - lib/mtgox/version.rb
177
162
  - mtgox.gemspec
178
163
  - spec/faraday/response_spec.rb