def filter(opts = {}, &block)
      out = []
      limit = opts[:limit]

      selected.each do |view|
        results = yield(view)
        unless RMQ.is_blank?(results)
          out << results
          break if limit && (out.length >= limit)
        end
      end
      out.flatten!
      out.uniq! if opts[:uniq]

      if opts[:return_array]
        out
      else
        RMQ.create_with_array_and_selectors(out, selectors, @context, self)
      end
    end
def filter(opts = {}, &block)
      out = []
      limit = opts[:limit]

      selected.each do |view|
        results = yield(view)
        unless RMQ.is_blank?(results)
          out << results
          break if limit && (out.length >= limit)
        end
      end
      out.flatten!
      out.uniq! if opts[:uniq]

      if opts[:return_array]
        out
      else
        RMQ.create_with_array_and_selectors(out, selectors, @context, self)
      end
    end
Most everything uses filter to do its work. This is mostly used internally
 but you can use it too. Just pass a block that returns views, it will be
 called for every view that is *selected*

 @param return_array returns array not rmq: return_array: true
 @param uniq removes duplicate views: uniq: true
 @param limit limits the number of views *per selected view*: limit: true

 @return [RMQ]