Class: Diogenes::Evaluation::DecisionRecord

Inherits:
Object
  • Object
show all
Defined in:
lib/diogenes/evaluation/decision_record.rb,
sig/generated/diogenes/evaluation/decision_record.rbs

Defined Under Namespace

Classes: RenderContext

Constant Summary collapse

DEFAULT_OUTPUT_DIR =

: String

Returns:

  • (String)
"docs/decisions"
BUNDLED_TEMPLATE =

: String

Returns:

  • (String)
File.expand_path("../templates/init/artifacts/decision_record.md.erb", __dir__).freeze
PROJECT_TEMPLATE =

: String

Returns:

  • (String)
".diogenes/artifacts/decision_record.md.erb"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(description:, results:, evaluator:, output_dir: DEFAULT_OUTPUT_DIR) ⇒ DecisionRecord

: (description: String, results: Array, evaluator: String, ?output_dir: String) -> void

Parameters:

  • description: (String)
  • results: (Array[untyped])
  • evaluator: (String)
  • output_dir: (String) (defaults to: DEFAULT_OUTPUT_DIR)


16
17
18
19
20
21
22
23
24
# File 'lib/diogenes/evaluation/decision_record.rb', line 16

def initialize(description:, results:, evaluator:, output_dir: DEFAULT_OUTPUT_DIR)
  @description = description
  @results = results
  @evaluator = evaluator
  @output_dir = output_dir
  @alternative = "" #: String
  @conditions = "" #: String
  @notes = "" #: String
end

Instance Attribute Details

#alternative=(value) ⇒ Object (writeonly)

: String

Parameters:

  • value (String)


26
27
28
# File 'lib/diogenes/evaluation/decision_record.rb', line 26

def alternative=(value)
  @alternative = value
end

#conditions=(value) ⇒ Object (writeonly)

: String

Parameters:

  • value (String)


27
28
29
# File 'lib/diogenes/evaluation/decision_record.rb', line 27

def conditions=(value)
  @conditions = value
end

#notes=(value) ⇒ Object (writeonly)

: String

Parameters:

  • value (String)


28
29
30
# File 'lib/diogenes/evaluation/decision_record.rb', line 28

def notes=(value)
  @notes = value
end

#verdictString

: () -> String

Returns:

  • (String)


31
32
33
# File 'lib/diogenes/evaluation/decision_record.rb', line 31

def verdict
  @verdict ||= @results.all?(&:passed?) ? "PROCEED" : "REJECT"
end

Instance Method Details

#filenameString

: () -> String

Returns:

  • (String)


39
40
41
# File 'lib/diogenes/evaluation/decision_record.rb', line 39

def filename
  "#{slugify(@description)}_decision.md"
end

#read_template(cwd:) ⇒ String

: (cwd: String) -> String

Parameters:

  • cwd: (String)

Returns:

  • (String)


69
70
71
72
# File 'lib/diogenes/evaluation/decision_record.rb', line 69

def read_template(cwd:)
  project = File.join(cwd, PROJECT_TEMPLATE)
  File.read(File.exist?(project) ? project : BUNDLED_TEMPLATE)
end

#render(cwd:) ⇒ String

: (cwd: String) -> String

Parameters:

  • cwd: (String)

Returns:

  • (String)


55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/diogenes/evaluation/decision_record.rb', line 55

def render(cwd:)
  ctx = RenderContext.new(
    feature_name: @description,
    evaluator: @evaluator,
    verdict: verdict,
    results: @results,
    alternative: @alternative,
    conditions: @conditions,
    notes: @notes
  )
  ERB.new(read_template(cwd:), trim_mode: "-").result(ctx.get_binding)
end

#slugify(text) ⇒ String

: (String) -> String

Parameters:

  • (String)

Returns:

  • (String)


75
76
77
# File 'lib/diogenes/evaluation/decision_record.rb', line 75

def slugify(text)
  text.strip.downcase.gsub(/[^a-z0-9]+/, "_").gsub(/\A_+|_+\z/, "")
end

#write(cwd:) ⇒ String

: (cwd: String) -> String

Parameters:

  • cwd: (String)

Returns:

  • (String)


44
45
46
47
48
49
50
# File 'lib/diogenes/evaluation/decision_record.rb', line 44

def write(cwd:)
  dir = File.join(cwd, @output_dir)
  FileUtils.mkdir_p(dir)
  path = File.join(dir, filename)
  File.write(path, render(cwd:))
  path
end