Example #1
0
        private void ExpandValues(IEnumerable values, VarSpec varSpec, char separator)
        {
            var isNamedAndExploded = varSpec.IsExploded && this.expressionInfo.IsNamed;
            var name = varSpec.Name;

            foreach (var value in values)
            {
                if (isNamedAndExploded)
                {
                    this.builder.AppendEncoded(name, this.expressionInfo.AllowReserved);
                    this.builder.Append('=');
                }

                this.builder.AppendEncoded(this.ValueToString(value), this.expressionInfo.AllowReserved);
                this.builder.Append(separator);
            }
        }
            private bool ProcessVariable(VarSpec varSpec)
            {
                var varname = varSpec.VarName.ToString();
                if (_ParameterNames != null) _ParameterNames.Add(varname);

                if (!_Parameters.ContainsKey(varname)
                        || _Parameters[varname] == null
                        || (_Parameters[varname] is IList && ((IList)_Parameters[varname]).Count == 0)
                        || (_Parameters[varname] is IDictionary && ((IDictionary)_Parameters[varname]).Count == 0)) return false;

                if (varSpec.First)
                {
                    _Result.Append(varSpec.OperatorInfo.First);
                }
                else
                {
                    _Result.Append(varSpec.OperatorInfo.Seperator);
                }

                object value = _Parameters[varname];

                // Handle Strings
                if (value is string)
                {
                    var stringValue = (string)value;
                    if (varSpec.OperatorInfo.Named)
                    {
                        AppendName(varname, varSpec.OperatorInfo, string.IsNullOrEmpty(stringValue));
                    }
                    AppendValue(stringValue, varSpec.PrefixLength, varSpec.OperatorInfo.AllowReserved);
                }
                else
                {
                    // Handle Lists
                    var list = value as IEnumerable<string>;
                    if (list != null)
                    {
                        if (varSpec.OperatorInfo.Named && !varSpec.Explode)  // exploding will prefix with list name
                        {
                            AppendName(varname, varSpec.OperatorInfo, list.Count() == 0);
                        }

                        AppendList(varSpec.OperatorInfo, varSpec.Explode, varname, list);
                    }
                    else
                    {

                        // Handle associative arrays
                        var dictionary = value as IDictionary<string, string>;
                        if (dictionary != null)
                        {
                            if (varSpec.OperatorInfo.Named && !varSpec.Explode)  // exploding will prefix with list name
                            {
                                AppendName(varname, varSpec.OperatorInfo, dictionary.Count() == 0);
                            }
                            AppendDictionary(varSpec.OperatorInfo, varSpec.Explode, dictionary);
                        }
                        else
                        {
                            // If above all fails, convert the object to string using the default object.ToString() implementation
                            var stringValue = value.ToString();
                            if (varSpec.OperatorInfo.Named)
                            {
                                AppendName(varname, varSpec.OperatorInfo, string.IsNullOrEmpty(stringValue));
                            }
                            AppendValue(stringValue, varSpec.PrefixLength, varSpec.OperatorInfo.AllowReserved);
                        }

                    }

                }
                return true;
            }
            private void ProcessExpression(StringBuilder currentExpression)
            {
                if (currentExpression.Length == 0)
                {
                    _ErrorDetected = true;
                    _Result.Append("{}");
                    return;
                }

                OperatorInfo op = GetOperator(currentExpression[0]);

                var firstChar = op.Default ? 0 : 1;

                var varSpec = new VarSpec(op);
                for (int i = firstChar; i < currentExpression.Length; i++)
                {
                    char currentChar = currentExpression[i];
                    switch (currentChar)
                    {
                        case '*':
                            varSpec.Explode = true;
                            break;
                        case ':':  // Parse Prefix Modifier
                            var prefixText = new StringBuilder();
                            currentChar = currentExpression[++i];
                            while (currentChar >= '0' && currentChar <= '9' && i < currentExpression.Length)
                            {
                                prefixText.Append(currentChar);
                                i++;
                                if (i < currentExpression.Length) currentChar = currentExpression[i];
                            }
                            varSpec.PrefixLength = int.Parse(prefixText.ToString());
                            i--;
                            break;
                        case ',':
                            var success = ProcessVariable(varSpec);
                            bool isFirst = varSpec.First;
                            // Reset for new variable
                            varSpec = new VarSpec(op);
                            if (success || !isFirst) varSpec.First = false;

                            break;

                        default:
                            if (IsVarNameChar(currentChar))
                            {
                                varSpec.VarName.Append(currentChar);
                            }
                            else
                            {
                                _ErrorDetected = true;
                            }
                            break;
                    }
                }
                ProcessVariable(varSpec);
            }
