def save(include_defaults = false)
      result = configuration.dup
      if include_defaults
        (configurables.keys - result.keys).each do |missing_default|
          # Ask any configurables to save themselves into the result array
          if configurables[missing_default].has_default
            result[missing_default] = configurables[missing_default].default
          end
        end
      end
      config_contexts.each_pair do |key, context|
        context_result = context.save(include_defaults)
        result[key] = context_result if context_result.size != 0 || include_defaults
      end
      config_context_lists.each_pair do |key, meta|
        meta[:values].each do |context|
          context_result = context.save(include_defaults)
          result[key] = (result[key] || []) << context_result if context_result.size != 0 || include_defaults
        end
      end
      config_context_hashes.each_pair do |key, meta|
        meta[:values].each_pair do |context_key, context|
          context_result = context.save(include_defaults)
          (result[key] ||= {})[context_key] = context_result if context_result.size != 0 || include_defaults
        end
      end
      result
    end
def save(include_defaults = false)
      result = configuration.dup
      if include_defaults
        (configurables.keys - result.keys).each do |missing_default|
          # Ask any configurables to save themselves into the result array
          if configurables[missing_default].has_default
            result[missing_default] = configurables[missing_default].default
          end
        end
      end
      config_contexts.each_pair do |key, context|
        context_result = context.save(include_defaults)
        result[key] = context_result if context_result.size != 0 || include_defaults
      end
      config_context_lists.each_pair do |key, meta|
        meta[:values].each do |context|
          context_result = context.save(include_defaults)
          result[key] = (result[key] || []) << context_result if context_result.size != 0 || include_defaults
        end
      end
      config_context_hashes.each_pair do |key, meta|
        meta[:values].each_pair do |context_key, context|
          context_result = context.save(include_defaults)
          (result[key] ||= {})[context_key] = context_result if context_result.size != 0 || include_defaults
        end
      end
      result
    end
Makes a copy of any non-default values.

 This returns a shallow copy of the hash; while the hash itself is
 duplicated a la dup, modifying data inside arrays and hashes may modify
 the original Config object.

 === Returns

 Hash of values the user has set.

 === Examples

 For example, this config class:

     class MyConfig < Mixlib::Config
       default :will_be_set, 1
       default :will_be_set_to_default, 1
       default :will_not_be_set, 1
       configurable(:computed_value) { |x| x*2 }
       config_context :group do
         default :will_not_be_set, 1
       end
       config_context :group_never_set
     end

     MyConfig.x = 2
     MyConfig.will_be_set = 2
     MyConfig.will_be_set_to_default = 1
     MyConfig.computed_value = 2
     MyConfig.group.x = 3

 produces this:

     MyConfig.save == {
       :x => 2,
       :will_be_set => 2,
       :will_be_set_to_default => 1,
       :computed_value => 4,
       :group => {
         :x => 3
       }
     }