class GraphqlConnector::BaseServerType

Class to wrap http_client calls under a specific namespaced class

Public Class Methods

build(name, uri, headers = {}, connector = {}) click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 8
def build(name, uri, headers = {}, connector = {})
  verify_new_client_type_for!(name)
  base_class = class_with(uri, headers, connector)
  base_object = GraphqlConnector.const_set(name, base_class)
  inject_http_client_delegations(base_object)
  create_service_class_module(base_object)

  base_object
end

Private Class Methods

class_with(uri, headers = {}, connector = {}) click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 42
def class_with(uri, headers = {}, connector = {})
  Class.new do
    attr_accessor :uri, :headers, :connector
    @uri       = uri
    @headers   = headers
    @connector = connector
  end
end
create_service_class_module(base_object) click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 28
      def create_service_class_module(base_object)
        base_object.class_eval <<-METHOD, __FILE__, __LINE__ + 1
          module Query
            def self.extended(base)
              base.extend(GraphqlConnector::ServiceClassable::Queryable)
            end

            def http_client
              #{base_object}.http_client
            end
          end
        METHOD
      end
http_client() click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 56
def http_client
  @http_client ||=
    GraphqlConnector::HttpClient.new(@uri, @headers, @connector)
end
inject_http_client_delegations(base_object) click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 51
def inject_http_client_delegations(base_object)
  base_object.instance_eval do
    extend SingleForwardable
    def_delegators :http_client, :query, :raw_query, :mutation

    def http_client
      @http_client ||=
        GraphqlConnector::HttpClient.new(@uri, @headers, @connector)
    end
  end
end
verify_new_client_type_for!(name) click to toggle source
# File lib/graphql_connector/base_server_type.rb, line 20
def verify_new_client_type_for!(name)
  return unless GraphqlConnector.const_defined?(name)

  raise BaseServerTypeAlreadyExistsError,
        "The name: #{name} is already in use. Check your "\
        'configuration!'
end