Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

AS guide: documents String#constantize

  • Loading branch information...
commit 8627281e3b75dbafc0adee7ab4f3d28a177aa9e5 1 parent 3084898
@fxn fxn authored
Showing with 43 additions and 0 deletions.
  1. +43 −0 railties/guides/source/active_support_core_extensions.textile
View
43 railties/guides/source/active_support_core_extensions.textile
@@ -1484,6 +1484,49 @@ Note that +classify+ returns a class name as a string. You can get the actual cl
NOTE: Defined in +active_support/core_ext/string/inflections.rb+.
+h5. +constantize+
+
+The method +constantize+ resolves the constant reference expression in its receiver:
+
+<ruby>
+"Fixnum".constantize # => Fixnum
+
+module M
+ X = 1
+end
+"M::X".constantize # => 1
+</ruby>
+
+If the string evaluates to no known constant, or its content is not even a valid constant name, +constantize+ raises +NameError+.
+
+Constant name resolution by +constantize+ starts always at the top-level +Object+ even if there is no leading "::".
+
+<ruby>
+X = :in_Object
+module M
+ X = :in_M
+
+ X # => :in_M
+ "::X".constantize # => :in_Object
+ "X".constantize # => :in_Object (!)
+end
+</ruby>
+
+So, it is in general not equivalent to what Ruby would do in the same spot, had a real constant be evaluated.
+
+Mailer test cases obtain the mailer being tested from the name of the test class using +constantize+:
+
+<ruby>
+# action_mailer/test_case.rb
+def determine_default_mailer(name)
+ name.sub(/Test$/, '').constantize
+rescue NameError => e
+ raise NonInferrableMailerError.new(name)
+end
+</ruby>
+
+NOTE: Defined in +active_support/core_ext/string/inflections.rb+.
+
h3. Extensions to +Numeric+
h4. Bytes

0 comments on commit 8627281

Please sign in to comment.
Something went wrong with that request. Please try again.