lib/faraday/options.rb in faraday-0.17.6 vs lib/faraday/options.rb in faraday-1.0.0.pre.rc1
- old
+ new
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
module Faraday
# Subclasses Struct with some special helpers for converting from a Hash to
# a Struct.
class Options < Struct
# Public
@@ -8,10 +10,11 @@
end
# Public
def each
return to_enum(:each) unless block_given?
+
members.each do |key|
yield(key.to_sym, send(key))
end
end
@@ -25,11 +28,11 @@
new_value = value.dup
else
new_value = value
end
- self.send("#{key}=", new_value) unless new_value.nil?
+ send("#{key}=", new_value) unless new_value.nil?
end
self
end
# Public
@@ -45,14 +48,18 @@
end
# Public
def merge!(other)
other.each do |key, other_value|
- self_value = self.send(key)
+ self_value = send(key)
sub_options = self.class.options_for(key)
- new_value = (self_value && sub_options && other_value) ? self_value.merge(other_value) : other_value
- self.send("#{key}=", new_value) unless new_value.nil?
+ new_value = if self_value && sub_options && other_value
+ self_value.merge(other_value)
+ else
+ other_value
+ end
+ send("#{key}=", new_value) unless new_value.nil?
end
self
end
# Public
@@ -67,14 +74,14 @@
# Public
def fetch(key, *args)
unless symbolized_key_set.include?(key.to_sym)
key_setter = "#{key}="
- if args.size > 0
+ if !args.empty?
send(key_setter, args.first)
elsif block_given?
- send(key_setter, yield(key))
+ send(key_setter, Proc.new.call(key))
else
raise self.class.fetch_error_class, "key not found: #{key.inspect}"
end
end
send(key)
@@ -96,10 +103,11 @@
end
# Public
def each_key
return to_enum(:each_key) unless block_given?
+
keys.each do |key|
yield(key)
end
end
@@ -111,10 +119,11 @@
alias has_key? key?
# Public
def each_value
return to_enum(:each_value) unless block_given?
+
values.each do |value|
yield(value)
end
end
@@ -140,13 +149,13 @@
values = []
members.each do |member|
value = send(member)
values << "#{member}=#{value.inspect}" if value
end
- values = values.empty? ? ' (empty)' : (' ' << values.join(", "))
+ values = values.empty? ? '(empty)' : values.join(', ')
- %(#<#{self.class}#{values}>)
+ %(#<#{self.class} #{values}>)
end
# Internal
def self.options(mapping)
attribute_options.update(mapping)
@@ -161,10 +170,14 @@
def self.attribute_options
@attribute_options ||= {}
end
def self.memoized(key, &block)
+ unless block_given?
+ raise ArgumentError, '#memoized must be called with a block'
+ end
+
memoized_attributes[key.to_sym] = block
class_eval <<-RUBY, __FILE__, __LINE__ + 1
def #{key}() self[:#{key}]; end
RUBY
end
@@ -173,201 +186,37 @@
@memoized_attributes ||= {}
end
def [](key)
key = key.to_sym
- if method = self.class.memoized_attributes[key]
+ if (method = self.class.memoized_attributes[key])
super(key) || (self[key] = instance_eval(&method))
else
super
end
end
def symbolized_key_set
- @symbolized_key_set ||= Set.new(keys.map { |k| k.to_sym })
+ @symbolized_key_set ||= Set.new(keys.map(&:to_sym))
end
def self.inherited(subclass)
super
subclass.attribute_options.update(attribute_options)
subclass.memoized_attributes.update(memoized_attributes)
end
def self.fetch_error_class
@fetch_error_class ||= if Object.const_defined?(:KeyError)
- ::KeyError
- else
- ::IndexError
- end
+ ::KeyError
+ else
+ ::IndexError
+ end
end
end
-
- class RequestOptions < Options.new(:params_encoder, :proxy, :bind,
- :timeout, :open_timeout, :write_timeout, :boundary, :oauth, :context)
-
- def []=(key, value)
- if key && key.to_sym == :proxy
- super(key, value ? ProxyOptions.from(value) : nil)
- else
- super(key, value)
- end
- end
- end
-
- class SSLOptions < Options.new(:verify, :ca_file, :ca_path, :verify_mode,
- :cert_store, :client_cert, :client_key, :certificate, :private_key, :verify_depth,
- :version, :min_version, :max_version)
-
- def verify?
- verify != false
- end
-
- def disable?
- !verify?
- end
- end
-
- class ProxyOptions < Options.new(:uri, :user, :password)
- extend Forwardable
- def_delegators :uri, :scheme, :scheme=, :host, :host=, :port, :port=, :path, :path=
-
- def self.from(value)
- case value
- when String
- value = {:uri => Utils.URI(value)}
- when URI
- value = {:uri => value}
- when Hash, Options
- if uri = value.delete(:uri)
- value[:uri] = Utils.URI(uri)
- end
- end
- super(value)
- end
-
- memoized(:user) { uri && uri.user && Utils.unescape(uri.user) }
- memoized(:password) { uri && uri.password && Utils.unescape(uri.password) }
- end
-
- class ConnectionOptions < Options.new(:request, :proxy, :ssl, :builder, :url,
- :parallel_manager, :params, :headers, :builder_class)
-
- options :request => RequestOptions, :ssl => SSLOptions
-
- memoized(:request) { self.class.options_for(:request).new }
-
- memoized(:ssl) { self.class.options_for(:ssl).new }
-
- memoized(:builder_class) { RackBuilder }
-
- def new_builder(block)
- builder_class.new(&block)
- end
- end
-
- class Env < Options.new(:method, :body, :url, :request, :request_headers,
- :ssl, :parallel_manager, :params, :response, :response_headers, :status,
- :reason_phrase)
-
- ContentLength = 'Content-Length'.freeze
- StatusesWithoutBody = Set.new [204, 304]
- SuccessfulStatuses = 200..299
-
- # A Set of HTTP verbs that typically send a body. If no body is set for
- # these requests, the Content-Length header is set to 0.
- MethodsWithBodies = Set.new [:post, :put, :patch, :options]
-
- options :request => RequestOptions,
- :request_headers => Utils::Headers, :response_headers => Utils::Headers
-
- extend Forwardable
-
- def_delegators :request, :params_encoder
-
- # Public
- def self.from(value)
- env = super(value)
- if value.respond_to?(:custom_members)
- env.custom_members.update(value.custom_members)
- end
- env
- end
-
- # Public
- def [](key)
- if in_member_set?(key)
- super(key)
- else
- custom_members[key]
- end
- end
-
- # Public
- def []=(key, value)
- if in_member_set?(key)
- super(key, value)
- else
- custom_members[key] = value
- end
- end
-
- # Public
- def success?
- SuccessfulStatuses.include?(status)
- end
-
- # Public
- def needs_body?
- !body && MethodsWithBodies.include?(method)
- end
-
- # Public
- def clear_body
- request_headers[ContentLength] = '0'
- self.body = ''
- end
-
- # Public
- def parse_body?
- !StatusesWithoutBody.include?(status)
- end
-
- # Public
- def parallel?
- !!parallel_manager
- end
-
- def inspect
- attrs = [nil]
- members.each do |mem|
- if value = send(mem)
- attrs << "@#{mem}=#{value.inspect}"
- end
- end
- if !custom_members.empty?
- attrs << "@custom=#{custom_members.inspect}"
- end
- %(#<#{self.class}#{attrs.join(" ")}>)
- end
-
- # Internal
- def custom_members
- @custom_members ||= {}
- end
-
- # Internal
- if members.first.is_a?(Symbol)
- def in_member_set?(key)
- self.class.member_set.include?(key.to_sym)
- end
- else
- def in_member_set?(key)
- self.class.member_set.include?(key.to_s)
- end
- end
-
- # Internal
- def self.member_set
- @member_set ||= Set.new(members)
- end
- end
end
+
+require 'faraday/options/request_options'
+require 'faraday/options/ssl_options'
+require 'faraday/options/proxy_options'
+require 'faraday/options/connection_options'
+require 'faraday/options/env'