class HTTP::Options

def def_option(name, reader_only: false, &interpreter)

def def_option(name, reader_only: false, &interpreter)
  defined_options << name.to_sym
  interpreter ||= ->(v) { v }
  if reader_only
    attr_reader name
  else
    attr_accessor name
    protected :"#{name}="
  end
  define_method(:"with_#{name}") do |value|
    dup { |opts| opts.send(:"#{name}=", instance_exec(value, &interpreter)) }
  end
end