class ActivePolicyMiddleware
Constants
- ENV_KEY_REQUEST_METHOD
- ENV_KEY_WARDEN
Public Class Methods
new(app)
click to toggle source
# File lib/active_policy/active_policy_middleware.rb, line 6 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
@param [Hash] env
# 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
Private Instance Methods
current_user(env)
click to toggle source
@param [Hash] env @return [User, nil]
# File lib/active_policy/active_policy_middleware.rb, line 60 def current_user(env) if env.key?(ENV_KEY_WARDEN) return env[ENV_KEY_WARDEN].user end nil end
method_name_from_params(params)
click to toggle source
@param [Hash] params @return [String]
# File lib/active_policy/active_policy_middleware.rb, line 38 def method_name_from_params(params) return params[:method] if params.key(:method) params[:action] + '?' end
next_middleware(env)
click to toggle source
@param [Hash] env
# File lib/active_policy/active_policy_middleware.rb, line 74 def next_middleware(env) @app.call(env) end
policy_name(params)
click to toggle source
@param [Hash] params @return [String]
# File lib/active_policy/active_policy_middleware.rb, line 46 def policy_name(params) if params[:policy].is_a?(Class) return params[:policy] end if params[:policy].key?(:class) return params[:policy][:class] end params[:policy] end
response(status_code = 401, headers = {'content_type': 'application/json'}, body = [])
click to toggle source
@param [Rack::Response]
# File lib/active_policy/active_policy_middleware.rb, line 69 def response(status_code = 401, headers = {'content_type': 'application/json'}, body = []) Rack::Response.new(body, status_code, headers).finish end
run_middleware?(params)
click to toggle source
@param [Hash] params @return [TrueClass, FalseClass]
# File lib/active_policy/active_policy_middleware.rb, line 80 def run_middleware?(params) params.key?(:policy) end