class Datagrid::Filters::BaseFilter
Attributes
Public Class Methods
Source
# File lib/datagrid/filters/base_filter.rb, line 124 def self.form_builder_helper_name :"datagrid_#{to_s.demodulize.underscore}" end
Source
# File lib/datagrid/filters/base_filter.rb, line 15 def initialize(grid_class, name, **options, &block) self.grid_class = grid_class self.name = name.to_sym self.options = Datagrid::Utils.callable(grid_class.default_filter_options, self).merge(options) self.block = block end
Public Instance Methods
Source
# File lib/datagrid/filters/base_filter.rb, line 108 def allow_blank? options[:allow_blank] end
Source
# File lib/datagrid/filters/base_filter.rb, line 104 def allow_nil? options.key?(:allow_nil) ? options[:allow_nil] : options[:allow_blank] end
Source
# File lib/datagrid/filters/base_filter.rb, line 34 def apply(grid_object, scope, value) return scope if unapplicable_value?(value) result = execute(value, scope, grid_object) return scope unless result result = default_filter(value, scope) if result == Datagrid::Filters::DEFAULT_FILTER_BLOCK unless grid_object.driver.match?(result) raise( Datagrid::FilteringError, "Filter #{name.inspect} unapplicable: result no longer match #{grid_object.driver.class}.", ) end result end
Source
# File lib/datagrid/filters/base_filter.rb, line 85 def default(object) default = options[:default] if default.is_a?(Symbol) object.send(default) elsif default.respond_to?(:call) Datagrid::Utils.apply_args(object, &default) else default end end
Source
# File lib/datagrid/filters/base_filter.rb, line 26 def default_input_options { type: "text" } end
Source
# File lib/datagrid/filters/base_filter.rb, line 155 def default_scope? !block end
Source
# File lib/datagrid/filters/base_filter.rb, line 136 def dummy? options[:dummy] end
Source
# File lib/datagrid/filters/base_filter.rb, line 147 def enabled?(grid) ::Datagrid::Utils.process_availability(grid, options[:if], options[:unless]) end
Source
# File lib/datagrid/filters/base_filter.rb, line 151 def enum_checkboxes? false end
Source
# File lib/datagrid/filters/base_filter.rb, line 120 def form_builder_helper_name self.class.form_builder_helper_name end
Source
# File lib/datagrid/filters/base_filter.rb, line 132 def format(value) value&.to_s end
Source
# File lib/datagrid/filters/base_filter.rb, line 77 def header if (header = options[:header]) Datagrid::Utils.callable(header) else Datagrid::Utils.translate_from_namespace(:filters, grid_class, name) end end
Source
# File lib/datagrid/filters/base_filter.rb, line 112 def input_options options[:input_options] || {} end
Source
# File lib/datagrid/filters/base_filter.rb, line 116 def label_options options[:label_options] || {} end
Source
# File lib/datagrid/filters/base_filter.rb, line 96 def multiple? options[:multiple] end
Source
# File lib/datagrid/filters/base_filter.rb, line 22 def parse(value) raise NotImplementedError, "#parse(value) suppose to be overwritten" end
Source
# File lib/datagrid/filters/base_filter.rb, line 52 def parse_values(value) if multiple? return nil if value.nil? return normalize_multiple_value(value).map do |v| parse(v) end end case value when Array raise Datagrid::ArgumentError, "#{grid_class}##{name} filter can not accept Array argument. Use :multiple option." when Range raise Datagrid::ArgumentError, "#{grid_class}##{name} filter can not accept Range argument. Use :range option." else parse(value) end end
Source
# File lib/datagrid/filters/base_filter.rb, line 73 def separator options[:multiple].is_a?(String) ? options[:multiple] : default_separator end
Source
# File lib/datagrid/filters/base_filter.rb, line 128 def supports_range? self.class.ancestors.include?(::Datagrid::Filters::RangedFilter) end
Source
# File lib/datagrid/filters/base_filter.rb, line 140 def type Datagrid::Filters::FILTER_TYPES.each do |type, klass| return type if is_a?(klass) end raise "wtf is #{inspect}" end
Source
# File lib/datagrid/filters/base_filter.rb, line 30 def unapplicable_value?(value) value.nil? ? !allow_nil? : value.blank? && !allow_blank? end
Protected Instance Methods
Source
# File lib/datagrid/filters/base_filter.rb, line 196 def default_filter(value, scope) return nil if dummy? if !driver.scope_has_column?(scope, name) && scope.respond_to?(name, true) scope.public_send(name, value) else default_filter_where(scope, value) end end
Source
# File lib/datagrid/filters/base_filter.rb, line 161 def default_filter_where(scope, value) driver.where(scope, name, value) end
Source
# File lib/datagrid/filters/base_filter.rb, line 188 def default_separator "," end
Source
# File lib/datagrid/filters/base_filter.rb, line 192 def driver grid_class.driver end
Source
# File lib/datagrid/filters/base_filter.rb, line 165 def execute(value, scope, grid_object) if block&.arity == 1 scope.instance_exec(value, &block) elsif block Datagrid::Utils.apply_args(value, scope, grid_object, &block) else default_filter(value, scope) end end
Source
# File lib/datagrid/filters/base_filter.rb, line 175 def normalize_multiple_value(value) case value when String value.split(separator) when Range [value.begin, value.end] when Array value else Array.wrap(value) end end