Module: GraphQL::Schema::Interface::DefinitionMethods
- Includes:
- Relay::TypeExtensions, Member::BaseDSLMethods, Member::CachedGraphQLDefinition, Member::HasFields, Member::HasPath, Member::RelayShortcuts, Member::Scoped, Member::TypeSystemHelpers
- Included in:
- GraphQL::Schema::Interface
- Defined in:
- lib/graphql/schema/interface.rb
Constant Summary
Constants included from Member::HasFields
Member::HasFields::CONFLICT_FIELD_NAMES
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 
    
    
  
  
  
  
  
  
  
  
  
    
- 
  
    
      #visible?(context)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    The interface is visible if any of its possible types are visible. 
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, #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
#graphql_definition, #initialize_copy
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).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
| 19 20 21 | # File 'lib/graphql/schema/interface.rb', line 19 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.
| 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | # File 'lib/graphql/schema/interface.rb', line 44 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.own_interfaces << self child_class.interfaces.reverse_each do |interface_defn| child_class.extend(interface_defn::DefinitionMethods) 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 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/object.rb") && line.include?("in `implements'")} if !backtrace_line raise "Attach interfaces using `implements(#{self})`, not `include(#{self})`" end end super end | 
#kind ⇒ Object
| 103 104 105 | # File 'lib/graphql/schema/interface.rb', line 103 def kind GraphQL::TypeKinds::INTERFACE end | 
#orphan_types(*types) ⇒ Object
| 77 78 79 80 81 82 83 84 85 | # File 'lib/graphql/schema/interface.rb', line 77 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
| 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | # File 'lib/graphql/schema/interface.rb', line 87 def to_graphql type_defn = GraphQL::InterfaceType.new type_defn.name = graphql_name type_defn.description = description type_defn.orphan_types = orphan_types fields.each do |field_name, field_inst| field_defn = field_inst.graphql_definition type_defn.fields[field_defn.name] = field_defn end type_defn.[:type_class] = self if respond_to?(:resolve_type) type_defn.resolve_type = method(:resolve_type) end type_defn end | 
#visible?(context) ⇒ Boolean
The interface is visible if any of its possible types are visible
| 24 25 26 27 28 29 30 31 | # File 'lib/graphql/schema/interface.rb', line 24 def visible?(context) context.schema.possible_types(self).each do |type| if context.schema.visible?(type, context) return true end end false end |