Module: Role

Included in:
Policy::Base
Defined in:
lib/pundit_roles/policy/role.rb,
lib/pundit_roles/policy/role/option_builder.rb

Overview

Extended by Policy::Base. Defines the methods necessary for declaring roles.

Defined Under Namespace

Classes: OptionBuilder

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#permissions_hashObject

Returns the value of attribute permissions_hash.



6
7
8
# File 'lib/pundit_roles/policy/role.rb', line 6

def permissions_hash
  @permissions_hash
end

Instance Method Details

#role(*opts) ⇒ Hash

Builds a new role by saving it into the #permissions_hash class instance variable Valid options are :attributes, :associations, :scope, :uses_db, :extend

Parameters:

  • *opts (Array)

    the roles, and the options which define the roles

Returns:

  • (Hash)

    Returns the permissions hash or the record

Raises:

  • (ArgumentError)

    if the options are incorrectly defined, or no options are present



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/pundit_roles/policy/role.rb', line 14

def role(*opts)
  user_opts = opts.extract_options!.dup
  options = user_opts.slice(*_role_default_keys)

  raise ArgumentError, 'Please provide at least one role' unless opts.present?

  @permissions_hash = {} if @permissions_hash.nil?

  options.each do |key, value|
    if value.present?
      expected = _role_option_validations[key]
      do_raise = true
      expected.each do |type|
        do_raise = false if value.is_a? type
      end
      raise ArgumentError, "Expected #{expected} for #{key}, got #{value.class}" if do_raise
    end
  end

  opts.each do |role|
    raise ArgumentError, "Expected Symbol for #{role}, got #{role.class}" unless role.is_a? Symbol
    @permissions_hash[role] = OptionBuilder.new(self, options[:attributes], options[:associations],  options[:scope]).permitted
  end
end