Class: Stupidedi::Schema::Generation::Runner

Inherits:
Object
  • Object
show all
Defined in:
lib/stupidedi/schema/generation/runner.rb

Overview

Orchestrates a full-release generation run. Reads the flat files, then runs every generator in dependency order. Mirrors the Tediware stupidedi:generate_version pipeline.

All files are generated into a temporary staging directory first. The registration and master-loader generators scan that staging tree (not the live out), so their content is always consistent with the run - including under write: false (dry-run previews are accurate). On a successful write run the staging tree is copied into out in one step, so a failure partway through never leaves a half-written tree.

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Constructor Details

#initialize(table_data:, release:, out:, namespace: "Edi", write: true, master_loader: false, logger: nil) ⇒ Runner

Returns a new instance of Runner.



23
24
25
26
27
28
29
30
31
# File 'lib/stupidedi/schema/generation/runner.rb', line 23

def initialize(table_data:, release:, out:, namespace: "Edi", write: true, master_loader: false, logger: nil)
  @table_data = table_data
  @release_code = release
  @out = out
  @namespace = namespace
  @write = write
  @master_loader = master_loader
  @logger = logger
end

Instance Method Details

#runArray<Result>

Returns one entry per generated file.

Returns:

  • (Array<Result>)

    one entry per generated file



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/stupidedi/schema/generation/runner.rb', line 34

def run
  Generation.validate_namespace!(@namespace)
  validate_release!

  release = FlatFileReader.read(@table_data, @release_code)
  guard_against_empty!(release)
  log "Read release #{release.code}: " \
      "#{release.elements.size} elements, #{release.segments.size} segments, " \
      "#{release.transaction_sets.size} transaction sets"

  results = []
  Dir.mktmpdir("tediparse-gen") do |staging|
    @staging = staging
    results = generate_all(release)
    if @write
      ensure_out
      replace_staged_release_dirs
      FileUtils.cp_r(File.join(staging, "."), @out)
    end
  end

  log "#{@write ? 'Wrote' : 'Previewed'} #{results.size} files under #{@out}"
  results
end