diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-06 03:09:53 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-08-06 03:09:53 +0300 |
commit | 631ed6dcca9d41d0dc24dd553065de1a0f8210f0 (patch) | |
tree | e644e0f962e7f6ce664e37d415edf0c584711cdb /app/models/concerns/relative_positioning.rb | |
parent | ad9eb72915f1be40da3ebe287274fe2bae62e46b (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/models/concerns/relative_positioning.rb')
-rw-r--r-- | app/models/concerns/relative_positioning.rb | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/app/models/concerns/relative_positioning.rb b/app/models/concerns/relative_positioning.rb index 1d89a4497d9..ca64907f04b 100644 --- a/app/models/concerns/relative_positioning.rb +++ b/app/models/concerns/relative_positioning.rb @@ -32,17 +32,32 @@ module RelativePositioning class_methods do def move_nulls_to_end(objects) objects = objects.reject(&:relative_position) - return if objects.empty? - max_relative_position = objects.first.max_relative_position - self.transaction do + max_relative_position = objects.first.max_relative_position + objects.each do |object| relative_position = position_between(max_relative_position || START_POSITION, MAX_POSITION) - object.relative_position = relative_position + object.update_column(:relative_position, relative_position) + max_relative_position = relative_position - object.save(touch: false) + end + end + end + + def move_nulls_to_start(objects) + objects = objects.reject(&:relative_position) + return if objects.empty? + + self.transaction do + min_relative_position = objects.first.min_relative_position + + objects.reverse_each do |object| + relative_position = position_between(MIN_POSITION, min_relative_position || START_POSITION) + object.update_column(:relative_position, relative_position) + + min_relative_position = relative_position end end end |