Sha256: 9f8fc60cc35b780b6fbb67ecd78eecca88eb50c7f61fd3e9f882d65de0967102

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

class StockIndex

  class Component

    require 'cik'

    def initialize(symbol, market, wikipedia, pricing_source = :us)
      @symbol = symbol
      @market = market
      @wikipedia = wikipedia
      @pricing_source = pricing_source
    end

    def attributes
      cache_lookup || attributes_lookup
    end

    def valid?
      @market && @symbol
    end

    def cache_lookup
      store = PStore.new(cache_file)
      store.transaction { store[@symbol] }
    end

    def cache_write(a)
      store = PStore.new(cache_file)
      store.transaction do
        store[@symbol] = a
      end
    end

    def cache_file
      "cache/#{@market}.pstore"
    end

    def attributes_lookup
      bsym = lookup_bsym
      cik = lookup_cik
      return nil unless bsym
      a = {market: @market, symbol: @symbol, name: bsym[:name], wikipedia: @wikipedia, cik: cik, bbgid: bsym[:bbgid]}
      cache_write(a)
      a
    end

    def us?
      @pricing_source == :us
    end

    def lookup_bsym
      bsym = StockIndex::BsymSearch.find(@symbol, @pricing_source)
      if bsym
        bsym
      else
        puts "bsym --> #{@symbol}" unless testing?
        return nil
      end
    end

    def lookup_cik
      if us?
        lookup_cik_us
      else
        nil
      end
    end

    def lookup_cik_us
      edgar = Cik.lookup(SymbolParser.new(@symbol).bsym_to_cik)
      if edgar
        edgar[:cik]
      else
        puts "cik --> #{@symbol}" unless testing?
        return nil
      end
    end

    def testing?
      @symbol == 'ZZZZ'
    end

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
stock_index-0.8.0 lib/stock_index/component.rb
stock_index-0.7.0 lib/stock_index/component.rb