Module: Lumin::Registry

Defined in:
lib/lumin/registry.rb

Constant Summary collapse

BUILTIN_RULE_NAMES =
%w[
  Style/FrozenStringLiteral
  Style/LineLength
  Lint/NoMethodMissing
].freeze

Class Method Summary collapse

Class Method Details

.allObject



21
22
23
24
# File 'lib/lumin/registry.rb', line 21

def all
  load_builtin_rules
  ordered_classes.to_h { |rule_class| [name_for(rule_class), rule_class] }.freeze
end

.fetch(name) ⇒ Object



26
27
28
# File 'lib/lumin/registry.rb', line 26

def fetch(name)
  all.fetch(name)
end

.name_for(rule_class) ⇒ Object

Raises:



30
31
32
33
34
35
# File 'lib/lumin/registry.rb', line 30

def name_for(rule_class)
  name = rule_class.name
  raise Error, "anonymous rule classes cannot be registered" unless name

  name.sub(/\ALumin::Rules::/, "").gsub("::", "/")
end

.register(rule_class) ⇒ Object



16
17
18
19
# File 'lib/lumin/registry.rb', line 16

def register(rule_class)
  classes << rule_class unless classes.include?(rule_class)
  rule_class
end

.register_namespace(namespace, visited = Set.new) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/lumin/registry.rb', line 37

def register_namespace(namespace, visited = Set.new)
  return if visited.include?(namespace.object_id)

  visited << namespace.object_id
  namespace.constants(false).each do |constant|
    value = namespace.const_get(constant)
    if value.is_a?(Class) && defined?(Lumin::Rule) && value < Lumin::Rule
      register(value)
    elsif value.is_a?(Module)
      register_namespace(value, visited)
    end
  end
end

.reset!Object



51
52
53
54
55
56
57
# File 'lib/lumin/registry.rb', line 51

def reset!
  load_builtin_rules
  builtin_mutex.synchronize do
    @classes = []
    @builtins_loaded = true
  end
end