Sha256: 174a3e3f6c3a50489b124bf15eadf14c4290e1d568013b6243e30ab37271198b

Contents?: true

Size: 843 Bytes

Versions: 3

Compression:

Stored size: 843 Bytes

Contents

class String

  PLURAL_RULES = [
    [/(x|ch|ss|sh)$/, '\1es'],            # search, switch, fix, box, process, address
    [/([^aeiouy]|qu)ies$/, '\1y'],
    [/([^aeiouy]|qu)y$/, '\1ies'],        # query, ability, agency
    [/(?:([^f])fe|([lr])f)$/, '\1\2ves'], # half, safe, wife
    [/sis$/, 'ses'],                      # basis, diagnosis
    [/([ti])um$/, '\1a'],                 # datum, medium
    [/person$/, 'people'],                # person, salesperson
    [/man$/, 'men'],                      # man, woman, spokesman
    [/child$/, 'children'],               # child
    [/s$/, 's'],                          # no change (compatibility)
    [/$/, 's']
  ]

  def plural
    result = self.to_s.dup
    PLURAL_RULES.each do |(rule, replacement)|
      break if result.gsub!(rule, replacement)
    end
    return result
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
facets-0.7.0 lib/facet/string/plural.rb
facets-0.7.1 lib/facet/string/plural.rb
facets-0.7.2 lib/facet/string/plural.rb