/// <summary>
        ///		Adds the EnvironmentVariables to the key generation
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="key"></param>
        /// <returns></returns>
        public static IMorestachioConfigurationBuilder UseEnvironmentVariableValues(
            this IMorestachioConfigurationBuilder builder, string key)
        {
            var values = Environment.GetEnvironmentVariables()
                         .OfType <DictionaryEntry>()
                         .ToDictionary(e => e.Key.ToString(), e => e.Value);

            return(builder.UseValues(key, values));
        }
        /// <summary>
        ///		Adds a set of values to the morestachio config.
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="key">Can be ether null for all or a key</param>
        /// <param name="values">To set of key-values that should be passed to the config expression</param>
        /// <returns></returns>
        public static IMorestachioConfigurationBuilder UseValues(this IMorestachioConfigurationBuilder builder, string key, IDictionary <string, object> values)
        {
            key = key ?? string.Empty;

            if (!builder.Options.Values.TryGetValue(key, out var vals))
            {
                vals = new Dictionary <string, object>();
                builder.Options.Values.Add(key, vals);
            }

            foreach (var value in values)
            {
                vals[value.Key] = value.Value;
            }

            return(builder);
        }
 /// <summary>
 ///		Sets a function to evaluate if a key or value needs to be processed by morestachio
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="discovery"></param>
 /// <returns></returns>
 public static IMorestachioConfigurationBuilder UseDiscovery(this IMorestachioConfigurationBuilder builder, Func <KeyValuePair <string, string>, bool> discovery)
 {
     builder.Options.TransformCondition = discovery;
     return(builder);
 }
 /// <summary>
 ///		Sets a function to get a new <see cref="ParserOptions"/>
 /// </summary>
 /// <param name="builder"></param>
 /// <param name="options"></param>
 /// <returns></returns>
 public static IMorestachioConfigurationBuilder UseOptions(this IMorestachioConfigurationBuilder builder, Func <ParserOptions> options)
 {
     builder.Options.ParserOptions = options;
     return(builder);
 }