Sha256: 32fd9fc09f1769dd6c99b9e42fd7735257553363c6f45496457e7039336aa50c

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# frozen_string_literal: true

require 'net/http'
require 'logger'
require_relative 'request/version'

LOGGER ||= Logger.new $stderr

module Setters
  def make_setter(*names)
    names.each do |name|
      define_method(name) do |val|
        instance_variable_set("@#{name}", val)
        self
      end
    end
  end
end

module Tlopo
  class Request
    extend Setters
    make_setter :url, :headers, :method, :payload, :insecure

    def initialize
      @method = 'get'
      @insecure = false
      @http_trace = !ENV['HTTP_TRACE'].nil? && ENV['HTTP_TRACE'].downcase == 'true'
    end

    def run(&block)
      instance_eval(&block) if block_given?
      uri = URI(@url)
      is_https = uri.scheme == 'https'

      uri.path = '/' if uri.path.empty?

      path = uri.path

      unless uri.query.nil?
        path = uri.query.empty? ? uri.path : "#{uri.path}?#{uri.query}"
      end

      req = Object.const_get("Net::HTTP::#{@method.capitalize}").new(path)
      req.body = @payload

      @headers&.each { |k, v| req[k] = v }

      opts = {}

      opts[:use_ssl] = is_https
      opts[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if is_https && @insecure

      Net::HTTP.start(uri.host, uri.port, opts) do |http|
        r = http.request(req)
        msg = "HTTP_TRACE - code: #{r.code} method: #{@method}, url: #{@url},"
        msg += " headers: #{@headers}, payload: #{@payload}"
        LOGGER.debug msg if @http_trace
        return r
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tlopo-request-0.1.1 lib/tlopo/request.rb