Sha256: f1c203b4f32e21ccccb2cffc6d45ff31756326586843da9cee3e51c07f328bc3

Contents?: true

Size: 1.6 KB

Versions: 1

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

module GraphqlConnector
  # Wrapper class for HTTParty post query
  class HttpClient
    def initialize(uri, headers = {}, connector = {})
      @uri = uri
      @headers = headers
      @connector = connector
    end

    def query(model, conditions, selected_fields)
      query_string =
        Formatters::QueryFormat.new(model, conditions, selected_fields).create
      parsed_body = raw_query(query_string)
      format_body(parsed_body['data'][model.to_s])
    end

    def mutation(model, inputs, selected_fields)
      query_string =
        Formatters::MutationFormat.new(model, inputs, selected_fields).create
      parsed_body = raw_query(query_string)
      format_body(parsed_body['data'][model.to_s])
    end

    def raw_query(query_string, variables: {})
      response = HTTParty.post(@uri,
                               headers: handle_headers,
                               body: { query: query_string,
                                       variables: variables })
      parsed_body = JSON.parse(response.body)
      verify_response!(parsed_body)
      parsed_body
    end

    private

    def handle_headers
      return @headers if @connector.empty?

      @headers
        .merge(@connector[:base].public_send(@connector[:method]))
    end

    def format_body(response_body)
      return OpenStruct.new(response_body) unless response_body.is_a? Array

      response_body.map { |entry| OpenStruct.new(entry) }
    end

    def verify_response!(parsed_body)
      return unless parsed_body.key? 'errors'

      raise CustomAttributeError, parsed_body['errors']
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql_connector-1.3.1 lib/graphql_connector/http_client.rb