module ActiveGenie::Concerns::Loggable::ClassMethods

def with_logging_context(context_method, observer_proc = nil)

def with_logging_context(context_method, observer_proc = nil)
  original_method = instance_method(:call)
  
  define_method(:call) do |*args, **kwargs, &block|
    context = send(context_method, *args, **kwargs)
    bound_observer = observer_proc ? ->(log) { instance_exec(log, &observer_proc) } : nil
    
    ActiveGenie::Logger.with_context(context, observer: bound_observer) do
      original_method.bind(self).call(*args, **kwargs, &block)
    end
  end
end