From 10d40a391afb11f8366f0ed4265cd19136c46bde Mon Sep 17 00:00:00 2001 From: zmagod Date: Tue, 22 Nov 2016 10:10:12 +0100 Subject: [PATCH] adds rake task that creates a sign up email domain constraint --- lib/tasks/sign_up_constraint.rake | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 lib/tasks/sign_up_constraint.rake diff --git a/lib/tasks/sign_up_constraint.rake b/lib/tasks/sign_up_constraint.rake new file mode 100644 index 000000000..3dfbbd4e9 --- /dev/null +++ b/lib/tasks/sign_up_constraint.rake @@ -0,0 +1,36 @@ +namespace :sign_up_constraint do + desc 'Adds email domain constraint to the users table. '\ + 'E.g: scinote.net' + task :email_domain, [:domain] => :environment do |_, args| + if args.blank? || + args.empty? || + args[:domain].blank? + puts 'Please add the email domain' + return + end + + domain = args[:domain] + domain = domain.strip.gsub(/\./, '\\.') + + ActiveRecord::Base.connection.execute( + "ALTER TABLE " \ + "users " \ + "DROP CONSTRAINT IF EXISTS email_must_be_company_email, " \ + "ADD CONSTRAINT " \ + "email_must_be_company_email " \ + "CHECK ( email ~* '^[A-Za-z0-9._%-]+@#{domain}' ) " \ + "not valid;" + ) + puts "Created the following domain constraint: #{args[:domain]}" + end + + desc 'Remove email domain constraint from the users table.' + task remove_domain: :environment do + ActiveRecord::Base.connection.execute( + 'ALTER TABLE ' \ + 'users ' \ + 'DROP CONSTRAINT IF EXISTS email_must_be_company_email; ' + ) + puts 'Email constraint has been removed' + end +end