Module: EzClient::HttprbCompatibility

Defined in:
lib/ezclient/httprb_compatibility.rb

Constant Summary collapse

KEYWORD_PARAMETER_TYPES =
%i[key keyreq].freeze

Class Method Summary collapse

Class Method Details

.basic_auth(client, opts) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/ezclient/httprb_compatibility.rb', line 24

def basic_auth(client, opts)
  if keyword_initializer?(client.method(:basic_auth))
    client.basic_auth(**opts)
  else
    client.basic_auth(opts)
  end
end

.build_request(client, verb, url, opts) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/ezclient/httprb_compatibility.rb', line 16

def build_request(client, verb, url, opts)
  if client_supports_build_request?
    client.build_request(verb, url, opts)
  else
    HTTP::Request::Builder.new(client.default_options.merge(opts)).build(verb, url)
  end
end

.client_supports_build_request?Boolean

Returns:

  • (Boolean)


8
9
10
# File 'lib/ezclient/httprb_compatibility.rb', line 8

def client_supports_build_request?
  HTTP::Client.method_defined?(:build_request)
end

.httprb_v6_or_later?Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/ezclient/httprb_compatibility.rb', line 12

def httprb_v6_or_later?
  Gem::Version.new(HTTP::VERSION) >= Gem::Version.new("6")
end

.keyword_initializer?(method) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/ezclient/httprb_compatibility.rb', line 56

def keyword_initializer?(method)
  method.parameters.any? { |type, _name| KEYWORD_PARAMETER_TYPES.include?(type) }
end

.persistent_client(origin, keep_alive_timeout) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/ezclient/httprb_compatibility.rb', line 40

def persistent_client(origin, keep_alive_timeout)
  if client_supports_build_request?
    HTTP.persistent(origin, timeout: keep_alive_timeout)
  else
    HTTP::Client.new(persistent: origin, keep_alive_timeout: keep_alive_timeout)
  end
end

.redirector(opts) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/ezclient/httprb_compatibility.rb', line 32

def redirector(opts)
  if keyword_initializer?(HTTP::Redirector.instance_method(:initialize))
    HTTP::Redirector.new(**opts)
  else
    HTTP::Redirector.new(opts)
  end
end

.response(**attrs) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/ezclient/httprb_compatibility.rb', line 48

def response(**attrs)
  if keyword_initializer?(HTTP::Response.instance_method(:initialize))
    HTTP::Response.new(**attrs)
  else
    HTTP::Response.new(attrs)
  end
end