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