Index: ambition-0.5.0/lib/ambition/processors/select.rb =================================================================== --- ambition-0.5.0/lib/ambition/processors/select.rb (revision 41) +++ ambition-0.5.0/lib/ambition/processors/select.rb (working copy) @@ -35,7 +35,11 @@ # [[:call, [:dvar, :m], :name], :upcase] elsif args.first.first == :call && args.first[1].last == @receiver receiver, method = args - translator.chained_call(receiver.last, method) + if method == :nil? then + process_nil?(receiver.last) + else + translator.chained_call(receiver.last, method) + end # Deep, chained call: # [[:call, [:call, [:call, [:dvar, :m], :created_at], :something], :else], :perhaps] @@ -54,6 +58,14 @@ raise args.inspect end end + + def process_nil?(arg) + if @negated + translator.not_equal(arg, nil) + else + translator.==(arg, nil) + end + end def process_match3(exp) right, left = exp