Sha256: ec9540d592ce44a5a7f94ded8b4d669f94ea71a8720124f1009eabc6e9a2230c
Contents?: true
Size: 1.26 KB
Versions: 2
Compression:
Stored size: 1.26 KB
Contents
require 'active_record' module Filterism extend ActiveSupport::Concern module ClassMethods def filterable_fields(*fields) @filterable_fields = fields.to_s end def unfilterable_fields(*fields) @unfilterable_fields = fields.to_s end def filter(conditions) where_clause = "" values = [] where_mark = '?' conditions.each do |condition| unless (@filterable_fields and not @filterable_fields.include?(condition[:key])) or (@unfilterable_fields and @unfilterable_fields.include?(condition[:key])) if condition[:comparator] == 'LIKE' values << "%#{condition[:value]}%" elsif condition[:comparator] == 'IN' where_mark = '(?)' values << condition[:value].split(',') else values << convert_if_string_is_boolean(condition[:value]) end where_clause << " AND" unless where_clause.empty? where_clause << " #{condition[:key]} #{condition[:comparator]} #{where_mark}" end end where(where_clause, *values) end private def convert_if_string_is_boolean(value) if value == "true" || value == "false" value = (value == "true" ? "t" : "f") end return value end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
filterism-2.0.1 | lib/filterism/adapters/active_record_adapter.rb |
filterism-2.0.0 | lib/filterism/adapters/active_record_adapter.rb |