Class: ActivePolicyMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/active_policy/active_policy_middleware.rb

Constant Summary collapse

ENV_KEY_REQUEST_METHOD =
'REQUEST_METHOD'
ENV_KEY_WARDEN =
'warden'

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ ActivePolicyMiddleware

Returns a new instance of ActivePolicyMiddleware.



6
7
8
# File 'lib/active_policy/active_policy_middleware.rb', line 6

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object

Parameters:

  • env (Hash)


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/active_policy/active_policy_middleware.rb', line 11

def call(env)
  request = ActionDispatch::Request.new(env)
  params = ActivePolicy::Utilities.route_params(
      request.path,
      env[ENV_KEY_REQUEST_METHOD],
      Rails.application.routes
  )

  return next_middleware(env) unless run_middleware?(params)

  method_name = method_name_from_params(params)
  models = ActivePolicy::Utilities.models_from_route_params(params)
  policy = policy_name(params).new(current_user(env), request, params)

  return next_middleware(env) unless policy.respond_to?(method_name)

  result = policy.send(method_name, *models)

  return next_middleware(env) if result

  response
end