Class: Etcher::Resolver

Inherits:
Object
  • Object
show all
Defined in:
lib/etcher/resolver.rb

Overview

Builds and fully resolves a configuration.

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(registry = Registry.new, logger: LOGGER) ⇒ Resolver

Returns a new instance of Resolver.



27
28
29
30
31
# File 'lib/etcher/resolver.rb', line 27

def initialize registry = Registry.new, logger: LOGGER
  @builder = Builder.new registry
  @logger = logger
  freeze
end

Class Method Details

.flatten(errors, lines = []) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/etcher/resolver.rb', line 15

def self.flatten errors, lines = []
  errors.each do |key, value|
    if value.is_a? Hash
      flatten value.flatten_keys(prefix: key, delimiter: "."), lines
    else
      lines.append "  - #{key} #{value.to_sentence}\n"
    end
  end

  lines
end

Instance Method Details

#call(**overrides) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/etcher/resolver.rb', line 33

def call(**overrides)
  case builder.call(**overrides)
    in Success(attributes) then attributes
    in Failure(step:, constant:, payload: String => payload)
      logger.abort "#{step.capitalize} failure (#{constant}). #{payload}"
    in Failure(step:, constant:, payload: Hash => payload)
      log_and_abort step, constant, payload
    in Failure(String => message) then logger.abort message
    else logger.abort "Unable to parse failure."
  end
end