Sha256: f1db2c27622a95d69256088b9af7681aad424fe8eac3de3fdf2d49f85dadf9c8

Contents?: true

Size: 1.07 KB

Versions: 2

Compression:

Stored size: 1.07 KB

Contents

# frozen_string_literal: true

require 'transproc/compiler'

module Transproc
  class Transformer
    # @api public
    class DSL
      # @api private
      attr_reader :container

      # @api private
      attr_reader :ast

      # @api private
      def initialize(container, ast: [], &block)
        @container = container
        @ast = ast
        instance_eval(&block) if block
      end

      # @api private
      def dup
        self.class.new(container, ast: ast.dup)
      end

      # @api private
      def call(transformer)
        Compiler.new(container, transformer).(ast)
      end

      private

      # @api private
      def node(&block)
        [:t, self.class.new(container, &block).ast]
      end

      # @api private
      def respond_to_missing?(method, _include_private = false)
        super || container.contain?(method)
      end

      # @api private
      def method_missing(meth, *args, &block)
        arg_nodes = *args.map { |a| [:arg, a] }
        ast << [:fn, (block ? [meth, [*arg_nodes, node(&block)]] : [meth, arg_nodes])]
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
transproc-1.1.1 lib/transproc/transformer/dsl.rb
transproc-1.1.0 lib/transproc/transformer/dsl.rb