mtgox-ruby 0.1.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/.document +5 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +34 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/lib/mtgox-ruby.rb +80 -0
- data/lib/mtgox_order.rb +22 -0
- data/readme.rdoc +36 -0
- data/spec/mtgox-ruby_spec.rb +25 -0
- metadata +140 -0
data/.document
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.1.2)
|
5
|
+
fakeweb (1.3.0)
|
6
|
+
git (1.2.5)
|
7
|
+
jeweler (1.5.2)
|
8
|
+
bundler (~> 1.0.0)
|
9
|
+
git (>= 1.2.5)
|
10
|
+
rake
|
11
|
+
json (1.5.1)
|
12
|
+
rake (0.8.7)
|
13
|
+
rcov (0.9.9)
|
14
|
+
rspec (2.5.0)
|
15
|
+
rspec-core (~> 2.5.0)
|
16
|
+
rspec-expectations (~> 2.5.0)
|
17
|
+
rspec-mocks (~> 2.5.0)
|
18
|
+
rspec-core (2.5.1)
|
19
|
+
rspec-expectations (2.5.0)
|
20
|
+
diff-lcs (~> 1.1.2)
|
21
|
+
rspec-mocks (2.5.0)
|
22
|
+
shoulda (2.11.3)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
ruby
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
bundler (~> 1.0.0)
|
29
|
+
fakeweb
|
30
|
+
jeweler (~> 1.5.2)
|
31
|
+
json
|
32
|
+
rcov
|
33
|
+
rspec (> 1.2.3)
|
34
|
+
shoulda
|
data/Rakefile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'rake'
|
11
|
+
|
12
|
+
require 'jeweler'
|
13
|
+
Jeweler::Tasks.new do |gem|
|
14
|
+
gem.name = "mtgox-ruby"
|
15
|
+
gem.homepage = "http://github.com/paulasmuth/mtgox-ruby"
|
16
|
+
gem.license = "MIT"
|
17
|
+
gem.summary = "ruby client for the mtgox.com bitcoin exchange api"
|
18
|
+
gem.description = "trade bitcoins from ruby"
|
19
|
+
gem.email = "paul@23linesofcode.com"
|
20
|
+
gem.authors = ["Paul Asmuth"]
|
21
|
+
gem.add_development_dependency 'rspec', '> 1.2.3'
|
22
|
+
end
|
23
|
+
Jeweler::RubygemsDotOrgTasks.new
|
24
|
+
|
25
|
+
require 'rspec'
|
26
|
+
require 'rspec/core/rake_task'
|
27
|
+
desc "Run all examples"
|
28
|
+
RSpec::Core::RakeTask.new('spec') do |spec|
|
29
|
+
spec.pattern = 'spec/*_spec.rb'
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'rcov/rcovtask'
|
33
|
+
Rcov::RcovTask.new do |test|
|
34
|
+
test.libs << 'test'
|
35
|
+
test.pattern = 'test/**/test_*.rb'
|
36
|
+
test.verbose = true
|
37
|
+
end
|
38
|
+
|
39
|
+
task :default => :spec
|
40
|
+
|
41
|
+
require 'rake/rdoctask'
|
42
|
+
Rake::RDocTask.new do |rdoc|
|
43
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
44
|
+
|
45
|
+
rdoc.rdoc_dir = 'rdoc'
|
46
|
+
rdoc.title = "mtgox-ruby #{version}"
|
47
|
+
rdoc.rdoc_files.include('README*')
|
48
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/lib/mtgox-ruby.rb
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
7
|
+
require 'mtgox_order'
|
8
|
+
|
9
|
+
class MtgoxClient
|
10
|
+
|
11
|
+
MTGOX_API_URL = "https://mtgox.com/code/data/"
|
12
|
+
|
13
|
+
attr_accessor :api_url
|
14
|
+
|
15
|
+
def initialize(url=nil)
|
16
|
+
self.api_url = url || MTGOX_API_URL
|
17
|
+
end
|
18
|
+
|
19
|
+
def ticker_data
|
20
|
+
raise "implement me"
|
21
|
+
end
|
22
|
+
|
23
|
+
def market_depth
|
24
|
+
raise "implement me"
|
25
|
+
end
|
26
|
+
|
27
|
+
def recent_trades
|
28
|
+
json = JSON.parse(submit_request('getTrades.php'))
|
29
|
+
orders = json.map do |trade_json|
|
30
|
+
MtgoxOrder.from_json(trade_json)
|
31
|
+
end
|
32
|
+
return orders
|
33
|
+
end
|
34
|
+
|
35
|
+
def current_balance
|
36
|
+
raise "implement me"
|
37
|
+
end
|
38
|
+
|
39
|
+
def open_orders
|
40
|
+
raise "implement me"
|
41
|
+
end
|
42
|
+
|
43
|
+
def cancel_order(order)
|
44
|
+
raise "implement me"
|
45
|
+
end
|
46
|
+
|
47
|
+
def place_order(order)
|
48
|
+
raise "implement me"
|
49
|
+
end
|
50
|
+
|
51
|
+
def send_bitcoin(amount, bitcoin_address)
|
52
|
+
raise "implement me"
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def submit_request_with_credentials(command, data_hash={})
|
58
|
+
submit_request(command, data_hash.merge(
|
59
|
+
:user => @username,
|
60
|
+
:pass => @password
|
61
|
+
))
|
62
|
+
end
|
63
|
+
|
64
|
+
def submit_request(command, data_string_or_hash="")
|
65
|
+
uri = URI::parse(self.api_url+command)
|
66
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
67
|
+
http.use_ssl = true if uri.scheme == 'https'
|
68
|
+
resp, resp_data = http.post(uri.path, build_request_data(data_string_or_hash), nil)
|
69
|
+
return resp_data
|
70
|
+
end
|
71
|
+
|
72
|
+
def build_request_data(data_string_or_hash="")
|
73
|
+
if data_string_or_hash.is_a?(Hash)
|
74
|
+
return "?" + data_string_or_hash.to_a.map{ |param| "#{param[0]}=#{param[1]}" }.join("&")
|
75
|
+
else
|
76
|
+
return data_string_or_hash
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/lib/mtgox_order.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
class MtgoxOrder
|
2
|
+
|
3
|
+
attr_accessor :price, :amount, :time, :order_id, :buy_or_sell
|
4
|
+
|
5
|
+
def buy?
|
6
|
+
self.buy_or_sell == :buy
|
7
|
+
end
|
8
|
+
|
9
|
+
def sell?
|
10
|
+
self.buy_or_sell == :sell
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.from_json(json)
|
14
|
+
order = self.new
|
15
|
+
order.amount = json["amount"].to_f
|
16
|
+
order.order_id = json["tid"]
|
17
|
+
order.price = json["price"].to_f
|
18
|
+
order.time = Time.at(json["date"].to_i)
|
19
|
+
return order
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
data/readme.rdoc
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
= mtgox-ruby
|
2
|
+
|
3
|
+
ruby api client for the mtgox.com bitcoin exchange
|
4
|
+
|
5
|
+
{<img src="https://secure.travis-ci.org/paulasmuth/mtgox-ruby.png" />}[http://travis-ci.org/paulasmuth/mtgox-ruby]
|
6
|
+
|
7
|
+
== Installation
|
8
|
+
|
9
|
+
In your Gemfile
|
10
|
+
gem "mtgox-ruby", :git => "git://github.com/paulasmuth/mtgox-ruby.git"
|
11
|
+
|
12
|
+
or
|
13
|
+
gem install git://github.com/paulasmuth/mtgox-ruby.git
|
14
|
+
|
15
|
+
== Usage
|
16
|
+
|
17
|
+
Get recent trades:
|
18
|
+
|
19
|
+
@mtgox_client = MtgoxClient.new
|
20
|
+
|
21
|
+
most_recent_trade = @mtgox_client.recent_trades.first
|
22
|
+
|
23
|
+
most_recent_trade.buy?
|
24
|
+
=> true
|
25
|
+
|
26
|
+
most_recent_trade.sell?
|
27
|
+
=> false
|
28
|
+
|
29
|
+
most_recent_trade.amount
|
30
|
+
=> 42
|
31
|
+
|
32
|
+
most_recent_trade.price
|
33
|
+
=> 5,23
|
34
|
+
|
35
|
+
most_recent_trade.order_id
|
36
|
+
=> 123123123123
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
2
|
+
require 'mtgox-ruby'
|
3
|
+
require 'fakeweb'
|
4
|
+
|
5
|
+
FakeWeb.register_uri(:any, 'https://mtgox.com/code/data/getTrades.php',
|
6
|
+
:body => ::File.open(::File.expand_path('../get_trades.json', __FILE__)).read
|
7
|
+
)
|
8
|
+
|
9
|
+
describe MtgoxClient do
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
@mtgox_client = MtgoxClient.new
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should receive recent trades as MtgoxOrder objects" do
|
16
|
+
recent_trades = @mtgox_client.recent_trades
|
17
|
+
recent_trades.should be_a(Array)
|
18
|
+
recent_trades.length.should > 0
|
19
|
+
recent_trades.each do |trade|
|
20
|
+
trade.should be_a(MtgoxOrder)
|
21
|
+
trade.amount.should > 0
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mtgox-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Paul Asmuth
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-05-01 00:00:00 +02:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: json
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: shoulda
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ">="
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "0"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: bundler
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.0.0
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: jeweler
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ~>
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 1.5.2
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rspec
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.2.3
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
- !ruby/object:Gem::Dependency
|
72
|
+
name: rcov
|
73
|
+
prerelease: false
|
74
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ">"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.2.3
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id007
|
93
|
+
description: trade bitcoins from ruby
|
94
|
+
email: paul@23linesofcode.com
|
95
|
+
executables: []
|
96
|
+
|
97
|
+
extensions: []
|
98
|
+
|
99
|
+
extra_rdoc_files:
|
100
|
+
- readme.rdoc
|
101
|
+
files:
|
102
|
+
- .document
|
103
|
+
- Gemfile
|
104
|
+
- Gemfile.lock
|
105
|
+
- readme.rdoc
|
106
|
+
- Rakefile
|
107
|
+
- VERSION
|
108
|
+
- lib/mtgox-ruby.rb
|
109
|
+
- lib/mtgox_order.rb
|
110
|
+
- spec/mtgox-ruby_spec.rb
|
111
|
+
has_rdoc: true
|
112
|
+
homepage: http://github.com/paulasmuth/mtgox-ruby
|
113
|
+
licenses:
|
114
|
+
- MIT
|
115
|
+
post_install_message:
|
116
|
+
rdoc_options: []
|
117
|
+
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: "0"
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: "0"
|
132
|
+
requirements: []
|
133
|
+
|
134
|
+
rubyforge_project:
|
135
|
+
rubygems_version: 1.6.2
|
136
|
+
signing_key:
|
137
|
+
specification_version: 3
|
138
|
+
summary: ruby client for the mtgox.com bitcoin exchange api
|
139
|
+
test_files:
|
140
|
+
- spec/mtgox-ruby_spec.rb
|