# frozen_string_literal: true
class Role < ApplicationRecord
NAMES = %w[
superuser
].map(&:freeze).freeze
scopify
################
# Associations #
has_many :account_roles,
-> { active },
inverse_of: :role,
dependent: :restrict_with_exception
has_many :accounts, through: :account_roles
belongs_to :resource, polymorphic: true, optional: true
###############
# Validations #
validates :name,
presence: true,
inclusion: { in: NAMES }
validates :resource_type,
allow_nil: true,
inclusion: { in: Rolify.resource_types }
###########
# Methods #
def self.make!(role_name, resource = nil)
resource_type =
resource.is_a?(Class) ? resource.to_s : resource&.class&.name
resource_id = resource&.id unless resource.is_a? Class
find_or_create_by!(
name: role_name,
resource_type: resource_type,
resource_id: resource_id,
)
end
def human_name
I18n.translate name, scope: :roles
def human_resource
"#{resource_type} ##{resource_id}" if resource_id