Class: Rbdantic::JsonSchema::DefsRegistry
- Inherits:
-
Object
- Object
- Rbdantic::JsonSchema::DefsRegistry
- Defined in:
- lib/rbdantic/json_schema/defs_registry.rb
Overview
Registry for tracking model schemas during generation Used to implement $defs/$ref pattern for circular references
Instance Method Summary collapse
-
#being_processed?(model_class) ⇒ Boolean
Check if a model is currently being processed (for cycle detection).
-
#clear ⇒ Object
Clear the registry (for fresh generation).
-
#defs_hash(except: nil) ⇒ Hash?
Get the $defs hash for inclusion in top-level schema.
-
#initialize ⇒ DefsRegistry
constructor
A new instance of DefsRegistry.
- #key_for(model_class) ⇒ Object
-
#mark_processing(model_class) ⇒ Object
Mark a model as being processed.
-
#ref_for(model_class) ⇒ Hash
Generate a $ref for a registered model.
- #referenced?(model_class) ⇒ Boolean
-
#register(model_class, schema) ⇒ String
Register a model's completed schema and return its key.
-
#registered?(model_class) ⇒ Boolean
Check if a model's schema is registered (completed).
Constructor Details
#initialize ⇒ DefsRegistry
Returns a new instance of DefsRegistry.
10 11 12 13 14 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 10 def initialize @defs = {} @being_processed = Set.new # Currently being processed (for cycle detection) @referenced = Set.new end |
Instance Method Details
#being_processed?(model_class) ⇒ Boolean
Check if a model is currently being processed (for cycle detection)
23 24 25 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 23 def being_processed?(model_class) @being_processed.include?(model_class) end |
#clear ⇒ Object
Clear the registry (for fresh generation)
72 73 74 75 76 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 72 def clear @defs.clear @being_processed.clear @referenced.clear end |
#defs_hash(except: nil) ⇒ Hash?
Get the $defs hash for inclusion in top-level schema
66 67 68 69 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 66 def defs_hash(except: nil) defs = except ? @defs.reject { |key, _| key == key_for(except) } : @defs defs.empty? ? nil : defs end |
#key_for(model_class) ⇒ Object
16 17 18 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 16 def key_for(model_class) model_class.name || "AnonymousModel_#{model_class.object_id}" end |
#mark_processing(model_class) ⇒ Object
Mark a model as being processed
29 30 31 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 29 def mark_processing(model_class) @being_processed.add(model_class) end |
#ref_for(model_class) ⇒ Hash
Generate a $ref for a registered model
58 59 60 61 62 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 58 def ref_for(model_class) key = key_for(model_class) @referenced.add(key) { "$ref" => "#/$defs/#{key}" } end |
#referenced?(model_class) ⇒ Boolean
51 52 53 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 51 def referenced?(model_class) @referenced.include?(key_for(model_class)) end |
#register(model_class, schema) ⇒ String
Register a model's completed schema and return its key
37 38 39 40 41 42 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 37 def register(model_class, schema) key = key_for(model_class) @defs[key] = schema @being_processed.delete(model_class) # No longer being processed key end |
#registered?(model_class) ⇒ Boolean
Check if a model's schema is registered (completed)
47 48 49 |
# File 'lib/rbdantic/json_schema/defs_registry.rb', line 47 def registered?(model_class) @defs.key?(key_for(model_class)) end |