module ActiveSupport::Inflector

def humanize(lower_case_and_underscored_word, capitalize: true, keep_id_suffix: false)


humanize('ssl_error') # => "SSL error"

If "SSL" was defined to be an acronym:

humanize('author_id', keep_id_suffix: true) # => "Author id"
humanize('_id') # => "Id"
humanize('author_id', capitalize: false) # => "author"
humanize('author_id') # => "Author"
humanize('employee_salary') # => "Employee salary"

optional parameter +keep_id_suffix+ to true (default is false).
The trailing '_id' can be kept and capitalized by setting the

+:capitalize+ option to false (default is true).
The capitalization of the first word can be turned off by setting the
* Capitalizes the first word.
* Downcases all words except acronyms.
* Replaces underscores with spaces, if any.
* Removes an "_id" suffix if present.
* Deletes leading underscores, if any.
* Applies human inflection rules to the argument.

Specifically, performs these transformations:

Tweaks an attribute name for display to end users.
def humanize(lower_case_and_underscored_word, capitalize: true, keep_id_suffix: false)
  result = lower_case_and_underscored_word.to_s.dup
  inflections.humans.each { |(rule, replacement)| break if result.sub!(rule, replacement) }
  result.tr!("_", " ")
  result.lstrip!
  if !keep_id_suffix && lower_case_and_underscored_word.end_with?("_id")
    result.delete_suffix!(" id")
  end
  result.gsub!(/([a-z\d]+)/i) do |match|
    match.downcase!
    inflections.acronyms[match] || match
  end
  if capitalize
    result.sub!(/\A\w/) do |match|
      match.upcase!
      match
    end
  end
  result
end