lib/bright_serializer/inflector.rb in bright_serializer-0.1.1 vs lib/bright_serializer/inflector.rb in bright_serializer-0.2.0

- old
+ new

@@ -26,7 +26,38 @@ def dash(underscored_word) underscored_word.tr!('_', '-') underscored_word end + + # File activesupport/lib/active_support/inflector/methods.rb, line 271 + def constantize(camel_cased_word) + names = camel_cased_word.split('::') + + # Trigger a built-in NameError exception including the ill-formed constant in the message. + Object.const_get(camel_cased_word) if names.empty? + + # Remove the first blank element in case of '::ClassName' notation. + names.shift if names.size > 1 && names.first.empty? + + names.inject(Object) do |constant, name| + if constant == Object + constant.const_get(name) + else + candidate = constant.const_get(name) + next candidate if constant.const_defined?(name, false) + next candidate unless Object.const_defined?(name) + + # Go down the ancestors to check if it is owned directly. The check + # stops when we reach Object or the end of ancestors tree. + constant = constant.ancestors.each_with_object(constant) do |ancestor, const| + break const if ancestor == Object + break ancestor if ancestor.const_defined?(name, false) + end + + # owner is in Object, so raise + constant.const_get(name, false) + end + end + end end end