module IEX::Endpoints::HistoricalPrices

Public Instance Methods

historical_prices(symbol, options = {}) click to toggle source
# File lib/iex/endpoints/historial_prices.rb, line 4
def historical_prices(symbol, options = {})
  if options[:range] == 'date'
    raise ArgumentError unless options[:date].present?
    raise ArgumentError unless options[:chartByDay].present?
  end

  options = options.dup
  # Historical prices IEX endpoint expects dates passed in a specific format - YYYYMMDD
  options[:date] = options[:date].strftime('%Y%m%d') if options[:date].is_a?(Date)

  path = "stock/#{symbol}/chart"
  path += "/#{options[:range]}" if options.key?(:range)
  path += "/#{options[:date]}" if options[:range] == 'date'

  # We only want options to include query params at this point, remove :range and :date
  options.delete(:range)
  options.delete(:date)

  (get(path, { token: publishable_token }.merge(options)) || []).map do |data|
    IEX::Resources::HistorialPrices.new(data)
  end
rescue Faraday::ResourceNotFound => e
  raise IEX::Errors::SymbolNotFoundError.new(symbol, e.response[:body])
end