OSDN Git Service

Namespace model added. Migration to convert exit project/groups
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 22 Nov 2012 18:34:16 +0000 (21:34 +0300)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Thu, 22 Nov 2012 18:34:26 +0000 (21:34 +0300)
app/models/group.rb
app/models/namespace.rb [new file with mode: 0644]
app/models/project.rb
db/migrate/20121122145155_convert_group_to_namespace.rb [new file with mode: 0644]
db/migrate/20121122150932_add_namespace_id_to_project.rb [new file with mode: 0644]
db/schema.rb

index 1ff6872..683606f 100644 (file)
 #  updated_at :datetime         not null
 #
 
-class Group < ActiveRecord::Base
-  attr_accessible :code, :name, :owner_id
-
-  has_many :projects
-  belongs_to :owner, class_name: "User"
-
-  validates :name, presence: true, uniqueness: true
-  validates :code, presence: true, uniqueness: true
-  validates :owner, presence: true
-
-  delegate :name, to: :owner, allow_nil: true, prefix: true
-
-  def self.search query
-    where("name LIKE :query OR code LIKE :query", query: "%#{query}%")
-  end
-
-  def to_param
-    code
-  end
-
+class Group < Namespace
   def users
     User.joins(:users_projects).where(users_projects: {project_id: project_ids}).uniq
   end
diff --git a/app/models/namespace.rb b/app/models/namespace.rb
new file mode 100644 (file)
index 0000000..bdf624e
--- /dev/null
@@ -0,0 +1,20 @@
+class Namespace < ActiveRecord::Base
+  attr_accessible :code, :name, :owner_id
+
+  has_many :projects
+  belongs_to :owner, class_name: "User"
+
+  validates :name, presence: true, uniqueness: true
+  validates :code, presence: true, uniqueness: true
+  validates :owner, presence: true
+
+  delegate :name, to: :owner, allow_nil: true, prefix: true
+
+  def self.search query
+    where("name LIKE :query OR code LIKE :query", query: "%#{query}%")
+  end
+
+  def to_param
+    code
+  end
+end
index 3cbc941..ef4905f 100644 (file)
@@ -32,7 +32,8 @@ class Project < ActiveRecord::Base
   attr_accessor :error_code
 
   # Relations
-  belongs_to :group
+  belongs_to :group, foreign_key: "namespace_id", conditions: 'type = Group'
+  belongs_to :namespace
   belongs_to :owner, class_name: "User"
   has_many :users,          through: :users_projects
   has_many :events,         dependent: :destroy
@@ -192,4 +193,12 @@ class Project < ActiveRecord::Base
   def gitlab_ci?
     gitlab_ci_service && gitlab_ci_service.active
   end
+
+  def path_with_namespace
+    if namespace
+      namespace.code + '/' + path
+    else
+      path
+    end
+  end
 end
diff --git a/db/migrate/20121122145155_convert_group_to_namespace.rb b/db/migrate/20121122145155_convert_group_to_namespace.rb
new file mode 100644 (file)
index 0000000..fc8b023
--- /dev/null
@@ -0,0 +1,13 @@
+class ConvertGroupToNamespace < ActiveRecord::Migration
+  def up
+    rename_table 'groups', 'namespaces'
+    add_column :namespaces, :type, :string, null: true
+
+    # Migrate old groups
+    Namespace.update_all(type: 'Group')
+  end
+
+  def down
+    raise 'Rollback is not allowed'
+  end
+end
diff --git a/db/migrate/20121122150932_add_namespace_id_to_project.rb b/db/migrate/20121122150932_add_namespace_id_to_project.rb
new file mode 100644 (file)
index 0000000..904f3aa
--- /dev/null
@@ -0,0 +1,5 @@
+class AddNamespaceIdToProject < ActiveRecord::Migration
+  def change
+    rename_column :projects, :group_id, :namespace_id
+  end
+end
index 27b1f4a..90b027d 100644 (file)
@@ -11,7 +11,7 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version => 20121120113838) do
+ActiveRecord::Schema.define(:version => 20121122150932) do
 
   create_table "events", :force => true do |t|
     t.string   "target_type"
@@ -25,14 +25,6 @@ ActiveRecord::Schema.define(:version => 20121120113838) do
     t.integer  "author_id"
   end
 
-  create_table "groups", :force => true do |t|
-    t.string   "name",       :null => false
-    t.string   "code",       :null => false
-    t.integer  "owner_id",   :null => false
-    t.datetime "created_at", :null => false
-    t.datetime "updated_at", :null => false
-  end
-
   create_table "issues", :force => true do |t|
     t.string   "title"
     t.integer  "assignee_id"
@@ -88,6 +80,15 @@ ActiveRecord::Schema.define(:version => 20121120113838) do
     t.datetime "updated_at",                     :null => false
   end
 
+  create_table "namespaces", :force => true do |t|
+    t.string   "name",       :null => false
+    t.string   "code",       :null => false
+    t.integer  "owner_id",   :null => false
+    t.datetime "created_at", :null => false
+    t.datetime "updated_at", :null => false
+    t.string   "type"
+  end
+
   create_table "notes", :force => true do |t|
     t.text     "note"
     t.string   "noteable_id"
@@ -117,7 +118,7 @@ ActiveRecord::Schema.define(:version => 20121120113838) do
     t.boolean  "wall_enabled",           :default => true, :null => false
     t.boolean  "merge_requests_enabled", :default => true, :null => false
     t.boolean  "wiki_enabled",           :default => true, :null => false
-    t.integer  "group_id"
+    t.integer  "namespace_id"
   end
 
   create_table "protected_branches", :force => true do |t|