Volevo scrivere un po 'lib di "Deprecate-It" e ho usato molto la callback "method_added". Ma ora ho notato che questa richiamata non viene attivata, quando si include un modulo.Ruby method_added callback not trigger compresi i moduli
Esistono richiami o soluzioni alternative per informare la classe "Foobar" quando qualcosa è incluso in sé?
Piccolo Demo per dimostrare:
# Including Moduls won't trigger method_added callback
module InvisibleMethod
def invisible
"You won't get a callback from me"
end
end
class Foobar
def self.method_added(m)
puts "InstanceMethod: '#{m}' added to '#{self}'"
end
def visible
"You will get a callback from me"
end
include InvisibleMethod
end
[:invisible, :visible, :wont_exist].each do |meth|
puts "#{meth}: #{Foobar.public_method_defined? meth}"
end
Questo è il risultato:
InstanceMethod: 'visible' added to 'Foobar'
invisible: true
visible: true
wont_exist: false
Informazioni aggiuntive:
ho davvero bisogno di usare un gancio come method_added.
ActiveModel sta aggiungendo public_instance_methods a Class durante il runtime tramite moduli anonimi.
Purtroppo non penso ci sia una buona risposta, ma questo potrebbe indicarti la direzione di alcuni hack che funzionano .. http: // stackoverflow.it/questions/4191214/callback-for-classes-defined-inside-a-module – David