Class: StyleCapsule::ClassRegistry
- Inherits:
-
Object
- Object
- StyleCapsule::ClassRegistry
- Defined in:
- lib/style_capsule/class_registry.rb
Overview
Registry for tracking classes that include StyleCapsule modules
This provides a Rails-friendly way to track classes without using ObjectSpace, which can be problematic with certain gems (e.g., Faker) that override Class#name.
Classes are automatically registered when they include StyleCapsule::Component or StyleCapsule::ViewComponent.
Class Method Summary collapse
-
.all ⇒ Array<Class>
Get all registered classes.
-
.clear ⇒ void
Clear the registry.
-
.count ⇒ Integer
Get the number of registered classes.
-
.each {|Class| ... } ⇒ void
Iterate over all registered classes.
-
.register(klass) ⇒ void
Register a class that includes a StyleCapsule module.
-
.unregister(klass) ⇒ void
Remove a class from the registry.
Class Method Details
.all ⇒ Array<Class>
Get all registered classes
80 81 82 83 |
# File 'lib/style_capsule/class_registry.rb', line 80 def all # Filter out invalid classes each.to_a end |
.clear ⇒ void
This method returns an undefined value.
Clear the registry
Useful in development when classes are reloaded.
90 91 92 |
# File 'lib/style_capsule/class_registry.rb', line 90 def clear @classes.clear end |
.count ⇒ Integer
Get the number of registered classes
97 98 99 |
# File 'lib/style_capsule/class_registry.rb', line 97 def count each.count end |
.each {|Class| ... } ⇒ void
This method returns an undefined value.
Iterate over all registered classes
Prunes invalid entries on each call (linear in registry size). The set of StyleCapsule components is typically small, so this stays cheap compared to ObjectSpace scans.
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/style_capsule/class_registry.rb', line 65 def each(&block) @classes.delete_if do |klass| # Check if class still exists and is valid klass.name.nil? || klass.singleton_class? rescue # Class has been unloaded or causes errors - remove from registry true end @classes.each(&block) end |
.register(klass) ⇒ void
This method returns an undefined value.
Register a class that includes a StyleCapsule module
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/style_capsule/class_registry.rb', line 34 def register(klass) return if klass.nil? return if klass.singleton_class? # Only register classes with names (skip anonymous classes) begin name = klass.name return if name.nil? || name.to_s.strip.empty? rescue # Skip classes that cause errors when calling name (e.g., ArgumentError, NoMethodError, NameError) return end @classes.add(klass) end |
.unregister(klass) ⇒ void
This method returns an undefined value.
Remove a class from the registry
54 55 56 |
# File 'lib/style_capsule/class_registry.rb', line 54 def unregister(klass) @classes.delete(klass) end |