module ActsAsRoleable::Roleatize

Public Instance Methods

acts_as_roleable(*args) click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 2
def acts_as_roleable(*args)
  include RoleModel
  options = args.extract_options!

  roles_attribute options[:roles_mask] if options.has_key?(:roles_mask)
  roles options[:roles] if options.has_key?(:roles)
  add_role_scopes
end

Private Instance Methods

active_record_table?() click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 32
def active_record_table?
  respond_to?(:table_exists?) && table_exists?
end
add_role_scopes() click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 13
def add_role_scopes
  return unless active_record_table?
  valid_roles.each do |role|
    define_scopes_for_role role
  end

  define_scope_method(:with_any_role) do |*roles|
    where "#{role_mask_column} & :role_mask > 0", role_mask: mask_for(*roles)
  end

  define_scope_method(:with_all_roles) do |*roles|
    where "#{role_mask_column} & :role_mask = :role_mask", role_mask: mask_for(*roles)
  end

  define_scope_method(:with_only_roles) do |*roles|
    where "#{role_mask_column} = :role_mask", role_mask: mask_for(*roles)
  end
end
define_scope_method(method, &block) click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 49
def define_scope_method(method, &block)
  (class << self; self end).class_eval do
    define_method(method, block)
  end
end
define_scopes_for_role(role) click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 36
def define_scopes_for_role(role)
  include_scope   = role.to_s.pluralize
  exclude_scope   = "non_#{include_scope}"

  define_scope_method(include_scope) do
    where "#{role_mask_column} & :role_mask > 0", role_mask: mask_for(role)
  end

  define_scope_method(exclude_scope) do
    where "#{role_mask_column} & :role_mask = 0 OR #{role_mask_column} IS NULL", role_mask: mask_for(role)
  end
end
role_mask_column() click to toggle source
# File lib/acts_as_roleable/roleatize.rb, line 55
def role_mask_column
  "#{quoted_table_name}.#{connection.quote_column_name roles_attribute_name}"
end