From 625fb2f29d99ab21de2497a36512be69c80e39be Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 21 Aug 2013 12:16:26 +0300 Subject: [PATCH] Add iids to milestones. Moved iids logic to separate concern --- app/models/concerns/internal_id.rb | 17 +++++++++++++++++ app/models/concerns/issuable.rb | 11 ----------- app/models/issue.rb | 2 +- app/models/merge_request.rb | 2 +- app/models/milestone.rb | 2 ++ ...0821090531_add_internal_ids_to_milestones.rb | 5 +++++ db/schema.rb | 3 ++- lib/tasks/migrate/migrate_iids.rake | 15 +++++++++++++++ 8 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 app/models/concerns/internal_id.rb create mode 100644 db/migrate/20130821090531_add_internal_ids_to_milestones.rb diff --git a/app/models/concerns/internal_id.rb b/app/models/concerns/internal_id.rb new file mode 100644 index 00000000000..821ed54fb98 --- /dev/null +++ b/app/models/concerns/internal_id.rb @@ -0,0 +1,17 @@ +module InternalId + extend ActiveSupport::Concern + + included do + validate :set_iid, on: :create + validates :iid, presence: true, numericality: true + end + + def set_iid + max_iid = project.send(self.class.name.tableize).maximum(:iid) + self.iid = max_iid.to_i + 1 + end + + def to_param + iid.to_s + end +end diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index fb08a5aa750..a05dba7f6b6 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -16,8 +16,6 @@ module Issuable validates :author, presence: true validates :title, presence: true, length: { within: 0..255 } - validate :set_iid, on: :create - validates :iid, presence: true, numericality: true scope :authored, ->(user) { where(author_id: user) } scope :assigned_to, ->(u) { where(assignee_id: u.id)} @@ -47,15 +45,6 @@ module Issuable end end - def set_iid - max_iid = project.send(self.class.name.tableize).maximum(:iid) - self.iid = max_iid.to_i + 1 - end - - def to_param - iid.to_s - end - def today? Date.today == created_at.to_date end diff --git a/app/models/issue.rb b/app/models/issue.rb index ecb881ab597..35b487dc3cf 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -17,8 +17,8 @@ # class Issue < ActiveRecord::Base - include Issuable + include InternalId belongs_to :project validates :project, presence: true diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index d525ad17537..190f6ab15f4 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -23,8 +23,8 @@ require Rails.root.join("app/models/commit") require Rails.root.join("lib/static_model") class MergeRequest < ActiveRecord::Base - include Issuable + include InternalId belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project" belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project" diff --git a/app/models/milestone.rb b/app/models/milestone.rb index 023b8ddf04d..cfa47f30bde 100644 --- a/app/models/milestone.rb +++ b/app/models/milestone.rb @@ -13,6 +13,8 @@ # class Milestone < ActiveRecord::Base + include InternalId + attr_accessible :title, :description, :due_date, :state_event, :author_id_of_changes attr_accessor :author_id_of_changes diff --git a/db/migrate/20130821090531_add_internal_ids_to_milestones.rb b/db/migrate/20130821090531_add_internal_ids_to_milestones.rb new file mode 100644 index 00000000000..33e5bae5805 --- /dev/null +++ b/db/migrate/20130821090531_add_internal_ids_to_milestones.rb @@ -0,0 +1,5 @@ +class AddInternalIdsToMilestones < ActiveRecord::Migration + def change + add_column :milestones, :iid, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index b8e7d3dd6f2..429551a2bf4 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130821090530) do +ActiveRecord::Schema.define(:version => 20130821090531) do create_table "deploy_keys_projects", :force => true do |t| t.integer "deploy_key_id", :null => false @@ -119,6 +119,7 @@ ActiveRecord::Schema.define(:version => 20130821090530) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "state" + t.integer "iid" end add_index "milestones", ["due_date"], :name => "index_milestones_on_due_date" diff --git a/lib/tasks/migrate/migrate_iids.rake b/lib/tasks/migrate/migrate_iids.rake index bc612cd69a7..33271e1a2bb 100644 --- a/lib/tasks/migrate/migrate_iids.rake +++ b/lib/tasks/migrate/migrate_iids.rake @@ -29,5 +29,20 @@ task migrate_iids: :environment do end end + puts 'done' + puts 'Milestones'.yellow + Milestone.where(iid: nil).find_each(batch_size: 100) do |m| + begin + m.set_iid + if m.update_attribute(:iid, m.iid) + print '.' + else + print 'F' + end + rescue + print 'F' + end + end + puts 'done' end