Class: ProxES::RequestPolicy

Inherits:
Object
  • Object
show all
Includes:
Helpers::Indices
Defined in:
lib/proxes/policies/request_policy.rb

Defined Under Namespace

Classes: Scope

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers::Indices

#filter, #patterns, #patterns_for

Constructor Details

#initialize(user, record) ⇒ RequestPolicy

Returns a new instance of RequestPolicy.



16
17
18
19
# File 'lib/proxes/policies/request_policy.rb', line 16

def initialize(user, record)
  @user = user
  @record = record
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_sym, *arguments, &block) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/proxes/policies/request_policy.rb', line 21

def method_missing(method_sym, *arguments, &block)
  return super if method_sym.to_s[-1] != '?'

  return true if user && user.super_admin?
  return false if request.indices? && !index_allowed?
  action_allowed? method_sym[0..-2].upcase
end

Instance Attribute Details

#recordObject (readonly) Also known as: request

Returns the value of attribute record.



13
14
15
# File 'lib/proxes/policies/request_policy.rb', line 13

def record
  @record
end

#userObject (readonly)

Returns the value of attribute user.



13
14
15
# File 'lib/proxes/policies/request_policy.rb', line 13

def user
  @user
end

Instance Method Details

#action_allowed?(action) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
44
# File 'lib/proxes/policies/request_policy.rb', line 41

def action_allowed?(action)
  # Give me all the user's permissions that match the verb
  !!patterns_for(action).find { |permission| (request.path =~ /#{permission.pattern}/) }
end

#index_allowed?Boolean

Returns:

  • (Boolean)


33
34
35
36
37
38
39
# File 'lib/proxes/policies/request_policy.rb', line 33

def index_allowed?
  patterns = patterns_for('INDEX').map do |permission|
    return nil if permission.pattern.blank?
    permission.pattern.gsub(/\{user.(.*)\}/) { |_match| user.send(Regexp.last_match[1].to_sym) }
  end.compact
  filter(request.index, patterns).count > 0
end

#respond_to_missing?(name, _include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


29
30
31
# File 'lib/proxes/policies/request_policy.rb', line 29

def respond_to_missing?(name, _include_private = false)
  name[-1] == '?'
end