Method: HashConditions::Matcher.critical_times

Defined in:
lib/hash_conditions/matcher.rb

.critical_times(hash, expressions, options = {}) ⇒ Object



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
          # TODO: test this functionality
          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