Sha256: 98e9ef729b48e72eecea6cb9fa1c91f76f194f0c960a3526c8ecfd06773a8f58

Contents?: true

Size: 811 Bytes

Versions: 3

Compression:

Stored size: 811 Bytes

Contents

require "attributable"

module Metamorpher
  module Transformer
    Site = Struct.new(:original_position, :original_code, :refactored_code) do
      def slide(offset)
        new_position = (original_position.begin + offset)..(original_position.end + offset)
        Site.new(new_position, original_code, refactored_code)
      end

      def merge_into(destination)
        if original_position.begin > destination.size
          fail ArgumentError, "Position #{original_position} does not exist in: #{destination}"
        end

        destination[original_position] = refactored_code
        destination
      end

      def offset
        refactored_code.size - original_code.size
      end

      def <=>(other)
        original_position.begin <=> other.original_position.begin
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
metamorpher-0.2.2 lib/metamorpher/transformer/site.rb
metamorpher-0.2.1 lib/metamorpher/transformer/site.rb
metamorpher-0.2.0 lib/metamorpher/transformer/site.rb