Sha256: dbb55a61b2c44033aafd0d62b1a7ac597e9dff9ce120b54657d7490a0957e631

Contents?: true

Size: 1.62 KB

Versions: 6

Compression:

Stored size: 1.62 KB

Contents

require "metamorpher/terms/term_set"
require "metamorpher/builders/ast/literal_builder"
require "metamorpher/builders/ast/variable_builder"
require "metamorpher/builders/ast/greedy_variable_builder"
require "metamorpher/builders/ast/derivation_builder"
require "metamorpher/builders/ast/term_set_builder"
require "forwardable"

module Metamorpher
  module Builders
    module AST
      class Builder
        extend Forwardable
        def_delegator :literal_builder, :literal!
        def_delegator :variable_builder, :variable!
        def_delegator :greedy_variable_builder, :greedy_variable!
        def_delegator :derivation_builder, :derivation!
        def_delegator :term_set_builder, :either!

        def method_missing(method, *arguments, &block)
          builders_with_shorthand
            .find { |builder| builder.shorthand?(method, *arguments, &block) }
            .method_missing(method, *arguments, &block)
        end

        private

        def builders_with_shorthand
          @builders ||= [
            literal_builder,
            variable_builder,
            greedy_variable_builder
          ]
        end

        def literal_builder
          @literal_builder ||= LiteralBuilder.new
        end

        def variable_builder
          @variable_builder ||= VariableBuilder.new
        end

        def greedy_variable_builder
          @greedy_variable_builder ||= GreedyVariableBuilder.new
        end

        def derivation_builder
          @derivation_builder ||= DerivationBuilder.new
        end

        def term_set_builder
          @term_set_builder ||= TermSetBuilder.new
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

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