module Trailblazer; end module My; end class Trailblazer::Operation def self.inherited(klass) *mod_names, klass_name = klass.name.split('::') mod = const_get(mod_names.join('::')) mod.define_singleton_method(klass_name) do |*args| klass.new.call(*args) end end end class My::Operation < Trailblazer::Operation def call(attributes = {}) puts attributes.inspect end end My::Operation(first_name: 'foo', last_name: 'bar')