executeRule method

Future<RulesResult> executeRule(
  1. Map<String, dynamic> ruleDefinition, [
  2. Map<String, dynamic>? context
])

Execute a specific rule definition with optional explicit context

Implementation

Future<RulesResult> executeRule(
  Map<String, dynamic> ruleDefinition, [
  Map<String, dynamic>? context,
]) async {
  if (!_engine.isActive) {
    return const RulesResult.empty();
  }

  try {
    // Use provided context, or rule's embedded context, or fall back to app context
    final actualContext =
        context ?? ruleDefinition['context'] ?? _appContext.toMap();

    // Merge rule into context for engine execution
    final fullContext = <String, dynamic>{
      ...actualContext,
      'ruleDefinition': ruleDefinition,
    };

    return await _engine.executeRules(fullContext);
  } catch (e, stackTrace) {
    ObslyLogger.error('Error executing rule', e);
    ObslyLogger.error('Stack trace: $stackTrace');
    return RulesResult.error('$e\nStack trace: $stackTrace');
  }
}