class AdminIt::Filter
Constants
- ARGUMENT_REGEXP
- BIN_REGEXP
- DATE
- DATETIME_REGEXP
- DATE_REGEXP
- FALSE_VALUES
- FLOAT_REGEXP
- HEX_REGEXP
- INT_REGEXP
- NULL_VALUES
- OCT_REGEXP
- REGEXP
- TIME
- TIME_REGEXP
- TRUE_VALUES
Attributes
filter_name[R]
resource[R]
Public Class Methods
apply(str, filters, filter_classes)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 78 def self.apply(str, filters, filter_classes) list = str.scan(Filter::REGEXP) filters.clear if list.all? { |_, act, _, _| act.nil? || act.empty? } list.each do |full, action, name, params| name = name.to_sym if action == '-' filters.delete(name) elsif action == '!' filters[name].load(params) if filters.key?(name) else filters[name] = Filter.load(full, filter_classes) end end end
create(name, _resource)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 63 def self.create(name, _resource) create_class(name, _resource) end
load(str, filter_classes)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 67 def self.load(str, filter_classes) m = REGEXP.match(str) return nil if m.nil? || m[:action] == '-' name = m[:name].to_sym filter_class = filter_classes.find { |f| f.filter_name == name } return nil if filter_class.nil? filter = filter_class.new filter.load(m[:params]) filter end
new()
click to toggle source
# File lib/admin_it/filters/filter.rb, line 95 def initialize run_callbacks :initialize end
Protected Class Methods
create_class(name, _resource)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 48 def create_class(name, _resource) name = name.ensure_symbol! base = self Class.new(base) do @filter_name, @resource = name, _resource @entity_class = @resource.entity_class import_data_module(base) end end
default_display_name()
click to toggle source
# File lib/admin_it/filters/filter.rb, line 58 def default_display_name filter_name end
Public Instance Methods
apply(collection)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 126 def apply(collection) collection end
dump()
click to toggle source
# File lib/admin_it/filters/filter.rb, line 103 def dump args = [] opts = {} result = '' run_callbacks :save, arguments: { arguments: args, options: opts } do result = "#{name}" unless args.empty? && opts.empty? args.concat(opts.map { |k, v| "#{k}:#{v}" }) result << "(#{args.join(',')})" end end result end
load(str)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 117 def load(str) return if str.nil? args = parse_arguments(str) unless args.empty? opts = args.extract_options! run_callbacks :load, arguments: { arguments: args, options: opts } end end
name()
click to toggle source
# File lib/admin_it/filters/filter.rb, line 99 def name @name ||= self.class.filter_name end
Protected Instance Methods
create_argument(arg)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 201 def create_argument(arg) case arg when String then "\"#{arg.gsub('"', '\\"')}\"" else arg.to_s end end
param_action(str)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 150 def param_action(str) case str when '+' then :add when '-' then :remove else nil end end
parse_argument(arg)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 178 def parse_argument(arg) return arg unless arg.is_a?(String) arg.strip! sym = arg.downcase.to_sym return nil if NULL_VALUES.include?(sym) return true if TRUE_VALUES.include?(sym) return false if FALSE_VALUES.include?(sym) if (arg[0] == '\'' || arg[0] == '"') && arg[0] == arg[-1] return arg[1..-2] end case arg when OCT_REGEXP then arg.to_i(8) when BIN_REGEXP then arg.to_i(2) when HEX_REGEXP then arg.to_i(16) when INT_REGEXP then arg.to_i(10) when FLOAT_REGEXP then arg.to_f when DATE_REGEXP then Date.parse(arg) when TIME_REGEXP then Time.parse(arg) when DATETIME_REGEXP then DateTime.parse(arg) else JSON.parse(arg) end end
parse_arguments(str)
click to toggle source
# File lib/admin_it/filters/filter.rb, line 158 def parse_arguments(str) opts = {} args = [] parent = self.class.parents.find do |p| p.const_defined?(:ARGUMENT_REGEXP) end unless parent.nil? str.scan(parent.const_get(:ARGUMENT_REGEXP)) do |a, o, v| if o.nil? || o.empty? action = param_action(a) action.nil? ? args << v : (opts[action] ||= []) << v else opts[o.to_sym] = v end end end args << opts unless opts.empty? args end