Module: RuboCop::AST::NodePattern::Sets

Defined in:
lib/rubocop/ast/node_pattern/sets.rb

Overview

Utility to assign a set of values to a constant

Constant Summary collapse

REGISTRY =
Hash.new do |h, set|
  name = Sets.name(set).freeze
  Sets.const_set(name, set)
  h[set] = "::RuboCop::AST::NodePattern::Sets::#{name}"
end
MAX =
4

Class Method Summary collapse

Class Method Details

.[](set) ⇒ Object


31
32
33
# File 'lib/rubocop/ast/node_pattern/sets.rb', line 31

def self.[](set)
  REGISTRY[set]
end

.name(set) ⇒ Object


15
16
17
18
19
20
# File 'lib/rubocop/ast/node_pattern/sets.rb', line 15

def self.name(set)
  elements = set
  elements = set.first(MAX - 1) << :etc if set.size > MAX
  name = elements.to_a.join('_').upcase.gsub(/[^A-Z0-9_]/, '')
  uniq("SET_#{name}")
end

.uniq(name) ⇒ Object


22
23
24
25
26
27
28
29
# File 'lib/rubocop/ast/node_pattern/sets.rb', line 22

def self.uniq(name)
  return name unless Sets.const_defined?(name)

  (2..Float::INFINITY).each do |i|
    uniq = "#{name}_#{i}"
    return uniq unless Sets.const_defined?(uniq)
  end
end