Class: GraphQL::Modernize::Rules::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/graphql/modernize/rules/base.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context:, rewriter:, config:, suppression: nil, hierarchy: nil, edit_rules: {}) ⇒ Base

Returns a new instance of Base.



35
36
37
38
39
40
41
42
43
# File 'lib/graphql/modernize/rules/base.rb', line 35

def initialize(context:, rewriter:, config:, suppression: nil, hierarchy: nil, edit_rules: {})
  @context = context
  @rewriter = rewriter
  @config = config
  @suppression = suppression
  @hierarchy = hierarchy
  @edit_rules = edit_rules
  @offenses = []
end

Class Attribute Details

.metadataObject (readonly)

Returns the value of attribute metadata.



11
12
13
# File 'lib/graphql/modernize/rules/base.rb', line 11

def 
  @metadata
end

.patternsObject (readonly)

Returns the value of attribute patterns.



11
12
13
# File 'lib/graphql/modernize/rules/base.rb', line 11

def patterns
  @patterns
end

Instance Attribute Details

#offensesObject (readonly)

Returns the value of attribute offenses.



33
34
35
# File 'lib/graphql/modernize/rules/base.rb', line 33

def offenses
  @offenses
end

Class Method Details

.node_pattern(node_type, pattern_source, handler: :on_match) ⇒ Object



22
23
24
25
26
# File 'lib/graphql/modernize/rules/base.rb', line 22

def node_pattern(node_type, pattern_source, handler: :on_match)
  @patterns ||= []
  @patterns << Pattern.new(node_type: node_type.to_sym,
                           compiled: Astel::NodePattern.compile(pattern_source), handler: handler)
end

.node_typesObject



28
29
30
# File 'lib/graphql/modernize/rules/base.rb', line 28

def node_types
  (@patterns || []).map(&:node_type).uniq
end

.rule(id:, safety:, summary:, since: nil, removed_in: nil, docs: nil, default_enabled: true) ⇒ Object

Raises:

  • (ArgumentError)


13
14
15
16
17
18
19
20
# File 'lib/graphql/modernize/rules/base.rb', line 13

def rule(id:, safety:, summary:, since: nil, removed_in: nil, docs: nil, default_enabled: true)
  raise ArgumentError, "invalid rule id: #{id}" unless id.match?(/\AGQLM\d{3}\z/)
  raise ArgumentError, "invalid safety: #{safety}" unless %i[safe unsafe manual].include?(safety)

  @metadata = Metadata.new(id: id, safety: safety, summary: summary, since: since,
                           removed_in: removed_in, docs: docs, default_enabled: default_enabled)
  RuleRegistry.register(self)
end

Instance Method Details

#visit(node) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/graphql/modernize/rules/base.rb', line 45

def visit(node)
  self.class.patterns.each do |pattern|
    next unless pattern.node_type == Astel::NodeType.from_class_name(node.class.name.split("::").last)

    captures = pattern.compiled.match(node)
    send(pattern.handler, node, captures) if captures
  end
end