lib/dbee/dsl/association.rb in dbee-2.0.1 vs lib/dbee/dsl/association.rb in dbee-2.0.2

- old
+ new

@@ -39,15 +39,28 @@ def class_name opts[:model] || relative_class_name end + # This will automatically prefix the name of the module within the current classes + # hierarchy. If the class does not happen to be in the same namespace then it needs + # to be explicitly set in the association using 'model' option. def relative_class_name (on_class_name.split('::')[0...-1] + [inflector.classify(name)]).join('::') end + # Only use Module constant resolution if a string or symbol was passed in. + # Any other type is defined as an acceptable constant and is simply returned. def constantize(value) - value.is_a?(String) || value.is_a?(Symbol) ? Object.const_get(value) : value + value.is_a?(String) || value.is_a?(Symbol) ? object_constant(value) : value + end + + # If the constant has been loaded, we can safely use it through const_get. + # If the constant has not been loaded, we need to defer to const_missing to resolve it. + # If we blindly call const_get, it may return false positives for namespaced constants + # or anything nested. + def object_constant(value) + Object.const_defined?(value) ? Object.const_get(value) : Object.const_missing(value) end end end end