Refactor RelativePositioning so that it can be used by other classes
This commit is contained in:
parent
1560c234d2
commit
304851dc90
|
@ -10,12 +10,12 @@ module RelativePositioning
|
|||
after_save :save_positionable_neighbours
|
||||
end
|
||||
|
||||
def project_ids
|
||||
[project.id]
|
||||
def min_relative_position
|
||||
self.class.in_parents(parent_ids).minimum(:relative_position)
|
||||
end
|
||||
|
||||
def max_relative_position
|
||||
self.class.in_projects(project_ids).maximum(:relative_position)
|
||||
self.class.in_parents(parent_ids).maximum(:relative_position)
|
||||
end
|
||||
|
||||
def prev_relative_position
|
||||
|
@ -23,7 +23,7 @@ module RelativePositioning
|
|||
|
||||
if self.relative_position
|
||||
prev_pos = self.class
|
||||
.in_projects(project_ids)
|
||||
.in_parents(parent_ids)
|
||||
.where('relative_position < ?', self.relative_position)
|
||||
.maximum(:relative_position)
|
||||
end
|
||||
|
@ -36,7 +36,7 @@ module RelativePositioning
|
|||
|
||||
if self.relative_position
|
||||
next_pos = self.class
|
||||
.in_projects(project_ids)
|
||||
.in_parents(parent_ids)
|
||||
.where('relative_position > ?', self.relative_position)
|
||||
.minimum(:relative_position)
|
||||
end
|
||||
|
@ -63,7 +63,7 @@ module RelativePositioning
|
|||
pos_after = before.next_relative_position
|
||||
|
||||
if before.shift_after?
|
||||
issue_to_move = self.class.in_projects(project_ids).find_by!(relative_position: pos_after)
|
||||
issue_to_move = self.class.in_parents(parent_ids).find_by!(relative_position: pos_after)
|
||||
issue_to_move.move_after
|
||||
@positionable_neighbours = [issue_to_move] # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
|
||||
|
@ -78,7 +78,7 @@ module RelativePositioning
|
|||
pos_before = after.prev_relative_position
|
||||
|
||||
if after.shift_before?
|
||||
issue_to_move = self.class.in_projects(project_ids).find_by!(relative_position: pos_before)
|
||||
issue_to_move = self.class.in_parents(parent_ids).find_by!(relative_position: pos_before)
|
||||
issue_to_move.move_before
|
||||
@positionable_neighbours = [issue_to_move] # rubocop:disable Gitlab/ModuleWithInstanceVariables
|
||||
|
||||
|
@ -92,6 +92,10 @@ module RelativePositioning
|
|||
self.relative_position = position_between(max_relative_position || START_POSITION, MAX_POSITION)
|
||||
end
|
||||
|
||||
def move_to_start
|
||||
self.relative_position = position_between(min_relative_position || START_POSITION, MIN_POSITION)
|
||||
end
|
||||
|
||||
# Indicates if there is an issue that should be shifted to free the place
|
||||
def shift_after?
|
||||
next_pos = next_relative_position
|
||||
|
|
|
@ -35,6 +35,8 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
validates :project, presence: true
|
||||
|
||||
alias_attribute :parent_id, :project_id
|
||||
|
||||
scope :in_projects, ->(project_ids) { where(project_id: project_ids) }
|
||||
|
||||
scope :assigned, -> { where('EXISTS (SELECT TRUE FROM issue_assignees WHERE issue_id = issues.id)') }
|
||||
|
@ -78,6 +80,10 @@ class Issue < ActiveRecord::Base
|
|||
|
||||
acts_as_paranoid
|
||||
|
||||
class << self
|
||||
alias_method :in_parents, :in_projects
|
||||
end
|
||||
|
||||
def self.reference_prefix
|
||||
'#'
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue