Skip to content
Snippets Groups Projects
Unverified Commit 8650e494 authored by Khemissi Amir's avatar Khemissi Amir Committed by GitHub
Browse files

Tasks: Initial `user:create` task. (#4761)

* Tasks: Initial `user:create` task.

* Tasks: Colorized the logging methods.
	+ Minor refactoring.

* Tasks: Removed unrequired features.

* Tasks: Added `admin:create` task.
parent 1dce4b8b
No related branches found
No related tags found
No related merge requests found
......@@ -81,3 +81,11 @@ Metrics/CyclomaticComplexity:
Metrics/PerceivedComplexity:
Max: 13
Rails/Exit:
Exclude:
- 'lib/tasks/task_helpers.rb'
Rails/Output:
Exclude:
- 'lib/tasks/task_helpers.rb'
# frozen_string_literal: true
require_relative 'task_helpers'
namespace :admin do
desc 'Create an administrator account'
task :create, %i[name email password] => :environment do |_task, args|
# Default values.
admin = {
name: 'Administrator',
email: 'admin@example.com',
password: 'Administrator1!'
}.merge(args)
Rake::Task['user:create'].invoke(admin[:name], admin[:email], admin[:password], 'Administrator')
exit 0
end
end
# frozen_string_literal: true
COLORS = {
# https://www.ing.iac.es/~docs/external/bash/abs-guide/colorizing.html.
black: 30,
red: 31,
green: 32,
yellow: 33,
blue: 34,
magenta: 35,
cyan: 36,
white: 37
}.freeze
def err(msg)
color = COLORS[:red]
warn "\033[#{color}m#{msg}\033[0m"
exit 1
end
def warning(msg)
color = COLORS[:yellow]
warn "\033[#{color}m#{msg}\033[0m"
end
def info(msg)
color = COLORS[:cyan]
puts "\033[#{color}m#{msg}\033[0m"
end
def success(msg)
color = COLORS[:green]
puts "\033[#{color}m#{msg}\033[0m"
end
# frozen_string_literal: true
require_relative 'task_helpers'
namespace :user do
desc 'Create a user'
task :create, %i[name email password role] => :environment do |_task, args|
# Default values.
user = {
provider: 'greenlight',
verified: true,
status: :active,
language: I18n.default_locale
}.merge(args)
check_role!(user:)
user = User.new(user)
display_user_errors(user:) unless user.save
success 'User account was created successfully!'
info " Name: #{user.name}"
info " Email: #{user.email}"
info " Password: #{user.password}"
info " Role: #{user.role.name}"
exit 0
end
private
def check_role!(user:)
role_name = user[:role]
user[:role] = Role.find_by(name: role_name, provider: 'greenlight')
return if user[:role]
warning "Unable to create user: '#{user[:name]}'"
err " Role '#{role_name}' does not exist, maybe you have not run the DB migrations?"
end
def display_user_errors(user:)
warning "Unable to create user: '#{user.name}'"
err " Failed to pass the following validations:\n #{user.errors.to_a}"
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment