Class: RoleCore::PermissionSet

Inherits:
OptionsModel::Base
  • Object
show all
Defined in:
lib/role_core/permission_set.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.draw(**constraints, &block) ⇒ Object



39
40
41
42
43
44
45
46
47
# File 'lib/role_core/permission_set.rb', line 39

def draw(**constraints, &block)
  unless block_given?
    raise ArgumentError, "must provide a block"
  end

  Mapper.new(self, constraints).instance_exec(&block)

  self
end

.i18n_scopeObject



19
20
21
# File 'lib/role_core/permission_set.rb', line 19

def i18n_scope
  :role_core
end

.permission_classObject



27
28
29
# File 'lib/role_core/permission_set.rb', line 27

def permission_class
  @permission_class || RoleCore.permission_class
end

.permission_class=(klass) ⇒ Object



31
32
33
34
35
36
37
# File 'lib/role_core/permission_set.rb', line 31

def permission_class=(klass)
  unless klass && klass < Permission
    raise ArgumentError, "#{klass} should be sub-class of #{Permission}."
  end

  @permission_class = klass
end

.register_permission(name, default = false, **options, &block) ⇒ Object

Raises:

  • (ArgumentError)


53
54
55
56
57
58
# File 'lib/role_core/permission_set.rb', line 53

def register_permission(name, default = false, **options, &block)
  raise ArgumentError, "`name` can't be blank" if name.blank?

  attribute name, :boolean, default: default
  registered_permissions[name] = permission_class.new name, options, &block
end

.registered_permissionsObject



49
50
51
# File 'lib/role_core/permission_set.rb', line 49

def registered_permissions
  @registered_permissions ||= ActiveSupport::HashWithIndifferentAccess.new
end

.use_relative_model_naming?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/role_core/permission_set.rb', line 23

def use_relative_model_naming?
  true
end

Instance Method Details

#computed_permissions(include_nesting: true) ⇒ Object



9
10
11
12
13
14
15
16
# File 'lib/role_core/permission_set.rb', line 9

def computed_permissions(include_nesting: true)
  permissions = self.class.registered_permissions.slice(*permitted_permission_names).values
  if include_nesting && nested_attributes.any?
    permissions.concat nested_attributes.values.map(&:computed_permissions).flatten!
  end

  ComputedPermissions.new(permissions)
end

#permitted_permission_namesObject



5
6
7
# File 'lib/role_core/permission_set.rb', line 5

def permitted_permission_names
  attributes.select { |_, v| v }.keys
end