Module: AdminIt::ActiveRecordData::ValueFilter

Defined in:
lib/admin_it/data/active_record.rb

Instance Method Summary collapse

Instance Method Details

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



272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/admin_it/data/active_record.rb', line 272

def all_values(collection = nil, &block)
  enum = Enumerator.new do |yielder|
    field
      .entity_class
      .select(self.class.field.field_name)
      .group(self.class.field.field_name)
      .count
      .each do |v, c|
        yielder << { value: v, count: c }
      end
  end
  block_given? ? enum.each(&block) : enum
end

#apply(collection) ⇒ Object



286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/admin_it/data/active_record.rb', line 286

def apply(collection)
  return collection if @values.empty?
  binding = []
  conditions = ''
  if @values.size == 1 && @values[0].nil?
    conditions = "#{field.field_name} IS NULL"
  else
    conditions = "#{field.field_name} IN (?)"
    binding << @values.select { |v| !v.nil? }
    if @values.any? { |v| v.nil? }
      conditions += " OR #{field.field_name} IS NULL"
    end
  end
  collection = collection.where(conditions, *binding)
end