mtgox 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,4 +9,3 @@ module Faraday
9
9
  end
10
10
  end
11
11
  end
12
-
data/lib/mtgox/ask.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'mtgox/offer'
2
+
3
+ module MtGox
4
+ class Ask < Offer
5
+
6
+ def eprice
7
+ price / (1 - commission)
8
+ end
9
+
10
+ end
11
+ end
data/lib/mtgox/bid.rb ADDED
@@ -0,0 +1,11 @@
1
+ require 'mtgox/offer'
2
+
3
+ module MtGox
4
+ class Bid < Offer
5
+
6
+ def eprice
7
+ price * (1 - commission)
8
+ end
9
+
10
+ end
11
+ end
data/lib/mtgox/client.rb CHANGED
@@ -1,7 +1,9 @@
1
- require 'hashie'
2
1
  require 'faraday/error'
3
- require 'rash'
2
+ require 'mtgox/ask'
3
+ require 'mtgox/bid'
4
4
  require 'mtgox/connection'
5
+ require 'mtgox/max_bid'
6
+ require 'mtgox/min_ask'
5
7
  require 'mtgox/request'
6
8
 
7
9
  module MtGox
@@ -27,21 +29,25 @@ module MtGox
27
29
  # @return [Hashie::Rash] a hash with keys :asks and :bids, which contain arrays as described in #asks and #bids.
28
30
  # @example
29
31
  # 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
+ # offers.asks[0, 3]
33
+ # offers.bids[0, 3]
32
34
  def offers
33
35
  offers = get('/code/data/getDepth.php')
34
- offers['asks'] = offers['asks'].sort_by{|a| a[0]}
35
- offers['bids'] = offers['bids'].sort_by{|b| b[0]}.reverse
36
+ offers['asks'] = offers['asks'].sort_by{|ask| ask[0].to_f}.map do |ask|
37
+ Ask.new({:price => ask[0].to_f, :amount => ask[1].to_f})
38
+ end
39
+ offers['bids'] = offers['bids'].sort_by{|bid| bid[0].to_f}.reverse.map do |bid|
40
+ Bid.new({:price => bid[0].to_f, :amount => bid[1].to_f})
41
+ end
36
42
  offers
37
43
  end
38
44
 
39
45
  # Fetch open asks
40
46
  #
41
47
  # @authenticated false
42
- # @return [Array<Array<Numeric>>] in the form `[price, quantity]`, sorted in price ascending order
48
+ # @return [Array<Ask>] in the form `[price, amount]`, sorted in price ascending order
43
49
  # @example
44
- # MtGox.asks[0, 3] #=> [[19.3898, 3.9], [19.4, 48.264], [19.409, 1]]
50
+ # MtGox.asks[0, 3]
45
51
  def asks
46
52
  offers['asks']
47
53
  end
@@ -49,13 +55,39 @@ module MtGox
49
55
  # Fetch open bids
50
56
  #
51
57
  # @authenticated false
52
- # @return [Array<Array<Numeric>>] in the form `[price, quantity]`, sorted in price descending order
58
+ # @return [Array<Bid>] in the form `[price, amount]`, sorted in price descending order
53
59
  # @example
54
- # MtGox.bids[0, 3] #=> [[19.3898, 77.42], [19.3, 3.02], [19.29, 82.378]]
60
+ # MtGox.bids[0, 3]
55
61
  def bids
56
62
  offers['bids']
57
63
  end
58
64
 
65
+ # Fetch the lowest priced ask
66
+ #
67
+ # @authenticated false
68
+ # @return [MinAsk]
69
+ # @example
70
+ # MtGox.min_ask
71
+ def min_ask
72
+ min_ask = asks.first
73
+ MinAsk.instance.price = min_ask.price
74
+ MinAsk.instance.amount = min_ask.amount
75
+ MinAsk.instance
76
+ end
77
+
78
+ # Fetch the highest priced bid
79
+ #
80
+ # @authenticated false
81
+ # @return [MinBin]
82
+ # @example
83
+ # MtGox.max_bid
84
+ def max_bid
85
+ max_bid = bids.first
86
+ MaxBid.instance.price = max_bid.price
87
+ MaxBid.instance.amount = max_bid.amount
88
+ MaxBid.instance
89
+ end
90
+
59
91
  # Fetch recent trades
60
92
  #
61
93
  # @authenticated false
@@ -1,4 +1,8 @@
1
1
  require 'faraday'
