Class: AdminIt::ValueFilter
- Inherits:
-
FieldFilter
- Object
- Filter
- FieldFilter
- AdminIt::ValueFilter
- Defined in:
- lib/admin_it/filters/value_filter.rb
Instance Attribute Summary collapse
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Instance Method Summary collapse
- #all_values(collection = nil, &block) ⇒ Object
- #apply(collection) ⇒ Object
- #change(str) ⇒ Object
-
#initialize(*values, **opts) ⇒ ValueFilter
constructor
A new instance of ValueFilter.
- #value(val) ⇒ Object
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
#values ⇒ Object (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 |