Class: Kettle::Jem::Appraisals::AppraisalsGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/kettle/jem/appraisals/appraisals_generator.rb,
sig/kettle/jem/appraisals.rbs

Overview

Generates the Appraisals file content from the computed matrix.

Each appraisal entry uses eval_gemfile to compose its modular gemfiles (tier1, optional tier2, and x_std_libs).

Examples:

content = AppraisalsGenerator.generate(matrix_entries)
File.write("Appraisals", content)

Class Method Summary collapse

Class Method Details

.appraisal_eval_path(path) ⇒ Object



56
57
58
# File 'lib/kettle/jem/appraisals/appraisals_generator.rb', line 56

def appraisal_eval_path(path)
  path.to_s.delete_prefix("gemfiles/")
end

.effective_appraisal_name(entry) ⇒ Object



60
61
62
# File 'lib/kettle/jem/appraisals/appraisals_generator.rb', line 60

def effective_appraisal_name(entry)
  entry[:appraisal_name] || entry[:name]
end

.generate(matrix) ⇒ String

Generates the full Appraisals file content as a String.

Parameters:

  • matrix (Array<Hash>)

    each entry must have the keys:

    • :name — the generated appraisal name (e.g., "kja-ar-7-1-r3")
    • :appraisal_name — optional effective appraisal name. When present, this lets a generated entry enrich a standard kettle-jem appraisal such as "ruby-3-2".
    • :tier1_gemfile — relative path to the tier1 modular gemfile
    • :tier2_gemfile — relative path to the tier2 modular gemfile (or nil)
    • :extra_gemfiles — optional shared support gemfiles
    • :x_std_libs_gemfile — relative path to the x_std_libs gemfile
    • :ruby_series — the Ruby series bucket name

Returns:

  • (String)

    the complete Appraisals file content



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/kettle/jem/appraisals/appraisals_generator.rb', line 29

def generate(matrix)
  lines = [
    "# frozen_string_literal: true",
    "",
    "# Generated by kettle-jem-appraisals",
    "# Do not edit directly — re-run `kettle-jem-appraisals --resolve` to regenerate.",
    ""
  ]

  matrix.each do |entry|
    lines << "appraise #{effective_appraisal_name(entry).inspect} do"
    lines << "  eval_gemfile #{appraisal_eval_path(entry[:tier1_gemfile]).inspect}" if entry[:tier1_gemfile]
    lines << "  eval_gemfile #{appraisal_eval_path(entry[:tier2_gemfile]).inspect}" if entry[:tier2_gemfile]
    Array(entry[:extra_gemfiles]).each do |path|
      lines << "  eval_gemfile #{appraisal_eval_path(path).inspect}"
    end
    if entry[:x_std_libs_gemfile]
      lines << "  eval_gemfile #{appraisal_eval_path(entry[:x_std_libs_gemfile]).inspect}"
    end
    lines << "end"
    lines << ""
  end

  lines.pop while lines.last == ""
  "#{lines.join("\n")}\n"
end