Class: Mxrb::Compiler::SystemModelSeed
- Inherits:
-
Object
- Object
- Mxrb::Compiler::SystemModelSeed
- Defined in:
- lib/mxrb/compiler/system_model_seed.rb
Overview
Versioned Runtime-owned System module omitted from application MPR files.
Constant Summary collapse
- MODULE_ID =
'6e3fe785-0e7d-42ec-a592-8bc1ea4ea87d'- VERSION_BANDS =
[ ['6.0.0', '7.0.0', '6.10.8'], ['7.0.0', '7.17.0', '7.5.0'], ['7.17.0', '8.0.0', '7.17.0'], ['9.0.0', '10.0.0', '9.6.1.29396'], ['10.0.0', '11.0.0', '10.24.0.73019'], ['11.0.0', '12.0.0', '11.12.1'] ].map { |minimum, maximum, seed| [Gem::Version.new(minimum), Gem::Version.new(maximum), seed] } .freeze
Instance Attribute Summary collapse
-
#package ⇒ Object
readonly
rubocop:enable Metrics/AbcSize, Metrics/MethodLength.
-
#seed_version ⇒ Object
readonly
rubocop:enable Metrics/AbcSize, Metrics/MethodLength.
-
#target_version ⇒ Object
readonly
rubocop:enable Metrics/AbcSize, Metrics/MethodLength.
Class Method Summary collapse
- .for(version) ⇒ Object
-
.seed_version_for(version) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
Instance Method Summary collapse
- #document_references(module_document, domain) ⇒ Object
- #domain_document ⇒ Object
-
#initialize(package, target_version: nil, seed_version: nil) ⇒ SystemModelSeed
constructor
A new instance of SystemModelSeed.
- #module_reference ⇒ Object
- #validate_module!(module_document, domain) ⇒ Object
Constructor Details
#initialize(package, target_version: nil, seed_version: nil) ⇒ SystemModelSeed
Returns a new instance of SystemModelSeed.
54 55 56 57 58 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 54 def initialize(package, target_version: nil, seed_version: nil) @package = package @target_version = target_version&.to_s @seed_version = seed_version&.to_s end |
Instance Attribute Details
#package ⇒ Object (readonly)
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
52 53 54 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 52 def package @package end |
#seed_version ⇒ Object (readonly)
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
52 53 54 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 52 def seed_version @seed_version end |
#target_version ⇒ Object (readonly)
rubocop:enable Metrics/AbcSize, Metrics/MethodLength
52 53 54 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 52 def target_version @target_version end |
Class Method Details
.for(version) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 22 def self.for(version) seed_version = seed_version_for(version) path = File.join(__dir__, 'schemas', "system-model-#{seed_version}.b64") raise CompilationError, "no native System model seed for Mendix #{version}" unless File.file?(path) bytes = Zlib.gunzip(Base64.decode64(File.read(path))) new(ModelPackage.decode(bytes, File.basename(path)), target_version: version, seed_version:) rescue Zlib::Error, ArgumentError => e raise CompilationError, "invalid System model seed for Mendix #{version}: #{e.}" end |
.seed_version_for(version) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 33 def self.seed_version_for(version) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength exact = version.to_s return exact if File.file?(File.join(__dir__, 'schemas', "system-model-#{exact}.b64")) unless exact.match?(/\A\d+(?:\.\d+){1,3}(?:[-+].*)?\z/) raise CompilationError, "invalid Mendix version #{version.inspect}" end target = Gem::Version.new(exact.scan(/\d+/).first(3).join('.')) band = VERSION_BANDS.find { |minimum, maximum, _seed| target >= minimum && target < maximum } return band.last if band raise CompilationError, "no audited native System model seed for Mendix #{version}; " \ 'supported families are 6.x, 7.x, 9.x, 10.x, and 11.x' rescue ArgumentError raise CompilationError, "invalid Mendix version #{version.inspect}" end |
Instance Method Details
#document_references(module_document, domain) ⇒ Object
76 77 78 79 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 76 def document_references(module_document, domain) documents = package.documents.reject { [module_document, domain].include?(_1) } documents.map { _1.slice('$ID', '$Type') } end |
#domain_document ⇒ Object
72 73 74 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 72 def domain_document package.documents.find { _1['$Type'] == 'DomainModels$DomainModel' } end |
#module_reference ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 60 def module_reference module_document = package.find(MODULE_ID)&.document domain = domain_document validate_module!(module_document, domain) { '$ID' => module_document['$ID'], '$Type' => module_document['$Type'], 'DomainModel' => domain.slice('$ID', '$Type'), 'AllDocuments' => document_references(module_document, domain) } end |
#validate_module!(module_document, domain) ⇒ Object
81 82 83 84 85 |
# File 'lib/mxrb/compiler/system_model_seed.rb', line 81 def validate_module!(module_document, domain) return if module_document && domain raise CompilationError, 'System model seed is missing its module or domain model' end |