Ruby how to reset class methods -
using module_eval, code allows me dynamically create , add new methods class based on input parameters. see post example ruby class_eval , yield
now question how reset class original methods? there simple method can use reset class it's original state? reason once new methods added class, persists , need rid of them if create new object different set of methods.
also must apologize if question doesn't quite make sense, i've been 24 hours , needed rest think clearly. if not clear, can provide example. in advance.
edit: added complete solution
if keep list of methods added in earlier post, can use remove_method
remove these methods like:
class mytest @@methods_list = [] def self.show_methods @@methods_list end def self.reset_methods @@methods_list.each |method| remove_method(method) end @@methods_list = [] end def self.add_methods define_method("method1") { puts "this method1" } define_method("method2") { puts "this method2" } true end def self.method_added(method_name) @@methods_list << method_name.to_s puts "added: " + method_name.to_s + ", list: " + @@methods_list.inspect end end
now can try out following:
>> require 'mytest.rb' >> t = mytest.new # => #<mytest:0x2b1e293247f0> >> mytest.add_methods added: method1, list: ["method1"] added: method2, list: ["method1", "method2"] >> t.method1 # method available: method1 >> mytest.reset_methods >> t.method1 # method undefined now, we'd expect error nomethoderror: undefined method `method1' #<mytest:0x2b1e293247f0> (irb):6
Comments
Post a Comment