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