def method_missing(m, *args)
      if m.to_s =~ /^(.+)!$/
        send($1.to_sym, *args).tap {|q| @criteria, @options = q.criteria, q.options}
        self
      else
        super(m, *args)
      end
    end
def method_missing(m, *args)
      if m.to_s =~ /^(.+)!$/
        send($1.to_sym, *args).tap {|q| @criteria, @options = q.criteria, q.options}
        self
      else
        super(m, *args)
      end
    end
Allow self-changing methods: where!, sort! etc.