Sha256: 6c6f34f6282f3f5235005e49c9c732f2535c5968fcd691b76ae44ce9e0a83100

Contents?: true

Size: 815 Bytes

Versions: 4

Compression:

Stored size: 815 Bytes

Contents

require "attributable"

module Metamorpher
  module Transformer
    Site = Struct.new(:original_position, :original_code, :transformed_code) do
      def slide(offset)
        new_position = (original_position.begin + offset)..(original_position.end + offset)
        Site.new(new_position, original_code, transformed_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] = transformed_code
        destination
      end

      def offset
        transformed_code.size - original_code.size
      end

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
metamorpher-0.2.6 lib/metamorpher/transformer/site.rb
metamorpher-0.2.5 lib/metamorpher/transformer/site.rb
metamorpher-0.2.4 lib/metamorpher/transformer/site.rb
metamorpher-0.2.3 lib/metamorpher/transformer/site.rb