Sha256: d5f8530b34b28940a768aa27d0b621e800f00ee2b81edcb6b33017b2cc2a0919

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

module Puffer
  module OrmAdapter
    module Mongoid

      def columns_hash
        klass.fields.inject({}) do |result, (name, object)|
          result.merge name => {:type => object.type.to_s.underscore.to_sym}
        end
      end

      def filter scope, fields, options = {}
        fields = fields.columns
        conditions, order = extract_conditions_and_order!(options)

        conditions_fields = fields.select {|f| conditions.keys.include?(f.field_name)}.to_fieldset
        search_fields = fields.select {|f| !conditions_fields.include?(f) && search_types.include?(f.column_type)}
        all_fields = conditions_fields + search_fields

        conditions = conditions.reduce({}) do |res, (name, value)|
          field = conditions_fields[name]
          res[field.name] = value if field
          res
        end

        scope = scope.any_of(searches(search_fields, options[:search])) if options[:search].present?
        scope.where(conditions).order(order)
      end

    private

      def search_types
        [:string, :integer, :big_decimal, :float, :"bson/object_id", :symbol]
      end

      def searches fields, query
        regexp = /#{Regexp.escape(query)}/i
        fields.map {|field| {field.name => regexp}}
      end

    end
  end
end

Mongoid::Document::OrmAdapter.send :include, Puffer::OrmAdapter::Mongoid

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
puffer-0.0.32 lib/puffer/orm_adapter/mongoid.rb
puffer-0.0.31 lib/puffer/orm_adapter/mongoid.rb
puffer-0.0.30 lib/puffer/orm_adapter/mongoid.rb