class TheGrid::Api::Command::Filter
Public Instance Methods
configure(relation, params)
click to toggle source
# File lib/the_grid/api/command/filter.rb, line 3 def configure(relation, params) params.fetch(:filters, {}).dup end
run_on(relation, filters)
click to toggle source
# File lib/the_grid/api/command/filter.rb, line 7 def run_on(relation, filters) conditions = build_conditions_for(relation, filters) relation = relation.where(conditions) unless conditions.blank? relation end
Private Instance Methods
build_conditions_for(relation, filters)
click to toggle source
# File lib/the_grid/api/command/filter.rb, line 15 def build_conditions_for(relation, filters) conditions = filters.map do |name, filter| column = column_for(relation, name) if filter.kind_of?(Array) column.in(filter) elsif filter.kind_of?(Hash) expr = [] expr << column.gteq(prepare_value filter, :from) if filter.has_key?(:from) expr << column.lteq(prepare_value filter, :to) if filter.has_key?(:to) expr.inject(:and) else column.eq(filter) end end conditions.compact.inject(:and) end
prepare_value(filter, name)
click to toggle source
# File lib/the_grid/api/command/filter.rb, line 33 def prepare_value(filter, name) case filter[:type].to_s when 'time' Time.at(Float filter[name]) when 'date' filter[name].to_time else filter[name] end end