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.

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 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"

[Source]

     # 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

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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

[Source]

    # 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"

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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"

[Source]

     # 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

[Source]

     # 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

[Validate]