Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/relative_positioning.rb')
-rw-r--r--app/models/concerns/relative_positioning.rb18
1 files changed, 18 insertions, 0 deletions
diff --git a/app/models/concerns/relative_positioning.rb b/app/models/concerns/relative_positioning.rb
index c32e499c329..9069d3088cd 100644
--- a/app/models/concerns/relative_positioning.rb
+++ b/app/models/concerns/relative_positioning.rb
@@ -168,6 +168,24 @@ module RelativePositioning
self.relative_position = MIN_POSITION
end
+ def next_object_by_relative_position(ignoring: nil, order: :asc)
+ relation = relative_positioning_scoped_items(ignoring: ignoring).reorder(relative_position: order)
+
+ relation = if order == :asc
+ relation.where(self.class.arel_table[:relative_position].gt(relative_position))
+ else
+ relation.where(self.class.arel_table[:relative_position].lt(relative_position))
+ end
+
+ relation.first
+ end
+
+ def relative_positioning_scoped_items(ignoring: nil)
+ relation = self.class.relative_positioning_query_base(self)
+ relation = exclude_self(relation, excluded: ignoring) if ignoring.present?
+ relation
+ end
+
# This method is used during rebalancing - override it to customise the update
# logic:
def update_relative_siblings(relation, range, delta)