Sha256: 468974cdcf075f4ae13453a8e1c7424265a94cb7b5a1e86d22e708f87458c809

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module Umbra
  class RequestBuilder
    UMBRA_HEADERS = {
      Umbra::HEADER_KEY => Umbra::HEADER_VALUE,
      'HTTP_CACHE_CONTROL' => 'no-cache, no-store, private, max-age=0'
    }.freeze

    class << self
      def call(env)
        Typhoeus::Request.new(
          base_url(env) + url(env),
          method: method(env),
          body: body(env),
          headers: headers(env)
        )
      end

      private

      def headers(env)
        request(env)
        .fetch('headers')
        .merge(UMBRA_HEADERS)
        .transform_keys { |key| key.split('_').drop(1).map(&:capitalize).join('-') }
      end

      def method(env)
        request(env).fetch('method').downcase.to_sym
      end

      def body(env)
        request(env).fetch('body')
      end

      def url(env)
        request = request(env)
        query = request.fetch('query')
        path = request.fetch('script_name') + request.fetch('path_info')

        query.empty? ? path : path + "?#{query}"
      end

      def base_url(env)
        request = request(env)
        scheme = request.fetch('scheme')
        host = request.fetch('host')

        "#{scheme}://#{host}"
      end

      def request(env)
        env.fetch('request')
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
umbra-rb-0.2.0 lib/umbra/request_builder.rb
umbra-rb-0.1.5.pre lib/umbra/request_builder.rb
umbra-rb-0.1.4.pre lib/umbra/request_builder.rb