Module: GraphQL::Schema::Member::HasFields Private
- Included in:
- Interface::DefinitionMethods, GraphQL::Schema::Mutation, Object, Subscription
- Defined in:
- lib/graphql/schema/member/has_fields.rb
Overview
This module is part of a private API. You should avoid using this module if possible, as it may be removed or be changed in the future.
Shared code for Object and Interface
Instance Method Summary collapse
-
#add_field(field_defn) ⇒ void
private
Register this field with the class, overriding a previous one if needed.
-
#field(*args, **kwargs, &block) ⇒ void
private
Add a field to this object or interface with the given definition.
-
#field_class(new_field_class = nil) ⇒ Class
private
The class to initialize when adding fields to this kind of schema member.
-
#fields ⇒ Hash<String => GraphQL::Schema::Field>
private
Fields on this object, keyed by name, including inherited fields.
-
#get_field(field_name) ⇒ Object
private
-
#global_id_field(field_name) ⇒ Object
private
-
#own_fields ⇒ Array<GraphQL::Schema::Field>
private
Fields defined on this class specifically, not parent classes.
Instance Method Details
#add_field(field_defn) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Register this field with the class, overriding a previous one if needed.
44 45 46 47 |
# File 'lib/graphql/schema/member/has_fields.rb', line 44 def add_field(field_defn) own_fields[field_defn.name] = field_defn nil end |
#field(*args, **kwargs, &block) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Add a field to this object or interface with the given definition
10 11 12 13 14 |
# File 'lib/graphql/schema/member/has_fields.rb', line 10 def field(*args, **kwargs, &block) field_defn = field_class.(*args, owner: self, **kwargs, &block) add_field(field_defn) nil end |
#field_class(new_field_class = nil) ⇒ Class
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns The class to initialize when adding fields to this kind of schema member
50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/graphql/schema/member/has_fields.rb', line 50 def field_class(new_field_class = nil) if new_field_class @field_class = new_field_class elsif @field_class @field_class elsif self.is_a?(Class) superclass.respond_to?(:field_class) ? superclass.field_class : GraphQL::Schema::Field else ancestor = ancestors[1..-1].find { |a| a.respond_to?(:field_class) && a.field_class } ancestor ? ancestor.field_class : GraphQL::Schema::Field end end |
#fields ⇒ Hash<String => GraphQL::Schema::Field>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns Fields on this object, keyed by name, including inherited fields
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/graphql/schema/member/has_fields.rb', line 17 def fields # Local overrides take precedence over inherited fields all_fields = {} ancestors.reverse_each do |ancestor| if ancestor.respond_to?(:own_fields) all_fields.merge!(ancestor.own_fields) end end all_fields end |
#get_field(field_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/graphql/schema/member/has_fields.rb', line 28 def get_field(field_name) if (f = own_fields[field_name]) f else for ancestor in ancestors if ancestor.respond_to?(:own_fields) && f = ancestor.own_fields[field_name] return f end end nil end end |
#global_id_field(field_name) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
63 64 65 66 67 68 69 |
# File 'lib/graphql/schema/member/has_fields.rb', line 63 def global_id_field(field_name) id_resolver = GraphQL::Relay::GlobalIdResolve.new(type: self) field field_name, "ID", null: false define_method(field_name) do id_resolver.call(object, {}, context) end end |
#own_fields ⇒ Array<GraphQL::Schema::Field>
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns Fields defined on this class specifically, not parent classes
72 73 74 |
# File 'lib/graphql/schema/member/has_fields.rb', line 72 def own_fields @own_fields ||= {} end |