Class: ActiveVersion::VersionRegistry
- Inherits:
-
Object
- Object
- ActiveVersion::VersionRegistry
- Defined in:
- lib/active_version/version_registry.rb
Overview
Registry for tracking versioned models and their configuration
Instance Method Summary collapse
-
#clear! ⇒ Object
Clear all registrations (useful for testing).
-
#config_for(model_class, version_type) ⇒ Object
Get configuration for a model and version type.
-
#config_for_model_name(model_name, version_type) ⇒ Object
Get configuration by model class name and version type.
-
#initialize ⇒ VersionRegistry
constructor
A new instance of VersionRegistry.
-
#models_for_version_type(version_type) ⇒ Object
Get all registered models for a version type.
-
#register(model_class, version_type, options = {}) ⇒ Object
Register a model with versioning Detects conflicts when re-registering with different options or duplicate registrations.
-
#register_version_class(model_class, version_type, version_class) ⇒ Object
Register a version class.
-
#registered?(model_class, version_type) ⇒ Boolean
Check if a model is registered for versioning.
-
#version_class_for(model_class, version_type) ⇒ Object
Get version class for a model and version type.
Constructor Details
#initialize ⇒ VersionRegistry
Returns a new instance of VersionRegistry.
4 5 6 7 |
# File 'lib/active_version/version_registry.rb', line 4 def initialize @models = {} @version_classes = {} end |
Instance Method Details
#clear! ⇒ Object
Clear all registrations (useful for testing)
78 79 80 81 |
# File 'lib/active_version/version_registry.rb', line 78 def clear! @models.clear @version_classes.clear end |
#config_for(model_class, version_type) ⇒ Object
Get configuration for a model and version type
64 65 66 67 |
# File 'lib/active_version/version_registry.rb', line 64 def config_for(model_class, version_type) key = registry_key(model_class, version_type) @models[key]&.fetch(:options, {}) end |
#config_for_model_name(model_name, version_type) ⇒ Object
Get configuration by model class name and version type. Useful while constants are still being wired and only the intended class name is known.
72 73 74 75 |
# File 'lib/active_version/version_registry.rb', line 72 def config_for_model_name(model_name, version_type) key = :"#{model_name}:#{version_type}" @models[key]&.fetch(:options, {}) end |
#models_for_version_type(version_type) ⇒ Object
Get all registered models for a version type
58 59 60 61 |
# File 'lib/active_version/version_registry.rb', line 58 def models_for_version_type(version_type) @models.select { |_k, v| v[:version_type] == version_type } .map { |_k, v| v[:model_class] } end |
#register(model_class, version_type, options = {}) ⇒ Object
Register a model with versioning Detects conflicts when re-registering with different options or duplicate registrations
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/active_version/version_registry.rb', line 11 def register(model_class, version_type, = {}) key = registry_key(model_class, version_type) # Check for existing registration if @models.key?(key) existing = @models[key] # Detect option conflicts if existing[:options] != ActiveVersion.logger&.warn( "[ActiveVersion] Re-registering #{model_class.name} with :#{version_type} " \ "with different options. Previous: #{existing[:options].inspect}, " \ "New: #{.inspect}. This may indicate a configuration issue." ) else # Same options - likely a double include, but not necessarily a problem # Log at debug level if needed end end @models[key] = { model_class: model_class, version_type: version_type, options: , registered_at: Time.current } end |
#register_version_class(model_class, version_type, version_class) ⇒ Object
Register a version class
46 47 48 49 |
# File 'lib/active_version/version_registry.rb', line 46 def register_version_class(model_class, version_type, version_class) key = registry_key(model_class, version_type) @version_classes[key] = version_class end |
#registered?(model_class, version_type) ⇒ Boolean
Check if a model is registered for versioning
52 53 54 55 |
# File 'lib/active_version/version_registry.rb', line 52 def registered?(model_class, version_type) key = registry_key(model_class, version_type) @models.key?(key) end |
#version_class_for(model_class, version_type) ⇒ Object
Get version class for a model and version type
40 41 42 43 |
# File 'lib/active_version/version_registry.rb', line 40 def version_class_for(model_class, version_type) key = registry_key(model_class, version_type) @version_classes[key] end |