Sha256: 94a744ff901064b49c2c395dce933305dcadf5e293463e18adc54e9b7200d869

Contents?: true

Size: 1.3 KB

Versions: 3

Compression:

Stored size: 1.3 KB

Contents

module SimpleSegment
  class Request
    BASE_URL = 'https://api.segment.io'.freeze
    DEFAULT_HEADERS = {
      'Content-Type' => 'application/json',
      'accept' => 'application/json'
    }.freeze

    attr_reader :write_key, :error_handler, :stub, :logger

    def initialize(client)
      @write_key = client.config.write_key
      @error_handler = client.config.on_error
      @stub = client.config.stub
      @logger = client.config.logger
    end

    def post(path, payload, headers: DEFAULT_HEADERS)
      response = nil
      status_code = nil
      response_body = nil

      uri = URI(BASE_URL)
      payload = JSON.generate(payload)
      if stub
        logger.debug "stubbed request to \
        #{path}: write key = #{write_key}, \
        payload = #{payload}"

        { status: 200, error: nil }
      else
        Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
          request = Net::HTTP::Post.new(path, headers)
          request.basic_auth write_key, nil
          http.request(request, payload).tap do |res|
            status_code = res.code
            response_body = res.body
            response = res
            response.value
          end
        end
      end
    rescue StandardError => e
      error_handler.call(status_code, response_body, e, response)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
simple_segment-0.3.0 lib/simple_segment/request.rb
simple_segment-0.2.1 lib/simple_segment/request.rb
simple_segment-0.2.0 lib/simple_segment/request.rb