From 51913c32bab12ec366cc3c529f2ed3d6699ee25e Mon Sep 17 00:00:00 2001 From: Bob Van Landuyt Date: Fri, 19 May 2017 17:22:45 +0200 Subject: [PATCH] Simpler way of renaming users --- ...8200835_rename_users_with_renamed_namespace.rb | 15 ++++++--------- .../rename_users_with_renamed_namespace_spec.rb | 5 ++++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/db/post_migrate/20170518200835_rename_users_with_renamed_namespace.rb b/db/post_migrate/20170518200835_rename_users_with_renamed_namespace.rb index a0444f4cc62..dfb8a020119 100644 --- a/db/post_migrate/20170518200835_rename_users_with_renamed_namespace.rb +++ b/db/post_migrate/20170518200835_rename_users_with_renamed_namespace.rb @@ -26,15 +26,12 @@ class RenameUsersWithRenamedNamespace < ActiveRecord::Migration ] 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)) + DISALLOWED_ROOT_PATHS.each do |path| + update_sql = "UPDATE users SET username = namespaces.path "\ + "FROM namespaces WHERE namespaces.owner_id = users.id "\ + "AND namespaces.type IS NULL "\ + "AND users.username ILIKE '#{path}'" + connection.execute(update_sql) end end diff --git a/spec/migrations/rename_users_with_renamed_namespace_spec.rb b/spec/migrations/rename_users_with_renamed_namespace_spec.rb index aefa539094f..1e9aab3d9a1 100644 --- a/spec/migrations/rename_users_with_renamed_namespace_spec.rb +++ b/spec/migrations/rename_users_with_renamed_namespace_spec.rb @@ -2,8 +2,9 @@ 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 + it 'renames a user that had their namespace renamed to the namespace path' do other_user = create(:user, username: 'kodingu') + other_user1 = create(:user, username: 'api0') user = create(:user, username: "Users0") user.update_attribute(:username, 'Users') @@ -14,6 +15,8 @@ describe RenameUsersWithRenamedNamespace, truncate: true do expect(user.reload.username).to eq('Users0') expect(user1.reload.username).to eq('import0') + expect(other_user.reload.username).to eq('kodingu') + expect(other_user1.reload.username).to eq('api0') end end