From: jonathan@... Date: 2019-12-07T19:38:05+00:00 Subject: [ruby-core:96141] [Ruby master Feature#16374] Object#nullify to provide scalars with the effect similar to Enumerable#reject Issue #16374 has been updated by jonathanhefner (Jonathan Hefner). This is an interesting idea. It is like a generalized version of Active Support's [`Object#presence`](https://api.rubyonrails.org/classes/Object.html#method-i-presence). However, I agree that the name reads awkwardly. What about `Object#unless`? ```ruby [1, 2].unless(&:empty?)&.join # == "12" [].unless(&:empty?)&.join # == nil ``` And then we could have `Object#if` to match: ```ruby [2].if(&:one?)&.first # == 2 [1, 2].if(&:one?)&.first # == nil ``` ---------------------------------------- Feature #16374: Object#nullify to provide scalars with the effect similar to Enumerable#reject https://bugs.ruby-lang.org/issues/16374#change-83009 * Author: cvss (Kirill Vechera) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- How about adding a new method to Object class? ``` class Object def nullify &block block.call(self) ? nil : self end end irb(main):139:0> 'asdf'.nullify(&:empty?) => "asdf" irb(main):140:0> ''.nullify(&:empty?) => nil ``` It can be used together for chaining several methods with conditions. E.g. with &. operator and #then: ``` irb(main):154:0> [1, 2].nullify(&:empty?)&.then(&:join) => "12" irb(main):155:0> [].nullify(&:empty?)&.then(&:join) => nil irb(main):156:0> [].join => "" irb(main):161:0> 'a b'.nullify(&:empty?)&.then(&:split) => ["a", "b"] irb(main):162:0> ''.nullify(&:empty?)&.then(&:split) => nil irb(main):163:0> ''.split => [] ``` P.S. A similar opposite operation is available as a chain of ['then.detect'](https://ruby-doc.org/core-2.6.5/Object.html#method-i-then) -- https://bugs.ruby-lang.org/ Unsubscribe: