Exemple #1
0
 private void CompileScript(ScriptEvaluator scriptEval)
 {
     if (scriptEval.Evaluators == null)
     {
         lock (scriptEval)
         {
             if (scriptEval.Evaluators == null)
             {
                 ExpressionEvaluator[] evaluators = CreateExpressionEvaluators(scriptEval.Script);
                 scriptEval.SetExpressionEvaluators(evaluators);
             }
         }
     }
 }
Exemple #2
0
 private object GetPreEvalDetails(object entity, ScriptEvaluator evaluator)
 {
     if (_logger.IsEnabled(LogLevel.Trace))
     {
         return(new
         {
             PreEvalValues = entity,
             Script = evaluator.Script.Expressions
                      .OrderBy(e => e.Sequence)
                      .Select(e => new { e.AttributeName, e.Expression })
         });
     }
     return(new { });
 }
Exemple #3
0
        private async Task ExecuteScript(object entity, ScriptEvaluator evaluator)
        {
            var preEvalDetails = GetPreEvalDetails(entity, evaluator);

            using (var durationLogger = _logger.LogTraceDuration(ScriptingLogEvents.SCRIPT_EVALUATION, "Script Evaluation"))
            {
                durationLogger.Log.LogTraceDetails(ScriptingLogEvents.SCRIPT_PRE_EVALUATION,
                                                   "Pre-Evaluation Details", preEvalDetails);

                CompileScript(evaluator);
                SetDefaultAttributeValues(evaluator.Script, entity);
                await evaluator.ExecuteAsync(entity);

                durationLogger.Log.LogTraceDetails(ScriptingLogEvents.SCRIPT_POST_EVALUATION,
                                                   "Post-Evaluation Details", new { PostEvalValues = entity });
            }
        }
Exemple #4
0
        public async Task ExecuteAsync(object entity, string scriptName = "default")
        {
            Check.NotNull(entity, nameof(entity));
            Check.NotNull(scriptName, nameof(scriptName));

            Type entityType = entity.GetType();

            IEnumerable <ScriptEvaluator> scripts = _scriptEvaluators[entityType];

            if (!scripts.Any())
            {
                return;
            }

            // Execute the default script if specified.
            var defaultEvalScript = scripts.FirstOrDefault(se => se.IsDefault);

            if (defaultEvalScript != null)
            {
                await ExecuteScript(entity, defaultEvalScript);
            }

            // Execute script with a specified name.
            if (scriptName != ScriptEvaluator.DEFAULT_SCRIPT_NAME)
            {
                ScriptEvaluator namedEvalScript = scripts.FirstOrDefault(se => se.Script.Name == scriptName);
                if (namedEvalScript == null)
                {
                    throw new InvalidOperationException(
                              $"A script named: {scriptName} for the entity type of: {entityType} could not be found.  " +
                              $"Script names are case-sensitive.");
                }

                await ExecuteScript(entity, namedEvalScript);
            }
        }