lib/philtre/predicates.rb in philtre-0.1.0 vs lib/philtre/predicates.rb in philtre-0.1.1

- old
+ new

@@ -58,16 +58,19 @@ # The main interface from Filter#to_expr alias [] call def predicate_names - DefaultPredicates.instance_methods + # ruby-2.3 no longer stores methods in order of definition. So sort by + # longest so that we don't get false positives from shorter predicates + # that are substrings of longer predicates, eg blank matching + # thing_not_blank. + DefaultPredicates.instance_methods.sort_by{|name| -name.length} end # Define the set of default predicates. DefaultPredicates = PredicateDsl.new do - # longer suffixes first, so they match first in define_name_predicate not_eq {|expr, val| ~Sequel.expr( expr => val) } def not_like( expr, val ) Sequel.~(like expr, val) end @@ -76,17 +79,19 @@ def not_blank(expr, val) Sequel.~(blank expr, val) end + null {|expr,_| Sequel.expr(expr => nil)} + not_null {|expr,_| Sequel.~(Sequel.expr(expr => nil))} + def blank(expr, _) is_nil = Sequel.expr(expr => nil) is_empty = Sequel.expr(expr => '') Sequel.| is_nil, is_empty end - # and now the shorter suffixes eq {|expr, val| Sequel.expr( expr => val) } gt {|expr, val| expr > val } gte( :gteq ) {|expr, val| expr >= val } lt {|expr, val| expr < val } lte( :lteq ) {|expr, val| expr <= val } @@ -101,9 +106,9 @@ exprs = Array(arg).map {|value| like expr, value } Sequel.| *exprs end end - # make the available to Predicates instances. + # make them available to Predicate instances. include DefaultPredicates end end