Sha256: f56103912e9c4817cd46d4d31dd019f5320215b7238726c317a6d7dbd6f9dc64

Contents?: true

Size: 979 Bytes

Versions: 6

Compression:

Stored size: 979 Bytes

Contents

require "metamorpher/drivers/ruby"
require "metamorpher/builders/ruby/term"
require "metamorpher/builders/ruby/uppercase_constant_rewriter"
require "metamorpher/builders/ruby/uppercase_rewriter"
require "metamorpher/terms/term_set"

module Metamorpher
  module Builders
    module Ruby
      class Builder
        def build(*sources)
          terms = sources.map { |source| decorate(rewrite(parse(source))) }
          terms.size == 1 ? terms.first : Metamorpher::Terms::TermSet.new(terms: terms)
        end

        private

        def decorate(term)
          term.extend(Term)
        end

        def rewrite(parsed)
          rewriters.reduce(parsed) { |a, e| e.reduce(a) }
        end

        def parse(source)
          driver.parse(source)
        end

        def rewriters
          @rewriters ||= [UppercaseConstantRewriter.new, UppercaseRewriter.new]
        end

        def driver
          @driver ||= Drivers::Ruby.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/ruby/builder.rb
metamorpher-0.2.5 lib/metamorpher/builders/ruby/builder.rb
metamorpher-0.2.4 lib/metamorpher/builders/ruby/builder.rb
metamorpher-0.2.3 lib/metamorpher/builders/ruby/builder.rb
metamorpher-0.2.2 lib/metamorpher/builders/ruby/builder.rb
metamorpher-0.2.1 lib/metamorpher/builders/ruby/builder.rb