Während lange Sicht zu erkennen, ich prepend
ausländischen Klassen mit meiner anonymen Module (die im laufenden Betrieb erstellt werden.)Wie meine anonymen Module in Vorfahren einiger Klasse
An einem gewissen Punkt eine Instanz beliebigen Klasse gegeben, Ich muss meine anonymen Module, prepended
zu ihm auflisten. Leider Module#new
, im Gegensatz zu Class#new
, keinen parent
Parameter (in anderen Worten, sie können nicht alle einen gleichen gemeinsamen Dummy Elternteil haben, dass ich aus allen ancestors
zu Sieb meine Module verwenden könnte.) Akzeptiert
ich konnte Definieren Sie eine spezifische my_litmus_dummy_method
auf jedem meiner anonymen Module und überprüfen Sie es während ancestors.select
, aber das ist hässlich.
konnte ich include DummyLitmusModule
in jedem meiner anonymen Module und prüfen, ob es während ancestors.select
ein Vorfahre zu sein, aber das ist entweder hässlich.
Also, meine Frage ist: ist es eine elegante Art und Weise zu Marke meine anonymen Module, so dass später ich sie leicht aus aller Module Liste Sieb könnte?
UPD Codebeispiel
def patch_class klazz
klazz.send :prepend, Module.new { define_method(:my_method) {} }
end
...
# load list of classes from somewhere and patch them
classes = my_parse_yaml('config.yml')
classes.each do |c|
patch_class c
end
...
# somewhere in other place
instance.patches # ⇐ I want to implement this
An dieser Stelle möchte ich brauche^W wissen, welche Methoden gepatcht wurden. Ich bin ein wenig neu implementiert alias_method_chain
von Rails und ich möchte die "Usages" zu meiner Schnittstelle Benutzer melden.
nicht ganz klar zu mir (vor allem über die 'my_litmus ...' Methode oder 'DummyLitmusModule'):
Dann wird die gewünschte Information gegeben. Ist Ihr Punkt, dass (i) Sie vorgelagerte Module von eingeschlossenen unterscheiden wollen und (ii) Sie sich nur für die anonymen, nicht die genannten interessieren? – sawa
Nicht sicher, aber vielleicht [this] (http://stackoverflow.com/questions/34484006) ist verwandt. – sawa
Warum geben Sie Ihrem anonymen Modul keinen Namen? – Aetherus