Acceptation des arguments pour la méthode définie par add_to_class

Les méthodes d’instance peuvent être ajoutées aux classes par des plugins en utilisant add_to_class, défini comme suit :

def add_to_class(class_name, attr, &block)
  reloadable_patch do |plugin|
    klass = class_name.to_s.classify.constantize rescue class_name.to_s.constantize
    hidden_method_name = :"#{attr}_without_enable_check"
    klass.public_send(:define_method, hidden_method_name, &block)

    klass.public_send(:define_method, attr) do |*args|
      public_send(hidden_method_name, *args) if plugin.enabled?
    end
  end
end

Existe-t-il un moyen existant de faire quelque chose de similaire, où la méthode définie prend des arguments ?

add_to_class(Guardian, :ensure_user_can_access_report, group, report) do
  ...
end

Cela semble être ce que vous recherchez. Cela fait un bon exemple.

Donc, fondamentalement, vous devrez passer ces paramètres en tant que paramètres à la lambda elle-même.

Oui, c’est exactement ça. Merci !

Vous pouvez faire la même chose à la manière Ruby.