From: Yui NARUSE Date: 2011-09-28T07:38:02+09:00 Subject: [ruby-core:39753] [Ruby 1.9 - Feature #5372] Promote blank? to a core protocol Issue #5372 has been updated by Yui NARUSE. This seems the long discussed question, what is a zero element. But I don't think this proposal is not worth breaking ActiveSupport's blank?. Anyway what is the usecase of this? I doubt a closed io is a zero element. Do you have a case that you are happy if it is a zero element. ---------------------------------------- Feature #5372: Promote blank? to a core protocol http://redmine.ruby-lang.org/issues/5372 Author: Alex Young Status: Open Priority: Normal Assignee: 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://redmine.ruby-lang.org