private static JObject VisitValueExpression()

in src/PSRule.Rules.Azure/Data/Policy/PolicyAssignmentVisitor.cs [1257:1310]


        private static JObject VisitValueExpression(PolicyAssignmentContext context, JObject condition, string s)
        {
            var tokens = ExpressionParser.Parse(s);

            // Handle [requestContext().apiVersion]
            if (tokens.ConsumeFunction(PROPERTY_REQUESTCONTEXT) &&
                tokens.ConsumeGroup() &&
                tokens.ConsumePropertyName(PROPERTY_APIVERSION))
            {
                condition.RemoveProperty(PROPERTY_VALUE);
                condition.Add(PROPERTY_FIELD, PROPERTY_APIVERSION);
                if (condition.TryGetProperty(PROPERTY_LESS, out var value))
                {
                    condition.RemoveProperty(PROPERTY_LESS);
                    condition.Add(PROPERTY_APIVERSION, string.Concat(LESS_OPERATOR, value));
                }
                else if (condition.TryGetProperty(PROPERTY_LESSOREQUALS, out value))
                {
                    condition.RemoveProperty(PROPERTY_LESSOREQUALS);
                    condition.Add(PROPERTY_APIVERSION, string.Concat(LESSOREQUAL_OPERATOR, value));

                }
                else if (condition.TryGetProperty(PROPERTY_GREATER, out value))
                {
                    condition.RemoveProperty(PROPERTY_GREATER);
                    condition.Add(PROPERTY_APIVERSION, string.Concat(GREATER_OPERATOR, value));
                }
                else if (condition.TryGetProperty(PROPERTY_GREATEROREQUALS, out value))
                {
                    condition.RemoveProperty(PROPERTY_GREATEROREQUALS);
                    condition.Add(PROPERTY_APIVERSION, string.Concat(GREATEROREQUAL_OPERATOR, value));
                }
                else if (condition.TryGetProperty(PROPERTY_EQUALS, out value))
                {
                    condition.RemoveProperty(PROPERTY_EQUALS);
                    condition.Add(PROPERTY_APIVERSION, value);
                }
            }

            // Handle [field('string')]
            else if (tokens.HasFieldTokens() && !tokens.HasPolicyRuntimeTokens())
            {
                condition = VisitFieldTokens(context, condition, tokens);
            }

            // Handle runtime token
            else if (tokens.HasPolicyRuntimeTokens())
            {
                var value = VisitRuntimeTokens(context, tokens);
                if (value != null)
                    condition.ReplaceProperty(PROPERTY_VALUE, value);
            }
            return condition;
        }