module CurrentPrice::Google::Client::OptionChain

Public Instance Methods

option_chain(ticker) click to toggle source
# File lib/current-price/google/client/option_chain.rb, line 6
def option_chain(ticker)
  option_chain_serializer(
    ticker,
    request(
      "http://www.google.com/finance/option_chain?q=#{ticker}&output=json"
    )
  )
end

Private Instance Methods

contracts_serialzer(contracts) click to toggle source
# File lib/current-price/google/client/option_chain.rb, line 38
def contracts_serialzer(contracts)
  contracts.map{|contract|
    {
      :price => contract[:p],
      :bid => contract[:b],
      :ask => contract[:a],
      :close => contract[:c],
      :oi => contract[:oi],
      :volume => contract[:vol],
      :strike => contract[:strike],
    }
  }
end
option_chain_detail_serializer(data) click to toggle source
# File lib/current-price/google/client/option_chain.rb, line 30
def option_chain_detail_serializer(data)
  data_hash = eval(data.to_s)
  {
    :puts => contracts_serialzer( data_hash.fetch(:puts) ),
    :calls => contracts_serialzer( data_hash.fetch(:calls) )
  }
end
option_chain_serializer(ticker, data) click to toggle source
# File lib/current-price/google/client/option_chain.rb, line 17
def option_chain_serializer(ticker, data)
  Hash[
    eval(data.to_s).fetch(:expirations).map{ |expiry|
      month, day, year = expiry[:m], expiry[:d], expiry[:y]
      ["#{month}-#{day}-#{year}", option_chain_detail_serializer(
        request(
          "http://www.google.com/finance/option_chain?q=#{ticker}&expd=#{day}&expm=#{month}&expy=#{year}&output=json"
        )
      )]
    }
  ]
end