class Crabfarm::Live::Controller

Public Class Methods

new(_manager) click to toggle source
# File lib/crabfarm/live/controller.rb, line 9
def initialize(_manager)
  @manager = _manager
end

Public Instance Methods

display_external_error(_exc) click to toggle source
# File lib/crabfarm/live/controller.rb, line 13
def display_external_error(_exc)
  try_reset

  display_error_feedback _exc
end
execute_live(_class) click to toggle source
# File lib/crabfarm/live/controller.rb, line 19
def execute_live(_class)
  try_reset

  begin
    build_runner_for(_class).execute
  rescue Exception => exc
    display_error_feedback exc
  end
end

Private Instance Methods

build_runner_for(_class) click to toggle source
# File lib/crabfarm/live/controller.rb, line 44
def build_runner_for(_class)
  raise ArgumentError.new "'#{_class.to_s} is not Interactable" unless _class < Interactable

  Utils::Console.operation "Launching #{_class.to_s}"

  runner = if _class.live_delegate
    build_runner_for _class.live_delegate
  else
    if _class < BaseNavigator
      NavigatorRunner
    elsif _class < BaseReducer
      ReducerRunner
    else
      raise ConfigurationError.new "Don't know how to run #{_class.to_s}, you should provide a navigator or reducer as delegate."
    end.new @manager, _class
  end

  runner.dsl.instance_eval(&_class.live_setup) if _class.live_setup
  runner
end
display_error_feedback(_exc) click to toggle source
# File lib/crabfarm/live/controller.rb, line 65
def display_error_feedback(_exc)
  @manager.show_message(
    :error,
    'Crawler error!',
    "#{_exc.class.to_s}: #{_exc.to_s}",
    _exc.backtrace.join("\n")
  )

  Utils::Console.exception _exc
end
try_reset() click to toggle source
# File lib/crabfarm/live/controller.rb, line 31
def try_reset
  begin
    @manager.reset
  rescue Exception => exc
    # restart manager if reset failed
    @manager.stop rescue nil
    @manager.start

    Utils::Console.error "Something went wrong, restarting live mode:"
    Utils::Console.exception exc
  end
end