class Tablets::Data::Processing::Filter
Incapsulate relation filtering logic
Public Instance Methods
apply(relation)
click to toggle source
Applies filter processing on relation
# File lib/tablets/data/processing/filter.rb, line 13 def apply(relation) search(relation) end
Private Instance Methods
build_conditions_for(query)
click to toggle source
Builds search conditions
# File lib/tablets/data/processing/filter.rb, line 29 def build_conditions_for(query) query.split(' ').map do |value| '(' + search_conditions(value) + ')' end.join(' AND ') end
search(relation)
click to toggle source
Applies search conditions if need
# File lib/tablets/data/processing/filter.rb, line 20 def search(relation) return relation unless params[:search].fetch(:value, nil).present? conditions = build_conditions_for(params[:search][:value]) relation = relation.where(conditions) if conditions relation end
search_conditions(value)
click to toggle source
Returs search conditions for each searchable column
# File lib/tablets/data/processing/filter.rb, line 41 def search_conditions(value) searchable_columns.map do |column| Tablets::Utils::SearchConditionBuilder.new(column, value).build end.join(' OR ') end
searchable_columns()
click to toggle source
Returns searchable columns
# File lib/tablets/data/processing/filter.rb, line 36 def searchable_columns columns.map { |column| column[:search] }.flatten.compact.map(&:to_s) end