code: 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
docs: Allow self-changing methods: where!, sort! etc.