Fixes old migrations w/ trackers.

This adds the old tracker model to the migrations that use it. The code
for the migrations was not changed, as the const name is set to Tracker
via

  Object.const_set("Tracker", AddTrackerPosition::Tracker)

Each migration removes the Tracker constant afterwards with

  Object.send(:remove_const, :Tracker)
pull/268/head
Martin Czuchra 11 years ago
parent 847a3029a9
commit 7ec619b1fa
  1. 56
      db/migrate/021_add_tracker_position.rb
  2. 56
      db/migrate/081_create_projects_trackers.rb

@ -11,9 +11,65 @@
#++
class AddTrackerPosition < ActiveRecord::Migration
class Tracker < ActiveRecord::Base
before_destroy :check_integrity
has_many :issues
has_many :workflows, :dependent => :delete_all do
def copy(source_tracker)
Workflow.copy(source_tracker, nil, proxy_association.owner, nil)
end
end
has_and_belongs_to_many :projects
has_and_belongs_to_many :custom_fields, :class_name => 'WorkPackageCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
acts_as_list
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, :maximum => 30
def to_s; name end
def <=>(tracker)
name <=> tracker.name
end
def self.all
find(:all, :order => 'position')
end
# Returns an array of IssueStatus that are used
# in the tracker's workflows
def issue_statuses
if @issue_statuses
return @issue_statuses
elsif new_record?
return []
end
ids = Workflow.
connection.select_rows("SELECT DISTINCT old_status_id, new_status_id FROM #{Workflow.table_name} WHERE tracker_id = #{id}").
flatten.
uniq
@issue_statuses = IssueStatus.find_all_by_id(ids).sort
end
private
def check_integrity
raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id])
end
end
def self.up
Object.const_set("Tracker", AddTrackerPosition::Tracker)
add_column :trackers, :position, :integer, :default => 1
Tracker.find(:all).each_with_index {|tracker, i| tracker.update_attribute(:position, i+1)}
Object.send(:remove_const, :Tracker)
end
def self.down

@ -11,7 +11,61 @@
#++
class CreateProjectsTrackers < ActiveRecord::Migration
class Tracker < ActiveRecord::Base
before_destroy :check_integrity
has_many :issues
has_many :workflows, :dependent => :delete_all do
def copy(source_tracker)
Workflow.copy(source_tracker, nil, proxy_association.owner, nil)
end
end
has_and_belongs_to_many :projects
has_and_belongs_to_many :custom_fields, :class_name => 'WorkPackageCustomField', :join_table => "#{table_name_prefix}custom_fields_trackers#{table_name_suffix}", :association_foreign_key => 'custom_field_id'
acts_as_list
validates_presence_of :name
validates_uniqueness_of :name
validates_length_of :name, :maximum => 30
def to_s; name end
def <=>(tracker)
name <=> tracker.name
end
def self.all
find(:all, :order => 'position')
end
# Returns an array of IssueStatus that are used
# in the tracker's workflows
def issue_statuses
if @issue_statuses
return @issue_statuses
elsif new_record?
return []
end
ids = Workflow.
connection.select_rows("SELECT DISTINCT old_status_id, new_status_id FROM #{Workflow.table_name} WHERE tracker_id = #{id}").
flatten.
uniq
@issue_statuses = IssueStatus.find_all_by_id(ids).sort
end
private
def check_integrity
raise "Can't delete tracker" if Issue.find(:first, :conditions => ["tracker_id=?", self.id])
end
end
def self.up
Object.const_set("Tracker", AddTrackerPosition::Tracker)
create_table :projects_trackers, :id => false do |t|
t.column :project_id, :integer, :default => 0, :null => false
t.column :tracker_id, :integer, :default => 0, :null => false
@ -23,6 +77,8 @@ class CreateProjectsTrackers < ActiveRecord::Migration
Project.find(:all).each do |project|
project.tracker_ids = tracker_ids
end
Object.send(:remove_const, :Tracker)
end
def self.down

Loading…
Cancel
Save