Simpler way of renaming users
This commit is contained in:
parent
84f8cd1718
commit
51913c32ba
2 changed files with 10 additions and 10 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue