yfinance 1.0.10 → 1.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ec8af8ce71dfa3e2005b7dc2463e9fed6bd74d0b
4
- data.tar.gz: 6a7a22cf66e59f1a1bcc021f318a64d4287a480d
3
+ metadata.gz: 246dc6eddd72d55071b137e94a5adc17850be66c
4
+ data.tar.gz: 13f32b0307fa2bdfd2404c9e2db65bb15afd01d2
5
5
  SHA512:
6
- metadata.gz: b644597c8b49388e83fa5b6bef8d1d288717da78972325cca955af5d702c0e6df7dadbb711547414674131bb5929bf15570a714490550ef28a155c7d862cb271
7
- data.tar.gz: 7fae35e0492dc94a19fc0be530046377c4d9190a53a9a939623a2d7e22d55a628a22e7ce4cf6735b317defb65a9c20f5cde517a3aeb397f1d3b9bcc393d7d59a
6
+ metadata.gz: f7e3ed3d417f8b921f8d71945533d73d31b0d6b02d4ced8b5ef24856d5cb147dbfcba4cc662627b3aaa9ffa6023931730dc998be97f44b8b9b9c02ffb450aa28
7
+ data.tar.gz: 367305c56a9a76add28e559bcfe0dc4869b3e0dea91501bd9ab43afeb3591cbb7d9b6e5317004ab13b48b2be1923f3d7b2e3b69ad507ff059ca37d944ba90cf4
@@ -101,6 +101,9 @@ class Yfinance
101
101
  :stock_exchange => "x",
102
102
  :dividend_yield => "y"
103
103
  }
104
+
105
+ # these options do not mess up the CSV parser by including ',' in the data fields
106
+ SAVE_OPTIONS = [:symbol, :name, :average_daily_volume, :dividend_per_share, :earnings_per_share, :eps_estimate_current_year, :eps_estimate_next_year, :eps_estimate_next_quarter, :low_52_weeks, :high_52_weeks, :market_capitalization, :ebitda, :moving_average_50_day, :moving_average_200_day, :ex_dividend_date, :peg_ratio, :price_eps_estimate_current_year, :shares_owned, :volume, :stock_exchange, :dividend_yield, :change, :previous_close, :last_trade_trade]
104
107
 
105
108
  HISTORICAL_MODES = {
106
109
  :daily => "d",
@@ -126,7 +129,7 @@ class Yfinance
126
129
  options[:raw] ||= true
127
130
  options[:period] ||= :daily
128
131
  symbols_array.each do |symbol|
129
- symbol = symbol.rstrip
132
+ symbol = symbol.rstrip.upcase
130
133
  url = "http://ichart.finance.yahoo.com/table.csv?s=#{URI.escape(symbol)}&d=#{end_date.month-1}&e=#{end_date.day}&f=#{end_date.year}&g=#{HISTORICAL_MODES[options[:period]]}&a=#{start_date.month-1}&b=#{start_date.day}&c=#{start_date.year}&ignore=.csv"
131
134
  @hydra.queue(make_request(url, symbol, options, callback))
132
135
  end
@@ -147,6 +150,7 @@ class Yfinance
147
150
 
148
151
  def quotes(symbols_array, columns_array = [:symbol, :last_trade_price, :last_trade_date, :change, :previous_close], options = {})
149
152
  options[:raw] ||= true
153
+ symbols_array = symbols_array.map(&:upcase)
150
154
  ret = Hash[symbols_array.each_slice(1).to_a]
151
155
  symb_str = symbols_array.join("+")
152
156
  columns_array.unshift(:symbol)
@@ -158,9 +162,13 @@ class Yfinance
158
162
  result = CSV.parse(response.body, headers: columns_array)
159
163
  result.each do |row|
160
164
  h = row.to_hash
161
- ret[h[:symbol]] = h
162
- return ret
165
+ if h[:name] == h[:symbol]
166
+ ret[h[:symbol]] = nil
167
+ else
168
+ ret[h[:symbol]] = h
169
+ end
163
170
  end
171
+ return ret
164
172
  rescue
165
173
  return {error: @error_message}
166
174
  end
@@ -170,8 +178,7 @@ class Yfinance
170
178
  end
171
179
 
172
180
  def quotes_all_info(symbols_array)
173
- columns_array = COLUMNS.keys
174
- quotes(symbols_array, columns_array)
181
+ quotes(symbols_array, SAVE_OPTIONS)
175
182
  end
176
183
 
177
184
  private
@@ -21,28 +21,30 @@ class YfinanceTest < Minitest::Test
21
21
 
22
22
  def test_it_work_for_an_invalid_symbol
23
23
  yf = Yfinance.new
24
- res = yf.quotes(["TWTR", "MADASDFASD", "AAPL"])
24
+ res = yf.quotes_all_info(["TWTR", "MADASDFASD", "AAPL"])
25
25
  assert_equal res.length, 3
26
26
  end
27
- #
27
+
28
28
  def test_it_works_requesting_all_data_for_valid_symbols
29
29
  yf = Yfinance.new
30
30
  res = yf.quotes_all_info(["MSFT", "TWTR", "TEP.L"])
31
- # p res
32
- assert_equal res.length, 3
31
+ assert_equal 3, res.length
33
32
  assert_equal "MSFT", res["MSFT"][:symbol]
33
+ assert_equal "TWTR", res["TWTR"][:symbol]
34
+ assert_equal "TEP.L", res["TEP.L"][:symbol]
34
35
  end
35
- #
36
+
36
37
  def test_it_works_requesting_all_data_for_one_invalid_symbol
37
38
  yf = Yfinance.new
38
39
  res = yf.quotes_all_info(["asdf"])
39
- assert_equal yf.error_message, res[:error]
40
+ assert_nil res["ASDF"]
40
41
  end
41
42
 
42
43
  def test_it_returns_an_error_for_a_mix_of_valid_and_invalid__symbols
43
44
  yf = Yfinance.new
44
45
  res = yf.quotes_all_info(["AAPL", "bcxza", "MSFT"])
45
- assert_equal yf.error_message, res[:error]
46
+ assert_equal 3, res.length
47
+ assert_nil res["BCXZA"]
46
48
  end
47
49
  #
48
50
  def test_historical_data_works
@@ -5,7 +5,7 @@ require 'yfinance'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "yfinance"
8
- spec.version = "1.0.10"
8
+ spec.version = "1.0.11"
9
9
  spec.authors = ["Alexander Potrykus"]
10
10
  spec.email = ["alexander@risklog.io"]
11
11
  spec.summary = %q{Fetches Yahoo! Finance data using parallel HTTP requests.}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yfinance
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Potrykus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-17 00:00:00.000000000 Z
11
+ date: 2014-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler