module AWS::Core::OptionGrammar::ModuleMethods

def customize(config = [])

def customize(config = [])
  m = Class.new(self)
  supported_options = m.supported_options.inject({}) do |memo, opt|
    memo[opt.name] = opt
    memo
  end
  config.each do |option_config|
    if config.kind_of?(Hash)
      (name, value_desc) = option_config
    else
      (name, value_desc) = parse_option(option_config)
    end
    option = supported_options[name] || DefaultOption.new(name)
    option = option.extend_with_config(*value_desc)
    supported_options[option.name] = option
  end
  supported_ary = supported_options.values
  MetaUtils.extend_method(m, :supported_options) { supported_ary }
  supported_ruby_names = supported_ary.inject({}) do |memo, opt|
    memo[opt.ruby_name] = opt
    memo
  end
  MetaUtils.extend_method(m, :option) { |n| supported_ruby_names[n] }
  supported_ary.each do |opt|
    MetaUtils.extend_method(m, "validate_#{opt.ruby_name}") do |value|
      opt.validate(value)
    end
  end
  m
end