Example #4
0
        private bool ProcessVariable(VarSpec varSpec)
        {
            var varname = varSpec.VarName.ToString();
            if (_parameterNames != null) _parameterNames.Add(varname);

            if (!_parameters.ContainsKey(varname)
                || _parameters[varname] == null
                || (_parameters[varname] is IList && ((IList) _parameters[varname]).Count == 0)
                || (_parameters[varname] is IDictionary && ((IDictionary) _parameters[varname]).Count == 0))
                return false;

            if (varSpec.First)
            {
                _result.Append(varSpec.OperatorInfo.First);
            }
            else
            {
                _result.Append(varSpec.OperatorInfo.Seperator);
            }

            var value = _parameters[varname];

            // Handle Strings
            var s = value as string;
            if (s != null)
            {
                var stringValue = s;
                if (varSpec.OperatorInfo.Named)
                {
                    AppendName(varname, varSpec.OperatorInfo, string.IsNullOrEmpty(stringValue));
                }
                AppendValue(stringValue, varSpec.PrefixLength, varSpec.OperatorInfo.AllowReserved);
            }
            else
            {
                // Handle Lists
                var enumr = value as IEnumerable<string>;
                if (enumr != null)
                {
                    var list = enumr as string[] ?? enumr.ToArray();
                    if (varSpec.OperatorInfo.Named && !varSpec.Explode) // exploding will prefix with list name
                    {
                        AppendName(varname, varSpec.OperatorInfo, !list.Any());
                    }

                    AppendList(varSpec.OperatorInfo, varSpec.Explode, varname, list);
                }
                else
                {

                    // Handle associative arrays
                    var dictionary = value as IDictionary<string, string>;
                    if (dictionary == null) return true;
                    if (varSpec.OperatorInfo.Named && !varSpec.Explode) // exploding will prefix with list name
                    {
                        AppendName(varname, varSpec.OperatorInfo, !dictionary.Any());
                    }
                    AppendDictionary(varSpec.OperatorInfo, varSpec.Explode, dictionary);
                }

            }
            return true;
        }
