97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
# File 'lib/hash_conditions/matcher.rb', line 97
def self.critical_times hash, expressions, options = {}
current_time = options[:current_time] ||= Time.now
expressions.
map do | e |
inverter = operand_uses_now?(e[:value])? -1: 1
case e[:operator]
when :<, :<=, :>, :>= then
diff = inverter * get_diff( eval_operand( hash, e[:value], options ),
eval_operand( hash, e[:key], options.merge(is_key: true) )) + 0.001
when :==, :!= then
diff = inverter * get_diff( eval_operand( hash, e[:value], options ),
eval_operand(hash, e[:key], options.merge(is_key: true) ) )
when :between
diff = inverter * get_diff( eval_operand( hash, e[:value][0], options ),
eval_operand(hash, e[:key], options.merge(is_key: true) ) )
diff = inverter * get_diff( eval_operand( hash, e[:value][1], options ),
eval_operand(hash, e[:key], options.merge(is_key: true) ) ) if current_time + diff < current_time
end
current_time + diff
end
end
|