lib/active_admin/filters/forms.rb
# frozen_string_literal: true
module ActiveAdmin
module Filters
# This form builder defines methods to build filter forms such
# as the one found in the sidebar of the index page of a standard resource.
class FormBuilder < ::ActiveAdmin::FormBuilder
include ::ActiveAdmin::Filters::FormtasticAddons
self.input_namespaces = [::Object, ::ActiveAdmin::Inputs::Filters, ::ActiveAdmin::Inputs, ::Formtastic::Inputs]
# TODO: remove input class finders after formtastic 4 (where it will be default)
self.input_class_finder = ::Formtastic::InputClassFinder
def filter(method, options = {})
if method.present? && options[:as] ||= default_input_type(method)
template.concat input(method, options)
end
end
protected
# Returns the default filter type for a given attribute. If you want
# to use a custom search method, you have to specify the type yourself.
def default_input_type(method, options = {})
if /_(eq|cont|start|end)\z/.match?(method)
:string
elsif klass._ransackers.key?(method.to_s)
klass._ransackers[method.to_s].type
elsif reflection_for(method) || polymorphic_foreign_type?(method)
:select
elsif column = column_for(method)
case column.type
when :date, :datetime
:date_range
when :string, :text, :citext
:string
when :integer, :float, :decimal
:numeric
when :boolean
:boolean
end
end
end
end
end
end