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.

The Rails core team has stated patches for the inflections library will not be accepted in order to avoid breaking legacy applications which may be relying on errant inflections. If you discover an incorrect inflection and require it for your application, you‘ll need to correct it yourself (explained below).

Methods

Classes and Modules

Class Inflector::Inflections

Public Instance methods

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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 160
160:   def camelize(lower_case_and_underscored_word, first_letter_in_uppercase = true)
161:     if first_letter_in_uppercase
162:       lower_case_and_underscored_word.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
163:     else
164:       lower_case_and_underscored_word.first + camelize(lower_case_and_underscored_word)[1..-1]
165:     end
166:   end

Create a class name from a plural 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"
  "posts".classify        # => "Post"

Singular names are not handled correctly:

  "business".classify     # => "Busines"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 244
244:   def classify(table_name)
245:     # strip out any leading schema name
246:     camelize(singularize(table_name.to_s.sub(/.*\./, '')))
247:   end

Tries to find a constant with the name specified in the argument string:

  "Module".constantize     # => Module
  "Test::Unit".constantize # => Test::Unit

The name is assumed to be the one of a top-level constant, no matter whether it starts with "::" or not. No lexical context is taken into account:

  C = 'outside'
  module M
    C = 'inside'
    C               # => 'inside'
    "C".constantize # => 'outside', same as ::C
  end

NameError is raised when the name is not in CamelCase or the constant is unknown.

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 278
278:   def constantize(camel_cased_word)
279:     unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
280:       raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
281:     end
282: 
283:     Object.module_eval("::#{$1}", __FILE__, __LINE__)
284:   end

Replaces underscores with dashes in the string.

Example:

  "puni_puni" # => "puni-puni"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 200
200:   def dasherize(underscored_word)
201:     underscored_word.gsub(/_/, '-')
202:   end

Removes the module part from the expression in the string.

Examples:

  "ActiveRecord::CoreExtensions::String::Inflections".demodulize # => "Inflections"
  "Inflections".demodulize                                       # => "Inflections"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 219
219:   def demodulize(class_name_in_module)
220:     class_name_in_module.to_s.gsub(/^.*::/, '')
221:   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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 257
257:   def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
258:     underscore(demodulize(class_name)) + (separate_class_name_and_id_with_underscore ? "_id" : "id")
259:   end

Capitalizes the first word and turns underscores into spaces and strips a trailing "_id", if any. Like titleize, this is meant for creating pretty output.

Examples:

  "employee_salary" # => "Employee salary"
  "author_id"       # => "Author"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 210
210:   def humanize(lower_case_and_underscored_word)
211:     lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
212:   end

Yields a singleton instance of Inflector::Inflections so you can specify additional inflector rules.

Example:

  Inflector.inflections do |inflect|
    inflect.uncountable "rails"
  end

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 102
102:   def inflections
103:     if block_given?
104:       yield Inflections.instance
105:     else
106:       Inflections.instance
107:     end
108:   end

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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 294
294:   def ordinalize(number)
295:     if (11..13).include?(number.to_i % 100)
296:       "#{number}th"
297:     else
298:       case number.to_i % 10
299:         when 1; "#{number}st"
300:         when 2; "#{number}nd"
301:         when 3; "#{number}rd"
302:         else    "#{number}th"
303:       end
304:     end
305:   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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 119
119:   def pluralize(word)
120:     result = word.to_s.dup
121: 
122:     if word.empty? || inflections.uncountables.include?(result.downcase)
123:       result
124:     else
125:       inflections.plurals.each { |(rule, replacement)| break if result.gsub!(rule, replacement) }
126:       result
127:     end
128:   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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 139
139:   def singularize(word)
140:     result = word.to_s.dup
141: 
142:     if inflections.uncountables.include?(result.downcase)
143:       result
144:     else
145:       inflections.singulars.each { |(rule, replacement)| break if result.gsub!(rule, replacement) }
146:       result
147:     end
148:   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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 230
230:   def tableize(class_name)
231:     pluralize(underscore(class_name))
232:   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"

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 177
177:   def titleize(word)
178:     humanize(underscore(word)).gsub(/\b('?[a-z])/) { $1.capitalize }
179:   end

The reverse of camelize. Makes an underscored, lowercase 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

[Source]

     # File vendor/rails/activesupport/lib/active_support/inflector.rb, line 188
188:   def underscore(camel_cased_word)
189:     camel_cased_word.to_s.gsub(/::/, '/').
190:       gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
191:       gsub(/([a-z\d])([A-Z])/,'\1_\2').
192:       tr("-", "_").
193:       downcase
194:   end

[Validate]