summaryrefslogtreecommitdiffstats
path: root/app/models/issue_priority.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/issue_priority.rb')
-rw-r--r--app/models/issue_priority.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/app/models/issue_priority.rb b/app/models/issue_priority.rb
index 058b33fc8..d5b7669b3 100644
--- a/app/models/issue_priority.rb
+++ b/app/models/issue_priority.rb
@@ -18,6 +18,9 @@
class IssuePriority < Enumeration
has_many :issues, :foreign_key => 'priority_id'
+ after_destroy {|priority| priority.class.compute_position_names}
+ after_save {|priority| priority.class.compute_position_names if priority.position_changed? && priority.position}
+
OptionName = :enumeration_issue_priorities
def option_name
@@ -31,4 +34,35 @@ class IssuePriority < Enumeration
def transfer_relations(to)
issues.update_all("priority_id = #{to.id}")
end
+
+ def css_classes
+ "priority-#{id} priority-#{position_name}"
+ end
+
+ # Clears position_name for all priorities
+ # Called from migration 20121026003537_populate_enumerations_position_name
+ def self.clear_position_names
+ update_all :position_name => nil
+ end
+
+ # Updates position_name for active priorities
+ # Called from migration 20121026003537_populate_enumerations_position_name
+ def self.compute_position_names
+ priorities = where(:active => true).all.sort_by(&:position)
+ if priorities.any?
+ default = priorities.detect(&:is_default?) || priorities[(priorities.size - 1) / 2]
+ priorities.each_with_index do |priority, index|
+ name = case
+ when priority.position == default.position
+ "default"
+ when priority.position < default.position
+ index == 0 ? "lowest" : "low#{index+1}"
+ else
+ index == (priorities.size - 1) ? "highest" : "high#{priorities.size - index}"
+ end
+
+ update_all({:position_name => name}, :id => priority.id)
+ end
+ end
+ end
end