module Todoloo class ErrorHandler def initialize(kind) @handler = new_handler_proc(kind) end def call(error, original_exception: nil) # TODO(errors): Handle `original_exception` @handler.call(error) end private def new_handler_proc(kind) case kind when :raise proc { |e| raise e } when :stderr, :log, :trace new_handler($stderr) when String File.open(kind, "w") else if kind.respond_to?(:write) proc do |e| if e.is_a?(Error) kind.puts(e.message) kind.puts(e.backtrace) if e.backtrace && !e.backtrace.empty? else kind.puts(e) end end elsif kind.respond_to?(:call) kind else raise ArgumentError, "Unsupported type for ErrorHandler: #{kind}" end end end end end