Module: Etcher

Defined in:
lib/etcher.rb,
lib/etcher/types.rb,
lib/etcher/builder.rb,
lib/etcher/contract.rb,
lib/etcher/registry.rb,
lib/etcher/resolver.rb,
lib/etcher/loaders/json.rb,
lib/etcher/loaders/yaml.rb,
lib/etcher/transformers/time.rb,
lib/etcher/loaders/environment.rb

Overview

Main namespace.

Defined Under Namespace

Modules: Loaders, Transformers, Types Classes: Builder, Resolver

Constant Summary collapse

LOGGER =
Cogger.new id: :etcher
Contract =

A simple passthrough contract.

lambda do |result|
  def result.to_monad = Dry::Monads::Success self unless result.respond_to? :to_monad
  result
end
Registry =

Provides a registry of customization for loading and resolving a configuration.

Data.define :contract, :model, :loaders, :transformers do
  def initialize contract: Contract, model: Hash, loaders: [], transformers: []
    super
  end

  def add_loader loader
    loaders.append loader
    self
  end

  def add_transformer transformer
    transformers.append transformer
    self
  end
end

Class Method Summary collapse

Class Method Details

.call(registry = Registry.new) ⇒ Object



23
# File 'lib/etcher.rb', line 23

def self.call(registry = Registry.new, **) = Resolver.new(registry).call(**)

.loader(registry = Zeitwerk::Registry) ⇒ Object



17
18
19
# File 'lib/etcher.rb', line 17

def self.loader registry = Zeitwerk::Registry
  @loader ||= registry.loaders.find { |loader| loader.tag == File.basename(__FILE__, ".rb") }
end

.newObject



21
# File 'lib/etcher.rb', line 21

def self.new(...) = Builder.new(...)