The project is in a healthy, maintained state
Provides pluralize, singularize, camelize, underscore, tableize, classify, ordinalize, dasherize, demodulize, deconstantize, and other string inflection methods compatible with Rails conventions, with zero dependencies.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies
 Project Readme

philiprehberger-inflector

Tests Gem Version Last updated

Rails-compatible string inflections without ActiveSupport dependency

Requirements

  • Ruby >= 3.1

Installation

Add to your Gemfile:

gem "philiprehberger-inflector"

Or install directly:

gem install philiprehberger-inflector

Usage

require "philiprehberger/inflector"

Philiprehberger::Inflector.pluralize('cat')     # => "cats"
Philiprehberger::Inflector.singularize('cats')  # => "cat"

Case Conversions

require "philiprehberger/inflector"

Philiprehberger::Inflector.underscore('UserAccount')  # => "user_account"
Philiprehberger::Inflector.camelize('user_account')   # => "UserAccount"
Philiprehberger::Inflector.humanize('author_id')      # => "Author"
Philiprehberger::Inflector.titleize('user_account')   # => "User Account"

Database Conventions

require "philiprehberger/inflector"

Philiprehberger::Inflector.tableize('UserAccount')   # => "user_accounts"
Philiprehberger::Inflector.classify('user_accounts')  # => "UserAccount"
Philiprehberger::Inflector.foreign_key('User')        # => "user_id"

URL Parameters

require "philiprehberger/inflector"

Philiprehberger::Inflector.parameterize('Hello World!')  # => "hello-world"

Ordinals

require "philiprehberger/inflector"

Philiprehberger::Inflector.ordinalize(1)   # => "1st"
Philiprehberger::Inflector.ordinalize(2)   # => "2nd"
Philiprehberger::Inflector.ordinalize(3)   # => "3rd"
Philiprehberger::Inflector.ordinalize(11)  # => "11th"
Philiprehberger::Inflector.ordinalize(21)  # => "21st"

Dasherize

require "philiprehberger/inflector"

Philiprehberger::Inflector.dasherize('some_thing')  # => "some-thing"

Demodulize

require "philiprehberger/inflector"

Philiprehberger::Inflector.demodulize('Admin::User')  # => "User"
Philiprehberger::Inflector.demodulize('User')          # => "User"

Deconstantize

require "philiprehberger/inflector"

Philiprehberger::Inflector.deconstantize('Admin::User')       # => "Admin"
Philiprehberger::Inflector.deconstantize('Admin::Team::User') # => "Admin::Team"
Philiprehberger::Inflector.deconstantize('User')              # => ""

Upcase First

require "philiprehberger/inflector"

Philiprehberger::Inflector.upcase_first('hello world')  # => "Hello world"
Philiprehberger::Inflector.upcase_first('HELLO')        # => "HELLO"

Custom Rules

require "philiprehberger/inflector"

Philiprehberger::Inflector.add_irregular('person', 'people')
Philiprehberger::Inflector.add_plural_rule(/ox$/i, 'oxen')
Philiprehberger::Inflector.add_singular_rule(/oxen$/i, 'ox')
Philiprehberger::Inflector.add_uncountable('metadata', 'bandwidth')

String Refinements

For a more natural syntax, use the refinements module:

require "philiprehberger/inflector"
using Philiprehberger::Inflector::StringRefinements

'user_account'.camelize        # => "UserAccount"
'UserAccount'.tableize         # => "user_accounts"
'Hello World!'.parameterize    # => "hello-world"
'Admin::User'.demodulize       # => "User"
1.ordinalize                   # => "1st"

API

Method Description
Inflector.pluralize(word) Return the plural form of a word
Inflector.singularize(word) Return the singular form of a word
Inflector.tableize(class_name) Convert class name to table name
Inflector.classify(table_name) Convert table name to class name
Inflector.foreign_key(class_name, separate_id:) Generate foreign key from class name
Inflector.parameterize(str, separator:) Convert to URL-friendly form
Inflector.underscore(str) Convert CamelCase to snake_case
Inflector.camelize(str, uppercase_first:) Convert snake_case to CamelCase
Inflector.humanize(str) Convert to human-readable form
Inflector.titleize(str) Convert to title case
Inflector.ordinalize(number) Convert number to ordinal string
Inflector.dasherize(str) Convert underscores to dashes
Inflector.demodulize(str) Remove module namespace prefix
Inflector.deconstantize(str) Remove rightmost constant segment
Inflector.upcase_first(str) Uppercase only the first character
Inflector.add_irregular(singular, plural) Register irregular singular/plural pair
Inflector.add_plural_rule(pattern, replacement) Register custom plural rule
Inflector.add_singular_rule(pattern, replacement) Register custom singular rule
Inflector.add_uncountable(*words) Register uncountable words

Development

bundle install
bundle exec rspec
bundle exec rubocop

Support

If you find this project useful:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT