Thorsten Rossner wrote:
> Hi,
> 
> I often have to check if a methodcall A is not returning nil before
> calling another method on the return value of the methodcall A. I'm
> looking for a short and cheap (avoiding to call method A two times like
> in this example where xmltag.get_text is method A:
> textvalue = xmltag.get_text.value if xmltag.get_text
> )
> The ideal solution would be a oneliner with only little complexity
> calling method A just one time. Am I using the wrong approach here
> anyway?

This the solution I use in *my* code for this common problem:
   textvalue = xmltag.get_text.ergo.value

This is my personal solution and I've never seen anyone use something 
like this, so it may not be a "common and accepted idiom" but it works 
well for me. YMMV

code for "ergo":

class NilClass
   def ergo
     @blackhole ||= Object.new.instance_eval do
       class << self
         for m in public_instance_methods
           undef_method(m.to_sym) unless m =~ /^__.*__$/
         end
       end
       def method_missing(*args); nil; end
       self
     end
     @blackhole unless block_given?
   end
end

class Object
   def ergo
     if block_given?
       yield(self)
     else
       self
     end
   end
end