From: "matz (Yukihiro Matsumoto)" Date: 2012-03-28T01:30:46+09:00 Subject: [ruby-core:43770] [ruby-trunk - Feature #5372][Rejected] Promote blank? to a core protocol Issue #5372 has been updated by matz (Yukihiro Matsumoto). Status changed from Assigned to Rejected Let it stay in ActiveSupport. Generally, string is string, array is array, in Ruby. Matz. ---------------------------------------- Feature #5372: Promote blank? to a core protocol https://bugs.ruby-lang.org/issues/5372#change-25279 Author: regularfry (Alex Young) Status: Rejected Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 1.9.4 I don't think there's been a project I've used that hasn't made use of this pattern: if thing.nil? || thing.empty? somewhere in its source. This is necessary because it is idiomatic to return nil where other languages might return a null object, and there is no universal test for nullity which a user-implemented class can provide without issues. Facets (and ActiveSupport) define a #blank? protocol which allows for the above to be replaced with: if thing.blank? Being able to type this on a first iteration saves forgetting one of the cases and having to come back to fix a bug later. For projects where I cannot directly use Facets or ActiveSupport, I always find that I rewrite a version for myself. It would be very convenient not to have to do this every time, and this is clearly a common case, so I propose that #blank? be implemented on the following classes: Object: to return false String: aliased to #empty? NilClass: to return true TrueClass: to return false FalseClass: to return true Array: aliased to #empty? Hash: aliased to #empty? Fiber: to return !alive? Numeric: aliased to #zero? IO: aliased to #closed? MatchData: to return #to_s.blank? Process::Status: aliased to #exited? Range: to return self.include?(self.begin) Struct: subclass instances to return values.blank? Thread: to return !alive? ThreadGroup: to return list.blank? Some of these uses aren't described by the word "blank?" very well (and ActiveSupport's String#blank? is somewhat different), so as a sub-feature I'd like to suggest "null?" as an alternative method name. Apologies if this has been proposed and rejected before, but a quick search of redmine didn't show anything relevant. -- http://bugs.ruby-lang.org/