Sha256: 5aa4027635ac5db4135044250826ac8924bf66678da78bf169f79d1309c1eef7

Contents?: true

Size: 984 Bytes

Versions: 2

Compression:

Stored size: 984 Bytes

Contents

module Munge
  module Core
    class Alterant
      def initialize(scope:)
        @scope    = scope
        @registry = {}
      end

      def register(transformer)
        register_manually(transformer.name, transformer)
      end

      # name should be snake_case Symbol
      def register_manually(name, transformer)
        if @registry.key?(name)
          fail "already registered transformer `#{name}`"
        else
          @registry[name] = transformer
        end
      end

      def transform(item)
        item.transforms
          .map { |name, args| [get_transformer(name), args] }
          .inject(item.content) do |content, params|
            transformer, args = params

            transformer.call(item, content, *args)
          end
      end

      private

      def get_transformer(name)
        if @registry.key?(name)
          @registry[name]
        else
          fail "transformer `#{name}` is not installed"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
munge-0.5.0 lib/munge/core/alterant.rb
munge-0.5.0.beta1 lib/munge/core/alterant.rb