class ApipieBindings::Inflections

Attributes

acronym_regex[R]
acronyms[R]
humans[R]
plurals[R]
singulars[R]
uncountables[R]

Public Class Methods

instance(locale = :en) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 8
def self.instance(locale = :en)
  @__instance__[locale] ||= new
end
new() click to toggle source
# File lib/apipie_bindings/inflector.rb, line 14
def initialize
  @plurals, @singulars, @uncountables, @humans, @acronyms, @acronym_regex = [], [], [], [], {}, /(?=a)b/
end

Public Instance Methods

acronym(word) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 18
def acronym(word)
  @acronyms[word.downcase] = word
  @acronym_regex = /#{@acronyms.values.join("|")}/
end
clear(scope = :all) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 72
def clear(scope = :all)
  case scope
    when :all
      @plurals, @singulars, @uncountables, @humans = [], [], [], []
    else
      instance_variable_set "@#{scope}", []
  end
end
human(rule, replacement) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 68
def human(rule, replacement)
  @humans.unshift([rule, replacement])
end
irregular(singular, plural) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 35
def irregular(singular, plural)
  @uncountables.delete(singular)
  @uncountables.delete(plural)

  s0 = singular[0].chr
  srest = singular[1..-1]

  p0 = plural[0].chr
  prest = plural[1..-1]

  if s0.upcase == p0.upcase
    plural(/(#{s0})#{srest}$/i, '\1' + prest)
    plural(/(#{p0})#{prest}$/i, '\1' + prest)

    singular(/(#{s0})#{srest}$/i, '\1' + srest)
    singular(/(#{p0})#{prest}$/i, '\1' + srest)
  else
    plural(/#{s0.upcase}(?i)#{srest}$/, p0.upcase + prest)
    plural(/#{s0.downcase}(?i)#{srest}$/, p0.downcase + prest)
    plural(/#{p0.upcase}(?i)#{prest}$/, p0.upcase + prest)
    plural(/#{p0.downcase}(?i)#{prest}$/, p0.downcase + prest)

    singular(/#{s0.upcase}(?i)#{srest}$/, s0.upcase + srest)
    singular(/#{s0.downcase}(?i)#{srest}$/, s0.downcase + srest)
    singular(/#{p0.upcase}(?i)#{prest}$/, s0.upcase + srest)
    singular(/#{p0.downcase}(?i)#{prest}$/, s0.downcase + srest)
  end
end
plural(rule, replacement) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 23
def plural(rule, replacement)
  @uncountables.delete(rule) if rule.is_a?(String)
  @uncountables.delete(replacement)
  @plurals.unshift([rule, replacement])
end
singular(rule, replacement) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 29
def singular(rule, replacement)
  @uncountables.delete(rule) if rule.is_a?(String)
  @uncountables.delete(replacement)
  @singulars.unshift([rule, replacement])
end
uncountable(*words) click to toggle source
# File lib/apipie_bindings/inflector.rb, line 64
def uncountable(*words)
  (@uncountables << words).flatten!
end