Module: Fosm::Registry
- Defined in:
- lib/fosm/registry.rb
Overview
Global registry of all FOSM app model classes. Models auto-register when they include Fosm::Lifecycle and call lifecycle { }.
Class Method Summary collapse
- .all ⇒ Object
- .each(&block) ⇒ Object
- .find(slug) ⇒ Object
- .model_classes ⇒ Object
- .register(model_class, slug:) ⇒ Object
- .slug_for(model_class) ⇒ Object
- .slugs ⇒ Object
Class Method Details
.all ⇒ Object
17 18 19 |
# File 'lib/fosm/registry.rb', line 17 def all @registered end |
.each(&block) ⇒ Object
39 40 41 |
# File 'lib/fosm/registry.rb', line 39 def each(&block) @registered.each(&block) end |
.find(slug) ⇒ Object
21 22 23 |
# File 'lib/fosm/registry.rb', line 21 def find(slug) @registered[slug] end |
.model_classes ⇒ Object
25 26 27 |
# File 'lib/fosm/registry.rb', line 25 def model_classes @registered.values.map { |klass| klass.name.constantize rescue klass } end |
.register(model_class, slug:) ⇒ Object
8 9 10 11 12 13 14 15 |
# File 'lib/fosm/registry.rb', line 8 def register(model_class, slug:) unless slug.match?(/\A[a-z0-9_]+\z/) raise ArgumentError, "FOSM slug must contain only lowercase letters, digits, and underscores " \ "(got: #{slug.inspect} for #{model_class.name}). " \ "Hyphens are not allowed because slugs are used to construct Ruby route helper names." end @registered[slug] = model_class end |
.slug_for(model_class) ⇒ Object
29 30 31 32 33 |
# File 'lib/fosm/registry.rb', line 29 def slug_for(model_class) target_name = model_class.name @registered.each { |slug, klass| return slug if klass.name == target_name } nil end |
.slugs ⇒ Object
35 36 37 |
# File 'lib/fosm/registry.rb', line 35 def slugs @registered.keys end |