On Fri, Dec 09, 2005 at 12:50:40PM +0900, ara.t.howard / noaa.gov wrote:
> this will fail for "ModuleA::ModuleB".  for that you need something like:
> 
>     #
>     # creates a class by class name
>     #
>       def klass_stamp(hierachy, *a, &b)
> #--{{{
>         ancestors = hierachy.split(%r/::/)
>         parent = Object
>         while((child = ancestors.shift))
>           klass = parent.const_get child
>           parent = klass
>         end
>         klass::new(*a, &b)
> #--}}}
>       end

def klass_stamp(name, *a, &b)
  name.split(/::/).inject(Object){|s,x| s.const_get(x)}.new(*a,&b)
end

class A; class B; def foo; "A::B#foo" end end end
klass_stamp("A::B").foo                            # => "A::B#foo"

> this will work for
> 
>   m = klass_stamp "A::B::C::Module"
#           ^
# that would try to instantiate the module
    m = "A::B::C::Module".split(/::/).inject(Object){|s,x| s.const_get(x)}
>   o = Object::new
>   o.extend m

PS: have you seen http://eigenclass.org/hiki.rb?Usable+Ruby+folding+for+Vim ?
It might be of interest to you if you often use manual markers for
methods...

-- 
Mauricio Fernandez