Sha256: 0276e76bcfd080b29cb1f62cf98cda7e8bd81ea07e3e54a9d16a3b4a82f295e9
Contents?: true
Size: 1.11 KB
Versions: 2
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literal: true require "dry/monads" module Etcher module Transformers # Formats given key using existing and/or placeholder attributes. class Format include Dry::Monads[:result] def initialize key, *retainers, **mappings @key = key @retainers = retainers @mappings = mappings @pattern = /%<.+>s/o freeze end def call attributes value = attributes[key] return Success attributes unless value && value.match?(pattern) Success attributes.merge!(key => format(value, **attributes, **pass_throughs)) rescue KeyError => error Failure step: :transform, constant: self.class, payload: "Unable to transform #{key.inspect}, missing specifier: " \ "\"#{error.message[/<.+>/]}\"." end private attr_reader :key, :retainers, :mappings, :pattern def pass_throughs retainers.each .with_object({}) { |key, expansions| expansions[key] = "%<#{key}>s" } .merge! mappings end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
etcher-3.1.0 | lib/etcher/transformers/format.rb |
etcher-3.0.0 | lib/etcher/transformers/format.rb |