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