module SWF::TaskHandler

use extend, not include

Public Instance Methods

handle(runner, task) click to toggle source
# File lib/swf/task_handler.rb, line 8
def handle(runner, task)
  handler_class = nil
  handler       = nil
  begin

    handler_class = get_handler_class_or_fail task
    return unless handler_class
    handler = handler_class.new(runner, task)
    handler.call_handle

  rescue => e

    puts "HANDLER #{self} ERROR:"
    begin
      details_json = JSON.pretty_unparse({
        handler_class: handler_class && handler_class.name,
        handler:       handler.to_s,
        error:         e.inspect,
        backtrace:     e.backtrace,
        })
      puts details_json
      fail!(task, reason: "handler raised error", details: details_json[0...32768])
    rescue
      msg = "FAIL to handle fail!!"
      puts msg
      # failing again will cause #<RuntimeError: already responded>
      #fail!(task, reason: msg)
      raise
    end

  end
end

Private Instance Methods

get_handler_class_or_fail(task) click to toggle source
# File lib/swf/task_handler.rb, line 43
def get_handler_class_or_fail(task)
  find_handler_class(task).tap {|handler_class|
    unless handler_class
      details_text = "This is a configuration issue.\n#{configuration_help_message}"
      puts details_text
      fail!(task, reason: "unknown type", details: details_text)
      return
    end
  }
end