scripter
scripter

Reputation: 1526

I am using https://github.com/tyrauber/stock_quote to fetch stock data. However I am getting below mentioned error while doing so

I am new to ruby on rails. :( while doing a search I am getting StockQuote::NoDataForStockError in StocksController#search ...........................

My model

class Stock < ActiveRecord::Base

def self.find_by_ticker(ticker_symbol)
where(ticker: ticker_symbol).first

end


def self.new_from_lookup(ticker_symbol)
looked_up_stock = StockQuote::Stock.quote(ticker_symbol)
return nil unless looked_up_stock.name

new_stock = new(ticker: looked_up_stock, name: looked_up_stock.name)
new_stock.last_price = new_stock.price
new_stock
end

def price
    closing_price = StockQuote::Stock.quote(ticker).close
    return "#{closing_price} (closing)" if closing_price

    opening_price = StockQuote::Stock.quote(ticker).open
    return "#{opening_price (opening)}" if opening_price
    "Unavailable"
end
end

Errors I am getting in console while doing a search.

StockQuote::NoDataForStockError: StockQuote::NoDataForStockError
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/stock_quote-1.2.3/lib/stock_q
    uote/stock.rb:134:in `parse'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/stock_quote-1.2.3/lib/stock_q
    uote/stock.rb:86:in `block in quote'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:228:in `call'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:228:in `process_result'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:178:in `block in transmit'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/2.2.0/net/http.rb:853:in `start'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:172:in `transmit'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:64:in `execute'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/rest-client-1.6.7/lib/restcli
    ent/request.rb:33:in `execute'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/stock_quote-1.2.3/lib/stock_q
    uote/stock.rb:84:in `quote'
            from C:/Sites/tracker/app/models/stock.rb:19:in `price'
            from C:/Sites/tracker/app/models/stock.rb:14:in `new_from_lookup'
            from (irb):9
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.5.1/lib/rails/co
    mmands/console.rb:110:in `start'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.5.1/lib/rails/co
    mmands/console.rb:9:in `start'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.5.1/lib/rails/co
    mmands/commands_tasks.rb:68:in `console'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.5.1/lib/rails/co
    mmands/commands_tasks.rb:39:in `run_command!'
            from C:/RailsInstaller/Ruby2.2.0/lib/ruby/gems/2.2.0/gems/railties-4.2.5.1/lib/rails/co
    mmands.rb:17:in `<top (required)>'
            from bin/rails:4:in `require'

Upvotes: 0

Views: 323

Answers (2)

duka.milan
duka.milan

Reputation: 1

The solution for page interrupting is to use begin rescue blocks every time when we call methods from StockQuote module. In begin part of block use regular call and in rescue part set value to nil and in that case return value 'Unavailable' and similar.begin rescue in Ruby is like try catch in Java. Example:

def price
    begin
      closing_price = StockQuote::Stock.quote(ticker).close
    rescue
      closing_price = nil
    end
    return "#{closing_price} (Closing)" if closing_price

    begin
      opening_price = StockQuote::Stock.quote(ticker).open
    rescue
      opening_price = nil
    end
    return "#{opening_price} (Opening)" if opening_price
    'Unavailable'
  end

Upvotes: 0

margo
margo

Reputation: 2927

If you look at the code for that gem you can see that a StockQuote::NoDataForStockError is returned when the response code is not 200. You'll need to delve into what it doesnt like about the data you are providing. For example you should be able to query the response a bit more and at least determine what url is being sent.

Upvotes: 1

Related Questions