module Honeybadger::Plugins::LambdaExtension

def hb_wrap_handler(*handler_names)

end
end
def self.my_handler_1(event:, context:)

hb_wrap_handler :my_handler_1, :my_handler_2

extend ::Honeybadger::Plugins::LambdaExtension
class MyLambdaApp

end
def my_handler_1(event:, context:)

hb_wrap_handler :my_handler_1, :my_handler_2
# Automatically included in the top-level main object

Usage:

Wrap Lambda handlers so exceptions can be automatically captured
def hb_wrap_handler(*handler_names)
  mod = Module.new do
    handler_names.each do |handler|
      define_method(handler) do |event:, context:|
        Honeybadger.context(aws_request_id: context.aws_request_id) if context.respond_to?(:aws_request_id)
        super(event: event, context: context)
      rescue => e
        Honeybadger.notify(e)
        raise
      end
    end
  end
  singleton_class.prepend(mod)
  Kernel.singleton_class.prepend(mod) if self == TOPLEVEL_BINDING.eval("self")
end