summaryrefslogtreecommitdiffstats
path: root/app/models/merge_request.rb
diff options
context:
space:
mode:
authorMarius Mathiesen <marius.mathiesen@gmail.com>2009-03-10 15:04:28 +0100
committerJohan Sørensen <johan@johansorensen.com>2009-04-22 15:16:13 +0200
commit35aad25897fcef7c8792723341b8e65b35b895ad (patch)
tree64bc78c1812b0b52609d8d7767c0ac81ede9f2f1 /app/models/merge_request.rb
parent78ae8f27cebb3f2eea66f8958db6e9f701939d91 (diff)
downloadgitorious-mainline-outdated-35aad25897fcef7c8792723341b8e65b35b895ad.zip
gitorious-mainline-outdated-35aad25897fcef7c8792723341b8e65b35b895ad.tar.gz
gitorious-mainline-outdated-35aad25897fcef7c8792723341b8e65b35b895ad.tar.bz2
Can a merge request transition to a given state? Added a method which returns whether this is allowed and another method that lets you wrap a block to be executed if allowed.
Added another merge request fixture that allows the state change.
Diffstat (limited to 'app/models/merge_request.rb')
-rw-r--r--app/models/merge_request.rb22
1 files changed, 21 insertions, 1 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 6c6d304..e5e75d4 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -54,7 +54,11 @@ class MergeRequest < ActiveRecord::Base
end
def status_string
- self.class.statuses.invert[status].downcase
+ self.class.status_string(status)
+ end
+
+ def self.status_string(status_code)
+ statuses.invert[status_code.to_i].downcase
end
def open?
@@ -72,6 +76,22 @@ class MergeRequest < ActiveRecord::Base
def pending_acceptance_of_terms?
status == STATUS_PENDING_ACCEPTANCE_OF_TERMS
end
+
+ def can_transition_to?(new_state)
+ if status == STATUS_OPEN
+ return [STATUS_MERGED, STATUS_REJECTED].include?(new_state)
+ else
+ return status == STATUS_PENDING_ACCEPTANCE_OF_TERMS && new_state == STATUS_OPEN
+ end
+ end
+
+ def transition_to(status)
+ if can_transition_to?(status)
+ self.status = status
+ yield
+ return true
+ end
+ end
def source_branch
super || "master"