Sha256: 37cdc1d4cf346d9b25481111d21b17dbd6cba1da7052492f703481fb50fc5815

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

module Medlink
  class Client

    def post(url, params = {})
      response = faraday_client.post do |req|
        req.url api_url(url)

        req.headers['Authorization']    = "Token token=\"#{token}\""
        req.headers['Content-Type']     = "application/json"

        req.body = JSON.generate(params)
      end

      raise UnauthorizedError, "Token '#{token}' is not valid" if response.status == 401

      json = JSON.parse response.body

      if json.is_a? Hash and json.has_key?("errors")
        error = json["errors"].first
        raise(Error, "Error #{error["code"]}: #{error["detail"]}")
      end

      json

    end

    private

      def faraday_client
        @faraday_client ||= Faraday.new(url: site) do |faraday|
          faraday.request  :url_encoded             # form-encode POST params
          faraday.adapter  Faraday.default_adapter  # make requests with Net::HTTP
        end
      end

      def token
        Medlink.configuration.token
      end

      def site
        Medlink.configuration.site
      end

      def api_url(url)
        "/api/#{url}"
      end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
medlink-0.2.2 lib/medlink/client.rb
medlink-0.2.1 lib/medlink/client.rb
medlink-0.2.0 lib/medlink/client.rb