Class: Coradoc::Html::Theme::Registry
- Inherits:
-
Object
- Object
- Coradoc::Html::Theme::Registry
- Defined in:
- lib/coradoc/html/theme/registry.rb
Overview
Theme registry for managing and retrieving theme renderers
The registry maintains a collection of available themes and provides methods for registration, lookup, and validation.
Class Method Summary collapse
-
.all_theme_names ⇒ Array<Symbol>
Get all registered theme names.
-
.auto_register(renderer_class) ⇒ Object
Auto-register a theme class.
-
.clear ⇒ void
Clear all registered themes (mainly for testing).
-
.default_theme ⇒ Symbol
Get default theme name.
-
.find(name) ⇒ Class?
Find a theme renderer by name.
-
.register(name, renderer_class) ⇒ Object
Register a theme renderer.
-
.registered?(name) ⇒ Boolean
Check if a theme is registered.
-
.resolve_from_options(options = {}) ⇒ Class
Resolve theme from options.
-
.themes ⇒ Hash
Registered themes mapping.
Class Method Details
.all_theme_names ⇒ Array<Symbol>
Get all registered theme names
79 80 81 |
# File 'lib/coradoc/html/theme/registry.rb', line 79 def all_theme_names themes.keys.sort end |
.auto_register(renderer_class) ⇒ Object
Auto-register a theme class
This method is called by theme classes when they are loaded. It extracts the theme name from the class name and registers it.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/coradoc/html/theme/registry.rb', line 125 def auto_register(renderer_class) # Extract theme name from class name # e.g., ModernRenderer -> :modern, ClassicRenderer -> :classic class_name = renderer_class.name.split('::').last # Remove "Renderer" suffix if present theme_name = class_name.sub(/Renderer$/, '') .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase .to_sym register(theme_name, renderer_class) end |
.clear ⇒ void
This method returns an undefined value.
Clear all registered themes (mainly for testing)
146 147 148 |
# File 'lib/coradoc/html/theme/registry.rb', line 146 def clear @themes = {} end |
.default_theme ⇒ Symbol
Get default theme name
86 87 88 |
# File 'lib/coradoc/html/theme/registry.rb', line 86 def default_theme :classic end |
.find(name) ⇒ Class?
Find a theme renderer by name
58 59 60 |
# File 'lib/coradoc/html/theme/registry.rb', line 58 def find(name) themes[name] end |
.register(name, renderer_class) ⇒ Object
Register a theme renderer
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/coradoc/html/theme/registry.rb', line 40 def register(name, renderer_class) unless renderer_class.is_a?(Class) && renderer_class <= Coradoc::Html::Theme::Base raise ArgumentError, 'Theme renderer must be a subclass of Coradoc::Html::Theme::Base, ' \ "got: #{renderer_class}" end themes[name] = renderer_class end |
.registered?(name) ⇒ Boolean
Check if a theme is registered
69 70 71 |
# File 'lib/coradoc/html/theme/registry.rb', line 69 def registered?(name) themes.key?(name) end |
.resolve_from_options(options = {}) ⇒ Class
Resolve theme from options
Returns the theme renderer class based on the provided options. Falls back to default theme if not specified or if theme not found.
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/coradoc/html/theme/registry.rb', line 100 def ( = {}) theme_name = .fetch(:theme, default_theme) renderer_class = find(theme_name) return renderer_class if renderer_class # Theme not found, fall back to default Coradoc::Logger.warn( "Theme '#{theme_name}' not found, falling back to '#{default_theme}'" ) find(default_theme) || raise("Default theme '#{default_theme}' not registered") end |
.themes ⇒ Hash
Registered themes mapping
28 29 30 |
# File 'lib/coradoc/html/theme/registry.rb', line 28 def themes @themes ||= {} end |