module BlindIndex::Mongoid::Criteria

Private Instance Methods

expr_query(criterion) click to toggle source
Calls superclass method
# File lib/blind_index/mongoid.rb, line 6
def expr_query(criterion)
  if criterion.is_a?(Hash) && klass.respond_to?(:blind_indexes)
    criterion.keys.each do |key|
      key_sym = (key.is_a?(::Mongoid::Criteria::Queryable::Key) ? key.name : key).to_sym

      if (bi = klass.blind_indexes[key_sym])
        value = criterion.delete(key)

        bidx_key =
          if key.is_a?(::Mongoid::Criteria::Queryable::Key)
            ::Mongoid::Criteria::Queryable::Key.new(
              bi[:bidx_attribute],
              key.strategy,
              key.operator,
              key.expanded,
              &key.block
            )
          else
            bi[:bidx_attribute]
          end

        criterion[bidx_key] =
          if value.is_a?(Array)
            value.map { |v| BlindIndex.generate_bidx(v, **bi) }
          else
            BlindIndex.generate_bidx(value, **bi)
          end
      end
    end
  end

  super(criterion)
end