diff --git a/app/logical/user_name_validator.rb b/app/logical/user_name_validator.rb index 76044bdaa..5281c7664 100644 --- a/app/logical/user_name_validator.rb +++ b/app/logical/user_name_validator.rb @@ -1,5 +1,7 @@ class UserNameValidator < ActiveModel::EachValidator def validate_each(rec, attr, value) + name = value + rec.errors[attr] << "already exists" if User.find_by_name(name).present? rec.errors[attr] << "must be 2 to 100 characters long" if !name.length.between?(2, 100) rec.errors[attr] << "cannot have whitespace or colons" if name =~ /[[:space:]]|:/ diff --git a/script/fixes/043_fix_whitespace_usernames.rb b/script/fixes/043_fix_whitespace_usernames.rb new file mode 100644 index 000000000..82b929738 --- /dev/null +++ b/script/fixes/043_fix_whitespace_usernames.rb @@ -0,0 +1,12 @@ +#!/usr/bin/env ruby + +require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment')) + +ActiveRecord::Base.connection.execute("set statement_timeout = 0") + +User.where("name like ?", "% %").find_each do |user| + print "repairing #{user.name} -> " + user.name = user.name.gsub(/[[:space:]]/, "_") + user.save + puts user.name +end