Class: StyleCapsule::ClassRegistry

Inherits:
Object
  • Object
show all
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.

Examples:

# Classes are automatically registered when they include modules
class MyComponent < ApplicationComponent
  include StyleCapsule::Component  # Automatically registered
end

# Iterate over registered classes
StyleCapsule::ClassRegistry.each do |klass|
  klass.clear_css_cache if klass.respond_to?(:clear_css_cache)
end

# Clear registry (useful in development when classes are reloaded)
StyleCapsule::ClassRegistry.clear

Class Method Summary collapse

Class Method Details

.allArray<Class>

Get all registered classes

Returns:

  • (Array<Class>)

    Array of 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

.clearvoid

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

.countInteger

Get the number of registered classes

Returns:

  • (Integer)


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.

Yields:

  • (Class)

    Each registered class



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

Parameters:

  • klass (Class)

    The class to register



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

Parameters:

  • klass (Class)

    The class to unregister



54
55
56
# File 'lib/style_capsule/class_registry.rb', line 54

def unregister(klass)
  @classes.delete(klass)
end