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
- .all ⇒ Object
- .fetch(name) ⇒ Object
- .name_for(rule_class) ⇒ Object
- .register(rule_class) ⇒ Object
- .register_namespace(namespace, visited = Set.new) ⇒ Object
- .reset! ⇒ Object
Class Method Details
.all ⇒ Object
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
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 |