Class: GraphQL::Modernize::ClassHierarchy
- Inherits:
-
Object
- Object
- GraphQL::Modernize::ClassHierarchy
- Defined in:
- lib/graphql/modernize/class_hierarchy.rb
Constant Summary collapse
- DIRECT_KINDS =
{ "GraphQL::Schema::Object" => :object, "GraphQL::Schema::InputObject" => :input_object, "GraphQL::Schema::Enum" => :enum, "GraphQL::Schema::Union" => :union, "GraphQL::Schema::Resolver" => :resolver, "GraphQL::Schema::Mutation" => :mutation, "GraphQL::Schema::RelayClassicMutation" => :mutation, "GraphQL::Schema::Subscription" => :subscription, "GraphQL::Schema" => :schema }.freeze
- SUFFIX_KINDS =
{ "BaseObject" => :object, "BaseInputObject" => :input_object, "BaseEnum" => :enum, "BaseUnion" => :union, "BaseResolver" => :resolver, "BaseMutation" => :mutation }.freeze
Instance Attribute Summary collapse
-
#declarations ⇒ Object
readonly
Returns the value of attribute declarations.
Instance Method Summary collapse
- #build(source_files) ⇒ Object
- #calls_for(class_name) ⇒ Object
- #class_method_defined?(class_name, method_name) ⇒ Boolean
-
#initialize(base_classes: {}) ⇒ ClassHierarchy
constructor
A new instance of ClassHierarchy.
- #method_defined?(class_name, method_name) ⇒ Boolean
- #resolve_kind(class_name) ⇒ Object
- #visibility_plugin?(class_name) ⇒ Boolean
- #visibility_plugin_ambiguous?(class_name) ⇒ Boolean
- #visibility_plugin_misplaced?(class_name, path, start_offset) ⇒ Boolean
- #visibility_plugin_target?(class_name) ⇒ Boolean
- #visible_definitions ⇒ Object
Constructor Details
#initialize(base_classes: {}) ⇒ ClassHierarchy
Returns a new instance of ClassHierarchy.
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 111 def initialize(base_classes: {}) @configured_kinds = base_classes.each_with_object({}) do |(kind, names), result| Array(names).each { |name| result[normalize(name)] = kind.to_sym } end @declarations = {} @declared_names = {} @superclasses = {} @interface_names = {} @visible_definitions = [] @calls = Hash.new { |hash, name| hash[name] = [] } @methods = Hash.new { |hash, name| hash[name] = {} } @class_methods = Hash.new { |hash, name| hash[name] = {} } end |
Instance Attribute Details
#declarations ⇒ Object (readonly)
Returns the value of attribute declarations.
109 110 111 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 109 def declarations @declarations end |
Instance Method Details
#build(source_files) ⇒ Object
125 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 125 def build(source_files) = tap { source_files.each { |source_file| index(source_file) } } |
#calls_for(class_name) ⇒ Object
140 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 140 def calls_for(class_name) = ancestors(class_name).flat_map { |name| @calls[name] } |
#class_method_defined?(class_name, method_name) ⇒ Boolean
144 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 144 def class_method_defined?(class_name, method_name) = defined_in?(@class_methods, class_name, method_name) |
#method_defined?(class_name, method_name) ⇒ Boolean
142 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 142 def method_defined?(class_name, method_name) = defined_in?(@methods, class_name, method_name) |
#resolve_kind(class_name) ⇒ Object
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 127 def resolve_kind(class_name) name = normalize(class_name) seen = {} until name.empty? || seen[name] seen[name] = true kind = direct_kind(name) return kind if kind name = resolve_superclass(name) end nil end |
#visibility_plugin?(class_name) ⇒ Boolean
148 149 150 151 152 153 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 148 def visibility_plugin?(class_name) calls_for(class_name).any? do |call| call.direct && call.name == :use && %w[GraphQL::Schema::Visibility GraphQL::Schema::Warden].include?(call.first_argument) end end |
#visibility_plugin_ambiguous?(class_name) ⇒ Boolean
155 156 157 158 159 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 155 def visibility_plugin_ambiguous?(class_name) !visibility_plugin?(class_name) && calls_for(class_name).any? do |call| call.name == :use && %w[GraphQL::Schema::Visibility GraphQL::Schema::Warden].include?(call.first_argument) end end |
#visibility_plugin_misplaced?(class_name, path, start_offset) ⇒ Boolean
169 170 171 172 173 174 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 169 def visibility_plugin_misplaced?(class_name, path, start_offset) @calls[normalize(class_name)].any? do |call| call.direct && call.path == path && call.start_offset > start_offset && %i[query mutation subscription].include?(call.name) end end |
#visibility_plugin_target?(class_name) ⇒ Boolean
161 162 163 164 165 166 167 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 161 def visibility_plugin_target?(class_name) return false if visibility_plugin?(class_name) ancestors(class_name).drop(1).none? do |name| @declared_names[name] && resolve_kind(name) == :schema && !visibility_plugin?(name) end end |
#visible_definitions ⇒ Object
146 |
# File 'lib/graphql/modernize/class_hierarchy.rb', line 146 def visible_definitions = @visible_definitions.select { |definition| visible_definition?(definition) } |