Sha256: 800f64a5ba096f9512aa72523616c9087814d866b0d523e4406763994ce0a349

Contents?: true

Size: 966 Bytes

Versions: 2

Compression:

Stored size: 966 Bytes

Contents

# frozen_string_literal: true

module Format
  class Modifier
    def initialize(yml, helper)
      @debug = yml.fetch(:debug, false)
      @helper = helper
    end

    def apply(raw_value, modifiers)
      [modifiers].flatten.compact.reduce(raw_value) do |value, modifier|
        method_name, params = modifier_props(modifier).values_at(:name, :params)

        modify_value(value, method_name, params)
      end
    end

    private

    attr_reader :helper, :debug

    def modifier_props(modifier)
      modifier.is_a?(String) ? { name: modifier } : modifier
    end

    def modify_value(value, method, params)
      args = [value]
      if params.present?
        args = params.is_a?(Array) ? [value, *params] : [value, **params]
      end

      value.try(method, *params) || helper.send(method, *args)
    rescue StandardError => error
      raise error unless debug

      "Error invoking '#{method}' with (#{args.join(',')}): #{error}"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
xml_data_extractor-0.7.0 lib/src/format/modifier.rb
xml_data_extractor-0.6.0 lib/src/format/modifier.rb