rubystringnullin-place

Converting an empty string to nil in place?


I'm looking for a way to convert an empty string to nil in place using Ruby. If I end up with a string that is empty spaces I can do

 "    ".strip!

This will give me the empty string "".

What I would like to be able to do is something like this.

"    ".strip!.to_nil!

This will get an in place replacement of the empty string with nil. to_nil! would change the string to nil directly if it is .empty? otherwise if the string is not empty it would not change.

The key here is that I want it to happen directly rather than through an assignment such as

f = nil if f.strip!.empty?

Solution

  • The clean way is using presence.

    Let's test it.

    '    '.presence
    # => nil
    
    
    ''.presence
    # => nil
    
    
    'text'.presence
    # => "text"
    
    
    nil.presence
    # => nil
    
    
    [].presence
    # => nil
    
    
    {}.presence
    # => nil
    
    true.presence
    # => true
    
    false.presence
    # => nil
    

    Please note this method is from Ruby on Rails v4.2.7 https://apidock.com/rails/Object/presence