Feature #21346
openIntroduce `String#ensure_suffix`
Description
Problem¶
Ensuring a string has a specific suffix or prefix is a common operation in many applications.
Bundler itself uses it:
Here are GitHub search queries that might find this pattern in other places:
- for Ruby:
/end(?:s)?_with\?\(['"].*['"]\) \?/ lang:ruby -is:fork
- for Crystal (a language very similar to Ruby):
/ends_with\?\(['"].*['"]\) \?/ lang:crystal -is:fork
Suggested solution¶
I believe Ruby would benefit from having a first-class method for this purpose.
I suggest the String#ensure_suffix
and String#ensure_prefix
methods.
I think these names are intuitive enough (here are 2 examples of people using ensure
for this purpose (1, 2)).
I've gone ahead and implemented String#ensure_suffix
in a pull request but the suggested behavior is this:
"Hell".ensure_suffix("o!") # => "Hello!"
"Hello!".ensure_suffix("o!") # => "Hello!"
s = "Hello!"
s.ensure_suffix("!").equal?(s) # => true # returns same object if already suffixed
Updated by matheusrich (Matheus Richard) about 13 hours ago
If approved, I can add String#ensure_prefix
and the bang versions of those methods.
Updated by duerst (Martin Dürst) 34 minutes ago
You say "queries that might find this pattern". That seems to say that you haven't found it yet.
What's the result for
"Hello".ensure_suffix("o!")
Is it "Helloo!", or is it "Hello!"?