Project

General

Profile

Actions

Feature #21346

open

Introduce `String#ensure_suffix`

Added by matheusrich (Matheus Richard) about 13 hours ago. Updated 34 minutes 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

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!"?

Actions

Also available in: Atom PDF

Like0
Like0Like0