Sha256: 42503932bab18683463e7e029626a849edab8926ee524d80b43dbc25cdcb8396

Contents?: true

Size: 652 Bytes

Versions: 5

Compression:

Stored size: 652 Bytes

Contents

require "metamorpher/terms/derived"
require "metamorpher/builders/ast/builder"

module Metamorpher
  module Builders
    module AST
      class DerivationBuilder
        def derivation!(*base, &block)
          fail ArgumentError, "wrong number of arguments (0)" if base.empty?

          Terms::Derived.new(
            base: base,
            derivation: derivation_strategy(block)
          )
        end

        private

        def derivation_strategy(block)
          if block.nil?
            ->(*args) { args.first }
          else
            ->(*args) { block.call(*args, Builder.new) }
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
metamorpher-0.2.6 lib/metamorpher/builders/ast/derivation_builder.rb
metamorpher-0.2.5 lib/metamorpher/builders/ast/derivation_builder.rb
metamorpher-0.2.4 lib/metamorpher/builders/ast/derivation_builder.rb
metamorpher-0.2.3 lib/metamorpher/builders/ast/derivation_builder.rb
metamorpher-0.2.2 lib/metamorpher/builders/ast/derivation_builder.rb