module Rokaki::FilterModel::ClassMethods
Private Instance Methods
_build_basic_filter(key)
click to toggle source
# File lib/rokaki/filter_model.rb, line 91 def _build_basic_filter(key) basic_filter = BasicFilter.new( keys: [key], prefix: filter_key_prefix, infix: filter_key_infix, like_semantics: @_like_semantics, i_like_semantics: @i_like_semantics, db: @_filter_db ) basic_filter.call basic_filter end
_build_nested_filter(filters_object)
click to toggle source
# File lib/rokaki/filter_model.rb, line 111 def _build_nested_filter(filters_object) nested_filter = NestedFilter.new( filter_key_object: filters_object, prefix: filter_key_prefix, infix: filter_key_infix, like_semantics: @_like_semantics, i_like_semantics: @i_like_semantics, db: @_filter_db ) nested_filter.call nested_filter end
_chain_filter(key)
click to toggle source
# File lib/rokaki/filter_model.rb, line 104 def _chain_filter(key) basic_filter = _build_basic_filter(key) class_eval basic_filter.filter_method, __FILE__, __LINE__ - 2 @_chain_filters << basic_filter.filter_template end
_chain_nested_filter(filters_object)
click to toggle source
# File lib/rokaki/filter_model.rb, line 134 def _chain_nested_filter(filters_object) nested_filter = _build_nested_filter(filters_object) nested_filter.filter_methods.each do |filter_method| class_eval filter_method, __FILE__, __LINE__ - 2 end nested_filter.filter_templates.each do |filter_template| @_chain_filters << filter_template end end
_chain_nested_like_filter(filters_object)
click to toggle source
# File lib/rokaki/filter_model.rb, line 124 def _chain_nested_like_filter(filters_object) filters_object.filter_methods.each do |filter_method| class_eval filter_method, __FILE__, __LINE__ - 2 end filters_object.templates.each do |filter_template| @_chain_filters << filter_template end end
define_results()
click to toggle source
the model method is called to instatiate @model from the filter_model
method
# File lib/rokaki/filter_model.rb, line 170 def define_results results_def = 'def results; @model || set_model;' @_chain_filters.each do |item| results_def += item end results_def += '@model;end;' class_eval results_def, __FILE__, __LINE__ end
filter(model, options)
click to toggle source
# File lib/rokaki/filter_model.rb, line 39 def filter(model, options) filter_model(model) @filter_map_query_key = nil @_filter_db = options[:db] || :postgres @_filter_mode = options[:mode] || :and like(options[:like]) if options[:like] ilike(options[:ilike]) if options[:ilike] filters(*options[:match]) if options[:match] end
filter_map(model, query_key, options)
click to toggle source
# File lib/rokaki/filter_model.rb, line 28 def filter_map(model, query_key, options) filter_model(model) @filter_map_query_key = query_key @_filter_db = options[:db] || :postgres @_filter_mode = options[:mode] || :and like(options[:like]) if options[:like] ilike(options[:ilike]) if options[:ilike] filters(*options[:match]) if options[:match] end
filter_model(model_class)
click to toggle source
# File lib/rokaki/filter_model.rb, line 146 def filter_model(model_class) @model = (model_class.is_a?(Class) ? model_class : Object.const_get(model_class.capitalize)) class_eval "def set_model; @model ||= #{@model}; end;" end
filters(*filter_keys)
click to toggle source
# File lib/rokaki/filter_model.rb, line 50 def filters(*filter_keys) if @filter_map_query_key define_filter_map(@filter_map_query_key, *filter_keys) else define_filter_keys(*filter_keys) end @_chain_filters ||= [] filter_keys.each do |filter_key| # TODO: does the key need casting to an array here? _chain_filter(filter_key) unless filter_key.is_a? Hash _chain_nested_filter(filter_key) if filter_key.is_a? Hash end define_results # writes out all the generated filters end
ilike(args)
click to toggle source
# File lib/rokaki/filter_model.rb, line 159 def ilike(args) raise ArgumentError, 'argument mush be a hash' unless args.is_a? Hash @i_like_semantics = (@i_like_semantics || {}).merge(args) like_keys = LikeKeys.new(args) like_filters(like_keys, term_type: :ilike) end
like(args)
click to toggle source
# File lib/rokaki/filter_model.rb, line 151 def like(args) raise ArgumentError, 'argument mush be a hash' unless args.is_a? Hash @_like_semantics = (@_like_semantics || {}).merge(args) like_keys = LikeKeys.new(args) like_filters(like_keys, term_type: :like) end
like_filters(like_keys, term_type: :like)
click to toggle source
# File lib/rokaki/filter_model.rb, line 67 def like_filters(like_keys, term_type: :like) if @filter_map_query_key define_filter_map(@filter_map_query_key, *like_keys.call) else define_filter_keys(*like_keys.call) end @_chain_filters ||= [] filter_map = [] nested_like_filter = NestedLikeFilters.new( filter_key_object: like_keys, prefix: filter_key_prefix, infix: filter_key_infix, db: @_filter_db, type: term_type, or_key: or_key ) nested_like_filter.call _chain_nested_like_filter(nested_like_filter) define_results # writes out all the generated filters end