alphavantagerb 1.2.0 → 1.3.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.
- checksums.yaml +4 -4
- data/AlphavantageRB.gemspec +1 -1
- data/README.md +111 -56
- data/lib/Client.rb +19 -4
- data/lib/Crypto_Timeseries.rb +7 -18
- data/lib/Exchange.rb +22 -10
- data/lib/Exchange_Timeseries.rb +63 -0
- data/lib/Indicator.rb +5 -5
- data/lib/Sector.rb +4 -4
- data/lib/Stock.rb +8 -2
- data/lib/Timeseries.rb +8 -19
- data/lib/alphavantagerb.rb +2 -1
- data/lib/helper_function.rb +27 -0
- data/spec/lib/1.0.0/client.rb +7 -2
- data/spec/lib/1.0.0/crypto_timeseries.rb +6 -6
- data/spec/lib/1.0.0/exchange.rb +8 -6
- data/spec/lib/1.0.0/exchange_timeseries.rb +73 -0
- data/spec/lib/1.0.0/indicator.rb +54 -54
- data/spec/lib/1.0.0/sector.rb +5 -5
- data/spec/lib/1.0.0/stock.rb +2 -2
- data/spec/lib/1.0.0/timeseries.rb +10 -10
- data/spec/test_all.rb +1 -1
- metadata +4 -4
- data/lib/Batch.rb +0 -52
- data/spec/lib/1.1.0/batch.rb +0 -45
data/spec/lib/1.0.0/sector.rb
CHANGED
@@ -3,21 +3,21 @@ require_relative './../../spec_helper'
|
|
3
3
|
describe Alphavantage::Sector do
|
4
4
|
context "#new" do
|
5
5
|
it "create a new sector without client" do
|
6
|
-
|
6
|
+
exchange = Alphavantage::Sector.new key: @config["key"]
|
7
7
|
expect(exchange.class).to eq Alphavantage::Sector
|
8
8
|
end
|
9
9
|
|
10
10
|
it "create a new sector with client" do
|
11
|
-
|
11
|
+
exchange = @client.sector
|
12
12
|
expect(exchange.class).to eq Alphavantage::Sector
|
13
13
|
end
|
14
14
|
|
15
15
|
it "has several parameters" do
|
16
|
-
|
16
|
+
exchange = @client.sector
|
17
17
|
bool = []
|
18
18
|
bool << exchange.information.is_a?(String)
|
19
19
|
bool << exchange.last_refreshed.is_a?(String)
|
20
|
-
bool << exchange.
|
20
|
+
bool << exchange.output.is_a?(Hash)
|
21
21
|
bool << exchange.real_time_performance.is_a?(Hash)
|
22
22
|
bool << exchange.one_day_performance.is_a?(Hash)
|
23
23
|
bool << exchange.five_day_performance.is_a?(Hash)
|
@@ -34,7 +34,7 @@ describe Alphavantage::Sector do
|
|
34
34
|
# it "cannot retrieve with wrong key" do
|
35
35
|
# error = false
|
36
36
|
# begin
|
37
|
-
#
|
37
|
+
# stock = Alphavantage::Sector.new key:"wrong_key"
|
38
38
|
# rescue Alphavantage::Error => e
|
39
39
|
# error = true
|
40
40
|
# end
|
data/spec/lib/1.0.0/stock.rb
CHANGED
@@ -29,13 +29,13 @@ describe Alphavantage::Stock do
|
|
29
29
|
|
30
30
|
it "can create a new timeseries from stock" do
|
31
31
|
stock = @client.stock symbol: "MSFT"
|
32
|
-
|
32
|
+
timeseries = stock.timeseries
|
33
33
|
expect(timeseries.class).to eq Alphavantage::Timeseries
|
34
34
|
end
|
35
35
|
|
36
36
|
it "can create a new indicator from stock" do
|
37
37
|
stock = @client.stock symbol: "MSFT"
|
38
|
-
|
38
|
+
indicator = stock.indicator function: "SMA"
|
39
39
|
expect(indicator.class).to eq Alphavantage::Indicator
|
40
40
|
end
|
41
41
|
end
|
@@ -8,19 +8,19 @@ describe Alphavantage::Stock do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "create a new stock from stock" do
|
11
|
-
|
11
|
+
timeseries = @client.stock(symbol: "MSFT").timeseries(type: "daily", outputsize: "compact")
|
12
12
|
expect(timeseries.class).to eq Alphavantage::Timeseries
|
13
13
|
end
|
14
14
|
|
15
15
|
it "own multiple data" do
|
16
|
-
|
16
|
+
timeseries = @client.stock(symbol: "MSFT").timeseries(type: "daily", outputsize: "full")
|
17
17
|
bool = []
|
18
18
|
bool << timeseries.information.is_a?(String)
|
19
19
|
bool << (timeseries.symbol == "MSFT")
|
20
20
|
bool << timeseries.last_refreshed.is_a?(String)
|
21
21
|
bool << (timeseries.output_size == "Full size")
|
22
22
|
bool << timeseries.time_zone.is_a?(String)
|
23
|
-
bool << timeseries.
|
23
|
+
bool << timeseries.output.is_a?(Hash)
|
24
24
|
bool << timeseries.open.is_a?(Array)
|
25
25
|
bool << timeseries.high.is_a?(Array)
|
26
26
|
bool << timeseries.low.is_a?(Array)
|
@@ -30,7 +30,7 @@ describe Alphavantage::Stock do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
it "can retrieve intraday" do
|
33
|
-
|
33
|
+
timeseries = @client.stock(symbol: "MSFT").timeseries(type: "intraday", interval: "30min")
|
34
34
|
bool = []
|
35
35
|
bool << timeseries.information.is_a?(String)
|
36
36
|
bool << (timeseries.symbol == "MSFT")
|
@@ -38,7 +38,7 @@ describe Alphavantage::Stock do
|
|
38
38
|
bool << (timeseries.interval == "30min")
|
39
39
|
bool << (timeseries.output_size == "Compact")
|
40
40
|
bool << timeseries.time_zone.is_a?(String)
|
41
|
-
bool << timeseries.
|
41
|
+
bool << timeseries.output.is_a?(Hash)
|
42
42
|
bool << timeseries.open.is_a?(Array)
|
43
43
|
bool << timeseries.high.is_a?(Array)
|
44
44
|
bool << timeseries.low.is_a?(Array)
|
@@ -48,14 +48,14 @@ describe Alphavantage::Stock do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "can retrieve adjusted data" do
|
51
|
-
|
51
|
+
timeseries = @client.stock(symbol: "MSFT").timeseries(type: "daily", outputsize: "compact", adjusted: true)
|
52
52
|
bool = []
|
53
53
|
bool << timeseries.information.is_a?(String)
|
54
54
|
bool << (timeseries.symbol == "MSFT")
|
55
55
|
bool << timeseries.last_refreshed.is_a?(String)
|
56
56
|
bool << (timeseries.output_size == "Compact")
|
57
57
|
bool << timeseries.time_zone.is_a?(String)
|
58
|
-
bool << timeseries.
|
58
|
+
bool << timeseries.output.is_a?(Hash)
|
59
59
|
bool << timeseries.open.is_a?(Array)
|
60
60
|
bool << timeseries.high.is_a?(Array)
|
61
61
|
bool << timeseries.low.is_a?(Array)
|
@@ -71,7 +71,7 @@ describe Alphavantage::Stock do
|
|
71
71
|
bool = []
|
72
72
|
directory = "#{__dir__}/test.csv"
|
73
73
|
bool << File.exists?(directory)
|
74
|
-
|
74
|
+
@client.stock(symbol: "MSFT").timeseries(type: "daily",
|
75
75
|
outputsize: "compact", adjusted: true, datatype: "csv", file: directory)
|
76
76
|
bool << File.exists?(directory)
|
77
77
|
File.delete(directory)
|
@@ -81,7 +81,7 @@ describe Alphavantage::Stock do
|
|
81
81
|
# it "cannot retrieve with wrong key" do
|
82
82
|
# error = false
|
83
83
|
# begin
|
84
|
-
#
|
84
|
+
# stock = Alphavantage::Timeseries.new symbol: "MSFT", key:"wrong key"
|
85
85
|
# rescue Alphavantage::Error => e
|
86
86
|
# error = true
|
87
87
|
# end
|
@@ -91,7 +91,7 @@ describe Alphavantage::Stock do
|
|
91
91
|
it "cannot retrieve with wrong symbol" do
|
92
92
|
error = false
|
93
93
|
begin
|
94
|
-
|
94
|
+
stock = Alphavantage::Timeseries.new symbol: "wrong_symbol", key: @config["key"]
|
95
95
|
rescue Alphavantage::Error => e
|
96
96
|
error = true
|
97
97
|
end
|
data/spec/test_all.rb
CHANGED
@@ -2,8 +2,8 @@ require_relative "lib/1.0.0/client"
|
|
2
2
|
require_relative "lib/1.0.0/crypto_timeseries"
|
3
3
|
require_relative "lib/1.0.0/crypto"
|
4
4
|
require_relative "lib/1.0.0/exchange"
|
5
|
+
require_relative "lib/1.0.0/exchange_timeseries"
|
5
6
|
require_relative "lib/1.0.0/indicator"
|
6
7
|
require_relative "lib/1.0.0/sector"
|
7
8
|
require_relative "lib/1.0.0/stock"
|
8
9
|
require_relative "lib/1.0.0/timeseries"
|
9
|
-
require_relative "lib/1.1.0/batch"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alphavantagerb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -49,12 +49,12 @@ files:
|
|
49
49
|
- Gemfile
|
50
50
|
- LICENSE.md
|
51
51
|
- README.md
|
52
|
-
- lib/Batch.rb
|
53
52
|
- lib/Client.rb
|
54
53
|
- lib/Crypto.rb
|
55
54
|
- lib/Crypto_Timeseries.rb
|
56
55
|
- lib/Errors.rb
|
57
56
|
- lib/Exchange.rb
|
57
|
+
- lib/Exchange_Timeseries.rb
|
58
58
|
- lib/Indicator.rb
|
59
59
|
- lib/Sector.rb
|
60
60
|
- lib/Stock.rb
|
@@ -66,11 +66,11 @@ files:
|
|
66
66
|
- spec/lib/1.0.0/crypto.rb
|
67
67
|
- spec/lib/1.0.0/crypto_timeseries.rb
|
68
68
|
- spec/lib/1.0.0/exchange.rb
|
69
|
+
- spec/lib/1.0.0/exchange_timeseries.rb
|
69
70
|
- spec/lib/1.0.0/indicator.rb
|
70
71
|
- spec/lib/1.0.0/sector.rb
|
71
72
|
- spec/lib/1.0.0/stock.rb
|
72
73
|
- spec/lib/1.0.0/timeseries.rb
|
73
|
-
- spec/lib/1.1.0/batch.rb
|
74
74
|
- spec/spec_helper.rb
|
75
75
|
- spec/test_all.rb
|
76
76
|
homepage: https://github.com/StefanoMartin/AlphaVantageRB
|
data/lib/Batch.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
module Alphavantage
|
2
|
-
class Batch
|
3
|
-
include HelperFunctions
|
4
|
-
|
5
|
-
def initialize symbols:, datatype: "json", key:, verbose: false, file: nil
|
6
|
-
check_argument([true, false], verbose, "verbose")
|
7
|
-
symbols = [symbols] unless symbols.is_a?(Array)
|
8
|
-
@client = return_client(key, verbose)
|
9
|
-
@symbols = symbols
|
10
|
-
@datatype = datatype
|
11
|
-
@verbose = verbose
|
12
|
-
@file = file
|
13
|
-
check_argument(["json", "csv"], datatype, "datatype")
|
14
|
-
if datatype == "csv" && file.nil?
|
15
|
-
raise Alphavantage::Error.new message: "No file specified where to save the CSV ata"
|
16
|
-
elsif datatype != "csv" && !file.nil?
|
17
|
-
raise Alphavantage::Error.new message: "Hash error: No file necessary"
|
18
|
-
end
|
19
|
-
name_symbols = symbols.join(",")
|
20
|
-
name_symbols.upcase!
|
21
|
-
url = "function=BATCH_STOCK_QUOTES&symbols=#{name_symbols}"
|
22
|
-
return @client.download(url, file) if datatype == "csv"
|
23
|
-
@hash = @client.request(url)
|
24
|
-
metadata = @hash.dig("Meta Data") || {}
|
25
|
-
metadata.each do |key, val|
|
26
|
-
key_sym = recreate_metadata_key(key)
|
27
|
-
define_singleton_method(key_sym) do
|
28
|
-
return val
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
begin
|
33
|
-
stock_quote = @hash.find{|key, val| key.include?("Stock Quotes")}[1]
|
34
|
-
rescue Exception => e
|
35
|
-
raise Alphavantage::Error.new message: "No Stock Quotes found: #{e.message}",
|
36
|
-
data: @hash
|
37
|
-
end
|
38
|
-
|
39
|
-
@stock_quote = []
|
40
|
-
stock_quote.each do |sq|
|
41
|
-
sval = {}
|
42
|
-
sq.each do |key, val|
|
43
|
-
key_sym = key.downcase.gsub(/[0-9.]/, "").lstrip.gsub(" ", "_")
|
44
|
-
sval[key_sym] = val
|
45
|
-
end
|
46
|
-
@stock_quote << sval
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
attr_reader :datatype, :stock_quote, :hash, :symbols
|
51
|
-
end
|
52
|
-
end
|
data/spec/lib/1.1.0/batch.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
require_relative './../../spec_helper'
|
2
|
-
|
3
|
-
describe Alphavantage::Batch do
|
4
|
-
context "#new" do
|
5
|
-
it "create a new batch without client" do
|
6
|
-
stock = Alphavantage::Batch.new symbols: ["MSFT", "FB", "AAPL"], key: @config["key"]
|
7
|
-
expect(stock.class).to eq Alphavantage::Batch
|
8
|
-
end
|
9
|
-
|
10
|
-
it "create a new batch from client" do
|
11
|
-
stock = @client.batch symbols: ["MSFT", "FB", "AAPL"]
|
12
|
-
expect(stock.class).to eq Alphavantage::Batch
|
13
|
-
end
|
14
|
-
|
15
|
-
it "own multiple data" do
|
16
|
-
sleep(1); timeseries = @client.batch symbols: ["MSFT", "FB", "AAPL"]
|
17
|
-
bool = []
|
18
|
-
bool << timeseries.information.is_a?(String)
|
19
|
-
bool << timeseries.notes.is_a?(String)
|
20
|
-
bool << timeseries.time_zone.is_a?(String)
|
21
|
-
bool << timeseries.stock_quote.is_a?(Array)
|
22
|
-
expect(bool.all?{|e| e}).to eq true
|
23
|
-
end
|
24
|
-
|
25
|
-
it "can retrieve csv files" do
|
26
|
-
bool = []
|
27
|
-
directory = "#{__dir__}/test.csv"
|
28
|
-
bool << File.exists?(directory)
|
29
|
-
sleep(1); @client.batch(symbols: ["MSFT", "FB", "AAPL"], datatype: "csv", file: directory)
|
30
|
-
bool << File.exists?(directory)
|
31
|
-
File.delete(directory)
|
32
|
-
expect(bool).to eq [false, true]
|
33
|
-
end
|
34
|
-
|
35
|
-
it "cannot retrieve with wrong symbol" do
|
36
|
-
error = false
|
37
|
-
begin
|
38
|
-
sleep(1); stock = Alphavantage::Batch.new symbols: ["MSAFT", "FDB", "AAAPL"], key: @config["key"]
|
39
|
-
rescue Alphavantage::Error => e
|
40
|
-
error = true
|
41
|
-
end
|
42
|
-
expect(stock.stock_quote.empty?).to eq true
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|