In una certa misura è possibile sostituire/estendere la logica nelle classi esistenti. Questa potrebbe essere un’opzione per estendere il plugin raggruppato. Si scriverebbe un nuovo plugin che aggiunge semplicemente la logica modificata. Utilizzando module prepend.
enabled_site_setting :myoverridingplugin_enabled
module ::MyOverridingPlugin
PLUGIN_NAME = "my-overriding-plugin"
class Engine < ::Rails::Engine
engine_name MyOverridingPlugin::PLUGIN_NAME
isolate_namespace MyOverridingPlugin
end
module SomeClassOverrides
def overriding_method(foo, bar)
if foo == "something"
# fai qualcosa di personalizzato
else
# questo chiamerà la logica originale
super(f00, bar)
end
end
end
end
after_initialize do
SomeClass.prepend(MyOverridingPlugin::SomeClassOverrides)
end
Ho usato questo costruttore per limitare alcuni controller in determinate condizioni.