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