class StockIndex::Component

Public Class Methods

new(symbol, market, wikipedia, pricing_source = :us) click to toggle source
# File lib/stock_index/component.rb, line 7
def initialize(symbol, market, wikipedia, pricing_source = :us)
  @symbol = symbol
  @market = market
  @wikipedia = wikipedia
  @pricing_source = pricing_source
end

Public Instance Methods

attributes() click to toggle source
# File lib/stock_index/component.rb, line 14
def attributes
  attrs = cache_lookup || attributes_lookup
  puts "---- ERROR #{attrs}" unless valid?(attrs)
  attrs
end
attributes_lookup() click to toggle source
# File lib/stock_index/component.rb, line 36
def attributes_lookup
  bsym = StockIndex::BsymSearch.find(@symbol, @pricing_source)
  cik = lookup_cik
  puts "   --- #{@symbol} #{@market} #{@wikipedia} #{@pricing_source}"
  puts "   --- #{@symbol} bsym: #{bsym}"
  puts "   --- #{@symbol} cik: #{cik}"
  a = {
    market: @market,
    share: {
      symbol: @symbol,
      name: bsym ? bsym[:name] : nil,
      bbgid: bsym ? bsym[:bbgid] : nil
    },
    company: {wikipedia: @wikipedia}.merge( cik || {} )
  }
  cache_write(a)
  a
end
cache_file() click to toggle source
# File lib/stock_index/component.rb, line 32
def cache_file
  File.expand_path("../../cache/#{@market}.pstore", File.dirname(__FILE__))
end
cache_lookup() click to toggle source
# File lib/stock_index/component.rb, line 20
def cache_lookup
  store = PStore.new(cache_file)
  store.transaction { store[@symbol] }
end
cache_write(a) click to toggle source
# File lib/stock_index/component.rb, line 25
def cache_write(a)
  store = PStore.new(cache_file)
  store.transaction do
    store[@symbol] = a
  end
end
lookup_cik() click to toggle source
# File lib/stock_index/component.rb, line 59
def lookup_cik
  if us?
    lookup_cik_us
  else
    nil
  end
end
lookup_cik_us() click to toggle source
# File lib/stock_index/component.rb, line 67
def lookup_cik_us
  edgar = Cik.lookup(SymbolParser.new(@symbol).bsym_to_cik)
  if edgar
    {
      cik: edgar[:cik],
      name: edgar[:name],
      sic: edgar[:sic]
    }
  else
    return nil
  end
end
us?() click to toggle source
# File lib/stock_index/component.rb, line 55
def us?
  @pricing_source == :us
end
valid?(attributes) click to toggle source
# File lib/stock_index/component.rb, line 80
def valid?(attributes)
  return false if attributes.nil?
  !attributes[:market].nil? &&
  !attributes[:share][:symbol].nil? &&
  !attributes[:share][:name].nil? &&
  !attributes[:share][:bbgid].nil? &&
  !attributes[:company][:wikipedia].nil?
end