class Medici::Stock
Constants
- API_BASE_URL
- PARSERS
- PARSE_MAP
- QUOTE_ATTRIBUTES
Public Class Methods
new(attributes)
click to toggle source
# File lib/medici/stock.rb, line 85 def initialize(attributes) attributes.each do |attribute, value| parser = PARSE_MAP[attribute.to_sym] instance_variable_set("@#{attribute}", parser.call(value)) end end
quote(symbol)
click to toggle source
# File lib/medici/stock.rb, line 65 def self.quote(symbol) self.quotes([symbol]).first end
quotes(symbols)
click to toggle source
# File lib/medici/stock.rb, line 58 def self.quotes(symbols) query = symbols.map { |symbol| "stock=#{symbol}" }.join('&') response = Net::HTTP.get_response(URI.parse(API_BASE_URL + query)) self.parse(response.body) end
Private Class Methods
parse(xml_data)
click to toggle source
# File lib/medici/stock.rb, line 71 def self.parse(xml_data) doc = XmlSimple.xml_in(xml_data) doc['finance'].map do |stock| attributes = stock.each_with_object({}) do |(attribute, value), hash| hash[attribute] = value.first['data'] if QUOTE_ATTRIBUTES.include? attribute.to_sym end raise StockSymbolError.new(attributes['symbol']) if attributes['exchange'] == 'UNKNOWN EXCHANGE' new(attributes) end end