mtgox 0.1.0 → 0.2.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/README.md +9 -9
- data/lib/mtgox.rb +14 -14
- data/lib/mtgox/client.rb +51 -42
- data/lib/mtgox/connection.rb +5 -0
- data/lib/mtgox/version.rb +1 -1
- data/spec/fixtures/{funds.json → balance.json} +0 -0
- data/spec/fixtures/error.json +1 -0
- data/spec/fixtures/withdraw.json +1 -0
- data/spec/helper.rb +0 -1
- data/spec/mtgox/client_spec.rb +48 -7
- data/spec/mtgox_spec.rb +6 -6
- metadata +8 -4
data/README.md
CHANGED
@@ -32,7 +32,7 @@ author, which you can do using the following script:
|
|
32
32
|
config.pass = YOUR_MTGOX_PASSWORD
|
33
33
|
end
|
34
34
|
|
35
|
-
MtGox.
|
35
|
+
MtGox.withdraw 1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"
|
36
36
|
|
37
37
|
Continuous Integration
|
38
38
|
----------------------
|
@@ -56,7 +56,7 @@ Usage Examples
|
|
56
56
|
puts MtGox.trades
|
57
57
|
|
58
58
|
# Certain methods require authentication
|
59
|
-
MtGox.configure do |config|
|
59
|
+
MtGox.configure do |config|
|
60
60
|
config.name = YOUR_MTGOX_USERNAME
|
61
61
|
config.pass = YOUR_MTGOX_PASSWORD
|
62
62
|
end
|
@@ -64,17 +64,17 @@ Usage Examples
|
|
64
64
|
# Get your current balance
|
65
65
|
puts MtGox.balance
|
66
66
|
|
67
|
-
# Place
|
68
|
-
|
67
|
+
# Place a limit order to buy one bitcoin for $0.011
|
68
|
+
MtGox.buy! 1.0, 0.011
|
69
69
|
|
70
|
-
# Place
|
71
|
-
|
70
|
+
# Place a limit order to sell one bitcoin for $100
|
71
|
+
MtGox.sell! 1.0, 100.0
|
72
72
|
|
73
73
|
# Cancel order #1234567890
|
74
|
-
|
74
|
+
MtGox.cancel 1234567890
|
75
75
|
|
76
|
-
#
|
77
|
-
|
76
|
+
# Withdraw 1 BTC from your account
|
77
|
+
MtGox.withdraw! 1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"
|
78
78
|
|
79
79
|
Contributing
|
80
80
|
------------
|
data/lib/mtgox.rb
CHANGED
@@ -6,22 +6,22 @@ module MtGox
|
|
6
6
|
def configure
|
7
7
|
yield self
|
8
8
|
end
|
9
|
-
end
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
# Alias for MtGox::Client.new
|
11
|
+
#
|
12
|
+
# @return [MtGox::Client]
|
13
|
+
def new
|
14
|
+
MtGox::Client.new
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
# Delegate to MtGox::Client
|
18
|
+
def method_missing(method, *args, &block)
|
19
|
+
return super unless new.respond_to?(method)
|
20
|
+
new.send(method, *args, &block)
|
21
|
+
end
|
23
22
|
|
24
|
-
|
25
|
-
|
23
|
+
def respond_to?(method, include_private=false)
|
24
|
+
new.respond_to?(method, include_private) || super(method, include_private)
|
25
|
+
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/mtgox/client.rb
CHANGED
@@ -21,6 +21,18 @@ module MtGox
|
|
21
21
|
get('/code/data/ticker.php')['ticker']
|
22
22
|
end
|
23
23
|
|
24
|
+
# Fetch both bids and asks in one call, for network efficiency
|
25
|
+
#
|
26
|
+
# @authenticated false
|
27
|
+
# @return [Hashie::Rash] a hash with keys :asks and :bids, which contain arrays as described in #asks and #bids.
|
28
|
+
# @example
|
29
|
+
# offers = MtGox.offers
|
30
|
+
# offers.asks[0, 3] #=> [[19.3898, 3.9], [19.4, 48.264], [19.409, 1]]
|
31
|
+
# offers.bids[0, 3] #=> [[19.3898, 77.42], [19.3, 3.02], [19.29, 82.378]]
|
32
|
+
def offers
|
33
|
+
get('/code/data/getDepth.php')
|
34
|
+
end
|
35
|
+
|
24
36
|
# Fetch open asks
|
25
37
|
#
|
26
38
|
# @authenticated false
|
@@ -28,7 +40,7 @@ module MtGox
|
|
28
40
|
# @example
|
29
41
|
# MtGox.asks[0, 3] #=> [[19.3898, 3.9], [19.4, 48.264], [19.409, 1]]
|
30
42
|
def asks
|
31
|
-
|
43
|
+
offers['asks']
|
32
44
|
end
|
33
45
|
|
34
46
|
# Fetch open bids
|
@@ -38,19 +50,7 @@ module MtGox
|
|
38
50
|
# @example
|
39
51
|
# MtGox.bids[0, 3] #=> [[19.3898, 77.42], [19.3, 3.02], [19.29, 82.378]]
|
40
52
|
def bids
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
# Fetch both bids and asks in one call, for network efficiency
|
45
|
-
#
|
46
|
-
# @authenticated false
|
47
|
-
# @return [Hashie::Rash] a hash with keys :asks and :bids, which contain arrays as described in #asks and #bids.
|
48
|
-
# @example
|
49
|
-
# offers = MtGox.offers
|
50
|
-
# offers.asks[0, 3] #=> [[19.3898, 3.9], [19.4, 48.264], [19.409, 1]]
|
51
|
-
# offers.bids[0, 3] #=> [[19.3898, 77.42], [19.3, 3.02], [19.29, 82.378]]
|
52
|
-
def offers
|
53
|
-
get('/code/data/getDepth.php')
|
53
|
+
offers['bids']
|
54
54
|
end
|
55
55
|
|
56
56
|
# Fetch recent trades
|
@@ -75,6 +75,16 @@ module MtGox
|
|
75
75
|
post('/code/getFunds.php', pass_params)
|
76
76
|
end
|
77
77
|
|
78
|
+
# Fetch your open orders, both buys and sells, for network efficiency
|
79
|
+
#
|
80
|
+
# @authenticated true
|
81
|
+
# @return [<Hashie::Rash>] with keys `buy` and `sell`, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Client#sells}
|
82
|
+
# @example
|
83
|
+
# MtGox.orders[0, 3] #=> [<#Hashie::Rash amount=0.73 dark="0" date="1307949196" oid="929284" price=2 status=:active type=2>, <#Hashie::Rash amount=0.36 dark="0" date="1307949201" oid="929288" price=4 status=:active type=2>, <#Hashie::Rash amount=0.24 dark="0" date="1307949212" oid="929292" price=6 status=:active type=2>]
|
84
|
+
def orders
|
85
|
+
post('/code/getOrders.php', pass_params)['orders']
|
86
|
+
end
|
87
|
+
|
78
88
|
# Fetch your open buys
|
79
89
|
#
|
80
90
|
# @authenticated true
|
@@ -99,47 +109,34 @@ module MtGox
|
|
99
109
|
end
|
100
110
|
end
|
101
111
|
|
102
|
-
#
|
103
|
-
#
|
104
|
-
# @authenticated true
|
105
|
-
# @return [<Hashie::Rash>] with keys `buy` and `sell`, which contain arrays as described in {MtGox::Client#buys} and {MtGox::Client#sells}
|
106
|
-
# @example
|
107
|
-
# MtGox.orders[0, 3] #=> [<#Hashie::Rash amount=0.73 dark="0" date="1307949196" oid="929284" price=2 status=:active type=2>, <#Hashie::Rash amount=0.36 dark="0" date="1307949201" oid="929288" price=4 status=:active type=2>, <#Hashie::Rash amount=0.24 dark="0" date="1307949212" oid="929292" price=6 status=:active type=2>]
|
108
|
-
def orders
|
109
|
-
hash = post('/code/getOrders.php', pass_params)['orders']
|
110
|
-
end
|
111
|
-
|
112
|
-
# Place an order to buy
|
112
|
+
# Place a limit order to buy BTC
|
113
113
|
#
|
114
|
-
# @todo Return something useful
|
115
114
|
# @authenticated true
|
116
|
-
# @param
|
115
|
+
# @param amount [Numeric] the number of bitcoins to purchase
|
117
116
|
# @param price [Numeric] the bid price in US dollars
|
118
117
|
# @return [Array<Hashie::Rash>]
|
119
118
|
# @example
|
120
|
-
# # Buy one
|
121
|
-
# MtGox.buy! 1.0,
|
122
|
-
def buy!(
|
123
|
-
post('/code/buyBTC.php', pass_params.merge({:amount =>
|
119
|
+
# # Buy one bitcoin for $0.011
|
120
|
+
# MtGox.buy! 1.0, 0.011
|
121
|
+
def buy!(amount, price)
|
122
|
+
post('/code/buyBTC.php', pass_params.merge({:amount => amount, :price => price}))
|
124
123
|
end
|
125
124
|
|
126
|
-
# Place
|
125
|
+
# Place a limit order to sell BTC
|
127
126
|
#
|
128
|
-
# @todo Return something useful
|
129
127
|
# @authenticated true
|
130
|
-
# @param
|
128
|
+
# @param amount [Numeric] the number of bitcoins to sell
|
131
129
|
# @param price [Numeric] the ask price in US dollars
|
132
130
|
# @return [Array<Hashie::Rash>]
|
133
131
|
# @example
|
134
|
-
# # Sell
|
135
|
-
# MtGox.sell! 0
|
136
|
-
def sell!(
|
137
|
-
post('/code/sellBTC.php', pass_params.merge({:amount =>
|
132
|
+
# # Sell one bitcoin for $100
|
133
|
+
# MtGox.sell! 1.0, 100.0
|
134
|
+
def sell!(amount, price)
|
135
|
+
post('/code/sellBTC.php', pass_params.merge({:amount => amount, :price => price}))
|
138
136
|
end
|
139
137
|
|
140
138
|
# Cancel an open order
|
141
139
|
#
|
142
|
-
# @todo Return something useful
|
143
140
|
# @authenticated true
|
144
141
|
# @overload cancel(oid)
|
145
142
|
# @param oid [String] an order ID
|
@@ -157,12 +154,12 @@ module MtGox
|
|
157
154
|
# MtGox.cancel {"oid" => "1234567890", "type" => 2}
|
158
155
|
def cancel(args)
|
159
156
|
if args.is_a?(Hash)
|
160
|
-
order = args.
|
157
|
+
order = args.delete_if{|k, v| !['oid', 'type'].include?(k.to_s)}
|
161
158
|
post('/code/cancelOrder.php', pass_params.merge(order))
|
162
159
|
else
|
163
160
|
order = orders.select{|o| o['oid'] == args.to_s}.first
|
164
161
|
if order
|
165
|
-
order.
|
162
|
+
order = order.delete_if{|k, v| !['oid', 'type'].include?(k.to_s)}
|
166
163
|
post('/code/cancelOrder.php', pass_params.merge(order))
|
167
164
|
else
|
168
165
|
raise Faraday::Error::ResourceNotFound, {:status => 404, :headers => {}, :body => "Order not found."}
|
@@ -170,11 +167,23 @@ module MtGox
|
|
170
167
|
end
|
171
168
|
end
|
172
169
|
|
170
|
+
# Transfer bitcoins from your Mt. Gox account into another account
|
171
|
+
#
|
172
|
+
# @authenticated true
|
173
|
+
# @param amount [Numeric] the number of bitcoins to withdraw
|
174
|
+
# @param btca [String] the bitcoin address to send to
|
175
|
+
# @return [Array<Hashie::Rash>]
|
176
|
+
# @example
|
177
|
+
# # Withdraw 1 BTC from your account
|
178
|
+
# MtGox.withdraw! 1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"
|
179
|
+
def withdraw!(amount, btca)
|
180
|
+
post('/code/withdraw.php', pass_params.merge({:group1 => "BTC", :amount => amount, :btca => btca}))
|
181
|
+
end
|
182
|
+
|
173
183
|
private
|
174
184
|
|
175
185
|
def pass_params
|
176
186
|
{:name => MtGox.name, :pass => MtGox.pass}
|
177
187
|
end
|
178
|
-
|
179
188
|
end
|
180
189
|
end
|
data/lib/mtgox/connection.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'faraday_middleware'
|
2
|
+
require 'mtgox/version'
|
2
3
|
|
3
4
|
module MtGox
|
4
5
|
module Connection
|
@@ -6,6 +7,10 @@ module MtGox
|
|
6
7
|
|
7
8
|
def connection
|
8
9
|
options = {
|
10
|
+
:headers => {
|
11
|
+
:accept => 'application/json',
|
12
|
+
:user_agent => "mtgox gem #{MtGox::VERSION}",
|
13
|
+
},
|
9
14
|
:ssl => {:verify => false},
|
10
15
|
:url => 'https://mtgox.com',
|
11
16
|
}
|
data/lib/mtgox/version.rb
CHANGED
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
{"error":"Not logged in."}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"usds":64.59,"btcs":9,"status":"Your funds are on their way..."}
|
data/spec/helper.rb
CHANGED
data/spec/mtgox/client_spec.rb
CHANGED
@@ -3,7 +3,10 @@ require 'helper'
|
|
3
3
|
describe MtGox::Client do
|
4
4
|
before do
|
5
5
|
@client = MtGox::Client.new
|
6
|
-
MtGox.configure
|
6
|
+
MtGox.configure do |config|
|
7
|
+
config.name = "my_name"
|
8
|
+
config.pass = "my_password"
|
9
|
+
end
|
7
10
|
end
|
8
11
|
|
9
12
|
describe '#ticker' do
|
@@ -54,7 +57,7 @@ describe MtGox::Client do
|
|
54
57
|
end
|
55
58
|
|
56
59
|
describe "#offers" do
|
57
|
-
it "should fetch both bids and asks,
|
60
|
+
it "should fetch both bids and asks, with only one call" do
|
58
61
|
offers = @client.offers
|
59
62
|
a_get('/code/data/getDepth.php').should have_been_made.once
|
60
63
|
offers.asks.last.should == [45, 593.28]
|
@@ -88,12 +91,15 @@ describe MtGox::Client do
|
|
88
91
|
describe '#balance' do
|
89
92
|
before do
|
90
93
|
stub_post('/code/getFunds.php').
|
91
|
-
|
94
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
95
|
+
to_return(:status => 200, :body => fixture('balance.json'))
|
92
96
|
end
|
93
97
|
|
94
98
|
it "should fetch balance" do
|
95
99
|
balance = @client.balance
|
96
|
-
a_post("/code/getFunds.php").
|
100
|
+
a_post("/code/getFunds.php").
|
101
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
102
|
+
should have_been_made
|
97
103
|
balance.usds.should == 3.7
|
98
104
|
balance.btcs.should == 22.0
|
99
105
|
end
|
@@ -102,13 +108,16 @@ describe MtGox::Client do
|
|
102
108
|
describe "order methods" do
|
103
109
|
before :each do
|
104
110
|
stub_post('/code/getOrders.php').
|
111
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
105
112
|
to_return(:status => 200, :body => fixture('orders.json'))
|
106
113
|
end
|
107
114
|
|
108
115
|
describe "#buys" do
|
109
116
|
it "should fetch orders" do
|
110
117
|
buys = @client.buys
|
111
|
-
a_post("/code/getOrders.php").
|
118
|
+
a_post("/code/getOrders.php").
|
119
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
120
|
+
should have_been_made
|
112
121
|
buys.last.price.should == 14
|
113
122
|
end
|
114
123
|
end
|
@@ -116,15 +125,28 @@ describe MtGox::Client do
|
|
116
125
|
describe "#sells" do
|
117
126
|
it "should fetch sells" do
|
118
127
|
sells = @client.sells
|
119
|
-
a_post("/code/getOrders.php").
|
128
|
+
a_post("/code/getOrders.php").
|
129
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
130
|
+
should have_been_made
|
120
131
|
sells.last.price.should == 29.3
|
121
132
|
end
|
122
133
|
end
|
134
|
+
|
135
|
+
describe "#orders" do
|
136
|
+
it "should fetch both buys and sells, with only one call" do
|
137
|
+
orders = @client.orders
|
138
|
+
a_post("/code/getOrders.php").
|
139
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
140
|
+
should have_been_made
|
141
|
+
orders.last.price.should == 29.3
|
142
|
+
end
|
143
|
+
end
|
123
144
|
end
|
124
145
|
|
125
146
|
describe "#buy!" do
|
126
147
|
before do
|
127
148
|
stub_post('/code/buyBTC.php').
|
149
|
+
with(:body => {"name" => "my_name", "pass" => "my_password", "amount" => "0.88", "price" => "0.89"}).
|
128
150
|
to_return(:status => 200, :body => fixture('buy.json'))
|
129
151
|
end
|
130
152
|
|
@@ -139,6 +161,7 @@ describe MtGox::Client do
|
|
139
161
|
describe "#sell!" do
|
140
162
|
before do
|
141
163
|
stub_post('/code/sellBTC.php').
|
164
|
+
with(:body => {"name" => "my_name", "pass" => "my_password", "amount" => "0.88", "price" => "89.0"}).
|
142
165
|
to_return(:status => 200, :body => fixture('sell.json'))
|
143
166
|
end
|
144
167
|
|
@@ -153,15 +176,19 @@ describe MtGox::Client do
|
|
153
176
|
describe "#cancel" do
|
154
177
|
before do
|
155
178
|
stub_post('/code/getOrders.php').
|
179
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
156
180
|
to_return(:status => 200, :body => fixture('orders.json'))
|
157
181
|
stub_post('/code/cancelOrder.php').
|
182
|
+
with(:body => {"name" => "my_name", "pass" => "my_password", "oid" => "929284", "type" => "2"}).
|
158
183
|
to_return(:status => 200, :body => fixture('cancel.json'))
|
159
184
|
end
|
160
185
|
|
161
186
|
context "with a valid oid passed" do
|
162
187
|
it "should cancel an order" do
|
163
188
|
@client.cancel(929284)
|
164
|
-
a_post("/code/getOrders.php").
|
189
|
+
a_post("/code/getOrders.php").
|
190
|
+
with(:body => {"name" => "my_name", "pass" => "my_password"}).
|
191
|
+
should have_been_made.once
|
165
192
|
a_post('/code/cancelOrder.php').
|
166
193
|
with(:body => {"name" => "my_name", "pass" => "my_password", "oid" => "929284", "type" => "2"}).
|
167
194
|
should have_been_made
|
@@ -186,4 +213,18 @@ describe MtGox::Client do
|
|
186
213
|
end
|
187
214
|
end
|
188
215
|
|
216
|
+
describe "#withdraw!" do
|
217
|
+
before do
|
218
|
+
stub_post('/code/withdraw.php').
|
219
|
+
with(:body => {"name" => "my_name", "pass" => "my_password", "group1" => "BTC", "amount" => "1.0", "btca" => "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"}).
|
220
|
+
to_return(:status => 200, :body => fixture('withdraw.json'))
|
221
|
+
end
|
222
|
+
|
223
|
+
it "should withdraw funds" do
|
224
|
+
@client.withdraw!(1.0, "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L")
|
225
|
+
a_post("/code/withdraw.php").
|
226
|
+
with(:body => {"name" => "my_name", "pass" => "my_password", "group1" => "BTC", "amount" => "1.0", "btca" => "1KxSo9bGBfPVFEtWNLpnUK1bfLNNT4q31L"}).
|
227
|
+
should have_been_made
|
228
|
+
end
|
229
|
+
end
|
189
230
|
end
|
data/spec/mtgox_spec.rb
CHANGED
@@ -6,17 +6,17 @@ describe MtGox do
|
|
6
6
|
MtGox.new.should be_a MtGox::Client
|
7
7
|
end
|
8
8
|
end
|
9
|
-
|
9
|
+
|
10
10
|
describe ".configure" do
|
11
11
|
it "should set 'name' and 'pass'" do
|
12
|
-
MtGox.configure do |
|
13
|
-
|
14
|
-
|
12
|
+
MtGox.configure do |config|
|
13
|
+
config.name = "username"
|
14
|
+
config.pass = "password"
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
MtGox.name.should == "username"
|
18
18
|
MtGox.pass.should == "password"
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: mtgox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.
|
5
|
+
version: 0.2.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Erik Michaels-Ober
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-26 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -170,14 +170,16 @@ files:
|
|
170
170
|
- lib/mtgox/request.rb
|
171
171
|
- lib/mtgox/version.rb
|
172
172
|
- mtgox.gemspec
|
173
|
+
- spec/fixtures/balance.json
|
173
174
|
- spec/fixtures/buy.json
|
174
175
|
- spec/fixtures/cancel.json
|
175
176
|
- spec/fixtures/depth.json
|
176
|
-
- spec/fixtures/
|
177
|
+
- spec/fixtures/error.json
|
177
178
|
- spec/fixtures/orders.json
|
178
179
|
- spec/fixtures/sell.json
|
179
180
|
- spec/fixtures/ticker.json
|
180
181
|
- spec/fixtures/trades.json
|
182
|
+
- spec/fixtures/withdraw.json
|
181
183
|
- spec/helper.rb
|
182
184
|
- spec/mtgox/client_spec.rb
|
183
185
|
- spec/mtgox_spec.rb
|
@@ -210,14 +212,16 @@ signing_key:
|
|
210
212
|
specification_version: 3
|
211
213
|
summary: Ruby wrapper for the Mt. Gox Trade API
|
212
214
|
test_files:
|
215
|
+
- spec/fixtures/balance.json
|
213
216
|
- spec/fixtures/buy.json
|
214
217
|
- spec/fixtures/cancel.json
|
215
218
|
- spec/fixtures/depth.json
|
216
|
-
- spec/fixtures/
|
219
|
+
- spec/fixtures/error.json
|
217
220
|
- spec/fixtures/orders.json
|
218
221
|
- spec/fixtures/sell.json
|
219
222
|
- spec/fixtures/ticker.json
|
220
223
|
- spec/fixtures/trades.json
|
224
|
+
- spec/fixtures/withdraw.json
|
221
225
|
- spec/helper.rb
|
222
226
|
- spec/mtgox/client_spec.rb
|
223
227
|
- spec/mtgox_spec.rb
|