Created
November 30, 2018 21:32
-
-
Save hogihung/901c0b1e7c04edfea08301c2c884c58f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'csv' | |
$VERBOSE = nil | |
namespace :user do | |
desc "Display Help for managing users" | |
task :help do | |
puts "Below are examples of how to use the user related rake tasks:" | |
puts " rake user:create_user['John Q. User','john.q.user@email.com','mypassword']" | |
puts " rake user:delete_user['John Q. User','john.q.user@bobots.com']" | |
puts " rake user:create_from_file[/tmp/add_api_users.csv]" | |
puts " rake user:delete_from_file[/tmp/delete_api_users.csv]" | |
puts "" | |
puts "NOTE: Make sure you do not have spaces when you list parameters in the []s" | |
puts "" | |
puts "Example CSV file:" | |
puts "-----------------" | |
puts "contact,contact_email,password" | |
puts "John Q. User,john.q.user@email.com,myPassW0rd" | |
end | |
desc "List current defined users" | |
task :list_users => :environment do | |
puts "The following users are defined:" | |
puts "--------------------------------" | |
users = DB[:api_users].all | |
users.each do |user| | |
display_user(user) | |
end | |
end | |
desc "Create an API User using passed arguments in format: ['contact','email_addr','password']" | |
task :create_user, [:contact, :contact_email, :password] => :environment do |t, args| | |
record = args.to_hash | |
user = APIUser.where(contact: record[:contact], contact_email: record[:contact_email]).first | |
if user.nil? | |
puts "Creating user #{record[:contact]} : #{record[:contact_email]}" | |
user = APIUser.new(record) | |
user[:is_active] = 1 | |
user.save | |
else | |
puts "User #{record[:contact]} : #{record[:contact_email]} already exists, exitting." | |
end | |
end | |
desc "Delete an API User using their email address in format: ['some_user@domain.com']" | |
task :delete_user, [:contact_email] => :environment do |t, args| | |
record = args.to_hash | |
user = APIUser.where(contact: record[:contact], contact_email: record[:contact_email]).first | |
if user.nil? | |
puts "User #{record[:contact]} : #{record[:contact_email]} does not exist, ignorring" | |
else | |
puts "Deleting user #{record[:contact]} : #{record[:contact_email]}" | |
end | |
end | |
desc "Create users from records found in CSV file (creates or updates existing users)" | |
task :create_from_file, [:filename] => :environment do |t, args| | |
records = parse_csv(args[:filename]) | |
records.each do |record| | |
next if record.empty? | |
user = APIUser.find(contact: record['contact'], contact_email: record['contact_email']) | |
if user.nil? | |
puts "Creating a new record for user: #{record['contact']}" | |
user = APIUser.new(record) | |
user[:is_active] = 1 | |
user.save | |
else | |
puts "Updating record for user: #{record['contact']}" | |
user[:contact] = record['contact'] | |
user[:contact_email] = record['contact_email'] | |
end | |
end | |
end | |
desc "Delete users from records found in CSV file" | |
task :delete_from_file, [:filename] => :environment do |t, args| | |
records = parse_csv(args[:filename]) | |
records.each do |record| | |
next if record.empty? | |
user = APIUser.find(contact: record['contact'], contact_email: record['contact_email']) | |
if user.nil? | |
puts "No record found for: #{record['contact']}, ignoring entry" | |
else | |
puts "Deleting record for user: #{record['contact']}" | |
user = APIUser.where(contact: record['contact'], contact_email: record['contact_email']).first | |
user.delete | |
end | |
end | |
end | |
def parse_csv(filename) | |
validate_(filename) | |
records = [] | |
CSV.foreach(filename, headers: true) do |row| | |
records << row.to_hash | |
end | |
records | |
end | |
def validate_(filename) | |
if File.exist?(filename) | |
return filename | |
else | |
puts 'Invalid filename, exiting.' | |
exit | |
end | |
end | |
def display_user(user) | |
puts "ID: #{user[:id]}, Contact: #{user[:contact]}, Contact Email: #{user[:contact_email]}, Is Active: #{user[:is_active]}, Role: #{user[:role]}, Access Level: #{user[:access_level]}" | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment