Sha256: 751c5d55b87b582900a53df246072c6aa89f33d35b4c32f8adb5147bb83e986d

Contents?: true

Size: 1.58 KB

Versions: 60

Compression:

Stored size: 1.58 KB

Contents

# frozen_string_literal: true

class ReeHttp::BuildRequestExecutor
  include Ree::FnDSL

  fn :build_request_executor do
    link 'ree_http/constants', -> {
      HTTPS_STR & DEFAULT_TIMEOUT & DEFAULT_WRITE_TIMEOUT & DEFAULT_FORCE_SSL
    }
  end

  DEFAULTS = {
    timeout: DEFAULT_TIMEOUT,
    write_timeout: DEFAULT_WRITE_TIMEOUT,
    force_ssl: DEFAULT_FORCE_SSL,
    proxy: {}
  }.freeze

  doc(<<~DOC)
    Builds Net::HTTP object that could be further used for execution
  DOC

  contract(
    URI,
    Ksplat[
      timeout?: Integer,
      write_timeout?: Integer,
      force_ssl?: Bool,
      ca_certs?: ArrayOf[File],
      proxy?: {
        address: String,
        port?: Integer,
        username?: String,
        password?: String
      }
    ] => Net::HTTP
  )
  def call(uri, **opts)
    opts = DEFAULTS.merge(opts)
    proxy = opts[:proxy] || {}

    request_executor = Net::HTTP.new(
      uri.hostname, uri.port ,
      proxy[:address], proxy[:port], proxy[:username], proxy[:password]
    )

    request_executor.write_timeout = opts[:write_timeout]
    request_executor.read_timeout = opts[:timeout]

    request_executor.use_ssl = opts[:force_ssl] || uri.scheme == HTTPS_STR


    if opts[:ca_certs?]
      request_executor = build_ca_certs(request_executor, opts[:ca_certs?])
    end

    request_executor
  end

  private

  def build_ca_certs(request_executor, ca_files)
    store = OpenSSL::X509::Store.new

    ca_files.each do |ca_file|
      store.add_cert(OpenSSL::X509::Certificate.new(ca_file.read))
    end

    request_executor.cert_store = store
    request_executor
  end
end

Version data entries

60 entries across 60 versions & 1 rubygems

Version Path
ree_lib-1.1.1 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.1.0 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.124 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.123 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.122 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.121 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.120 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.119 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.118 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.117 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.116 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.115 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.114 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.113 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.112 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.111 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.110 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.109 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.108 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb
ree_lib-1.0.107 lib/ree_lib/packages/ree_http/package/ree_http/functions/build_request_executor.rb