Sha256: e1bf32fae0144fc93f865c6fded772acc4fedcbef0c287ad82ce61e5acd95ddd

Contents?: true

Size: 1.12 KB

Versions: 4

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module Umbra
  class RequestBuilder
    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::HEADER_KEY => Umbra::HEADER_VALUE)
        .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

4 entries across 4 versions & 1 rubygems

Version Path
umbra-rb-0.1.3.pre lib/umbra/request_builder.rb
umbra-rb-0.1.2.pre lib/umbra/request_builder.rb
umbra-rb-0.1.1.pre lib/umbra/request_builder.rb
umbra-rb-0.1.0.pre lib/umbra/request_builder.rb