36 lines
		
	
	
		
			834 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			834 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| # It is a Range object extended with `mode` attribute
 | |
| # MarkerRange not only keeps information about changed characters, but also
 | |
| # the type of changes
 | |
| module Gitlab
 | |
|   class MarkerRange < Range
 | |
|     DELETION = :deletion
 | |
|     ADDITION = :addition
 | |
| 
 | |
|     # Converts Range object to MarkerRange class
 | |
|     def self.from_range(range)
 | |
|       return range if range.is_a?(self)
 | |
| 
 | |
|       new(range.begin, range.end, exclude_end: range.exclude_end?)
 | |
|     end
 | |
| 
 | |
|     def initialize(first, last, exclude_end: false, mode: nil)
 | |
|       super(first, last, exclude_end)
 | |
|       @mode = mode
 | |
|     end
 | |
| 
 | |
|     def to_range
 | |
|       Range.new(self.begin, self.end, self.exclude_end?)
 | |
|     end
 | |
| 
 | |
|     def ==(other)
 | |
|       return false unless other.is_a?(self.class)
 | |
| 
 | |
|       self.mode == other.mode && super
 | |
|     end
 | |
| 
 | |
|     attr_reader :mode
 | |
|   end
 | |
| end
 |