nil? and blank?

Use the Source...
(vendor/rails/activesupport/lib/active_support/core_ext/blank.rb)

class Object #:nodoc:
   # "", " ", nil, [], and {} are blank
   def blank?
     if respond_to?(:empty?) && respond_to?(:strip)
       empty? or strip.empty?
     elsif respond_to?(:empty?)
       empty?
     else
       !self
     end
   end
end

class NilClass #:nodoc:
   def blank?
     true
   end
end

class FalseClass #:nodoc:
   def blank?
     true
   end
end

class TrueClass #:nodoc:
   def blank?
     false
   end
end

class Array #:nodoc:
   alias_method :blank?, :empty?
end

class Hash #:nodoc:
   alias_method :blank?, :empty?
end

class String #:nodoc:
   def blank?
     empty? || strip.empty?
   end
end

class Numeric #:nodoc:
   def blank?
     false
   end
end

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
+1 513-295-4739
Skype: rob.biedenharn

Well, for my projects, I've started putting these kinds of things into a file in:

RAILS_ROOT/lib/ext/some_class_or_behavior_name.rb

and I require them in my config/environment.rb like this:

Dir[File.join(RAILS_ROOT, 'lib', 'ext', '*.rb')].each do |f|
   base = File.basename(f, '.rb')
   require "ext/#{base}"
end

One project, for example, has files:
active_record_compare.rb
array.rb
enumerable.rb
file.rb
integer.rb
nil_class.rb
range.rb
string.rb
web_agent.rb

And my nil_class.rb contains:
class NilClass
   # Allowing a chain like: value.nonblank? || 'default value'
   def nonblank?
     self
   end
   # so it plays nicely with Numeric#nonzero?
   def nonzero?
     self
   end
end

That should give you some ideas.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

Makes sense. Thanks.

-- gw