Class: MendixBridge::RubyInventoryGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/mendix_bridge/ruby_inventory_generator.rb

Class Method Summary collapse

Class Method Details

.file_name(module_name) ⇒ Object



41
42
43
44
45
46
# File 'lib/mendix_bridge/ruby_inventory_generator.rb', line 41

def self.file_name(module_name)
  module_name
    .gsub(/([a-z\d])([A-Z])/, '\1_\2')
    .gsub(/[^A-Za-z0-9]+/, "_")
    .downcase
end

.generate(inventory) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/mendix_bridge/ruby_inventory_generator.rb', line 5

def self.generate(inventory)
  inventory.modules.each_with_object({}) do |app_module, result|
    name = app_module.qualified_name
    elements = inventory.elements.select do |element|
      element.qualified_name&.start_with?("#{name}.") &&
        %w[entity association].include?(element.type)
    end
    next if elements.empty?

    result[name] = {
      "entities" => elements.select { |element| element.type == "entity" }.map { |element| serialize(element) },
      "associations" => elements.select { |element| element.type == "association" }.map { |element| serialize(element) }
    }
  end
end

.ruby_source(module_name, domain) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/mendix_bridge/ruby_inventory_generator.rb', line 21

def self.ruby_source(module_name, domain)
  namespace = module_name.gsub(/[^A-Za-z0-9_]/, "_")
  json = JSON.pretty_generate(domain)

  <<~RUBY
    # frozen_string_literal: true
    # Generated by mendix-ruby import. Changes will be replaced by refresh.

    require "json"

    module MendixGenerated
      module #{namespace}
        DOMAIN_MODEL = JSON.parse(<<~JSON)
    #{indent(json, 6)}
        JSON
      end
    end
  RUBY
end