summaryrefslogtreecommitdiff
path: root/app/models/route.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-10-31 13:00:53 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-12-08 11:47:16 +0200
commit83232be0e14cc8b35bf74532203a6e4371c15e70 (patch)
treed6cde69809c44055496954efe57b866404b3d0f2 /app/models/route.rb
parent34fc5b050a4e70bf491be9a49cfa2dc0a7a9a9a2 (diff)
downloadgitlab-ce-83232be0e14cc8b35bf74532203a6e4371c15e70.tar.gz
Add nested groups support on data leveldz-nested-groups
* add parent_id field to namespaces table to store relation with nested groups * create routes table to keep information about full path of every group and project * project/group lookup by full path from routes table Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/models/route.rb')
-rw-r--r--app/models/route.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/models/route.rb b/app/models/route.rb
new file mode 100644
index 00000000000..d40214b9da6
--- /dev/null
+++ b/app/models/route.rb
@@ -0,0 +1,22 @@
+class Route < ActiveRecord::Base
+ belongs_to :source, polymorphic: true
+
+ validates :source, presence: true
+
+ validates :path,
+ length: { within: 1..255 },
+ presence: true,
+ uniqueness: { case_sensitive: false }
+
+ after_update :rename_children, if: :path_changed?
+
+ def rename_children
+ # We update each row separately because MySQL does not have regexp_replace.
+ # rubocop:disable Rails/FindEach
+ Route.where('path LIKE ?', "#{path_was}%").each do |route|
+ # Note that update column skips validation and callbacks.
+ # We need this to avoid recursive call of rename_children method
+ route.update_column(:path, route.path.sub(path_was, path))
+ end
+ end
+end