From: Trans Date: 2008-04-02T15:05:16+09:00 Subject: Some late night metaprogramming class Module # Note: view is public, private, protected, or nil. def def_methods(view=nil, &block) @defmethods ||= DefMethods.new(self, view) @defmethods.instance_eval(&block) end class DefMethods private *instance_methods.select{ |m| m !~ /^(__|instance_eval)/ } def initialize(base, view=nil) @base = base @view = view end def method_missing(s, *a, &b) @base.__send__(:define_method, s, &b) @base.__send__(@view, s) if @view end end end # Example class X def_methods(:public) do world = "World!" hello do "Hello" end hello_world do hello + ' ' + world end end end x = X.new puts x.hello_world