module Crystal module AbstractController class Responder < BasicObject attr_reader :handlers def initialize @handlers = {} end protected def method_missing m, *args, &block args.must_be.empty handlers[m.to_s] = block.must_be.defined end end end end