Class: Mxrb::Compiler::DatabaseConnectorActionCompiler

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

Overview

Mirrors Mendix's Database Connector build extension by lowering custom activities to Java calls. The mapping mirrors one cohesive external build-extension contract. rubocop:disable Metrics/AbcSize, Metrics/ClassLength, Metrics/CyclomaticComplexity, rubocop:disable Metrics/MethodLength, Metrics/PerceivedComplexity

Instance Method Summary collapse

Constructor Details

#initialize(source) ⇒ DatabaseConnectorActionCompiler

Returns a new instance of DatabaseConnectorActionCompiler.



15
16
17
18
# File 'lib/mxrb/compiler/database_connector_action_compiler.rb', line 15

def initialize(source)
  @source = source
  @connections = connection_index
end

Instance Method Details

#compile(action) ⇒ Object



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

def compile(action)
  connection, query = resolve_query(action['Query'].to_s)
  java_action = java_action_for(query)
  mappings = basic_mappings(action, connection, query, java_action)
  mappings.concat(result_mappings(query, java_action))
  {
    '$ID' => action['$ID'], '$Type' => 'Microflows$JavaActionCallAction',
    'QueueSettings' => nil, 'ParameterMappings' => mappings,
    'ErrorHandlingType' => action['ErrorHandlingType'], 'JavaAction' => java_action,
    'ResultVariableName' => action['OutputVariableName'].to_s,
    'UseReturnVariable' => true
  }
end

#unconfigured_write?(action) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/mxrb/compiler/database_connector_action_compiler.rb', line 34

def unconfigured_write?(action)
  return false unless action&.fetch('$Type', nil) == 'DatabaseConnector$ExecuteDatabaseQueryAction'

  connection, query = resolve_query(action['Query'].to_s)
  return false if selecting_query?(query)

  override = array(action['ConnectionParameterMappings']).find do |mapping|
    mapping['ParameterName'].to_s.casecmp('DBSource').zero?
  end
  return false unless override.nil? || override['Value'].to_s.strip.empty?

  constant_name = connection['ConnectionString'].to_s
  constant = @source.units.find do |unit|
    unit.document['$Type'] == 'Constants$Constant' &&
      "#{unit.module_name}.#{unit.document['Name']}" == constant_name
  end
  constant && constant.document['DefaultValue'].to_s.empty?
end