diff options
| author | Andrew8xx8 <avk@8xx8.ru> | 2013-02-20 17:15:01 +0400 |
|---|---|---|
| committer | Andrew8xx8 <avk@8xx8.ru> | 2013-02-20 17:49:48 +0400 |
| commit | e2d94e0719cb4eed4757f4cef946b1c29ef971f0 (patch) | |
| tree | 371dddf472f9909746d0a8b87f7275aa94f57bc4 /app/models/merge_request.rb | |
| parent | 1b7b17d12a9f176dd305b9ec95bd50ba3f56f520 (diff) | |
| download | gitlab-ce-e2d94e0719cb4eed4757f4cef946b1c29ef971f0.tar.gz | |
State machine added for merge_status field
Diffstat (limited to 'app/models/merge_request.rb')
| -rw-r--r-- | app/models/merge_request.rb | 63 |
1 files changed, 28 insertions, 35 deletions
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 |
