yfinance 1.0.10 → 1.0.11

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 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