Sha256: 012cc711b53c580c527b3108056daddb52d3f10b40f916769e3a1477e3ad1ab4

Contents?: true

Size: 1.27 KB

Versions: 19

Compression:

Stored size: 1.27 KB

Contents

module AdminIt
  #
  class ValueFilter < FieldFilter
    attr_reader :values

    def initialize
      @values = []
    end

    before_save do |arguments: [], options: {}|
      arguments.concat(@values.map { |v| create_argument(v) })
    end

    after_load do |arguments: [], options: {}|
      unless arguments.empty?
        @values = arguments.map { |v| parse_argument(v) }.uniq
      end
      if options.key?(:add)
        @values.concat(options[:add].map { |v| parse_argument(v) }).uniq!
      elsif options.key?(:remove)
        options[:remove].each do |remove|
          @values.delete_if { |v| v == parse_argument(remove) }
        end
      end
    end

    def all_values(collection = nil, &block)
      collection ||= []
      enum = Enumerator.new do |yielder|
        values = collection.map { |e| self.class.field.read(e) }
        values.uniq.each do |value|
          yileder << {
            value: value, count: values.count { |v| v == value }
          }
        end
      end
      block_given? ? enum.each(&block) : enum
    end

    def value(val)
      create_argument(val)
    end

    def apply(collection)
      return collection if @values.empty?
      collection.select do |entity|
        @values.include?(self.class.field.read(entity))
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
admin_it-1.3.8 lib/admin_it/filters/value_filter.rb
admin_it-1.3.7 lib/admin_it/filters/value_filter.rb
admin_it-1.3.6 lib/admin_it/filters/value_filter.rb
admin_it-1.3.5 lib/admin_it/filters/value_filter.rb
admin_it-1.3.4 lib/admin_it/filters/value_filter.rb
admin_it-1.3.3 lib/admin_it/filters/value_filter.rb
admin_it-1.3.2 lib/admin_it/filters/value_filter.rb
admin_it-1.3.1 lib/admin_it/filters/value_filter.rb
admin_it-1.3.0 lib/admin_it/filters/value_filter.rb
admin_it-1.2.8 lib/admin_it/filters/value_filter.rb
admin_it-1.2.7 lib/admin_it/filters/value_filter.rb
admin_it-1.2.6 lib/admin_it/filters/value_filter.rb
admin_it-1.2.5 lib/admin_it/filters/value_filter.rb
admin_it-1.2.4 lib/admin_it/filters/value_filter.rb
admin_it-1.2.3 lib/admin_it/filters/value_filter.rb
admin_it-1.2.2 lib/admin_it/filters/value_filter.rb
admin_it-1.2.1 lib/admin_it/filters/value_filter.rb
admin_it-1.2.0 lib/admin_it/filters/value_filter.rb
admin_it-1.1.0 lib/admin_it/filters/value_filter.rb