module GraphQL::Client::Schema::ClassMethods
def define_class(definition, ast_nodes, type)
def define_class(definition, ast_nodes, type) type_class = case type.kind.name when "NON_NULL" define_class(definition, ast_nodes, type.of_type).to_non_null_type when "LIST" define_class(definition, ast_nodes, type.of_type).to_list_type else get_class(type.graphql_name).define_class(definition, ast_nodes) end ast_nodes.each do |ast_node| ast_node.directives.each do |directive| if directive = self.directives[directive.name.to_sym] type_class = directive.new(type_class) end end end type_class end
def directives
def directives DIRECTIVES end
def get_class(type_name)
def get_class(type_name) const_get(normalize_type_name(type_name)) end
def normalize_type_name(type_name)
def normalize_type_name(type_name) /\A[A-Z]/.match?(type_name) ? type_name : type_name.camelize end
def set_class(type_name, klass)
def set_class(type_name, klass) class_name = normalize_type_name(type_name) if const_defined?(class_name, false) raise ArgumentError, "Can't define #{class_name} to represent type #{type_name} " \ "because it's already defined" end const_set(class_name, klass) end