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