Commit 51913c32 authored by Bob Van Landuyt's avatar Bob Van Landuyt

Simpler way of renaming users

parent 84f8cd17
...@@ -26,15 +26,12 @@ class RenameUsersWithRenamedNamespace < ActiveRecord::Migration ...@@ -26,15 +26,12 @@ class RenameUsersWithRenamedNamespace < ActiveRecord::Migration
] ]
def up def up
namespace_table = Arel::Table.new('namespaces') DISALLOWED_ROOT_PATHS.each do |path|
users_table = Arel::Table.new('users') update_sql = "UPDATE users SET username = namespaces.path "\
matching_path = namespace_table.project(namespace_table[:path]) "FROM namespaces WHERE namespaces.owner_id = users.id "\
.join(users_table).on(users_table[:id].eq(namespace_table[:owner_id])) "AND namespaces.type IS NULL "\
.where(users_table[:username].not_eq(namespace_table[:path])) "AND users.username ILIKE '#{path}'"
path_name = Arel::Nodes::SqlLiteral.new("matching_path.path FROM (#{matching_path.to_sql}) as matching_path") connection.execute(update_sql)
update_column_in_batches(:users, :username, path_name) do |table, query|
query.where(table[:username].matches_any(DISALLOWED_ROOT_PATHS))
end end
end end
......
...@@ -2,8 +2,9 @@ require 'spec_helper' ...@@ -2,8 +2,9 @@ require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20170518200835_rename_users_with_renamed_namespace.rb') require Rails.root.join('db', 'post_migrate', '20170518200835_rename_users_with_renamed_namespace.rb')
describe RenameUsersWithRenamedNamespace, truncate: true do 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_user = create(:user, username: 'kodingu')
other_user1 = create(:user, username: 'api0')
user = create(:user, username: "Users0") user = create(:user, username: "Users0")
user.update_attribute(:username, 'Users') user.update_attribute(:username, 'Users')
...@@ -14,6 +15,8 @@ describe RenameUsersWithRenamedNamespace, truncate: true do ...@@ -14,6 +15,8 @@ describe RenameUsersWithRenamedNamespace, truncate: true do
expect(user.reload.username).to eq('Users0') expect(user.reload.username).to eq('Users0')
expect(user1.reload.username).to eq('import0') expect(user1.reload.username).to eq('import0')
expect(other_user.reload.username).to eq('kodingu') expect(other_user.reload.username).to eq('kodingu')
expect(other_user1.reload.username).to eq('api0')
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment