Sha256: 3b9c6ebe0ac7177d28c7d358e093508950acbfb05fb18ce0d148a6650ac871d3

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

require 'json'
require 'net/http'
require 'uri'

module OpenSRF
  # A stateful endpoint, described in
  # this documentation:
  # https://docs.evergreen-ils.org/eg/docs/latest/integrations/web_services.html#_http_translator
  class HTTPTranslatorRequest
    def initialize(configuration:, service:, payload:)
      @configuration = configuration
      @service = service
      @payload = payload
    end

    def response
      raw = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
        http.request(request)
      end
      OpenSRF::ClassAndData.parse(::JSON.parse(raw.body).first, ['payload']).data
    end

    private

    def request
      request = Net::HTTP::Post.new(uri)
      request['X-Opensrf-Service'] = @service
      request.body = "osrf-msg=#{osrf_message.to_json}"
      request
    end

    def osrf_message
      [
        OpenSRF::ClassAndData.new(klass: 'osrfMessage', data: {
                                    'threadTrace' => 0,
                                    'locale' => 'en-CA',
                                    'type' => 'REQUEST',
                                    'payload' => @payload
                                  }).to_h
      ]
    end

    def req_options
      { use_ssl: true }
    end

    def uri
      URI.parse("https://#{@configuration.host}/osrf-http-translator")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
evergreen-ils-0.2.0 lib/opensrf/http_translator_request.rb