Skip to content

Instantly share code, notes, and snippets.

@elskwid
Created December 1, 2014 17:24
Show Gist options
  • Save elskwid/81309707da99b8e93c7c to your computer and use it in GitHub Desktop.
Save elskwid/81309707da99b8e93c7c to your computer and use it in GitHub Desktop.
borked lookup
irb(main):016:0> class A
irb(main):017:1> def self.const_get!(name)
irb(main):018:2> name.split('::').inject(Object) do |klass, cname|
irb(main):019:3* if klass.const_defined?(cname)
irb(main):020:4> klass.const_get(cname)
irb(main):021:4> else
irb(main):022:4* klass.const_missing(cname)
irb(main):023:4> end
irb(main):024:3> end
irb(main):025:2> rescue NameError
irb(main):026:2> nil
irb(main):027:2> end
irb(main):028:1> end
=> nil
irb(main):029:0> A.const_get!("Foo")
=> nil
irb(main):030:0> A.const_get!("A")
=> A
irb(main):031:0> module TestViews; end
=> nil
irb(main):032:0> A.const_get!("TestViews")
=> TestViews
irb(main):033:0> module TestViews; module TestViews; end; end
=> nil
irb(main):034:0> A.const_get!("TestViews")
=> TestViews
irb(main):035:0> A.const_get!("TestViews::TestViews")
=> TestViews::TestViews
irb(main):036:0> A.const_get!("TestViews::TestViewssssss")
=> nil
irb(main):037:0> A.const_get!("::TestViews")
=> nil
irb(main):038:0> A.const_get!("TestViews::Foo")
=> nil
irb(main):039:0> A.const_get!("TestViews::TestViews::TestViews")
=> TestViews
irb(main):040:0> A.const_get!("TestViews::TestViews::TestViews::TestViews")
=> TestViews::TestViews
irb(main):041:0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment