Module: RoleFu::Resourceable::ClassMethods

Defined in:
lib/role_fu/resourceable.rb

Instance Method Summary collapse

Instance Method Details

#find_roles(role_name = nil, user = nil) ⇒ Object



20
21
22
23
24
25
# File 'lib/role_fu/resourceable.rb', line 20

def find_roles(role_name = nil, user = nil)
  query = RoleFu.role_class.where(resource_type: name)
  query = query.where(name: role_name.to_s) if role_name
  query = query.joins(:users).where(RoleFu.user_class.table_name => {id: user.id}) if user
  query
end

#role_fu_alias(name) ⇒ Object

Dynamically create aliases for role methods

Parameters:

  • name (Symbol, String)

    The alias name (e.g. :group)



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/role_fu/resourceable.rb', line 40

def role_fu_alias(name)
  singular = name.to_s.singularize
  plural = name.to_s.pluralize

  # Class methods
  singleton_class.class_eval do
    alias_method "find_#{plural}", :find_roles
    alias_method "with_#{singular}", :with_role
    alias_method "without_#{singular}", :without_role
  end

  # Instance methods
  alias_method "users_with_#{singular}", :users_with_role
  alias_method "users_with_any_#{singular}", :users_with_any_role
  alias_method "users_with_all_#{plural}", :users_with_all_roles
  alias_method "users_with_#{plural}", :users_with_roles
  alias_method "users_grouped_by_#{singular}", :users_grouped_by_role
  alias_method "available_#{plural}", :available_roles
  alias_method "applied_#{plural}", :applied_roles
  alias_method "has_#{singular}?", :has_role?
  alias_method "count_users_with_#{singular}", :count_users_with_role
  alias_method "user_has_#{singular}?", :user_has_role?
  alias_method "add_#{singular}_to_user", :add_role_to_user
  alias_method "remove_#{singular}_from_user", :remove_role_from_user
  alias_method "destroy_#{singular}", :destroy_role
end

#with_role(role_name, user = nil) ⇒ Object



27
28
29
30
31
32
# File 'lib/role_fu/resourceable.rb', line 27

def with_role(role_name, user = nil)
  role_table = RoleFu.role_class.table_name
  query = joins(:roles).where(role_table => {name: role_name.to_s})
  query = query.joins(roles: :users).where(RoleFu.user_class.table_name => {id: user.id}) if user
  query.distinct
end

#without_role(role_name, user = nil) ⇒ Object



34
35
36
# File 'lib/role_fu/resourceable.rb', line 34

def without_role(role_name, user = nil)
  where.not(id: with_role(role_name, user).select(:id))
end