Class: YouShallNotPass::Authorizator

Inherits:
Object
  • Object
show all
Defined in:
lib/you_shall_not_pass/authorizator.rb

Instance Method Summary collapse

Constructor Details

#initialize(**attrs) ⇒ Authorizator

Returns a new instance of Authorizator.



6
7
8
9
10
# File 'lib/you_shall_not_pass/authorizator.rb', line 6

def initialize(**attrs)
  attrs.each do |attr, value|
    send attr, value
  end
end

Instance Method Details

#break_down_can(permission, exception, **args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/you_shall_not_pass/authorizator.rb', line 28

def break_down_can(permission, exception, **args)
  case permission
  when /_and_/
    permission.to_s.split("_and_").all? { |policy| can?(policy.to_sym, **args)}
  when /_or_/
    permission.to_s.split("_or_").any? { |policy| can?(policy.to_sym, **args)}
  when /\Anot_/
    policy = permission.to_s.gsub(/\Anot_/, "")
    ! can?(policy.to_sym, **args)
  else
    raise exception
  end
end

#can?(permission, **args) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
18
# File 'lib/you_shall_not_pass/authorizator.rb', line 12

def can?(permission, **args)
  Array(policies.fetch(permission)).all? do |policy|
    Callable(policy).call(**args) == true
  end
rescue KeyError => exception
  break_down_can(permission, exception, **args)
end

#can_all?(*permissions, **args) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/you_shall_not_pass/authorizator.rb', line 20

def can_all?(*permissions, **args)
  permissions.all? { |permission| can?(permission, **args)}
end

#can_any?(*permissions, **args) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/you_shall_not_pass/authorizator.rb', line 24

def can_any?(*permissions, **args)
  permissions.any? { |permission| can?(permission, **args)}
end

#perform_if(permission, **args) ⇒ Object



42
43
44
# File 'lib/you_shall_not_pass/authorizator.rb', line 42

def perform_if(permission, **args)
  yield if can?(permission, **args)
end

#perform_if_all(*permissions, **args) ⇒ Object



50
51
52
# File 'lib/you_shall_not_pass/authorizator.rb', line 50

def perform_if_all(*permissions, **args)
  yield if can_all?(*permissions, **args)
end

#perform_if_any(*permissions, **args) ⇒ Object



58
59
60
# File 'lib/you_shall_not_pass/authorizator.rb', line 58

def perform_if_any(*permissions, **args)
  yield if can_any?(*permissions, **args)
end

#perform_unless(permission, **args) ⇒ Object



46
47
48
# File 'lib/you_shall_not_pass/authorizator.rb', line 46

def perform_unless(permission, **args)
  yield unless can?(permission, **args)
end

#perform_unless_all(*permissions, **args) ⇒ Object



54
55
56
# File 'lib/you_shall_not_pass/authorizator.rb', line 54

def perform_unless_all(*permissions, **args)
  yield unless can_all?(*permissions, **args)
end

#perform_unless_any(*permissions, **args) ⇒ Object



62
63
64
# File 'lib/you_shall_not_pass/authorizator.rb', line 62

def perform_unless_any(*permissions, **args)
  yield unless can_any?(*permissions, **args)
end

#policiesObject



66
67
68
# File 'lib/you_shall_not_pass/authorizator.rb', line 66

def policies
  @policies ||= __set_policies__
end