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 140 140: def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true) 141: if first_letter_in_uppercase 142: lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase } 143: else 144: lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1] 145: end 146: 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 221 221: def classify(table_name) 222: # strip out any leading schema name 223: camelize(singularize(table_name.to_s.sub(/.*\./, ''))) 224: 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 245 245: def constantize(camel_cased_word) 246: unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word 247: raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!" 248: end 249: 250: Object.module_eval("::#{$1}", __FILE__, __LINE__) 251: end
Replaces underscores with dashes in the string.
Example
"puni_puni" #=> "puni-puni"
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 180 180: def dasherize(underscored_word) 181: underscored_word.gsub(/_/, '-') 182: 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 199 199: def demodulize(class_name_in_module) 200: class_name_in_module.to_s.gsub(/^.*::/, '') 201: 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 234 234: def foreign_key(class_name, separate_class_name_and_id_with_underscore = true) 235: underscore(demodulize(class_name)) + (separate_class_name_and_id_with_underscore ? "_id" : "id") 236: 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 190 190: def humanize(lower_case_and_underscored_word) 191: lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize 192: end
# File vendor/rails/activesupport/lib/active_support/inflector.rb, line 82 82: def inflections 83: if block_given? 84: yield Inflections.instance 85: else 86: Inflections.instance 87: end 88: 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 261 261: def ordinalize(number) 262: if (11..13).include?(number.to_i % 100) 263: "#{number}th" 264: else 265: case number.to_i % 10 266: when 1: "#{number}st" 267: when 2: "#{number}nd" 268: when 3: "#{number}rd" 269: else "#{number}th" 270: end 271: end 272: 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 99 99: def pluralize(word) 100: result = word.to_s.dup 101: 102: if inflections.uncountables.include?(result.downcase) 103: result 104: else 105: inflections.plurals.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 106: result 107: end 108: 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 119 119: def singularize(word) 120: result = word.to_s.dup 121: 122: if inflections.uncountables.include?(result.downcase) 123: result 124: else 125: inflections.singulars.each { |(rule, replacement)| break if result.gsub!(rule, replacement) } 126: result 127: end 128: 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 210 210: def tableize(class_name) 211: pluralize(underscore(class_name)) 212: 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 157 157: def titleize(word) 158: humanize(underscore(word)).gsub(/\b([a-z])/) { $1.capitalize } 159: 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 168 168: def underscore(camel_cased_word) 169: camel_cased_word.to_s.gsub(/::/, '/'). 170: gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). 171: gsub(/([a-z\d])([A-Z])/,'\1_\2'). 172: tr("-", "_"). 173: downcase 174: end