module GraphQL::Schema::Member::HasDirectives
Public Class Methods
# File lib/graphql/schema/member/has_directives.rb, line 59 def add_directive(schema_member, directives, directive_class, directive_options) remove_directive(directives, directive_class) unless directive_class.repeatable? directives << directive_class.new(schema_member, **directive_options) end
Source
# File lib/graphql/schema/member/has_directives.rb, line 8 def self.extended(child_cls) super child_cls.module_exec { #: self as GraphQL::Schema::Member::HasDirectives self.own_directives = nil } end
Calls superclass method
# File lib/graphql/schema/member/has_directives.rb, line 68 def get_directives(schema_member, directives, directives_method) case schema_member when Class inherited_directives = if schema_member.superclass.respond_to?(directives_method) get_directives(schema_member.superclass, schema_member.superclass.public_send(directives_method), directives_method) else GraphQL::EmptyObjects::EMPTY_ARRAY end if !inherited_directives.empty? && directives dirs = [] #: Array[GraphQL::Schema::Directive]? merge_directives(dirs, inherited_directives) merge_directives(dirs, directives) dirs elsif directives directives elsif !inherited_directives.empty? inherited_directives else GraphQL::EmptyObjects::EMPTY_ARRAY end when Module dirs = nil #: Array[GraphQL::Schema::Directive]? ancestors = schema_member.ancestors #: Array[untyped] ancestors.reverse_each do |ancestor| if ancestor.respond_to?(:own_directives) && !(anc_dirs = ancestor.own_directives).empty? dirs ||= [] merge_directives(dirs, anc_dirs) end end if directives dirs ||= [] merge_directives(dirs, directives) end dirs || GraphQL::EmptyObjects::EMPTY_ARRAY when HasDirectives directives || GraphQL::EmptyObjects::EMPTY_ARRAY else raise "Invariant: how could #{schema_member} not be a Class, Module, or instance of HasDirectives?" end end
# File lib/graphql/schema/member/has_directives.rb, line 64 def remove_directive(directives, directive_class) directives && directives.reject! { |d| d.is_a?(directive_class) } end
Public Instance Methods
# File lib/graphql/schema/member/has_directives.rb, line 31 def directive(dir_class, **options) @own_directives ||= [] HasDirectives.add_directive(self, @own_directives, dir_class, options) nil end
Create an instance of dir_class for self, using options.
It removes a previously-attached instance of dir_class, if there is one.
Returns
-
void
Source
# File lib/graphql/schema/member/has_directives.rb, line 54 def directives HasDirectives.get_directives(self, @own_directives, :directives) end
Source
# File lib/graphql/schema/member/has_directives.rb, line 16 def inherited(child_cls) super child_cls.own_directives = nil end
Calls superclass method
# File lib/graphql/schema/member/has_directives.rb, line 49 def remove_directive(dir_class) HasDirectives.remove_directive(@own_directives, dir_class) nil end
Remove an attached instance of dir_class, if there is one
Parameters
-
dir_class(Class<GraphQL::Schema::Directive>)
Returns
-
void