Class: MermaidRailsErd::RelationshipRegistry
- Inherits:
-
Object
- Object
- MermaidRailsErd::RelationshipRegistry
- Defined in:
- lib/mermaid_rails_erd/relationship_registry.rb
Instance Attribute Summary collapse
-
#builders ⇒ Object
readonly
Returns the value of attribute builders.
-
#model_data_collector ⇒ Object
readonly
Returns the value of attribute model_data_collector.
-
#polymorphic_resolver ⇒ Object
readonly
Returns the value of attribute polymorphic_resolver.
Instance Method Summary collapse
- #build_all_relationships ⇒ Object
- #build_relationships(model, assoc) ⇒ Object
-
#initialize(symbol_mapper:, association_resolver:, polymorphic_resolver:, model_data_collector:, printed_tables: Set.new) ⇒ RelationshipRegistry
constructor
A new instance of RelationshipRegistry.
Constructor Details
#initialize(symbol_mapper:, association_resolver:, polymorphic_resolver:, model_data_collector:, printed_tables: Set.new) ⇒ RelationshipRegistry
Returns a new instance of RelationshipRegistry.
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 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 13 def initialize( symbol_mapper:, association_resolver:, polymorphic_resolver:, model_data_collector:, printed_tables: Set.new ) @polymorphic_resolver = polymorphic_resolver @model_data_collector = model_data_collector @printed_tables = printed_tables @builders = { belongs_to: RelationshipBuilders::BelongsToRelationshipBuilder.new( symbol_mapper: symbol_mapper, association_resolver: association_resolver, model_data_collector: model_data_collector, ), has_many: RelationshipBuilders::HasManyRelationshipBuilder.new( symbol_mapper: symbol_mapper, association_resolver: association_resolver, model_data_collector: model_data_collector, ), has_one: RelationshipBuilders::HasOneRelationshipBuilder.new( symbol_mapper: symbol_mapper, association_resolver: association_resolver, model_data_collector: model_data_collector, ), has_and_belongs_to_many: RelationshipBuilders::HasAndBelongsToManyRelationshipBuilder.new( symbol_mapper: symbol_mapper, association_resolver: association_resolver, printed_tables: printed_tables, model_data_collector: model_data_collector, ), } end |
Instance Attribute Details
#builders ⇒ Object (readonly)
Returns the value of attribute builders.
11 12 13 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 11 def builders @builders end |
#model_data_collector ⇒ Object (readonly)
Returns the value of attribute model_data_collector.
11 12 13 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 11 def model_data_collector @model_data_collector end |
#polymorphic_resolver ⇒ Object (readonly)
Returns the value of attribute polymorphic_resolver.
11 12 13 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 11 def polymorphic_resolver @polymorphic_resolver end |
Instance Method Details
#build_all_relationships ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 65 def build_all_relationships relationships = [] # Process polymorphic associations first @model_data_collector.polymorphic_associations.each do |data| model = data[:model] assoc = data[:association] relationships.concat(build_relationships(model, assoc)) end # Then process regular associations @model_data_collector.regular_associations.each do |data| model = data[:model] assoc = data[:association] relationships.concat(build_relationships(model, assoc)) end relationships end |
#build_relationships(model, assoc) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/mermaid_rails_erd/relationship_registry.rb', line 49 def build_relationships(model, assoc) # Check for polymorphic association first if assoc.[:polymorphic] from_table = model.table_name rel_type = builders[assoc.macro].symbol_mapper.map(assoc.macro) return polymorphic_resolver.resolve(assoc.name.to_s, from_table, rel_type) end # Delegate to the appropriate builder builder = builders[assoc.macro] return builder.build(model, assoc) if builder # If no builder exists for this macro type, return an empty array [] end |