class Yaqb::QueryBuilders::Filter
Constants
- PREDICATES
Public Class Methods
new(scope, params, presenter)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 8 def initialize(scope, params, presenter) @scope = scope @filters = params['q'] || {} @presenter = presenter end
Public Instance Methods
filter()
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 14 def filter return @scope unless @filters.any? @filters = format_filters validate_filters build_filter_scope @scope end
Private Instance Methods
build_filter_scope()
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 36 def build_filter_scope @filters.each do |_key, data| @scope = send(data[:predicate], data[:column], data[:value]) end end
cont(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 46 def cont(column, value) @scope.where("#{column} LIKE ?", "%#{value}%") end
end(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 58 def end(column, value) @scope.where("#{column} LIKE ?", "%#{value}") end
eq(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 42 def eq(column, value) @scope.where(column => value) end
error!(key, data)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 79 def error!(key, data) columns = @presenter.filter_attributes.join(', ') pred = PREDICATES.join(', ') raise Errors::QueryBuilderError.new("q[#{key}]=#{data[:value]}"), "Invalid Filter params. Allowed columns: (#{columns}), 'predicates': #{pred}" end
format_filters()
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 26 def format_filters @filters.each_with_object({}) do |(key, value), hash| hash[key] = { value: value, column: key.split('_')[0...-1].join('_'), predicate: key.split('_').last } end end
gt(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 62 def gt(column, value) @scope.where("#{column} > ?", value) end
lt(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 66 def lt(column, value) @scope.where("#{column} < ?", value) end
notcont(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 50 def notcont(column, value) @scope.where("#{column} NOT LIKE ?", "%#{value}%") end
start(column, value)
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 54 def start(column, value) @scope.where("#{column} LIKE ?", "#{value}%") end
validate_filters()
click to toggle source
# File lib/yaqb/query_builders/filter.rb, line 70 def validate_filters attributes = @presenter.filter_attributes @filters.each do |key, data| error!(key, data) unless attributes.include?(data[:column]) error!(key, data) unless PREDICATES.include?(data[:predicate]) end end