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
Constant Summary collapse
- CONFLICT_FIELD_NAMES =
This constant is part of a private API. You should avoid using this constant if possible, as it may be removed or be changed in the future.
A list of field names that we should advise users to pick a different resolve method name.
Set.new([ # GraphQL-Ruby conflicts :context, :object, # Ruby built-ins conflicts :method, :class ])
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.
55 56 57 58 59 60 61 |
# File 'lib/graphql/schema/member/has_fields.rb', line 55 def add_field(field_defn) if CONFLICT_FIELD_NAMES.include?(field_defn.original_name) && field_defn.original_name == field_defn.resolver_method warn "#{self.graphql_name}'s `field :#{field_defn.original_name}` conflicts with a built-in method, use `resolver_method:` to pick a different resolver method for this field (for example, `resolver_method: :resolve_#{field_defn.original_name}` and `def resolve_#{field_defn.original_name}`)" end 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
64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/graphql/schema/member/has_fields.rb', line 64 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.
77 78 79 80 81 82 83 |
# File 'lib/graphql/schema/member/has_fields.rb', line 77 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
86 87 88 |
# File 'lib/graphql/schema/member/has_fields.rb', line 86 def own_fields @own_fields ||= {} end |