stocks 0.0.2 → 0.0.3
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/lib/stocks.rb +22 -10
- data/lib/stocks/errors.rb +2 -2
- data/lib/stocks/quote.rb +30 -0
- data/lib/stocks/validators.rb +2 -0
- data/lib/stocks/validators/exists.rb +3 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaf935fa30015a7d522d988c453476978fd429df
|
4
|
+
data.tar.gz: 858b612f40c17f3144d633a06c41cdf0f479b899
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42cade0497d0503ce34492ccb85604c03a827e62ff4db6de63a5b3d570979b274dd00322eacce248970cbcca9a4338bb10d4167f76504e36122ac5f9cf26d70b
|
7
|
+
data.tar.gz: efbda82899547a538d324be44cb9824cf9b06f2aecbc262b039ed933d5fe3edd864d9a766cc00880f1b98b9b3473e3dd159867955817b83d776d201f2c8e9699
|
data/lib/stocks.rb
CHANGED
@@ -8,6 +8,7 @@ require 'yahoofinance'
|
|
8
8
|
# Require all Stocks related files
|
9
9
|
require 'stocks/errors'
|
10
10
|
require 'stocks/historical'
|
11
|
+
require 'stocks/quote'
|
11
12
|
require 'stocks/validators/exists'
|
12
13
|
|
13
14
|
# Provides an interface to do real-time analysis of stocks.
|
@@ -29,7 +30,6 @@ module Stocks
|
|
29
30
|
# - +symbol+ The symbol to evaluate for existence
|
30
31
|
# ===== *Raises*
|
31
32
|
# - +RetrievalError+ If the provided symbol does not exist
|
32
|
-
# Whether or not the provided symbol exists
|
33
33
|
def self.exists!(symbol)
|
34
34
|
raise RetrievalError.new(symbol) if !Stocks.exists?(symbol)
|
35
35
|
end
|
@@ -48,17 +48,29 @@ module Stocks
|
|
48
48
|
last_trade
|
49
49
|
end
|
50
50
|
|
51
|
-
|
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)
|
52
63
|
|
53
|
-
|
64
|
+
symbol.upcase!
|
65
|
+
quote = YahooFinance.send(Quote::TYPES[type], symbol)[symbol]
|
66
|
+
raise RetrievalError.new(symbol) if quote.name == NOT_AVAILABLE
|
54
67
|
|
55
|
-
|
56
|
-
data = {}
|
57
|
-
standard_quote = YahooFinance::get_standard_quotes(symbol)[symbol]
|
58
|
-
fields.each do |field|
|
59
|
-
data[field] = standard_quote.send(field) rescue nil
|
60
|
-
end
|
61
|
-
data
|
68
|
+
Quote.new(quote)
|
62
69
|
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
EXISTS_CACHE = LRUCache.new(max_size: 500, ttl: 1.month) # :nodoc:
|
74
|
+
NOT_AVAILABLE = 'N/A' # :nodoc:
|
63
75
|
end
|
64
76
|
|
data/lib/stocks/errors.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
module Stocks
|
5
5
|
# An error raised when data retrieval fails
|
6
6
|
class RetrievalError < ArgumentError
|
7
|
-
def initialize(symbol)
|
7
|
+
def initialize(symbol)
|
8
8
|
super(self.class.message(symbol))
|
9
9
|
end
|
10
10
|
|
@@ -25,7 +25,7 @@ module Stocks
|
|
25
25
|
|
26
26
|
# An error raised when an unsupported value is provided
|
27
27
|
class UnsupportedError < ArgumentError
|
28
|
-
def initialize(provided, supported)
|
28
|
+
def initialize(provided, supported)
|
29
29
|
super(self.class.message(provided, supported))
|
30
30
|
end
|
31
31
|
|
data/lib/stocks/quote.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Author:: Matt Fornaciari (mailto:mattforni@gmail.com)
|
2
|
+
# License:: MIT
|
3
|
+
|
4
|
+
# Provides an instance of a stock quote.
|
5
|
+
class Quote < Hash
|
6
|
+
# Mapping from base_quote type to YahooFinance method of retrieval
|
7
|
+
TYPES = {
|
8
|
+
'extended': :get_extended_quotes,
|
9
|
+
'standard': :get_standard_quotes
|
10
|
+
}
|
11
|
+
|
12
|
+
def initialize(base_quote)
|
13
|
+
@base_quote = base_quote
|
14
|
+
get_fields.each { |field| self[field] = base_quote.send(field) }
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_accessor :base_quote
|
20
|
+
|
21
|
+
# :nodoc:
|
22
|
+
def get_fields
|
23
|
+
@base_quote.instance_variables.map { |f|
|
24
|
+
f.to_s.gsub('@','').to_sym
|
25
|
+
}.reject { |f_sym|
|
26
|
+
!@base_quote.public_methods.include?(f_sym)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
data/lib/stocks/validators.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# Author:: Matt Fornaciari (mailto:mattforni@gmail.com)
|
2
2
|
# License:: MIT
|
3
3
|
|
4
|
+
require 'active_model'
|
5
|
+
|
4
6
|
module Stocks
|
5
7
|
module Validators
|
6
8
|
# An ActiveRecord validator which validates that an attribute on a model is a
|
@@ -26,7 +28,7 @@ module Stocks
|
|
26
28
|
ERROR_MESSAGE % symbol
|
27
29
|
end
|
28
30
|
|
29
|
-
# Validates that a record
|
31
|
+
# Validates that a record has a valid symbol.
|
30
32
|
#
|
31
33
|
# ===== *Args*
|
32
34
|
# - +record+ The record to validate
|
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
|
+
version: 0.0.3
|
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-
|
11
|
+
date: 2015-06-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -103,6 +103,7 @@ files:
|
|
103
103
|
- lib/stocks.rb
|
104
104
|
- lib/stocks/errors.rb
|
105
105
|
- lib/stocks/historical.rb
|
106
|
+
- lib/stocks/quote.rb
|
106
107
|
- lib/stocks/validators.rb
|
107
108
|
- lib/stocks/validators/exists.rb
|
108
109
|
homepage: http://rubygems.org/gems/stocks
|