class Rokaki::FilterModel::BasicFilter
Attributes
db[R]
filter_method[RW]
filter_query[R]
filter_template[RW]
i_like_semantics[R]
infix[R]
keys[R]
like_semantics[R]
prefix[R]
Public Class Methods
new(keys:, prefix:, infix:, like_semantics:, i_like_semantics:, db:)
click to toggle source
# File lib/rokaki/filter_model/basic_filter.rb, line 6 def initialize(keys:, prefix:, infix:, like_semantics:, i_like_semantics:, db:) @keys = keys @prefix = prefix @infix = infix @like_semantics = like_semantics @i_like_semantics = i_like_semantics @db = db @filter_query = nil end
Public Instance Methods
_chain_filter_type(key)
click to toggle source
# File lib/rokaki/filter_model/basic_filter.rb, line 36 def _chain_filter_type(key) filter = "#{prefix}#{key}" query = '' if like_semantics && mode = like_semantics[key] query = build_like_query( type: 'LIKE', query: query, filter: filter, mode: mode, key: key ) elsif i_like_semantics && mode = i_like_semantics[key] query = build_like_query( type: 'ILIKE', query: query, filter: filter, mode: mode, key: key ) else query = "@model.where(#{key}: #{filter})" end @filter_query = query end
build_like_query(type:, query:, filter:, mode:, key:)
click to toggle source
# File lib/rokaki/filter_model/basic_filter.rb, line 63 def build_like_query(type:, query:, filter:, mode:, key:) if db == :postgres query = "@model.where(\"#{key} #{type} ANY (ARRAY[?])\", " query += "prepare_terms(#{filter}, :#{mode}))" else query = "@model.where(\"#{key} #{type} :query\", " query += "query: \"%\#{#{filter}}%\")" if mode == :circumfix query += "query: \"%\#{#{filter}}\")" if mode == :prefix query += "query: \"\#{#{filter}}%\")" if mode == :suffix end query end
call()
click to toggle source
# File lib/rokaki/filter_model/basic_filter.rb, line 18 def call first_key = keys.shift filter = "#{prefix}#{first_key}" name = first_key keys.each do |key| filter += "#{infix}#{key}" name += "#{infix}#{key}" end @filter_method = "def #{prefix}filter_#{name};" \ "#{_chain_filter_type(name)} end;" # class_eval filter_method, __FILE__, __LINE__ - 2 @filter_template = "@model = #{prefix}filter_#{name} if #{filter};" end