Rename users that had their namespace renamed
This commit is contained in:
parent
e4eec19156
commit
df5c3f364a
3 changed files with 63 additions and 1 deletions
|
@ -0,0 +1,43 @@
|
|||
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||
# for more information on how to write migrations for GitLab.
|
||||
|
||||
class RenameUsersWithRenamedNamespace < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
DOWNTIME = false
|
||||
DISALLOWED_ROOT_PATHS = %w[
|
||||
-
|
||||
abuse_reports
|
||||
api
|
||||
autocomplete
|
||||
explore
|
||||
health_check
|
||||
import
|
||||
invites
|
||||
jwt
|
||||
koding
|
||||
member
|
||||
notification_settings
|
||||
oauth
|
||||
sent_notifications
|
||||
unicorn_test
|
||||
uploads
|
||||
users
|
||||
]
|
||||
|
||||
def up
|
||||
namespace_table = Arel::Table.new('namespaces')
|
||||
users_table = Arel::Table.new('users')
|
||||
matching_path = namespace_table.project(namespace_table[:path])
|
||||
.join(users_table).on(users_table[:id].eq(namespace_table[:owner_id]))
|
||||
.where(users_table[:username].not_eq(namespace_table[:path]))
|
||||
path_name = Arel::Nodes::SqlLiteral.new("matching_path.path FROM (#{matching_path.to_sql}) as matching_path")
|
||||
|
||||
update_column_in_batches(:users, :username, path_name) do |table, query|
|
||||
query.where(table[:username].matches_any(DISALLOWED_ROOT_PATHS))
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20170516183131) do
|
||||
ActiveRecord::Schema.define(version: 20170518200835) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
|
19
spec/migrations/rename_users_with_renamed_namespace_spec.rb
Normal file
19
spec/migrations/rename_users_with_renamed_namespace_spec.rb
Normal file
|
@ -0,0 +1,19 @@
|
|||
require 'spec_helper'
|
||||
require Rails.root.join('db', 'post_migrate', '20170518200835_rename_users_with_renamed_namespace.rb')
|
||||
|
||||
describe RenameUsersWithRenamedNamespace, truncate: true do
|
||||
it 'renames a user that had his namespace renamed to the namespace path' do
|
||||
other_user = create(:user, username: 'kodingu')
|
||||
|
||||
user = create(:user, username: "Users0")
|
||||
user.update_attribute(:username, 'Users')
|
||||
user1 = create(:user, username: "import0")
|
||||
user1.update_attribute(:username, 'import')
|
||||
|
||||
described_class.new.up
|
||||
|
||||
expect(user.reload.username).to eq('Users0')
|
||||
expect(user1.reload.username).to eq('import0')
|
||||
expect(other_user.reload.username).to eq('kodingu')
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue