How do I un-namespace a ruby constant? -
i using library doesn't handle namespaced models. have rails engine has activerecord models need use , such reference them namespace of engine, ex: tableengine::posts.
is there way in ruby un-namespace posts class?
something
tableengine::posts.demodulize # => posts      
at first can add constant need , assign class/module (remember both objects). should duplicate reset name:
posts = tableengine::posts.dup   afterwards remove source constant name:
object.send :remove_const, :tableengine   then:
posts # => posts tableengine # => nameerror: uninitialized constant tableengine tableengine::posts # => nameerror: uninitialized constant tableengine   update. why dup needed:
notice, class someclass shortcut creating object of type class , assigning constant:
someclass = class.new   when create class, name value isn't set:
klass = class.new # => #<class:0x00000001545a28> klass.name # => nil   when assign constant first time, name assigned , memoized:
klass = klass # => klass klass.name # => "klass"   when later assign object of type class constant, remains same object, referred both constants:
newklass = klass # => klass klass.name # => "klass" newklass.name # => "klass"   that's why if initial constant removed, object keep carrying old name.
object.send :remove_const, :klass # => klass newklass # => klass newklass.name # => "klass"  klass # => nameerror: uninitialized constant klass   the object hasn't been changed. has been changed list of constants, carried object object.
when duplicate object of type class created without name (it new object):
new_klass = newklass.dup # => #<class:0x000000016ced90> new_klass.name # => nil   and when assing new constant, name set. how in first example above receives new name:
posts = tableengine::posts.dup # => post      
Comments
Post a Comment