Sha256: f82562f4d267c1724c0ec29dc8f99a097d43f3ee6a19ca24ea983d1ba8c569fc

Contents?: true

Size: 1.26 KB

Versions: 6

Compression:

Stored size: 1.26 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

6 entries across 6 versions & 1 rubygems

Version Path
admin_it-1.0.11 lib/admin_it/filters/value_filter.rb
admin_it-1.0.10 lib/admin_it/filters/value_filter.rb
admin_it-1.0.9 lib/admin_it/filters/value_filter.rb
admin_it-1.0.8 lib/admin_it/filters/value_filter.rb
admin_it-1.0.7 lib/admin_it/filters/value_filter.rb
admin_it-1.0.6 lib/admin_it/filters/value_filter.rb