diff options
author | Marius Mathiesen <marius.mathiesen@gmail.com> | 2009-03-10 15:04:28 +0100 |
---|---|---|
committer | Johan Sørensen <johan@johansorensen.com> | 2009-04-22 15:16:13 +0200 |
commit | 35aad25897fcef7c8792723341b8e65b35b895ad (patch) | |
tree | 64bc78c1812b0b52609d8d7767c0ac81ede9f2f1 /app/models/merge_request.rb | |
parent | 78ae8f27cebb3f2eea66f8958db6e9f701939d91 (diff) | |
download | gitorious-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.rb | 22 |
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" |