Sha256: 55e3995fb1111f84dc85da27569ccf1f789eb6682214f3fde33021191cdb8386
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literal: true module GraphqlConnector class BaseServerTypeAlreadyExistsError < StandardError; end # Class to wrap http_client calls under a specific namespaced class class BaseServerType class << self 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 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 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 def class_with(uri, headers = {}, connector = {}) Class.new do attr_accessor :uri, :headers, :connector @uri = uri @headers = headers @connector = connector end end 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 end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
graphql_connector-1.3.1 | lib/graphql_connector/base_server_type.rb |