Example #5
0
        bool ProcessVariable(VarSpec varSpec)
        {
            var varname = varSpec.VarName.ToString();
            if (parameterNames != null) parameterNames.Add(varname);

            if (!parameters.ContainsKey(varname)
                || parameters[varname] == null
                || (parameters[varname] is IList && ((IList)parameters[varname]).Count == 0)
                || (parameters[varname] is IDictionary && ((IDictionary)parameters[varname]).Count == 0))
                return false;

            if (varSpec.First)
            {
                result.Append(varSpec.OperatorInfo.First);
            }
            else
            {
                result.Append(varSpec.OperatorInfo.Seperator);
            }

            var value = parameters[varname];

            // Handle Strings
            if (value is string)
            {
                var stringValue = (string)value;
                if (varSpec.OperatorInfo.Named)
                {
                    AppendName(varname, varSpec.OperatorInfo, string.IsNullOrEmpty(stringValue));
                }
                AppendValue(stringValue, varSpec.PrefixLength, varSpec.OperatorInfo.AllowReserved);
            }
            else
            {
                // Handle Lists
                var list = value as IEnumerable<string>;
                if (list != null)
                {
                    if (varSpec.OperatorInfo.Named && !varSpec.Explode) // exploding will prefix with list name
                    {
                        AppendName(varname, varSpec.OperatorInfo, list.Count() == 0);
                    }

                    AppendList(varSpec.OperatorInfo, varSpec.Explode, varname, list);
                }
                else
                {
                    // Handle associative arrays
                    var dictionary = value as IDictionary<string, string>;
                    if (dictionary != null)
                    {
                        if (varSpec.OperatorInfo.Named && !varSpec.Explode) // exploding will prefix with list name
                        {
                            AppendName(varname, varSpec.OperatorInfo, dictionary.Count() == 0);
                        }
                        AppendDictionary(varSpec.OperatorInfo, varSpec.Explode, dictionary);
                    }
                    else
                    {
                        var stringValue = value == null ? null : value.ToString();
                        if (varSpec.OperatorInfo.Named)
                        {
                            AppendName(varname, varSpec.OperatorInfo, string.IsNullOrEmpty(stringValue));
                        }
                        AppendValue(stringValue, varSpec.PrefixLength, varSpec.OperatorInfo.AllowReserved);
                    }
                }
            }
            return true;
        }
Example #6
0
        private void ExpandValues(IEnumerable <KeyValuePair <string, object> > values, VarSpec varSpec, char separator)
        {
            var isExploded = varSpec.IsExploded;

            var name          = varSpec.Name;
            var pairSeparator = isExploded ? '=' : ',';

            foreach (var pair in values)
            {
                this.builder.AppendEncoded(pair.Key, this.expressionInfo.AllowReserved);
                this.builder.Append(pairSeparator);

                if (!(pair.Value is string) && pair.Value is IEnumerable innerValues)
                {
                    bool hasValue = false;
                    foreach (var innerValue in innerValues)
                    {
                        this.builder.AppendEncoded(this.ValueToString(innerValue), this.expressionInfo.AllowReserved);
                        this.builder.Append(',');
                        hasValue = true;
                    }
                    if (hasValue)
                    {
                        this.builder.RemoveLastChar();
                    }
                }
                else
                {
                    this.builder.AppendEncoded(this.ValueToString(pair.Value), this.expressionInfo.AllowReserved);
                }

                this.builder.Append(separator);
            }
        }
Example #7
0
        private void ExpandValues(IEnumerable <KeyValuePair <string, string> > values, VarSpec varSpec, char separator)
        {
            var isExploded = varSpec.IsExploded;

            var name          = varSpec.Name;
            var pairSeparator = isExploded ? '=' : ',';

            foreach (var pair in values)
            {
                this.builder.AppendEncoded(pair.Key, this.expressionInfo.AllowReserved);
                this.builder.Append(pairSeparator);
                this.builder.AppendEncoded(pair.Value, this.expressionInfo.AllowReserved);
                this.builder.Append(separator);
            }
        }
Example #8
0
        private void Expand(VarSpec varSpec, QueryObject values)
        {
            bool isEmpty = values.Count == 0;

            this.Expand(varSpec, isEmpty, values, this.ExpandValues);
        }
Example #9
0
        private void Expand(VarSpec varSpec, IEnumerable <KeyValuePair <string, object> > values)
        {
            bool isEmpty = !values.Any();

            this.Expand(varSpec, isEmpty, values, this.ExpandValues);
        }
Example #10
0
        private void Expand(VarSpec varSpec, IEnumerable values)
        {
            bool isEmpty = !values.Any();

            this.Expand(varSpec, isEmpty, values, this.ExpandValues);
        }
Example #11
0
 private void Expand(VarSpec varSpec, string value)
 {
     this.ExpandName(varSpec, value == string.Empty);
     this.ExpandStringValue(value, varSpec.MaxLength);
 }