evaluateCondition = (condition) => {
      if (condition.isConditionReference()) {
        return realize(condition)
      } else if (condition.isBooleanOperator()) {
        const subConditions = condition[condition.operator]
        let comparisonPromise
        if (condition.operator === 'all') {
          comparisonPromise = all(subConditions)
        } else if (condition.operator === 'any') {
          comparisonPromise = any(subConditions)
        } else {
          comparisonPromise = not(subConditions)
        }
        // for booleans, rule passing is determined by the all/any/not result
        return comparisonPromise.then((comparisonValue) => {
          const passes = comparisonValue === true
          condition.result = passes
          return passes
        })
      } else {
        return condition
          .evaluate(almanac, this.engine.operators)
          .then((evaluationResult) => {
            const passes = evaluationResult.result
            condition.factResult = evaluationResult.leftHandSideValue
            condition.valueResult = evaluationResult.rightHandSideValue
            condition.result = passes
            return passes
          })
      }
    }
Evaluates the rule conditions
@param  {Condition} condition - condition to evaluate
@return {Promise(true|false)} - resolves with the result of the condition evaluation