Class: HasHelpers::Cards::Registry
- Inherits:
-
Object
- Object
- HasHelpers::Cards::Registry
- Defined in:
- app/models/has_helpers/cards/registry.rb
Defined Under Namespace
Classes: DefinitionEntry, DuplicateIdentifierError
Class Method Summary collapse
-
.cards ⇒ Object
Returns all registered card definitions.
-
.ensure_definitions_for(owner) ⇒ Object
Ensures the definitions for a single owner are built (used by Base.definitions).
-
.register_card!(card_hash) ⇒ Object
Registers a card definition (normalized hash).
-
.register_card_files(paths) ⇒ Object
Registers all card files to load when cards are requested.
-
.register_definition(owner:, block:) ⇒ Object
Registers a lazy card definition block for a given owner class.
-
.reset! ⇒ Object
Only intended for tests.
Class Method Details
.cards ⇒ Object
Returns all registered card definitions. Structure: array of normalized hashes ready for import.
13 14 15 16 17 18 |
# File 'app/models/has_helpers/cards/registry.rb', line 13 def cards load_card_files_once! build_pending_definitions! cards_storage end |
.ensure_definitions_for(owner) ⇒ Object
Ensures the definitions for a single owner are built (used by Base.definitions).
45 46 47 48 |
# File 'app/models/has_helpers/cards/registry.rb', line 45 def ensure_definitions_for(owner) build_pending_definitions!(only: owner) owner.instance_variable_get(:@definitions) || [] end |
.register_card!(card_hash) ⇒ Object
Registers a card definition (normalized hash). Validates that the identifier is unique across all registered cards.
35 36 37 38 39 40 41 42 |
# File 'app/models/has_helpers/cards/registry.rb', line 35 def register_card!(card_hash) if cards_storage.any? { |c| c[:identifier] == card_hash[:identifier] } identifier = card_hash[:identifier].try(:name) || card_hash[:identifier] raise DuplicateIdentifierError, "Duplicate card identifier: #{identifier}" end cards_storage << deep_freeze(card_hash) end |
.register_card_files(paths) ⇒ Object
Registers all card files to load when cards are requested.
28 29 30 31 |
# File 'app/models/has_helpers/cards/registry.rb', line 28 def register_card_files(paths) @card_file_paths = Array(paths) @card_files_loaded = false end |
.register_definition(owner:, block:) ⇒ Object
Registers a lazy card definition block for a given owner class.
21 22 23 24 25 |
# File 'app/models/has_helpers/cards/registry.rb', line 21 def register_definition(owner:, block:) raise ArgumentError, "Block required for card definition" unless block pending_definitions[owner] = DefinitionEntry.new(owner: owner, block: block, built: false) end |
.reset! ⇒ Object
Only intended for tests.
51 52 53 54 55 |
# File 'app/models/has_helpers/cards/registry.rb', line 51 def reset! @cards = [] @pending_definitions = {} @card_files_loaded = false end |