Project

General

Profile

Actions

Feature #21346

open

Introduce `String#ensure_suffix`

Added by matheusrich (Matheus Richard) about 11 hours ago. Updated about 11 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:122154]

Description

Problem

Ensuring a string has a specific suffix or prefix is a common operation in many applications.
Bundler itself uses it:

https://github.com/rubygems/rubygems/blob/d409ec8b5fc647fabe30e37e17cd1ea857634f6b/bundler/lib/bundler/uri_normalizer.rb#L17

Here are GitHub search queries that might find this pattern in other places:

  1. for Ruby: /end(?:s)?_with\?\(['"].*['"]\) \?/ lang:ruby -is:fork
  2. 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
Actions

Also available in: Atom PDF

Like0
Like0