Mar 11, 2008

Object-Oriented Approach to Blank Checking/Defaulting

Something I constantly find myself doing is checking to see if a value is blank, and returning something else if it is, otherwise the object itself:

birthday.blank? ? '0000-00-00' : birthday
                

I started thinking about how I could possibly eliminate the need for all these ternary operators, and came up with this:

class Object
                  def or_if_blank(value)
                    self.respond_to?(:blank) && self.blank? ? value : self
                  end
                end
                

Now we can do something like this:

birthday.or_if_blank('0000-00-00')
                
You could do something similar for nil, though a more general Ruby idiom is to just use the   operator, which does not work for blank.

On another note, if any of you are used to appending a "if object.respond_to?(:method)" predicate, check out this technique using try.

comments powered by Disqus