module Metamorpher::Transformer::Base

Public Instance Methods

driver() click to toggle source
# File lib/metamorpher/transformer/base.rb, line 27
def driver
  @driver ||= Metamorpher::Drivers::Ruby.new
end
transform(src, &block) click to toggle source
# File lib/metamorpher/transformer/base.rb, line 9
def transform(src, &block)
  literal = driver.parse(src)
  replacements = reduce_to_replacements(src, literal)
  merge(src, replacements, &block)
end
transform_file(path, &block) click to toggle source
# File lib/metamorpher/transformer/base.rb, line 15
def transform_file(path, &block)
  transform(File.read(path), &block)
end
transform_files(paths, &block) click to toggle source
# File lib/metamorpher/transformer/base.rb, line 19
def transform_files(paths, &block)
  paths.each_with_object({}) do |path, result|
    changes = []
    result[path] = transform_file(path) { |change| changes << change }
    block.call(path, result[path], changes) if block
  end
end

Private Instance Methods

reduce_to_replacements(src, literal) click to toggle source
# File lib/metamorpher/transformer/base.rb, line 33
def reduce_to_replacements(src, literal)
  [].tap do |replacements|
    rule.reduce(literal) do |original, rewritings|
      original_position = driver.source_location_for(original)
      original_code = src[original_position]

      rewritings.alternatives.each do |rewriting|
        replacements << Site.new(original_position, original_code, driver.unparse(rewriting))
      end
    end
  end
end
rule() click to toggle source
# File lib/metamorpher/transformer/base.rb, line 46
def rule
  @rule ||= Rewriter::Rule.new(pattern: pattern, replacement: replacement)
end