dry-rb / dry-inflector

Inflector for Ruby
https://dry-rb.org/gems/dry-inflector
MIT License
95 stars 15 forks source link

`#humanize` does not handle "é" #50

Open francois opened 3 months ago

francois commented 3 months ago

Describe the bug

inflector.humanize("éclaireurs")
#=> "éclaireurs"

The uppercase version "é" is "É". I expected to receive "Éclaireurs". This affects all characters I tried: ê, ï, à.

It could be argued that it isn't the job of the inflector to work in such cases, but the API is convenient :)

In the Hanami 2.2 app that I'm building, humans will record roles in a field. The roles may be typed in different casings, but I normalize to downcase for sorting, then humanize for display. I will add a #normalized_role to make things consistent, but having this in the inflector sure would have been nice.

To Reproduce

require 'bundler/inline'
gemfile do
  gem 'dry-inflector', '~> 1.0'
end

puts RUBY_VERSION

inflector = Dry::Inflector.new
actual = inflector.humanize('éclaireurs')
if actual == 'Éclaireurs'
  puts 'OK'
else
  p actual
  puts 'failed'
end

Expected behavior

"éclaireurs" #=> "Éclaireurs"

My environment

cllns commented 3 months ago

I feel like this should be supported. Especially since "éclaireurs".capitalize returns "Éclaireurs".

I have some work on a local branch that fixes this, but now I'm going through and making sure all the inflectors work with words that have diacritics.