Sha256: 3ddedee3589921eacafd67e5ad2d31176a6b2bb1e8a5ca7b1e9228bfe99ee80d

Contents?: true

Size: 744 Bytes

Versions: 2

Compression:

Stored size: 744 Bytes

Contents

require "metamorpher/terms/literal"

module Metamorpher
  module Builders
    module AST
      class LiteralBuilder
        def literal!(name, *children)
          Terms::Literal.new(name: name, children: children.map(&method(:termify)))
        end

        def shorthand?(method, *_arguments, &_block)
          !method[/\p{Upper}/]
        end

        def method_missing(method, *arguments, &block)
          if shorthand?(method, *arguments, &block)
            literal!(method, *arguments)
          else
            super.method_missing(method, *arguments, &block)
          end
        end

        private

        def termify(item)
          item.is_a?(Terms::Term) ? item.dup : literal!(item)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
metamorpher-0.2.6 lib/metamorpher/builders/ast/literal_builder.rb
metamorpher-0.2.5 lib/metamorpher/builders/ast/literal_builder.rb