class MongoidHashQuery::FilterApplier

Attributes

configuration[R]

Public Class Methods

new(resource, params, include_associations: true, model: nil) click to toggle source
# File lib/mongoid_hash_query/filter_applier.rb, line 12
def initialize(resource, params, include_associations: true, model: nil)
  @configuration = Module.nesting.last.configuration
  @resource = resource
  @params = HashWithIndifferentAccess.new(params)
  @include_associations = include_associations
  @model = model
end

Public Instance Methods

apply_filters() click to toggle source
# File lib/mongoid_hash_query/filter_applier.rb, line 20
    def apply_filters
      unless @model
        @model = model_class_name(@resource)
      end
      #table_name = @model.table_name
      @model.fields.each do |k, v|
        next if @params[v.name.to_s].nil?

        if k.eql?('_id')
          @resource = filter_primary(@resource, v.name, @params[id])
          next
        end

        case v.options[:type].to_s
        when Array.to_s
          @resource = filter_array(@resource, v.name, @params[v.name])
        when BigDecimal.to_s
          @resource = filter_big_decimal(@resource, v.name, @params[v.name])
        when Boolean.to_s
          @resource = filter_boolean(@resource, v.name, @params[v.name])
        when Date.to_s
          @resource = filter_date(@resource, v.name, @params[v.name])
        when DateTime.to_s
          @resource = filter_date_time(@resource, v.name, @params[v.name])
        when Float.to_s
          @resource = filter_float(@resource, v.name, @params[v.name])
        when Hash.to_s
          @resource = filter_hash(@resource, v.name, @params[v.name])
        when Integer.to_s
          @resource = filter_integer(@resource, v.name, @params[v.name])
        when String.to_s
          @resource = filter_string(@resource, v.name, @params[v.name])
        when Symbol.to_s
          @resource = filter_symbol(@resource, v.name, @params[v.name])
        when Time.to_s
          @resource = filter_time(@resource, v.name, @params[v.name])
        else
          @resource = @resource.where(v.name => @params[v.name])
        end
      end

      @resource = filter_scopes(@resource, @params[:scopes]) if @params.include?(:scopes)
      @resource = apply_limit(@resource, @params[:limit]) if @params.include?(:limit)
      @resource = apply_sort(@resource, @params[:sort]) if @params.include?(:sort)

=begin
      @resource = filter_associations(@resource, @params) if @include_associations
=end

      return @resource
    end