stocks 0.0.4 → 1.0.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/stocks.rb +0 -35
  3. data/lib/stocks/quote.rb +34 -2
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 911fce4a35b7e344b06251c4ea2fc44ca0c9e817
4
- data.tar.gz: 26f40e4ef0111cff2adcdf6093db36984e1e6d13
3
+ metadata.gz: 8fe77a236eb3ca2f989553caf4d57cbfa165de57
4
+ data.tar.gz: 955e7bc142a46587bc745b4ad37f8bc849931610
5
5
  SHA512:
6
- metadata.gz: 032e3ff200dea1284fe9b1bed083185ed04cb12f591f42a6cde96404270e2b5006a8216c8b17dd6075a89c596db2282788fbc4ae971688592380d266e035fbc1
7
- data.tar.gz: efaf177ee08f5ee4ad964264e5be6f21e9de71ea945f91a1c35162b7f46bdfb6d80b84cb86c1a41c668202440eb502e40e69fcf88694ac790517a43293a8365b
6
+ metadata.gz: 0353ff677cc636d391d2e7c5e3c1d91a83ad94248069fd37fe46310c38bc8e30f78f67fb58f8045775e880708327b7806f6ca3e3f3c77b7a2e863a1eb621b649
7
+ data.tar.gz: 1462b1b44059f65a4b89b8754993abddfaeffab4d1b6b228497d97545e2385c09cb9ea182604815e673a2d3093e56733fe872363f9682b2c59e2b129d235aa0d
data/lib/stocks.rb CHANGED
@@ -34,43 +34,8 @@ module Stocks
34
34
  raise RetrievalError.new(symbol) if !Stocks.exists?(symbol)
35
35
  end
36
36
 
37
- # Fetches the last trade for the provided symbol.
38
- #
39
- # ===== *Args*
40
- # - +symbol+ The symbol to evaluate
41
- # ===== *Returns*
42
- # The last trade for the provided symbol
43
- # ===== *Raises*
44
- # - +RetrievalError+ If the provided symbol does not exist
45
- def self.last_trade(symbol)
46
- last_trade = quote(symbol)[:lastTrade]
47
- raise RetrievalError.new(symbol) if last_trade.nil?
48
- last_trade
49
- end
50
-
51
- # Fetches a quote for the provided symbol.
52
- #
53
- # ===== *Args*
54
- # - +symbol+ The symbol to evaluate
55
- # - +type+ The type of quote to retreive
56
- # ===== *Returns*
57
- # The quote for the provided symbol
58
- # ===== *Raises*
59
- # - +RetrievalError+ If the provided symbol does not exist
60
- # - +UnsupportedError+ If the provided type is not supported
61
- def self.quote(symbol, type = :standard)
62
- raise UnsupportedError.new(type, Quote::TYPES.keys) if !Quote::TYPES.has_key?(type)
63
-
64
- symbol.upcase!
65
- quote = YahooFinance.send(Quote::TYPES[type], symbol)[symbol]
66
- raise RetrievalError.new(symbol) if quote.name == NOT_AVAILABLE
67
-
68
- Quote.new(quote)
69
- end
70
-
71
37
  private
72
38
 
73
39
  EXISTS_CACHE = LRUCache.new(max_size: 500, ttl: 1.month) # :nodoc:
74
- NOT_AVAILABLE = 'N/A' # :nodoc:
75
40
  end
76
41
 
data/lib/stocks/quote.rb CHANGED
@@ -1,22 +1,54 @@
1
1
  # Author:: Matt Fornaciari (mailto:mattforni@gmail.com)
2
2
  # License:: MIT
3
3
 
4
- # Provides an instance of a stock quote.
5
4
  module Stocks
5
+ # Reprsents an instance of a stock quote.
6
6
  class Quote < Hash
7
7
  # Mapping from base_quote type to YahooFinance method of retrieval
8
+ # (options: :extended, :standard)
8
9
  TYPES = {
9
10
  'extended': :get_extended_quotes,
10
11
  'standard': :get_standard_quotes
11
12
  }
12
13
 
14
+ # Fetches a quote for the provided symbols.
15
+ #
16
+ # ===== *Args*
17
+ # - +symbols+ The symbols for which to retrieve a quote
18
+ # - +type+ The type of quote to retreive (default: :standard)
19
+ # ===== *Returns*
20
+ # The quote for the provided symbol
21
+ # ===== *Raises*
22
+ # - +UnsupportedError+ If the provided type is not supported
23
+ def self.get(symbols, type = :standard)
24
+ raise UnsupportedError.new(type, Quote::TYPES.keys) if !Quote::TYPES.has_key?(type)
25
+
26
+ symbols = [symbols] if !symbols.is_a?(Array)
27
+ symbols = symbols.collect { |s| s.upcase }
28
+
29
+ quotes = YahooFinance.send(Quote::TYPES[type], symbols)
30
+ quotes.each_pair { |symbol, quote| quotes[symbol] = Quote.new(quote) }
31
+ quotes
32
+ end
33
+
34
+ # :nodoc:
13
35
  def initialize(base_quote)
14
36
  @base_quote = base_quote
15
- get_fields.each { |field| self[field] = base_quote.send(field) }
37
+ get_fields.each { |field| self[field] = base_quote.send(field) } if valid?
38
+ end
39
+
40
+ # Determines whether or not the quote is valid.
41
+ #
42
+ # ===== *Returns*
43
+ # Whether or not the quote is valid
44
+ def valid?
45
+ @base_quote.name != NOT_AVAILABLE
16
46
  end
17
47
 
18
48
  private
19
49
 
50
+ NOT_AVAILABLE = 'N/A' # :nodoc:
51
+
20
52
  attr_accessor :base_quote
21
53
 
22
54
  # :nodoc:
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Fornaciari
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-23 00:00:00.000000000 Z
11
+ date: 2015-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord