Module: YummyGuide::Administrate::Filters::Resolver

Defined in:
lib/yummy_guide/administrate/filters.rb

Class Method Summary collapse

Class Method Details

.attributes_for(dashboard) ⇒ Object



324
325
326
327
# File 'lib/yummy_guide/administrate/filters.rb', line 324

def attributes_for(dashboard)
  source = dashboard.respond_to?(:filter_attributes) ? dashboard.filter_attributes : constant_value(dashboard, :FILTER_ATTRIBUTES)
  normalize_attributes(source || {})
end

.constant_value(dashboard, name) ⇒ Object



345
346
347
348
# File 'lib/yummy_guide/administrate/filters.rb', line 345

def constant_value(dashboard, name)
  target = dashboard.is_a?(Class) ? dashboard : dashboard.class
  target.const_get(name, false) if target.const_defined?(name, false)
end

.normalize_attributes(attributes) ⇒ Object



329
330
331
332
333
# File 'lib/yummy_guide/administrate/filters.rb', line 329

def normalize_attributes(attributes)
  attributes.to_h.map do |name, field|
    [name.to_sym, normalize_field(name, field)]
  end.to_h
end

.normalize_field(name, field) ⇒ Object



335
336
337
338
339
340
341
342
343
# File 'lib/yummy_guide/administrate/filters.rb', line 335

def normalize_field(name, field)
  if field.respond_to?(:with_name)
    field.with_name(name)
  elsif field.is_a?(Class) && field < Base
    field.with_options.with_name(name)
  else
    raise ArgumentError, "Unsupported filter field for #{name}: #{field.inspect}"
  end
end