Sha256: 5139d540754ab0923c2077bd0167d31da7b58f604d3a6c6601f18aaf2b2598d0

Contents?: true

Size: 656 Bytes

Versions: 5

Compression:

Stored size: 656 Bytes

Contents

module Headmin
  class Filters
    # Example:
    #
    # @orders = Headmin::Filters.new(params, {
    #   status: :text,
    #   price: :number,
    #   in_stock: :boolean
    # }).query(Order)

    def initialize(params, param_types)
      @params = params
      @param_types = param_types
    end

    def parse(attribute, type)
      class_name = "Headmin::Filter::#{type.to_s.classify}".constantize
      class_name.new(attribute, @params)
    end

    def query(collection)
      @param_types.each do |attribute, type|
        filter = parse(attribute, type)
        collection = filter.query(collection)
      end
      collection
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
headmin-0.5.4 app/models/headmin/filters.rb
headmin-0.5.3 app/models/headmin/filters.rb
headmin-0.5.2 app/models/headmin/filters.rb
headmin-0.5.1 app/models/headmin/filters.rb
headmin-0.5.0 app/models/headmin/filters.rb