On Nov 6, 2007, at 9:25 PM, Todd Benson wrote: > On 11/6/07, Todd Benson <caduceass / gmail.com> wrote: >> On 11/6/07, yermej <yermej / gmail.com> wrote: >>> On Nov 6, 6:41 pm, Joshua Muheim <fo... / josh.ch> wrote: >>>> Hi all >>>> >>>> irb(main):001:0> "" || "asdf" >>>> => "" >>>> irb(main):002:0> nil || "asdf" >>>> => "asdf" >>>> irb(main):003:0> >>>> >>>> I'd like the first one to also return "asdf". So is there an >>>> operator >>>> that fits my needs? :-) >>> >>> "" isn't false so || and or won't work. You'll have to code it >>> differently. E.g.: >>> >>> a = "a string" >>> a || (a.empty? ? "asdf" : a) >> >> This doesn't work for me. The previous one doesn't either. This one >> does (I'm sure someone could easily clean this up, I feel lazy >> though)... >> >> [nil, "", "something"].each do |i| >> puts( (item ||= "").empty? ? "asdf" : item ) > > There should be an additional closing ) on the previous line of code > >> end > > Todd I use these extensions in several projects for exactly the same reason as the OP class String # Allowing a chain like: string_value.nonblank? || 'default value' def nonblank? self unless blank? end end 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 irb(main):018:0> "".nonblank? || "asdf" NoMethodError: undefined method `blank?' for "":String from (irb):4:in `nonblank?' from (irb):18 Ok, so these are typically Rails projects, but you can take the String#blank? extension from ActiveSupport irb(main):019:0> class String #:nodoc: irb(main):020:1> def blank? irb(main):021:2> empty? || strip.empty? irb(main):022:2> end irb(main):023:1> end => nil irb(main):024:0> And then Joshua's orignal examples become: irb(main):025:0* "".nonblank? || "asdf" => "asdf" irb(main):026:0> nil.nonblank? || "asdf" => "asdf" And for completeness: irb(main):027:0> "jkl;".nonblank? || "asdf" => "jkl;" -Rob Rob Biedenharn http://agileconsultingllc.com Rob / AgileConsultingLLC.com