class HTTP::Options
Attributes
available_features[R]
default_socket_class[RW]
default_ssl_socket_class[RW]
default_timeout_class[RW]
Public Class Methods
defined_options()
click to toggle source
# File lib/http/options.rb, line 23 def defined_options @defined_options ||= [] end
new(options = {})
click to toggle source
Calls superclass method
# File lib/http/options.rb, line 19 def new(options = {}) options.is_a?(self) ? options : super end
new(options = {})
click to toggle source
# File lib/http/options.rb, line 50 def initialize(options = {}) defaults = { :response => :auto, :proxy => {}, :timeout_class => self.class.default_timeout_class, :timeout_options => {}, :socket_class => self.class.default_socket_class, :nodelay => false, :ssl_socket_class => self.class.default_ssl_socket_class, :ssl => {}, :keep_alive_timeout => 5, :headers => {}, :cookies => {}, :encoding => nil, :features => {} } opts_w_defaults = defaults.merge(options) opts_w_defaults[:headers] = HTTP::Headers.coerce(opts_w_defaults[:headers]) opts_w_defaults.each { |(k, v)| self[k] = v } end
register_feature(name, impl)
click to toggle source
# File lib/http/options.rb, line 27 def register_feature(name, impl) @available_features[name] = impl end
Protected Class Methods
def_option(name, reader_only: false, &interpreter)
click to toggle source
# File lib/http/options.rb, line 33 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
Public Instance Methods
dup() { |dupped| ... }
click to toggle source
Calls superclass method
# File lib/http/options.rb, line 172 def dup dupped = super yield(dupped) if block_given? dupped end
feature(name)
click to toggle source
# File lib/http/options.rb, line 178 def feature(name) features[name] end
features=(features)
click to toggle source
# File lib/http/options.rb, line 106 def features=(features) @features = features.each_with_object({}) do |(name, opts_or_feature), h| h[name] = if opts_or_feature.is_a?(Feature) opts_or_feature else unless (feature = self.class.available_features[name]) argument_error! "Unsupported feature: #{name}" end feature.new(**opts_or_feature) end end end
follow=(value)
click to toggle source
# File lib/http/options.rb, line 129 def follow=(value) @follow = case when !value then nil when true == value then {} when value.respond_to?(:fetch) then value else argument_error! "Unsupported follow options: #{value}" end end
merge(other)
click to toggle source
# File lib/http/options.rb, line 149 def merge(other) h1 = to_hash h2 = other.to_hash merged = h1.merge(h2) do |k, v1, v2| case k when :headers v1.merge(v2) else v2 end end self.class.new(merged) end
persistent=(value)
click to toggle source
# File lib/http/options.rb, line 141 def persistent=(value) @persistent = value ? HTTP::URI.parse(value).origin : nil end
persistent?()
click to toggle source
# File lib/http/options.rb, line 145 def persistent? !persistent.nil? end
to_hash()
click to toggle source
# File lib/http/options.rb, line 165 def to_hash hash_pairs = self.class. defined_options. flat_map { |opt_name| [opt_name, send(opt_name)] } Hash[*hash_pairs] end
Protected Instance Methods
[]=(option, val)
click to toggle source
# File lib/http/options.rb, line 184 def []=(option, val) send(:"#{option}=", val) end
Private Instance Methods
argument_error!(message)
click to toggle source
# File lib/http/options.rb, line 190 def argument_error!(message) raise(Error, message, caller(1..-1)) end