From e2d94e0719cb4eed4757f4cef946b1c29ef971f0 Mon Sep 17 00:00:00 2001 From: Andrew8xx8 Date: Wed, 20 Feb 2013 17:15:01 +0400 Subject: State machine added for merge_status field --- app/models/merge_request.rb | 63 ++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 35 deletions(-) (limited to 'app/models/merge_request.rb') diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 06aa9f3c9e0..05ebf44c2e0 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -53,16 +53,32 @@ class MergeRequest < ActiveRecord::Base BROKEN_DIFF = "--broken-diff" - UNCHECKED = 1 - CAN_BE_MERGED = 2 - CANNOT_BE_MERGED = 3 + state_machine :merge_status, initial: :unchecked do + event :mark_as_unchecked do + transition [:can_be_merged, :cannot_be_merged] => :unchecked + end + + event :mark_as_mergeable do + transition unchecked: :can_be_merged + end + + event :mark_as_unmergeable do + transition unchecked: :cannot_be_merged + end + + state :unchecked + + state :can_be_merged + + state :cannot_be_merged + end serialize :st_commits serialize :st_diffs validates :source_branch, presence: true validates :target_branch, presence: true - validate :validate_branches + validate :validate_branches scope :merged, -> { with_state(:merged) } @@ -84,13 +100,9 @@ class MergeRequest < ActiveRecord::Base end end + # DEPRECATED: Please use human_merge_status_name instead def human_merge_status - merge_statuses = { - CAN_BE_MERGED => "can_be_merged", - CANNOT_BE_MERGED => "cannot_be_merged", - UNCHECKED => "unchecked" - } - merge_statuses[self.merge_status] + human_merge_status_name end def validate_branches @@ -104,26 +116,12 @@ class MergeRequest < ActiveRecord::Base self.reloaded_diffs end - def unchecked? - merge_status == UNCHECKED - end - - def mark_as_unchecked - self.merge_status = UNCHECKED - self.save - end - - def can_be_merged? - merge_status == CAN_BE_MERGED - end - def check_if_can_be_merged - self.merge_status = if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged? - CAN_BE_MERGED - else - CANNOT_BE_MERGED - end - self.save + if Gitlab::Satellite::MergeAction.new(self.author, self).can_be_merged? + mark_as_mergeable + else + mark_as_unmergeable + end end def diffs @@ -178,11 +176,6 @@ class MergeRequest < ActiveRecord::Base commits.any? && opened? end - def mark_as_unmergable - self.merge_status = CANNOT_BE_MERGED - self.save - end - def reloaded_commits if opened? && unmerged_commits.any? self.st_commits = unmerged_commits @@ -217,7 +210,7 @@ class MergeRequest < ActiveRecord::Base true end rescue - self.mark_as_unmergable + mark_as_unmergeable false end -- cgit v1.2.1 From 52e0df5c23b94cc8f2929a97bc2211fd51bc1de4 Mon Sep 17 00:00:00 2001 From: Andrew8xx8 Date: Wed, 20 Feb 2013 17:37:20 +0400 Subject: class.self methods moved to scopes --- app/models/merge_request.rb | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) (limited to 'app/models/merge_request.rb') diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 05ebf44c2e0..e8e15aec96a 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -81,24 +81,9 @@ class MergeRequest < ActiveRecord::Base validate :validate_branches scope :merged, -> { with_state(:merged) } - - class << self - def find_all_by_branch(branch_name) - where("source_branch LIKE :branch OR target_branch LIKE :branch", branch: branch_name) - end - - def cared(user) - where('assignee_id = :user OR author_id = :user', user: user.id) - end - - def find_all_by_branch(branch_name) - where("source_branch LIKE :branch OR target_branch LIKE :branch", branch: branch_name) - end - - def find_all_by_milestone(milestone) - where("milestone_id = :milestone_id", milestone_id: milestone) - end - end + scope :by_branch, ->(branch_name) { where("source_branch LIKE :branch OR target_branch LIKE :branch", branch: branch_name) } + scope :cared, ->(user) { where('assignee_id = :user OR author_id = :user', user: user.id) } + scope :by_milestone, ->(milestone) { where("milestone_id = :milestone_id", milestone_id: milestone) } # DEPRECATED: Please use human_merge_status_name instead def human_merge_status -- cgit v1.2.1 From 6d68923edceb23ae6a5281e022a351a0d9c0d59b Mon Sep 17 00:00:00 2001 From: Andrew8xx8 Date: Wed, 20 Feb 2013 17:45:29 +0400 Subject: human_merge_status replaced by human_merge_status_name --- app/models/merge_request.rb | 5 ----- 1 file changed, 5 deletions(-) (limited to 'app/models/merge_request.rb') diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index e8e15aec96a..fad6f9c46ff 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -85,11 +85,6 @@ class MergeRequest < ActiveRecord::Base scope :cared, ->(user) { where('assignee_id = :user OR author_id = :user', user: user.id) } scope :by_milestone, ->(milestone) { where("milestone_id = :milestone_id", milestone_id: milestone) } - # DEPRECATED: Please use human_merge_status_name instead - def human_merge_status - human_merge_status_name - end - def validate_branches if target_branch == source_branch errors.add :base, "You can not use same branch for source and target branches" -- cgit v1.2.1