Class: Tracker
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Tracker
- Includes:
- Redmine::SafeAttributes
- Defined in:
- app/models/tracker.rb
Overview
Redmine - project management software Copyright © 2006- Jean-Philippe Lang
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Constant Summary collapse
- CORE_FIELDS_UNDISABLABLE =
%w(project_id tracker_id subject is_private).freeze
- CORE_FIELDS =
Fields that can be disabled Other (future) fields should be appended, not inserted!
%w(assigned_to_id category_id fixed_version_id parent_issue_id start_date due_date estimated_hours done_ratio description priority_id).freeze
- CORE_FIELDS_ALL =
(CORE_FIELDS_UNDISABLABLE + CORE_FIELDS).freeze
Class Method Summary collapse
-
.core_fields(trackers) ⇒ Object
Returns the fields that are enabled for one tracker at least.
-
.disabled_core_fields(trackers) ⇒ Object
Returns the fields that are disabled for all the given trackers.
Instance Method Summary collapse
- #<=>(tracker) ⇒ Object
- #copy_from(arg, options = {}) ⇒ Object
- #copy_workflow_rules(source_tracker) ⇒ Object
- #core_fields ⇒ Object
- #core_fields=(fields) ⇒ Object
- #disabled_core_fields ⇒ Object
- #issue_status_ids ⇒ Object
-
#issue_statuses ⇒ Object
Returns an array of IssueStatus that are used in the tracker’s workflows.
- #to_s ⇒ Object
Methods included from Redmine::SafeAttributes
#delete_unsafe_attributes, included, #safe_attribute?, #safe_attribute_names, #safe_attributes=
Methods inherited from ApplicationRecord
Class Method Details
.core_fields(trackers) ⇒ Object
Returns the fields that are enabled for one tracker at least
159 160 161 162 163 164 165 |
# File 'app/models/tracker.rb', line 159 def self.core_fields(trackers) if trackers.present? trackers.uniq.map(&:core_fields).reduce(:|) else CORE_FIELDS.dup end end |
.disabled_core_fields(trackers) ⇒ Object
Returns the fields that are disabled for all the given trackers
150 151 152 153 154 155 156 |
# File 'app/models/tracker.rb', line 150 def self.disabled_core_fields(trackers) if trackers.present? trackers.map(&:disabled_core_fields).reduce(:&) else [] end end |
Instance Method Details
#<=>(tracker) ⇒ Object
95 96 97 98 99 |
# File 'app/models/tracker.rb', line 95 def <=>(tracker) return nil unless tracker.is_a?(Tracker) position <=> tracker.position end |
#copy_from(arg, options = {}) ⇒ Object
83 84 85 86 87 88 89 90 91 |
# File 'app/models/tracker.rb', line 83 def copy_from(arg, ={}) return if arg.blank? tracker = arg.is_a?(Tracker) ? arg : Tracker.find_by_id(arg.to_s) self.attributes = tracker.attributes.dup.except("id", "name", "position") self.custom_field_ids = tracker.custom_field_ids.dup self.project_ids = tracker.project_ids.dup self end |
#copy_workflow_rules(source_tracker) ⇒ Object
145 146 147 |
# File 'app/models/tracker.rb', line 145 def copy_workflow_rules(source_tracker) WorkflowRule.copy(source_tracker, nil, self, nil) end |
#core_fields ⇒ Object
127 128 129 |
# File 'app/models/tracker.rb', line 127 def core_fields CORE_FIELDS - disabled_core_fields end |
#core_fields=(fields) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'app/models/tracker.rb', line 131 def core_fields=(fields) raise ArgumentError.new("Tracker.core_fields takes an array") unless fields.is_a?(Array) bits = 0 CORE_FIELDS.each_with_index do |field, i| unless fields.include?(field) bits |= 1 << i end end self.fields_bits = bits @disabled_core_fields = nil core_fields end |
#disabled_core_fields ⇒ Object
118 119 120 121 122 123 124 125 |
# File 'app/models/tracker.rb', line 118 def disabled_core_fields i = -1 @disabled_core_fields ||= CORE_FIELDS.select do i += 1 (fields_bits || 0) & (1 << i) != 0 end end |
#issue_status_ids ⇒ Object
107 108 109 110 111 112 113 114 115 116 |
# File 'app/models/tracker.rb', line 107 def issue_status_ids if new_record? [] else @issue_status_ids ||= WorkflowTransition.where(:tracker_id => id). where('old_status_id <> new_status_id'). distinct.pluck(:old_status_id, :new_status_id).flatten.uniq end end |
#issue_statuses ⇒ Object
Returns an array of IssueStatus that are used in the tracker’s workflows
103 104 105 |
# File 'app/models/tracker.rb', line 103 def issue_statuses @issue_statuses ||= IssueStatus.where(:id => issue_status_ids).to_a.sort end |
#to_s ⇒ Object
93 |
# File 'app/models/tracker.rb', line 93 def to_s; name end |