module English::Inflect

Noun Number Inflections

This module provides english singular <-> plural noun inflections.

Public Class Methods

clear(type = :all) click to toggle source

Clear all rules.

# File lib/english/inflect.rb, line 174
def clear(type = :all)
  if type == :singular || type == :all
    @singular_of = {}
    @singular_rules = []
    @singularization_rules, @singularization_regex = nil, nil
  end
  if type == :plural || type == :all
    @singular_of = {}
    @singular_rules = []
    @singularization_rules, @singularization_regex = nil, nil
  end
end
plural(word) click to toggle source

Convert an English word from singular to plurel.

"boy".plural     #=> boys
"tomato".plural  #=> tomatoes
# File lib/english/inflect.rb, line 152
def plural(word)
  return "" if word == ""
  if result = plural_of[word]
    return result.dup
  end
  #return self.dup if /s$/ =~ self # ???
  result = word.dup

  regex, hash = pluralization_rules
  result.sub!(regex) {|m| hash[m]}
  plural_of[word] = result
  return result
  #pluralization_rules.each do |(match, replacement)|
  #  break if result.gsub!(match, replacement)
  #end
  #return result
end
Also aliased as: pluralize
plural_of() click to toggle source
# File lib/english/inflect.rb, line 119
def plural_of   ; @plural_of   ; end
plural_rule(singular, plural) click to toggle source

Define a plurualization rule.

# File lib/english/inflect.rb, line 72
def plural_rule(singular, plural)
  @plural_rules << [singular, plural]
end
plural_word(singular, plural) click to toggle source

Define a pluralization exception.

# File lib/english/inflect.rb, line 55
def plural_word(singular, plural)
  @plural_of[singular] = plural
  @plural_of[singular.capitalize] = plural.capitalize
end
pluralization_rules() click to toggle source

Read prepared pluralization rules.

# File lib/english/inflect.rb, line 97
def pluralization_rules
  if defined?(@pluralization_regex) && @pluralization_regex
    return [@pluralization_regex, @pluralization_hash]
  end
  @pluralization_regex = Regexp.new("(" + @plural_rules.map {|s,p| s}.join("|") + ")$", "i")
  @pluralization_hash = Hash[*@plural_rules.flatten]
  [@pluralization_regex, @pluralization_hash]
end
pluralize(word) click to toggle source

Alias for plural (a Railism).

Alias for: plural
rule(singular, plural) click to toggle source

Define a general rule.

# File lib/english/inflect.rb, line 61
def rule(singular, plural)
  singular_rule(singular, plural)
  plural_rule(singular, plural)
end
singular(word) click to toggle source

Convert an English word from plurel to singular.

"boys".singular      #=> boy
"tomatoes".singular  #=> tomato
# File lib/english/inflect.rb, line 126
def singular(word)
  return "" if word == ""
  if result = singular_of[word]
    return result.dup
  end
  result = word.dup

  regex, hash = singularization_rules
  result.sub!(regex) {|m| hash[m]}
  singular_of[word] = result
  return result
  #singularization_rules.each do |(match, replacement)|
  #  break if result.gsub!(match, replacement)
  #end
  #return result
end
Also aliased as: singularize
singular_of() click to toggle source
# File lib/english/inflect.rb, line 116
def singular_of ; @singular_of ; end
singular_rule(singular, plural) click to toggle source

Define a singularization rule.

# File lib/english/inflect.rb, line 67
def singular_rule(singular, plural)
  @singular_rules << [singular, plural]
end
singular_word(singular, plural) click to toggle source

Define a singularization exception.

# File lib/english/inflect.rb, line 49
def singular_word(singular, plural)
  @singular_of[plural] = singular
  @singular_of[plural.capitalize] = singular.capitalize
end
singularization_rules() click to toggle source

Read prepared singularization rules.

# File lib/english/inflect.rb, line 77
def singularization_rules
  if defined?(@singularization_regex) && @singularization_regex
    return [@singularization_regex, @singularization_hash]
  end
  # No sorting needed: Regexen match on longest string
  @singularization_regex = Regexp.new("(" + @singular_rules.map {|s,p| p}.join("|") + ")$", "i")
  @singularization_hash  = Hash[*@singular_rules.flatten].invert
  [@singularization_regex, @singularization_hash]
end
singularize(word) click to toggle source

Alias for singular (a Railism).

Alias for: singular
word(singular, plural=nil) click to toggle source

Define a general two-way exception.

This also defines a general rule, so foo_child will correctly become foo_children.

Whole words also work if they are capitalized (Goose => Geese).

# File lib/english/inflect.rb, line 41
def word(singular, plural=nil)
  plural = singular unless plural
  singular_word(singular, plural)
  plural_word(singular, plural)
  rule(singular, plural)
end