Class: Mxrb::Compiler::DomainDocumentCompiler

Inherits:
Object
  • Object
show all
Includes:
ModelValues
Defined in:
lib/mxrb/compiler/domain_document_compiler.rb

Overview

Converts domain-model documents from editor shape to Runtime shape.

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ DomainDocumentCompiler

Returns a new instance of DomainDocumentCompiler.



9
10
11
12
13
14
15
16
17
18
# File 'lib/mxrb/compiler/domain_document_compiler.rb', line 9

def initialize(source)
  @source = source
  domain_units = source.respond_to?(:units_of) ? source.units_of('DomainModels$DomainModel') : []
  @entities = domain_units.each_with_object({}) do |unit, result|
    array(unit.document['Entities']).each do |entity|
      result["#{unit.module_name}.#{entity['Name']}"] = entity
    end
  end
  @security = DomainSecurityCompiler.new(source)
end

Instance Method Details

#compile(unit) ⇒ Object

rubocop:disable Metrics/AbcSize



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/mxrb/compiler/domain_document_compiler.rb', line 20

def compile(unit) # rubocop:disable Metrics/AbcSize
  source = unit.document
  {
    '$ID' => source['$ID'], '$Type' => source['$Type'],
    'Entities' => array(source['Entities']).map { compile_entity(_1, unit.module_name) },
    'Associations' => array(source['Associations']).map { @security.association(_1, unit.module_name) },
    'CrossAssociations' => array(source['CrossAssociations']).map do |association|
      @security.association(association, unit.module_name)
    end
  }
end