# File lib/aws/option_grammar.rb, line 397
      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