Class: AdminIt::ValueFilter

Inherits:
FieldFilter show all
Defined in:
lib/admin_it/filters/value_filter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*values, **opts) ⇒ ValueFilter

Returns a new instance of ValueFilter.



5
6
7
# File 'lib/admin_it/filters/value_filter.rb', line 5

def initialize(*values, **opts)
  @values = values.map { |v| parse_argument(v) }.uniq
end

Instance Attribute Details

#valuesObject (readonly)

Returns the value of attribute values.



3
4
5
# File 'lib/admin_it/filters/value_filter.rb', line 3

def values
  @values
end

Instance Method Details

#all_values(collection = nil, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/admin_it/filters/value_filter.rb', line 28

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

#apply(collection) ⇒ Object



45
46
47
48
49
50
# File 'lib/admin_it/filters/value_filter.rb', line 45

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

#change(str) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/admin_it/filters/value_filter.rb', line 13

def change(str)
  return if str.nil? || !str.is_a?(String) || str.empty?
  @values = [] unless /[+\-]/ =~ str
  str.split(',').each do |param|
    param.strip!
    if param[0] == '-'
      @values.delete_if { |v| v == parse_argument(param[1..-1]) }
    else
      param = param[1..-1] if param[0] == '+'
      @values << parse_argument(param)
    end
  end
  @values.uniq!
end

#value(val) ⇒ Object



41
42
43
# File 'lib/admin_it/filters/value_filter.rb', line 41

def value(val)
  create_argument(val)
end