Exemple #1
0
        /// <summary>
        /// Evaluates a join intrinsic.
        /// </summary>
        /// <param name="joinIntrinsic">The join intrinsic.</param>
        /// <returns>Evaluation of the join.</returns>
        private static object EvaluateJoin(JoinIntrinsic joinIntrinsic)
        {
            var elements = new List <string>();

            foreach (var item in joinIntrinsic.Items)
            {
                if (item is IIntrinsic intrinsic)
                {
                    var nested     = intrinsic.GetInfo();
                    var evaluation = nested.Intrinsic.Evaluate(nested);

                    if (evaluation.IsScalar())
                    {
                        elements.Add(evaluation.ToString());
                    }
                    else
                    {
                        elements.AddRange(from object listItem in evaluation as IEnumerable select listItem.ToString());
                    }
                }
                else
                {
                    elements.Add(item.ToString());
                }
            }

            return(string.Join(joinIntrinsic.Separator, elements));
        }
        /// <summary>
        /// Renders the join function arguments as a list that can be passed to the base class constructor.
        /// </summary>
        /// <param name="joinIntrinsic">The join intrinsic.</param>
        /// <param name="template">The template.</param>
        /// <param name="inputs">The inputs.</param>
        /// <returns>List of join arguments, with intrinsic functions rendered.</returns>
        private static IEnumerable <object> FunctionArguments(
            JoinIntrinsic joinIntrinsic,
            ITemplate template,
            IList <InputVariable> inputs)
        {
            // Build up a join() function reference
            var joinArguments = new List <object> {
                joinIntrinsic.Separator
            };
            var joinList = new List <object>();

            foreach (var item in joinIntrinsic.Items)
            {
                switch (item)
                {
                case IIntrinsic nestedIntrinsic:

                    joinList.Add(
                        nestedIntrinsic.Render(template, nestedIntrinsic.GetInfo().TargetResource, inputs).ToJConstructor());
                    break;

                default:

                    // join() is a string function - all args are therefore string
                    joinList.Add(item.ToString());
                    break;
                }
            }

            joinArguments.Add(joinList);

            return(joinArguments);
        }
Exemple #3
0
 /// <summary>
 /// Renders the specified join intrinsic.
 /// </summary>
 /// <param name="joinIntrinsic">The join intrinsic.</param>
 /// <param name="template">The template.</param>
 /// <param name="resource">The resource.</param>
 /// <param name="inputs">The list of input variables and data sources.</param>
 /// <returns>A <see cref="FunctionReference"/> to an HCL join() expression.</returns>
 private static Reference Render(
     JoinIntrinsic joinIntrinsic,
     ITemplate template,
     ResourceMapping resource,
     IList <InputVariable> inputs)
 {
     return(new JoinFunctionReference(joinIntrinsic, template, inputs));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="JoinFunctionReference"/> class.
 /// </summary>
 /// <param name="joinIntrinsic">The join intrinsic.</param>
 /// <param name="template">The template.</param>
 /// <param name="inputs">The inputs.</param>
 public JoinFunctionReference(JoinIntrinsic joinIntrinsic, ITemplate template, IList <InputVariable> inputs)
     : this("join", FunctionArguments(joinIntrinsic, template, inputs))
 {
 }