32 lines
790 B
Ruby
32 lines
790 B
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module RelativePositioning
|
|
STEPS = 10
|
|
IDEAL_DISTANCE = 2**(STEPS - 1) + 1
|
|
|
|
MIN_POSITION = Gitlab::Database::MIN_INT_VALUE
|
|
START_POSITION = 0
|
|
MAX_POSITION = Gitlab::Database::MAX_INT_VALUE
|
|
|
|
MAX_GAP = IDEAL_DISTANCE * 2
|
|
MIN_GAP = 2
|
|
|
|
NoSpaceLeft = Class.new(StandardError)
|
|
InvalidPosition = Class.new(StandardError)
|
|
IllegalRange = Class.new(ArgumentError)
|
|
IssuePositioningDisabled = Class.new(StandardError)
|
|
|
|
def self.range(lhs, rhs)
|
|
if lhs && rhs
|
|
ClosedRange.new(lhs, rhs)
|
|
elsif lhs
|
|
StartingFrom.new(lhs)
|
|
elsif rhs
|
|
EndingAt.new(rhs)
|
|
else
|
|
raise IllegalRange, 'One of rhs or lhs must be provided' unless lhs && rhs
|
|
end
|
|
end
|
|
end
|
|
end
|