Sha256: 7ca1655065bab48301cbf391df94b9951a2cbe5a97f848c3d4170136b10e2950

Contents?: true

Size: 1.3 KB

Versions: 24

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

class Role < ApplicationRecord
  belongs_to :user, touch: true
  validates :name,
            presence: true,
            uniqueness: { scope: :user_id },
            inclusion: { in: proc { Role.roles.map(&:name) } }

  RoleDefinition = Struct.new(:name, :description, :default)

  class << self
    def define(name, description, default: false)
      if roles.map(&:name).include?(name.to_s)
        raise ArgumentError, "Tried to define role :#{role}, " \
                             "but a role by that name already exists"
      else
        roles << RoleDefinition.new(name.to_s, description, default)
      end
    end

    def roles
      @roles ||= default_roles + config_roles
    end

    def names
      all.map(&:name)
    end

    protected

    def config_file
      Rails.root.join("config/roles.yml")
    end

    def config_roles
      return [] unless File.exist?(config_file)

      YAML.load_file(config_file).map do |key, opts|
        RoleDefinition.new(key.to_s, opts["description"], opts["default"])
      end
    end

    def default_roles
      [RoleDefinition.new("users", "Can manage users", false),
       RoleDefinition.new("pages", "Can manage pages", true)]
    end
  end

  def name=(new_name)
    super(new_name.to_s)
  end

  def to_s
    name.humanize
  end
end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
pages_core-3.15.5 app/models/role.rb
pages_core-3.15.4 app/models/role.rb
pages_core-3.15.3 app/models/role.rb
pages_core-3.15.2 app/models/role.rb
pages_core-3.15.1 app/models/role.rb
pages_core-3.14.0 app/models/role.rb
pages_core-3.13.0 app/models/role.rb
pages_core-3.12.7 app/models/role.rb
pages_core-3.12.6 app/models/role.rb
pages_core-3.12.5 app/models/role.rb
pages_core-3.12.4 app/models/role.rb
pages_core-3.12.3 app/models/role.rb
pages_core-3.12.2 app/models/role.rb
pages_core-3.12.1 app/models/role.rb
pages_core-3.12.0 app/models/role.rb
pages_core-3.11.3 app/models/role.rb
pages_core-3.11.2 app/models/role.rb
pages_core-3.11.1 app/models/role.rb
pages_core-3.11.0 app/models/role.rb
pages_core-3.10.2 app/models/role.rb