Module | Inflector |
In: |
vendor/rails/activesupport/lib/active_support/inflector.rb
|
The Inflector transforms words from singular to plural, class names to table names, modularized class names to ones without, and class names to foreign keys. The default inflections for pluralization, singularization, and uncountable words are kept in inflections.rb.
By default, camelize converts strings to UpperCamelCase. If the argument to camelize is set to ":lower" then camelize produces lowerCamelCase.
camelize will also convert ’/’ to ’::’ which is useful for converting paths to namespaces
Examples
"active_record".camelize #=> "ActiveRecord" "active_record".camelize(:lower) #=> "activeRecord" "active_record/errors".camelize #=> "ActiveRecord::Errors" "active_record/errors".camelize(:lower) #=> "activeRecord::Errors"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 147 147: def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true) 148: if first_letter_in_uppercase 149: lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } 150: else 151: lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1] 152: end 153: end
Create a class name from a table name like Rails does for table names to models. Note that this returns a string and not a Class. (To convert to an actual class follow classify with constantize.)
Examples
"egg_and_hams".classify #=> "EggAndHam" "post".classify #=> "Post"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 228 228: def classify(table_name) 229: # strip out any leading schema name 230: camelize(singularize(table_name.to_s.sub(/.*\./, ''))) 231: end
Constantize tries to find a declared constant with the name specified in the string. It raises a NameError when the name is not in CamelCase or is not initialized.
Examples
"Module".constantize #=> Module "Class".constantize #=> Class
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 252 252: def constantize(camel_cased_word) 253: unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word 254: raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!" 255: end 256: 257: Object.module_eval("::#{$1}", __FILE__, __LINE__) 258: end
Replaces underscores with dashes in the string.
Example
"puni_puni" #=> "puni-puni"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 187 187: def dasherize(underscored_word) 188: underscored_word.gsub(/_/, '-') 189: end
Removes the module part from the expression in the string
Examples
"ActiveRecord::CoreExtensions::String::Inflections".demodulize #=> "Inflections" "Inflections".demodulize #=> "Inflections"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 206 206: def demodulize(class_name_in_module) 207: class_name_in_module.to_s.gsub(/^.*::/, '') 208: end
Creates a foreign key name from a class name. separate_class_name_and_id_with_underscore sets whether the method should put ‘_’ between the name and ‘id’.
Examples
"Message".foreign_key #=> "message_id" "Message".foreign_key(false) #=> "messageid" "Admin::Post".foreign_key #=> "post_id"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 241 241: def foreign_key(class_name, separate_class_name_and_id_with_underscore = true) 242: underscore(demodulize(class_name)) + (separate_class_name_and_id_with_underscore ? "_id" : "id") 243: end
Capitalizes the first word and turns underscores into spaces and strips _id. Like titleize, this is meant for creating pretty output.
Examples
"employee_salary" #=> "Employee salary" "author_id" #=> "Author"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 197 197: def humanize(lower_case_and_underscored_word) 198: lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize 199: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 89 89: def inflections 90: if block_given? 91: yield Inflections.instance 92: else 93: Inflections.instance 94: end 95: end
Ordinalize turns a number into an ordinal string used to denote the position in an ordered sequence such as 1st, 2nd, 3rd, 4th.
Examples
ordinalize(1) # => "1st" ordinalize(2) # => "2nd" ordinalize(1002) # => "1002nd" ordinalize(1003) # => "1003rd"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 268 268: def ordinalize(number) 269: if (11..13).include?(number.to_i % 100) 270: "#{number}th" 271: else 272: case number.to_i % 10 273: when 1; "#{number}st" 274: when 2; "#{number}nd" 275: when 3; "#{number}rd" 276: else "#{number}th" 277: end 278: end 279: end
Returns the plural form of the word in the string.
Examples
"post".pluralize #=> "posts" "octopus".pluralize #=> "octopi" "sheep".pluralize #=> "sheep" "words".pluralize #=> "words" "the blue mailman".pluralize #=> "the blue mailmen" "CamelOctopus".pluralize #=> "CamelOctopi"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 106 106: def pluralize(word) 107: result = word.to_s.dup 108: 109: if word.empty? || inflections.uncountables.include?(result.downcase) 110: result 111: else 112: inflections.plurals.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 113: result 114: end 115: end
The reverse of pluralize, returns the singular form of a word in a string.
Examples
"posts".singularize #=> "post" "octopi".singularize #=> "octopus" "sheep".singluarize #=> "sheep" "word".singluarize #=> "word" "the blue mailmen".singularize #=> "the blue mailman" "CamelOctopi".singularize #=> "CamelOctopus"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 126 126: def singularize(word) 127: result = word.to_s.dup 128: 129: if inflections.uncountables.include?(result.downcase) 130: result 131: else 132: inflections.singulars.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 133: result 134: end 135: end
Create the name of a table like Rails does for models to table names. This method uses the pluralize method on the last word in the string.
Examples
"RawScaledScorer".tableize #=> "raw_scaled_scorers" "egg_and_ham".tableize #=> "egg_and_hams" "fancyCategory".tableize #=> "fancy_categories"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 217 217: def tableize(class_name) 218: pluralize(underscore(class_name)) 219: end
Capitalizes all the words and replaces some characters in the string to create a nicer looking title. Titleize is meant for creating pretty output. It is not used in the Rails internals.
titleize is also aliased as as titlecase
Examples
"man from the boondocks".titleize #=> "Man From The Boondocks" "x-men: the last stand".titleize #=> "X Men: The Last Stand"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 164 164: def titleize(word) 165: humanize(underscore(word)).gsub(/\b([a-z])/) { $1.capitalize } 166: end
The reverse of camelize. Makes an underscored form from the expression in the string.
Changes ’::’ to ’/’ to convert namespaces to paths.
Examples
"ActiveRecord".underscore #=> "active_record" "ActiveRecord::Errors".underscore #=> active_record/errors
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 175 175: def underscore(camel_cased_word) 176: camel_cased_word.to_s.gsub(/::/, '/'). 177: gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). 178: gsub(/([a-z\d])([A-Z])/,'\1_\2'). 179: tr("-", "_"). 180: downcase 181: end