tickerpicker 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +50 -11
- data/lib/tickerpicker/price.rb +30 -13
- data/lib/tickerpicker/stocks.yml +36 -0
- data/lib/tickerpicker/ticker.rb +11 -50
- data/lib/tickerpicker/version.rb +1 -1
- data/test/unit/json/developer.json +1 -1
- data/test/unit/json/tester.json +1 -1
- data/test/unit/stocks.yml +14 -2
- data/test/unit/ticker_test.rb +5 -35
- data/tickerpicker.gemspec +2 -2
- metadata +6 -12
- data/lib/tickerpicker/factory/bitstamp.rb +0 -30
- data/lib/tickerpicker/factory/btce.rb +0 -30
- data/lib/tickerpicker/factory/btcturk.rb +0 -30
- data/lib/tickerpicker/factory/mtgox.rb +0 -30
- data/test/unit/factory/developer.rb +0 -30
- data/test/unit/factory/tester.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b638d526fb246916ec78da5b23542a4386e0dd13
|
4
|
+
data.tar.gz: 0680592e3eb8c64d2004f2bb7df0046bcebe2384
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a15b9b9426a5a071c1ac10b574a2a3350ca11a61dcf272a4f2ab780be8ddf6cb409dbd5188ebb95445a2a98513d889f0d4223b6f172e2890da15f10bd00228e
|
7
|
+
data.tar.gz: d57bcebec44e6ed0b0b6f7e622df5cb31b0072ea25ec90e9578cc99bdce505133bd1018058fd0d4aeea65bdc02972c989ac52316f276a576cac31bfbbc4e9ee8
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[![Build Status](https://travis-ci.org/mustafaturan/tickerpicker.png)](https://travis-ci.org/mustafaturan/tickerpicker) [![Code Climate](https://codeclimate.com/github/mustafaturan/tickerpicker.png)](https://codeclimate.com/github/mustafaturan/tickerpicker)
|
4
4
|
|
5
|
-
A generalized ticker picker for
|
5
|
+
A generalized ticker picker library for cryto currencies like #BTC(bitcoin), #LTC(litecoin) in world stock markets.
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -19,19 +19,14 @@ Or install it yourself as:
|
|
19
19
|
$ gem install tickerpicker
|
20
20
|
|
21
21
|
## Usage
|
22
|
-
Register
|
23
|
-
|
24
|
-
TickerPicker::Ticker.register "mtgox"
|
25
|
-
TickerPicker::Ticker.register "btce"
|
26
|
-
|
27
|
-
Or register multiple stocks:
|
28
|
-
|
29
|
-
TickerPicker::Ticker.register_list ["mtgox", "btce", "bitstamp"]
|
22
|
+
Register stock-market sources using stock.yml file.
|
30
23
|
|
31
24
|
Get prices from the stock's specific market:
|
32
25
|
|
33
26
|
prices_mtgox_usd = TickerPicker::Ticker.get_prices 'mtgox', 'btc_usd'
|
27
|
+
#<TickerPicker::Price:0x007f8f2482e758 @ask=1010.0, @bid=1003.671, @currency="USD", @last=1003.666, @timestamp=1389049160.512882>
|
34
28
|
prices_bitstamp_usd = TickerPicker::Ticker.get_prices 'bitstamp', 'btc_usd'
|
29
|
+
#<TickerPicker::Price:0x007f8f24855218 @ask=915.74, @bid=915.24, @currency="USD", @last=915.24, @timestamp=1389049155.0>
|
35
30
|
|
36
31
|
Print all prices as hash:
|
37
32
|
|
@@ -48,10 +43,17 @@ Print specific info from prices:
|
|
48
43
|
Get prices from the stock
|
49
44
|
|
50
45
|
mtgox_markets = TickerPicker::Ticker.get_all_stock_prices 'mtgox'
|
46
|
+
{"btc_usd"=>#<TickerPicker::Price:0x007f8f23b17a38 @ask=1009.945, @bid=1005.0, @currency="USD", @last=1009.995, @timestamp=1389049209.608274>, "btc_eur"=>#<TickerPicker::Price:0x007f8f23af7710 @ask=735.0, @bid=727.0, @currency="EUR", @last=727.0, @timestamp=1389049215.239725>}
|
51
47
|
|
52
48
|
Get prices from all avaliable stock-markets
|
53
49
|
|
54
50
|
all_stock_markets = TickerPicker::Ticker.get_all_stock_market_prices
|
51
|
+
{"bitstamp"=>{"btc_usd"=>#<TickerPicker::Price:0x007f8f23ace568 @ask=913.44, @bid=912.84, @currency="USD", @last=913.44, @timestamp=1389049226.0>}, "btce"=>{"btc_usd"=>#<TickerPicker::Price:0x007f8f23ab2f70 @ask=916.089, @bid=914.449, @currency="USD", @last=916.089, @timestamp=1389049239.0>, "btc_eur"=>#<TickerPicker::Price:0x007f8f23a98328 @ask=695.89199, @bid=692.02567, @currency="EUR", @last=692.03, @timestamp=1389049241.0>}, "btcturk"=>{"btc_try"=>#<TickerPicker::Price:0x007f8f23a69230 @ask=1909.94, @bid=1880.0, @currency="TRY", @last=1895.99, @timestamp=1389049245.0>}, "mtgox"=>{"btc_usd"=>#<TickerPicker::Price:0x007f8f23a511d0 @ask=1010.0, @bid=1005.005, @currency="USD", @last=1005.0, @timestamp=1389049229.681736>, "btc_eur"=>#<TickerPicker::Price:0x007f8f23a39dc8 @ask=735.0, @bid=727.0, @currency="EUR", @last=727.0, @timestamp=1389049241.310519>}}
|
52
|
+
|
53
|
+
To convert results to hash use *to_dh* method like:
|
54
|
+
|
55
|
+
all_stock_markets.to_dh
|
56
|
+
{"bitstamp"=>{"btc_usd"=>{:ask=>913.44, :bid=>912.84, :currency=>"USD", :last=>913.44, :timestamp=>1389049226.0}}, "btce"=>{"btc_usd"=>{:ask=>916.089, :bid=>914.449, :currency=>"USD", :last=>916.089, :timestamp=>1389049239.0}, "btc_eur"=>{:ask=>695.89199, :bid=>692.02567, :currency=>"EUR", :last=>692.03, :timestamp=>1389049241.0}}, "btcturk"=>{"btc_try"=>{:ask=>1909.94, :bid=>1880.0, :currency=>"TRY", :last=>1895.99, :timestamp=>1389049245.0}}, "mtgox"=>{"btc_usd"=>{:ask=>1010.0, :bid=>1005.005, :currency=>"USD", :last=>1005.0, :timestamp=>1389049229.681736}, "btc_eur"=>{:ask=>735.0, :bid=>727.0, :currency=>"EUR", :last=>727.0, :timestamp=>1389049241.310519}}}
|
55
57
|
|
56
58
|
## Configuration (optional & advanced)
|
57
59
|
Set your stocks.yml file path if you need to modify default
|
@@ -60,33 +62,70 @@ Set your stocks.yml file path if you need to modify default
|
|
60
62
|
config.stock_configuration_file = "#{File.dirname(__FILE__)}/stocks.yml" # your stocks.yml path
|
61
63
|
end
|
62
64
|
|
63
|
-
Add new markets to
|
65
|
+
Add new stock markets to your stocks.yml
|
64
66
|
|
65
67
|
bitstamp:
|
66
68
|
btc_usd:
|
67
69
|
url: 'https://www.bitstamp.net/api/ticker/'
|
68
70
|
currency: 'USD'
|
71
|
+
mappings:
|
72
|
+
ask: "['ask']"
|
73
|
+
bid: "['bid']"
|
74
|
+
last: "['last']"
|
75
|
+
timestamp: "['timestamp']"
|
76
|
+
timestamp_representation: 'milliseconds'
|
69
77
|
btce:
|
70
78
|
btc_usd:
|
71
79
|
url: 'https://btc-e.com/api/2/btc_usd/ticker'
|
72
80
|
currency: 'USD'
|
81
|
+
mappings:
|
82
|
+
ask: "['ticker']['buy']"
|
83
|
+
bid: "['ticker']['sell']"
|
84
|
+
last: "['ticker']['last']"
|
85
|
+
timestamp: "['ticker']['updated']"
|
86
|
+
timestamp_representation: 'milliseconds'
|
73
87
|
btc_eur:
|
74
88
|
url: 'https://btc-e.com/api/2/btc_eur/ticker'
|
75
89
|
currency: 'EUR'
|
90
|
+
mappings:
|
91
|
+
ask: "['ticker']['buy']"
|
92
|
+
bid: "['ticker']['sell']"
|
93
|
+
last: "['ticker']['last']"
|
94
|
+
timestamp: "['ticker']['updated']"
|
95
|
+
timestamp_representation: 'milliseconds'
|
76
96
|
btcturk:
|
77
97
|
btc_try:
|
78
98
|
url: 'https://btcturk.com/api/ticker/'
|
79
99
|
currency: 'TRY'
|
100
|
+
mappings:
|
101
|
+
ask: "['ask']"
|
102
|
+
bid: "['bid']"
|
103
|
+
last: "['last']"
|
104
|
+
timestamp: "['timestamp']"
|
105
|
+
timestamp_representation: 'milliseconds'
|
80
106
|
mtgox:
|
81
107
|
btc_usd:
|
82
108
|
url: 'http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast'
|
83
109
|
currency: 'USD'
|
110
|
+
mappings:
|
111
|
+
ask: "['data']['sell']['value']"
|
112
|
+
bid: "['data']['buy']['value']"
|
113
|
+
last: "['data']['last']['value']"
|
114
|
+
timestamp: "['data']['now']"
|
115
|
+
timestamp_representation: 'microseconds'
|
84
116
|
btc_eur:
|
85
117
|
url: 'http://data.mtgox.com/api/2/BTCEUR/money/ticker_fast'
|
86
118
|
currency: 'EUR'
|
119
|
+
mappings:
|
120
|
+
ask: "['data']['sell']['value']"
|
121
|
+
bid: "['data']['buy']['value']"
|
122
|
+
last: "['data']['last']['value']"
|
123
|
+
timestamp: "['data']['now']"
|
124
|
+
timestamp_representation: 'microseconds'
|
125
|
+
|
87
126
|
|
88
127
|
|
89
|
-
##
|
128
|
+
## Sample Stocks
|
90
129
|
|
91
130
|
BTC-E (btce)
|
92
131
|
|
data/lib/tickerpicker/price.rb
CHANGED
@@ -9,10 +9,10 @@ module TickerPicker
|
|
9
9
|
attr_accessor :timestamp
|
10
10
|
|
11
11
|
def initialize(price_hash = {})
|
12
|
-
@ask = price_hash[:ask] || 0.0
|
13
|
-
@bid = price_hash[:bid] || 0.0
|
12
|
+
@ask = price_hash[:ask].to_f || 0.0
|
13
|
+
@bid = price_hash[:bid].to_f || 0.0
|
14
14
|
@currency = price_hash[:currency] || ''
|
15
|
-
@last = price_hash[:last] || 0.0
|
15
|
+
@last = price_hash[:last].to_f || 0.0
|
16
16
|
@timestamp = price_hash[:timestamp].to_f || Time.now.to_f
|
17
17
|
end
|
18
18
|
|
@@ -21,26 +21,30 @@ module TickerPicker
|
|
21
21
|
#
|
22
22
|
# ==== Parameters
|
23
23
|
#
|
24
|
+
# * +stock+ - string
|
24
25
|
# * +market+ - string
|
25
26
|
#
|
26
27
|
# === Returns
|
27
28
|
#
|
28
29
|
# * +TickerPicker::Price+ - TickerPicker::Price instance object
|
29
30
|
#
|
30
|
-
def
|
31
|
-
instance_mapping gather_info(markets[market]['url']), markets[market]
|
31
|
+
def fetch(stock, market)
|
32
|
+
instance_mapping gather_info(markets(stock)[market]['url']), markets(stock)[market]
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
+
private
|
36
|
+
# Get prices for the market
|
35
37
|
#
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
#
|
38
|
+
# ==== Parameters
|
39
|
+
#
|
40
|
+
# * +stock+ - string
|
41
|
+
#
|
42
|
+
# === Returns
|
43
|
+
#
|
44
|
+
# * Hash of markets
|
41
45
|
#
|
42
|
-
def
|
43
|
-
|
46
|
+
def markets(stock)
|
47
|
+
TickerPicker::Configuration.avaliable_stocks[stock]
|
44
48
|
end
|
45
49
|
|
46
50
|
# Get information from stock-market uri and convert it into Hash
|
@@ -62,6 +66,19 @@ module TickerPicker
|
|
62
66
|
def user_agent
|
63
67
|
"TickerPicker Bot v#{TickerPicker::VERSION}"
|
64
68
|
end
|
69
|
+
|
70
|
+
# nodoc
|
71
|
+
def instance_mapping(res_hash, stock_market)
|
72
|
+
timestamp = eval("res_hash#{stock_market['mappings']['timestamp']}").to_f
|
73
|
+
timestamp /= 1000000 if stock_market['mappings']['timestamp_representation'].eql?('microseconds')
|
74
|
+
new({
|
75
|
+
ask: ("%f" % eval("res_hash#{stock_market['mappings']['ask']}")),
|
76
|
+
bid: ("%f" % eval("res_hash#{stock_market['mappings']['bid']}")),
|
77
|
+
currency: stock_market['currency'],
|
78
|
+
last: ("%f" % eval("res_hash#{stock_market['mappings']['last']}")),
|
79
|
+
timestamp: timestamp
|
80
|
+
})
|
81
|
+
end
|
65
82
|
end
|
66
83
|
end
|
67
84
|
end
|
data/lib/tickerpicker/stocks.yml
CHANGED
@@ -2,22 +2,58 @@ bitstamp:
|
|
2
2
|
btc_usd:
|
3
3
|
url: 'https://www.bitstamp.net/api/ticker/'
|
4
4
|
currency: 'USD'
|
5
|
+
mappings:
|
6
|
+
ask: "['ask']"
|
7
|
+
bid: "['bid']"
|
8
|
+
last: "['last']"
|
9
|
+
timestamp: "['timestamp']"
|
10
|
+
timestamp_representation: 'milliseconds'
|
5
11
|
btce:
|
6
12
|
btc_usd:
|
7
13
|
url: 'https://btc-e.com/api/2/btc_usd/ticker'
|
8
14
|
currency: 'USD'
|
15
|
+
mappings:
|
16
|
+
ask: "['ticker']['buy']"
|
17
|
+
bid: "['ticker']['sell']"
|
18
|
+
last: "['ticker']['last']"
|
19
|
+
timestamp: "['ticker']['updated']"
|
20
|
+
timestamp_representation: 'milliseconds'
|
9
21
|
btc_eur:
|
10
22
|
url: 'https://btc-e.com/api/2/btc_eur/ticker'
|
11
23
|
currency: 'EUR'
|
24
|
+
mappings:
|
25
|
+
ask: "['ticker']['buy']"
|
26
|
+
bid: "['ticker']['sell']"
|
27
|
+
last: "['ticker']['last']"
|
28
|
+
timestamp: "['ticker']['updated']"
|
29
|
+
timestamp_representation: 'milliseconds'
|
12
30
|
btcturk:
|
13
31
|
btc_try:
|
14
32
|
url: 'https://btcturk.com/api/ticker/'
|
15
33
|
currency: 'TRY'
|
34
|
+
mappings:
|
35
|
+
ask: "['ask']"
|
36
|
+
bid: "['bid']"
|
37
|
+
last: "['last']"
|
38
|
+
timestamp: "['timestamp']"
|
39
|
+
timestamp_representation: 'milliseconds'
|
16
40
|
mtgox:
|
17
41
|
btc_usd:
|
18
42
|
url: 'http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast'
|
19
43
|
currency: 'USD'
|
44
|
+
mappings:
|
45
|
+
ask: "['data']['sell']['value']"
|
46
|
+
bid: "['data']['buy']['value']"
|
47
|
+
last: "['data']['last']['value']"
|
48
|
+
timestamp: "['data']['now']"
|
49
|
+
timestamp_representation: 'microseconds'
|
20
50
|
btc_eur:
|
21
51
|
url: 'http://data.mtgox.com/api/2/BTCEUR/money/ticker_fast'
|
22
52
|
currency: 'EUR'
|
53
|
+
mappings:
|
54
|
+
ask: "['data']['sell']['value']"
|
55
|
+
bid: "['data']['buy']['value']"
|
56
|
+
last: "['data']['last']['value']"
|
57
|
+
timestamp: "['data']['now']"
|
58
|
+
timestamp_representation: 'microseconds'
|
23
59
|
|
data/lib/tickerpicker/ticker.rb
CHANGED
@@ -1,50 +1,6 @@
|
|
1
1
|
module TickerPicker
|
2
2
|
class Ticker
|
3
|
-
@@factories = {}
|
4
|
-
|
5
3
|
class << self
|
6
|
-
# Get factories hash
|
7
|
-
#
|
8
|
-
# === Returns
|
9
|
-
#
|
10
|
-
# * +factories+ - Hash
|
11
|
-
#
|
12
|
-
def factories
|
13
|
-
@@factories
|
14
|
-
end
|
15
|
-
|
16
|
-
# Register a ticker factory
|
17
|
-
#
|
18
|
-
# ==== Parameters
|
19
|
-
#
|
20
|
-
# * +stock+ - Factory object name
|
21
|
-
# * +file_path+ - Optional load path for stock handler factory for new dev purposes
|
22
|
-
#
|
23
|
-
# === Returns
|
24
|
-
#
|
25
|
-
# * +true+ - Boolean
|
26
|
-
#
|
27
|
-
def register(stock, file_path = nil)
|
28
|
-
require (file_path || "#{File.dirname(__FILE__)}/factory/#{stock}")
|
29
|
-
factories[stock] = eval("TickerPicker::Factory::#{stock.capitalize}.markets")
|
30
|
-
true
|
31
|
-
end
|
32
|
-
|
33
|
-
# Register multiple ticker factories
|
34
|
-
#
|
35
|
-
# ==== Parameters
|
36
|
-
#
|
37
|
-
# * +stocks+ - Factory object name list
|
38
|
-
#
|
39
|
-
# === Returns
|
40
|
-
#
|
41
|
-
# * +true+ - Boolean
|
42
|
-
#
|
43
|
-
def register_list(stocks)
|
44
|
-
stocks.each { |stock| register(stock) }
|
45
|
-
true
|
46
|
-
end
|
47
|
-
|
48
4
|
# Get prices for market in stock
|
49
5
|
#
|
50
6
|
# ==== Parameters
|
@@ -54,10 +10,10 @@ module TickerPicker
|
|
54
10
|
#
|
55
11
|
# === Returns
|
56
12
|
#
|
57
|
-
# * +TickerPicker::Price+ -
|
13
|
+
# * +TickerPicker::Price+ - TickerPicker::Price instance
|
58
14
|
#
|
59
15
|
def get_prices(stock, market)
|
60
|
-
return stock_market_does_not_exists unless (
|
16
|
+
return stock_market_does_not_exists unless (stocks[stock] || {}).has_key?(market)
|
61
17
|
get_price_without_check(stock, market)
|
62
18
|
end
|
63
19
|
|
@@ -72,7 +28,7 @@ module TickerPicker
|
|
72
28
|
# * +Hash+ - Hash of TickerPicker::Price
|
73
29
|
#
|
74
30
|
def get_all_stock_prices(stock)
|
75
|
-
return stock_does_not_exists unless
|
31
|
+
return stock_does_not_exists unless stocks.has_key?(stock)
|
76
32
|
get_all_stock_prices_without_check(stock)
|
77
33
|
end
|
78
34
|
|
@@ -88,22 +44,27 @@ module TickerPicker
|
|
88
44
|
#
|
89
45
|
def get_all_stock_market_prices
|
90
46
|
stock_market_prices = {}
|
91
|
-
|
47
|
+
stocks.each do |stock_key, _|
|
92
48
|
stock_market_prices.merge!({ stock_key => get_all_stock_prices_without_check(stock_key) })
|
93
49
|
end
|
94
50
|
stock_market_prices
|
95
51
|
end
|
96
52
|
|
97
53
|
private
|
54
|
+
# nodoc
|
55
|
+
def stocks
|
56
|
+
TickerPicker::Configuration.avaliable_stocks
|
57
|
+
end
|
58
|
+
|
98
59
|
# nodoc
|
99
60
|
def get_price_without_check(stock, market)
|
100
|
-
|
61
|
+
TickerPicker::Price.fetch(stock, market)
|
101
62
|
end
|
102
63
|
|
103
64
|
# nodoc
|
104
65
|
def get_all_stock_prices_without_check(stock)
|
105
66
|
stock_prices = {}
|
106
|
-
|
67
|
+
stocks[stock].each do |key, _|
|
107
68
|
stock_prices[key] = get_price_without_check(stock, key)
|
108
69
|
end
|
109
70
|
stock_prices
|
data/lib/tickerpicker/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"high": "757.99", "last": "744.90", "timestamp": "1388595315", "bid": "742.58", "volume": "8262.66376093", "low": "726.62", "ask": "744.90"}
|
1
|
+
{"btc_xxx": { "high": "757.99", "last": "744.90", "timestamp": "1388595315", "bid": "742.58", "volume": "8262.66376093", "low": "726.62", "ask": "744.90" } }
|
data/test/unit/json/tester.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"high": "757.99", "last": "744.90", "timestamp": "
|
1
|
+
{"high": "757.99", "last": "744.90", "timestamp": "1388595315000000", "buy": "742.58", "volume": "8262.66376093", "low": "726.62", "sell": "744.94"}
|
data/test/unit/stocks.yml
CHANGED
@@ -1,9 +1,21 @@
|
|
1
1
|
developer:
|
2
2
|
btc_xxx:
|
3
|
-
url: 'developer.json'
|
3
|
+
url: 'test/unit/json/developer.json'
|
4
4
|
currency: 'XXX'
|
5
|
+
mappings:
|
6
|
+
ask: "['btc_xxx']['ask']"
|
7
|
+
bid: "['btc_xxx']['bid']"
|
8
|
+
last: "['btc_xxx']['last']"
|
9
|
+
timestamp: "['btc_xxx']['timestamp']"
|
10
|
+
timestamp_representation: 'milliseconds'
|
5
11
|
tester:
|
6
12
|
btc_xyz:
|
7
|
-
url: 'tester.json'
|
13
|
+
url: 'test/unit/json/tester.json'
|
8
14
|
currency: 'XYZ'
|
15
|
+
mappings:
|
16
|
+
ask: "['sell']"
|
17
|
+
bid: "['buy']"
|
18
|
+
last: "['last']"
|
19
|
+
timestamp: "['timestamp']"
|
20
|
+
timestamp_representation: 'microseconds'
|
9
21
|
|
data/test/unit/ticker_test.rb
CHANGED
@@ -8,23 +8,7 @@ class TickerTest < Test::Unit::TestCase
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
def test_register
|
12
|
-
register_developer
|
13
|
-
assert_equal(
|
14
|
-
true,
|
15
|
-
TickerPicker::Ticker.factories.has_key?('developer')
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_register_list
|
20
|
-
assert_equal(
|
21
|
-
true,
|
22
|
-
true
|
23
|
-
)
|
24
|
-
end
|
25
|
-
|
26
11
|
def test_get_prices
|
27
|
-
register_developer
|
28
12
|
prices = TickerPicker::Ticker.get_prices('developer', 'btc_xxx')
|
29
13
|
assert_equal(
|
30
14
|
744.90,
|
@@ -37,16 +21,14 @@ class TickerTest < Test::Unit::TestCase
|
|
37
21
|
end
|
38
22
|
|
39
23
|
def test_get_all_stock_prices
|
40
|
-
register_all
|
41
24
|
stock_prices = TickerPicker::Ticker.get_all_stock_prices('developer')
|
42
25
|
assert_equal(
|
43
26
|
744.90,
|
44
27
|
stock_prices['btc_xxx'].ask
|
45
28
|
)
|
46
29
|
end
|
47
|
-
|
30
|
+
|
48
31
|
def test_get_all_stock_market_prices
|
49
|
-
register_all
|
50
32
|
stock_market_prices = TickerPicker::Ticker.get_all_stock_market_prices
|
51
33
|
assert_equal(
|
52
34
|
742.58,
|
@@ -56,22 +38,10 @@ class TickerTest < Test::Unit::TestCase
|
|
56
38
|
744.94,
|
57
39
|
stock_market_prices['tester']['btc_xyz'].ask
|
58
40
|
)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
TickerPicker::Ticker.register('developer', File.expand_path(File.join(File.dirname(__FILE__), 'factory', 'developer')))
|
64
|
-
TickerPicker::Ticker.factories['developer']['btc_xxx']['url'] = "#{File.dirname(__FILE__)}/json/developer.json"
|
65
|
-
end
|
66
|
-
|
67
|
-
def register_tester
|
68
|
-
TickerPicker::Ticker.register('tester', File.expand_path(File.join(File.dirname(__FILE__), 'factory', 'tester')))
|
69
|
-
TickerPicker::Ticker.factories['tester']['btc_xyz']['url'] = "#{File.dirname(__FILE__)}/json/tester.json"
|
70
|
-
end
|
71
|
-
|
72
|
-
def register_all
|
73
|
-
register_developer
|
74
|
-
register_tester
|
41
|
+
assert_equal(
|
42
|
+
1388595315.0,
|
43
|
+
stock_market_prices['tester']['btc_xyz'].timestamp
|
44
|
+
)
|
75
45
|
end
|
76
46
|
end
|
77
47
|
|
data/tickerpicker.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = TickerPicker::VERSION
|
9
9
|
spec.authors = ["Mustafa Turan"]
|
10
10
|
spec.email = ["mustafaturan.net@gmail.com"]
|
11
|
-
spec.description = %q{
|
12
|
-
spec.summary =
|
11
|
+
spec.description = %q{A generalized ticker picker library for cryto currencies like #BTC(bitcoin), #LTC(litecoin) in world stock markets.}
|
12
|
+
spec.summary = spec.description
|
13
13
|
spec.homepage = "https://github.com/mustafaturan/tickerpicker"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tickerpicker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mustafa Turan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,7 +52,8 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.1.2
|
55
|
-
description:
|
55
|
+
description: 'A generalized ticker picker library for cryto currencies like #BTC(bitcoin),
|
56
|
+
#LTC(litecoin) in world stock markets.'
|
56
57
|
email:
|
57
58
|
- mustafaturan.net@gmail.com
|
58
59
|
executables: []
|
@@ -67,17 +68,11 @@ files:
|
|
67
68
|
- Rakefile
|
68
69
|
- lib/tickerpicker.rb
|
69
70
|
- lib/tickerpicker/configuration.rb
|
70
|
-
- lib/tickerpicker/factory/bitstamp.rb
|
71
|
-
- lib/tickerpicker/factory/btce.rb
|
72
|
-
- lib/tickerpicker/factory/btcturk.rb
|
73
|
-
- lib/tickerpicker/factory/mtgox.rb
|
74
71
|
- lib/tickerpicker/price.rb
|
75
72
|
- lib/tickerpicker/stocks.yml
|
76
73
|
- lib/tickerpicker/ticker.rb
|
77
74
|
- lib/tickerpicker/version.rb
|
78
75
|
- test/test_helper.rb
|
79
|
-
- test/unit/factory/developer.rb
|
80
|
-
- test/unit/factory/tester.rb
|
81
76
|
- test/unit/json/developer.json
|
82
77
|
- test/unit/json/tester.json
|
83
78
|
- test/unit/stocks.yml
|
@@ -106,11 +101,10 @@ rubyforge_project:
|
|
106
101
|
rubygems_version: 2.2.0
|
107
102
|
signing_key:
|
108
103
|
specification_version: 4
|
109
|
-
summary:
|
104
|
+
summary: 'A generalized ticker picker library for cryto currencies like #BTC(bitcoin),
|
105
|
+
#LTC(litecoin) in world stock markets.'
|
110
106
|
test_files:
|
111
107
|
- test/test_helper.rb
|
112
|
-
- test/unit/factory/developer.rb
|
113
|
-
- test/unit/factory/tester.rb
|
114
108
|
- test/unit/json/developer.json
|
115
109
|
- test/unit/json/tester.json
|
116
110
|
- test/unit/stocks.yml
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Bitstamp < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
# Get prices for the market
|
6
|
-
#
|
7
|
-
# === Returns
|
8
|
-
#
|
9
|
-
# * Hash of markets
|
10
|
-
#
|
11
|
-
def markets
|
12
|
-
TickerPicker::Configuration.avaliable_stocks['bitstamp']
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# nodoc
|
18
|
-
def instance_mapping(res_hash, currency)
|
19
|
-
new({
|
20
|
-
ask: ("%f" % res_hash['ask']).to_f,
|
21
|
-
bid: ("%f" % res_hash['bid']).to_f,
|
22
|
-
currency: currency,
|
23
|
-
last: ("%f" % res_hash['last']).to_f,
|
24
|
-
timestamp: res_hash['timestamp']
|
25
|
-
})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Btce < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
# Get prices for the market
|
6
|
-
#
|
7
|
-
# === Returns
|
8
|
-
#
|
9
|
-
# * Hash of markets
|
10
|
-
#
|
11
|
-
def markets
|
12
|
-
TickerPicker::Configuration.avaliable_stocks['btce']
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# nodoc
|
18
|
-
def instance_mapping(res_hash, currency)
|
19
|
-
new({
|
20
|
-
ask: ("%f" % res_hash['ticker']['sell']).to_f,
|
21
|
-
bid: ("%f" % res_hash['ticker']['buy']).to_f,
|
22
|
-
currency: currency,
|
23
|
-
last: ("%f" % res_hash['ticker']['last']).to_f,
|
24
|
-
timestamp: res_hash['ticker']['updated']
|
25
|
-
})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Btcturk < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
# Get prices for the market
|
6
|
-
#
|
7
|
-
# === Returns
|
8
|
-
#
|
9
|
-
# * Hash of markets
|
10
|
-
#
|
11
|
-
def markets
|
12
|
-
TickerPicker::Configuration.avaliable_stocks['btcturk']
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# nodoc
|
18
|
-
def instance_mapping(res_hash, currency)
|
19
|
-
new({
|
20
|
-
ask: ("%f" % res_hash['ask']).to_f,
|
21
|
-
bid: ("%f" % res_hash['bid']).to_f,
|
22
|
-
currency: currency,
|
23
|
-
last: ("%f" % res_hash['last']).to_f,
|
24
|
-
timestamp: res_hash['timestamp']
|
25
|
-
})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Mtgox < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
# Get prices for the market
|
6
|
-
#
|
7
|
-
# === Returns
|
8
|
-
#
|
9
|
-
# * Hash of markets
|
10
|
-
#
|
11
|
-
def markets
|
12
|
-
TickerPicker::Configuration.avaliable_stocks['mtgox']
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# nodoc
|
18
|
-
def instance_mapping(res_hash, currency)
|
19
|
-
new({
|
20
|
-
ask: ("%f" % res_hash['data']['sell']['value']).to_f,
|
21
|
-
bid: ("%f" % res_hash['data']['buy']['value']).to_f,
|
22
|
-
currency: currency,
|
23
|
-
last: ("%f" % res_hash['data']['last']['value']).to_f,
|
24
|
-
timestamp: res_hash['data']['now'].to_f / 1000000
|
25
|
-
})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Developer < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
# Get prices for the market
|
6
|
-
#
|
7
|
-
# === Returns
|
8
|
-
#
|
9
|
-
# * Hash of markets
|
10
|
-
#
|
11
|
-
def markets
|
12
|
-
TickerPicker::Configuration.avaliable_stocks['developer']
|
13
|
-
end
|
14
|
-
|
15
|
-
private
|
16
|
-
|
17
|
-
# nodoc
|
18
|
-
def instance_mapping(res_hash, currency)
|
19
|
-
new({
|
20
|
-
ask: ("%f" % res_hash['ask']).to_f,
|
21
|
-
bid: ("%f" % res_hash['bid']).to_f,
|
22
|
-
currency: currency,
|
23
|
-
last: ("%f" % res_hash['last']).to_f,
|
24
|
-
timestamp: res_hash['timestamp']
|
25
|
-
})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/test/unit/factory/tester.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
module TickerPicker
|
2
|
-
module Factory
|
3
|
-
class Tester < TickerPicker::Price
|
4
|
-
class << self
|
5
|
-
|
6
|
-
|
7
|
-
# Get prices for the market
|
8
|
-
#
|
9
|
-
# === Returns
|
10
|
-
#
|
11
|
-
# * Hash of markets
|
12
|
-
#
|
13
|
-
def markets
|
14
|
-
TickerPicker::Configuration.avaliable_stocks['tester']
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
# nodoc
|
20
|
-
def instance_mapping(res_hash, currency)
|
21
|
-
new({
|
22
|
-
ask: ("%f" % res_hash['ask']).to_f,
|
23
|
-
bid: ("%f" % res_hash['bid']).to_f,
|
24
|
-
currency: currency,
|
25
|
-
last: ("%f" % res_hash['last']).to_f,
|
26
|
-
timestamp: res_hash['timestamp']
|
27
|
-
})
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|