Module: GraphQL::Schema::Interface::DefinitionMethods
- Includes:
- Relay::TypeExtensions, Member::BaseDSLMethods, Member::CachedGraphQLDefinition, Member::CachedGraphQLDefinition::DeprecatedToGraphQL, Member::HasAstNode, Member::HasDirectives, Member::HasFields, Member::HasInterfaces, Member::HasPath, Member::HasUnresolvedTypeError, Member::RelayShortcuts, Member::Scoped, Member::TypeSystemHelpers
- Included in:
- GraphQL::Schema::Interface
- Defined in:
- lib/graphql/schema/interface.rb
Constant Summary
Constants included from Member::HasDirectives
Member::HasDirectives::NO_DIRECTIVES
Constants included from Member::HasFields
Member::HasFields::CONFLICT_FIELD_NAMES, Member::HasFields::GRAPHQL_RUBY_KEYWORDS, Member::HasFields::RUBY_KEYWORDS
Instance Method Summary collapse
- 
  
    
      #accessible?(context)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    The interface is accessible if any of its possible types are accessible. 
- 
  
    
      #definition_methods(&block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Methods defined in this block will be: - Added as class methods to this interface - Added as class methods to all child interfaces. 
- 
  
    
      #included(child_class)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Here’s the tricky part. 
- 
  
    
      #kind  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
- 
  
    
      #orphan_types(*types)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
- 
  
    
      #to_graphql  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
- 
  
    
      #type_membership_class(membership_class = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
- 
  
    
      #visible?(context)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    
Methods included from Member::HasInterfaces
#implements, #interface_type_memberships, #interfaces, #own_interface_type_memberships
Methods included from Member::HasDirectives
#directive, #directives, #remove_directive
Methods included from Member::HasAstNode
Methods included from Member::Scoped
Methods included from Member::RelayShortcuts
#connection_type, #connection_type_class, #edge_type, #edge_type_class
Methods included from Member::HasPath
Methods included from Member::HasFields
#add_field, #all_field_definitions, #field, #field_class, #fields, #get_field, #global_id_field, #own_fields
Methods included from Member::TypeSystemHelpers
#list?, #non_null?, #to_list_type, #to_non_null_type, #to_type_signature
Methods included from Member::BaseDSLMethods
#authorized?, #default_graphql_name, #description, #graphql_name, #introspection, #introspection?, #mutation, #name, #overridden_graphql_name
Methods included from Relay::TypeExtensions
#connection_type, #define_connection, #define_edge, #edge_type
Methods included from Member::CachedGraphQLDefinition
#deprecated_to_graphql, #graphql_definition, #initialize_copy, #type_class
Instance Method Details
#accessible?(context) ⇒ Boolean
The interface is accessible if any of its possible types are accessible
| 34 35 36 37 38 39 40 41 | # File 'lib/graphql/schema/interface.rb', line 34 def accessible?(context) context.schema.possible_types(self, context).each do |type| if context.schema.accessible?(type, context) return true end end false end | 
#definition_methods(&block) ⇒ Object
Methods defined in this block will be: - Added as class methods to this interface - Added as class methods to all child interfaces
| 24 25 26 | # File 'lib/graphql/schema/interface.rb', line 24 def definition_methods(&block) self::DefinitionMethods.module_eval(&block) end | 
#included(child_class) ⇒ Object
Here’s the tricky part. Make sure behavior keeps making its way down the inheritance chain.
| 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | # File 'lib/graphql/schema/interface.rb', line 52 def included(child_class) if !child_class.is_a?(Class) # In this case, it's been included into another interface. # This is how interface inheritance is implemented # We need this before we can call `own_interfaces` child_class.extend(Schema::Interface::DefinitionMethods) child_class.type_membership_class(self.type_membership_class) child_class.ancestors.reverse_each do |ancestor| if ancestor.const_defined?(:DefinitionMethods) child_class.extend(ancestor::DefinitionMethods) end end # Use an instance variable to tell whether it's been included previously or not; # You can't use constant detection because constants are brought into scope # by `include`, which has already happened at this point. if !child_class.instance_variable_defined?(:@_definition_methods) defn_methods_module = Module.new child_class.instance_variable_set(:@_definition_methods, defn_methods_module) child_class.const_set(:DefinitionMethods, defn_methods_module) child_class.extend(child_class::DefinitionMethods) end child_class.introspection(introspection) child_class.description(description) # If interfaces are mixed into each other, only define this class once if !child_class.const_defined?(:UnresolvedTypeError, false) add_unresolved_type_error(child_class) end elsif child_class < GraphQL::Schema::Object # This is being included into an object type, make sure it's using `implements(...)` backtrace_line = caller(0, 10).find { |line| line.include?("schema/member/has_interfaces.rb") && line.include?("in `implements'")} if !backtrace_line raise "Attach interfaces using `implements(#{self})`, not `include(#{self})`" end end super end | 
#kind ⇒ Object
| 123 124 125 | # File 'lib/graphql/schema/interface.rb', line 123 def kind GraphQL::TypeKinds::INTERFACE end | 
#orphan_types(*types) ⇒ Object
| 93 94 95 96 97 98 99 100 101 | # File 'lib/graphql/schema/interface.rb', line 93 def orphan_types(*types) if types.any? @orphan_types = types else all_orphan_types = @orphan_types || [] all_orphan_types += super if defined?(super) all_orphan_types.uniq end end | 
#to_graphql ⇒ Object
| 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | # File 'lib/graphql/schema/interface.rb', line 105 def to_graphql type_defn = GraphQL::InterfaceType.new type_defn.name = graphql_name type_defn.description = description type_defn.orphan_types = orphan_types type_defn.type_membership_class = self.type_membership_class type_defn.ast_node = ast_node fields.each do |field_name, field_inst| # rubocop:disable Development/ContextIsPassedCop -- legacy-related field_defn = field_inst.graphql_definition(silence_deprecation_warning: true) type_defn.fields[field_defn.name] = field_defn # rubocop:disable Development/ContextIsPassedCop -- legacy-related end type_defn.[:type_class] = self if respond_to?(:resolve_type) type_defn.resolve_type = method(:resolve_type) end type_defn end | 
#type_membership_class(membership_class = nil) ⇒ Object
| 43 44 45 46 47 48 49 | # File 'lib/graphql/schema/interface.rb', line 43 def type_membership_class(membership_class = nil) if membership_class @type_membership_class = membership_class else @type_membership_class || find_inherited_value(:type_membership_class, GraphQL::Schema::TypeMembership) end end | 
#visible?(context) ⇒ Boolean
| 29 30 31 | # File 'lib/graphql/schema/interface.rb', line 29 def visible?(context) true end |