Class: Metaschema::ModelGenerator::AssemblyFactory
- Inherits:
-
Object
- Object
- Metaschema::ModelGenerator::AssemblyFactory
- Defined in:
- lib/metaschema/model_generator/assembly_factory.rb
Overview
Creates assembly classes from Metaschema assembly definitions. Handles placeholder creation, population with XML/JSON mappings, model processing (fields, assemblies, choices), and custom serialization callbacks (BY_KEY, SINGLETON_OR_ARRAY, json-value-key-flag).
Instance Method Summary collapse
- #create_placeholder ⇒ Object
-
#initialize(assembly_def, generator) ⇒ AssemblyFactory
constructor
A new instance of AssemblyFactory.
- #populate ⇒ Object
Constructor Details
#initialize(assembly_def, generator) ⇒ AssemblyFactory
Returns a new instance of AssemblyFactory.
10 11 12 13 |
# File 'lib/metaschema/model_generator/assembly_factory.rb', line 10 def initialize(assembly_def, generator) @assembly_def = assembly_def @g = generator end |
Instance Method Details
#create_placeholder ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/metaschema/model_generator/assembly_factory.rb', line 15 def create_placeholder ad = @assembly_def return unless ad.name klass_name = "Assembly_#{ad.name.gsub('-', '_')}" @g.classes[klass_name] ||= Class.new(Lutaml::Model::Serializable) end |
#populate ⇒ Object
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 48 49 50 |
# File 'lib/metaschema/model_generator/assembly_factory.rb', line 23 def populate ad = @assembly_def return unless ad.name klass_name = "Assembly_#{ad.name.gsub('-', '_')}" klass = @g.classes[klass_name] return unless klass @g.current_assembly_name = ad.name.gsub("-", "_") ad.define_flag&.each { |f| @g.add_inline_flag(klass, f) } ad.flag&.each { |f| @g.add_flag_reference(klass, f) } process_model(klass, ad.model) if ad.model root_name = ad.root_name&.content || ad.name build_assembly_xml(klass, root_name, ad) build_assembly_json(klass, root_name, ad) if ad.root_name&.content add_json_root_handling(klass, root_name) end @g.apply_constraint_validation(klass, ad.constraint) klass.instance_variable_set(:@populated, true) ensure @g.current_assembly_name = nil end |