def block_filter

      return nil if tree.last.empty?

      tree.last.collect { |line|

        next 'or' if line.first == 'or'

        rule = line[1].remap { |(k, v), h|
          if v == nil
            h['field'] = k
          else
            h[k] = v
          end
        }

        rule['field'] ||= line.first

        rule
      }
    end
def block_filter

      return nil if tree.last.empty?

      tree.last.collect { |line|

        next 'or' if line.first == 'or'

        rule = line[1].remap { |(k, v), h|
          if v == nil
            h['field'] = k
          else
            h[k] = v
          end
        }

        rule['field'] ||= line.first

        rule
      }
    end
Filter is passed in a block (which is not evaluted as a ruote branch
 but immediately translated into a filter.

   pdef = Ruote.process_definition do
     filter do
       field 'x', :type => 'string'
       field 'y', :type => 'number'
     end
   end

 Note : 'or' is OK

   pdef = Ruote.process_definition do
     filter do
       field 'x', :type => 'string'
       _or
       field 'y', :type => 'number'
     end
   end