lib/sn_foil/searcher.rb in snfoil-0.7.0 vs lib/sn_foil/searcher.rb in snfoil-0.8.0
- old
+ new
@@ -5,11 +5,11 @@
module SnFoil
module Searcher
extend ActiveSupport::Concern
class_methods do
- attr_reader :i_model, :i_setup, :i_filters, :i_search_step
+ attr_reader :i_model, :i_setup, :i_filters, :i_search_step, :i_booleans
def model(klass = nil)
@i_model = klass
end
@@ -25,10 +25,15 @@
block: block,
if: options[:if],
unless: options[:unless]
}
end
+
+ def booleans(*fields)
+ @i_booleans ||= []
+ @i_booleans |= fields.map(&:to_sym)
+ end
end
def model
self.class.i_model
end
@@ -53,10 +58,14 @@
def filters
self.class.i_filters || []
end
+ def booleans
+ self.class.i_booleans || []
+ end
+
private
def apply_setup(filtered_scope, params)
return filtered_scope if setup.nil?
@@ -88,17 +97,26 @@
true
end
def transform_params_booleans(params)
params.map do |key, value|
- value = if value == 'true'
- true
- elsif value == 'false'
- false
+ value = if booleans.include?(key.to_sym)
+ value_to_boolean(value)
else
value
end
[key, value]
end.to_h
+ end
+
+ def value_to_boolean(value)
+ string_val = value.to_s
+ if value == true || %w[true 1].include?(string_val)
+ true
+ elsif value == false || %w[false 0].include?(string_val)
+ false
+ else
+ value
+ end
end
end
end