41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
# File 'lib/action_blocks/data_engine/filter_adapter.rb', line 41
def evaluate(expression)
return @arel_attributes[expression] if expression.class == Symbol
if expression.class == Proc
proc_args = {}
if expression.parameters.include?([:keyreq, :user])
proc_args[:user] = @user
end
return expression.call(**proc_args)
end
if expression.class == Array
fn, *args = expression
case fn
when :user
return @user.send(args[0])
when :eq
left, right = args
return evaluate(left).eq(evaluate(right))
when :not_eq
left, right = args
return evaluate(left).not_eq(evaluate(right))
when :and
return args.map {|x| evaluate(x)}.reduce(&:and)
when :or
return args.map {|x| evaluate(x)}.reduce(&:or)
else
raise "RLS function #{fn.inspect} not recognized"
end
end
return expression
end
|