2
+ require 'faraday/request/url_encoded'
3
+ require 'faraday/response/raise_error'
4
+ require 'faraday/response/rashify'
5
+ require 'faraday/response/parse_json'
2
6
  require 'faraday/response/raise_mtgox_error'
3
7
  require 'faraday_middleware'
4
8
  require 'mtgox/version'
@@ -0,0 +1,32 @@
1
+ require 'mtgox/bid'
2
+ require 'singleton'
3
+
4
+ module MtGox
5
+ class MaxBid < Bid
6
+ 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 > previous_price.to_f
16
+ end
17
+
18
+ def down?
19
+ price < previous_price.to_f
20
+ end
21
+
22
+ def changed?
23
+ price != previous_price.to_f
24
+ end
25
+
26
+ def unchanged?
27
+ !changed?
28
+ end
29
+ alias :unch? :unchanged?
30
+
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ require 'mtgox/ask'
2
+ require 'singleton'
3
+
4
+ module MtGox
5
+ class MinAsk < Ask
6
+ 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 > previous_price.to_f
16
+ end
17
+
18
+ def down?
19
+ price < previous_price.to_f
20
+ end
21
+
22
+ def changed?
23
+ price != previous_price.to_f
24
+ end
25
+
26
+ def unchanged?
27
+ !changed?
28
+ end
29
+ alias :unch? :unchanged?
30
+
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ module MtGox
2
+ class Offer
3
+ attr_accessor :amount, :price
4
+
5
+ def initialize(attributes={})
6
+ attributes.each_pair do |key, value|
7
+ self.send(:"#{key}=", value) if self.respond_to?(:"#{key}=")
8
+ end
9
+ end
10
+
11
+ end
12
+ end
data/lib/mtgox/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module MtGox
2
- VERSION = "0.4.1".freeze unless defined? ::MtGox::VERSION
2
+ VERSION = "0.5.0".freeze unless defined? ::MtGox::VERSION
3
3
  end
@@ -32,12 +32,13 @@ describe MtGox::Client do
32
32
  it "should fetch open asks" do
33
33
  asks = @client.asks
34
34
  a_get('/code/data/getDepth.php').should have_been_made
35
- asks.last.should == [23.75, 50]
35
+ asks.last.price.should == 23.75
36
+ asks.last.amount.should == 50
36
37
  end
37
38
 
38
39
  it "should be sorted in price-ascending order" do
39
40
  asks = @client.asks
40
- asks.sort_by {|x| x[0]}.should == asks
41
+ asks.sort_by{|ask| ask.price}.should == asks
41
42
  end
42
43
 
43
44
  end
@@ -46,22 +47,42 @@ describe MtGox::Client do
46
47
  it "should fetch open bids" do
47
48
  bids = @client.bids
48
49
  a_get('/code/data/getDepth.php').should have_been_made
49
- bids.last.should == [14.62101, 5]
50
+ bids.last.price.should == 14.62101
51
+ bids.last.amount.should == 5
50
52
  end
51
53
 
52
54
  it "should be sorted in price-descending order" do
53
55
  bids = @client.bids
54
- bids.sort_by {|x| x[0]}.reverse.should == bids
56
+ bids.sort_by{|bid| bid.price}.reverse.should == bids
55
57
  end
56
-
57
58
  end
58
59
 
59
60
  describe "#offers" do
60
61
  it "should fetch both bids and asks, with only one call" do
61
62
  offers = @client.offers
62
63
  a_get('/code/data/getDepth.php').should have_been_made.once
63
- offers.asks.last.should == [23.75, 50]
64
- offers.bids.last.should == [14.62101, 5]
64
+ offers.asks.last.price.should == 23.75
65
+ offers.asks.last.amount.should == 50
66
+ offers.bids.last.price.should == 14.62101
67
+ offers.bids.last.amount.should == 5
68
+ end
69
+ end
70
+
71
+ describe '#min_ask' do
72
+ it "should fetch the lowest priced ask" do
73
+ min_ask = @client.min_ask
74
+ a_get('/code/data/getDepth.php').should have_been_made.once
75
+ min_ask.price.should == 17.00009
76
+ min_ask.amount.should == 36.22894353
77
+ end
78
+ end
79
+
80
+ describe '#max_bid' do
81
+ it "should fetch the highest priced bid" do
82
+ max_bid = @client.max_bid
83
+ a_get('/code/data/getDepth.php').should have_been_made.once
84
+ max_bid.price.should == 17.0
85
+ max_bid.amount.should == 82.53875035
65
86
  end
66
87
  end
