class DeclarativeAuthorization::Test::Helpers::PrivilegeTestGenerator

Public Class Methods

new(test_class, role, privileges) click to toggle source
# File lib/declarative_authorization/test/helpers.rb, line 19
def initialize(test_class, role, privileges)
  @test_class = test_class
  @role = role
  @privileges = [privileges].flatten
end

Public Instance Methods

allowed(options) click to toggle source
# File lib/declarative_authorization/test/helpers.rb, line 25
def allowed(options)
  role, privileges, actions, params_name = extract_options(options)

  actions.each do |action|
    privileges.each do |privilege|
      @test_class.send(:define_method, "test_#{action}__access_allowed__#{role}_role__#{privilege ? "#{privilege}_permissions__" : ""}with_#{params_name || 'no_params'}") do
        priv_param = (privilege == :hidden ? nil : privilege)
        if forbidden_with_role_and_privilege?(action, role, priv_param, params_name, options)
          flunk "The '#{action}' action #{params_name ? "with '#{params_name}' parameters " : ''}should be accessible for users with #{privilege ? "'#{privilege}' permissions for " : ""}the '#{role}' role."
        end
      end
    end
  end
end
denied(options) click to toggle source
# File lib/declarative_authorization/test/helpers.rb, line 40
def denied(options)
  role, privileges, actions, params_name = extract_options(options)

  actions.each do |action|
    privileges.each do |privilege|
      @test_class.send(:define_method, "test_#{action}__access_denied__#{role}_role__#{privilege ? "#{privilege}_permissions__" : ""}with_#{params_name || 'no_params'}") do
        priv_param = (privilege == :hidden ? nil : privilege)
        unless forbidden_with_role_and_privilege?(action, role, priv_param, params_name, options)
          flunk "The '#{action}' action #{params_name ? "with '#{params_name}' parameters " : ''}should NOT be accessible for users with #{privilege ? "'#{privilege}' permissions for " : ""}the '#{role}' role."
        end
      end
    end
  end
end

Protected Instance Methods

extract_options(options) click to toggle source
# File lib/declarative_authorization/test/helpers.rb, line 57
def extract_options(options)
  # Can't use these instance variable from inside a method on the test class
  role        = @role
  privileges   = @privileges

  actions     = options[:to]
  raise ':to is a required option!' unless actions

  actions     = [actions] unless actions.is_a?(Array)
  params_name      = options[:with]

  [role, privileges, actions, params_name]
end