67
88
 
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.4.1
4
+ version: 0.5.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-09 00:00:00.000000000 -07:00
12
+ date: 2011-07-11 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: &70166558648200 !ruby/object:Gem::Requirement
17
+ requirement: &70296472632860 !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: *70166558648200
25
+ version_requirements: *70296472632860
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: maruku
28
- requirement: &70166558647540 !ruby/object:Gem::Requirement
28
+ requirement: &70296476464400 !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: *70166558647540
36
+ version_requirements: *70296476464400
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rake
39
- requirement: &70166558645320 !ruby/object:Gem::Requirement
39
+ requirement: &70296476463020 !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: *70166558645320
47
+ version_requirements: *70296476463020
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &70166558644460 !ruby/object:Gem::Requirement
50
+ requirement: &70296476461680 !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: *70166558644460
58
+ version_requirements: *70296476461680
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: simplecov
61
- requirement: &70166558643500 !ruby/object:Gem::Requirement
61
+ requirement: &70296476460820 !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: *70166558643500
69
+ version_requirements: *70296476460820
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: webmock
72
- requirement: &70166558642920 !ruby/object:Gem::Requirement
72
+ requirement: &70296476459800 !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: *70166558642920
80
+ version_requirements: *70296476459800
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: yard
83
- requirement: &70166558642300 !ruby/object:Gem::Requirement
83
+ requirement: &70296476458840 !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: *70166558642300
91
+ version_requirements: *70296476458840
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: faraday
94
- requirement: &70166558641240 !ruby/object:Gem::Requirement
94
+ requirement: &70296476458200 !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: *70166558641240
102
+ version_requirements: *70296476458200
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: faraday_middleware
105
- requirement: &70166558639820 !ruby/object:Gem::Requirement
105
+ requirement: &70296476457560 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ~>
@@ -110,10 +110,10 @@ dependencies:
110
110
  version: 0.6.3
111
111
  type: :runtime
112
112
  prerelease: false
113
- version_requirements: *70166558639820
113
+ version_requirements: *70296476457560
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: hashie
116
- requirement: &70166558638900 !ruby/object:Gem::Requirement
116
+ requirement: &70296476482740 !ruby/object:Gem::Requirement
117
117
  none: false
118
118
  requirements:
119
119
  - - ~>
@@ -121,10 +121,10 @@ dependencies:
121
121
  version: 1.0.0
122
122
  type: :runtime
123
123
  prerelease: false
124
- version_requirements: *70166558638900
124
+ version_requirements: *70296476482740
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: multi_json
127
- requirement: &70166558637700 !ruby/object:Gem::Requirement
127
+ requirement: &70296476481880 !ruby/object:Gem::Requirement
128
128
  none: false
129
129
  requirements:
130
130
  - - ~>
@@ -132,10 +132,10 @@ dependencies:
132
132
  version: 1.0.3
133
133
  type: :runtime
134
134
  prerelease: false
135
- version_requirements: *70166558637700
135
+ version_requirements: *70296476481880
136
136
  - !ruby/object:Gem::Dependency
137
137
  name: rash
138
- requirement: &70166558630760 !ruby/object:Gem::Requirement
138
+ requirement: &70296476481100 !ruby/object:Gem::Requirement
139
139
  none: false
140
140
  requirements:
141
141
  - - ~>
@@ -143,7 +143,7 @@ dependencies:
143
143
  version: 0.3.0
144
144
  type: :runtime
145
145
  prerelease: false
146
- version_requirements: *70166558630760
146
+ version_requirements: *70296476481100
147
147
  description: Ruby wrapper for the Mt. Gox Trade API. Mt. Gox allows you to trade US
148
148
  Dollars (USD) for Bitcoins (BTC) or Bitcoins for US Dollars.
149
149
  email: sferik@gmail.com
@@ -163,10 +163,15 @@ files:
163
163
  - Rakefile
164
164
  - lib/faraday/response/raise_mtgox_error.rb
165
165
  - lib/mtgox.rb
166
+ - lib/mtgox/ask.rb
167
+ - lib/mtgox/bid.rb
166
168
  - lib/mtgox/client.rb
167
169
  - lib/mtgox/configuration.rb
168
170
  - lib/mtgox/connection.rb
169
171
  - lib/mtgox/error.rb
172
+ - lib/mtgox/max_bid.rb
173
+ - lib/mtgox/min_ask.rb
174
+ - lib/mtgox/offer.rb
170
175
  - lib/mtgox/request.rb
171
176
  - lib/mtgox/version.rb
172
177
  - mtgox.gemspec