Class: Rolify::Adapter::ActiveRecord

Inherits:
Base
  • Object
show all
Defined in:
lib/rolify/adapters/active_record.rb

Instance Method Summary collapse

Methods inherited from Base

#initialize, #role_class

Constructor Details

This class inherits a constructor from Rolify::Adapter::Base

Instance Method Details

#add(relation, role) ⇒ Object



20
21
22
# File 'lib/rolify/adapters/active_record.rb', line 20

def add(relation, role)
  relation.role_ids |= [role.id]
end

#exists?(relation, column) ⇒ Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/rolify/adapters/active_record.rb', line 41

def exists?(relation, column)
  relation.where("#{column} IS NOT NULL")
end

#find(relation, role_name, resource) ⇒ Object



6
7
8
9
# File 'lib/rolify/adapters/active_record.rb', line 6

def find(relation, role_name, resource)
  query, values = build_query(role_name, resource)
  relation.where(query, *values)
end

#find_or_create_by(role_name, resource_type = nil, resource_id = nil) ⇒ Object



16
17
18
# File 'lib/rolify/adapters/active_record.rb', line 16

def find_or_create_by(role_name, resource_type = nil, resource_id = nil)
  role_class.find_or_create_by_name_and_resource_type_and_resource_id(role_name, resource_type, resource_id)
end

#in(relation, roles) ⇒ Object



37
38
39
# File 'lib/rolify/adapters/active_record.rb', line 37

def in(relation, roles)
  relation.where("#{role_class.to_s.tableize}.id IN (?) AND ((resource_id = #{relation.table_name}.id) OR (resource_id IS NULL))", roles)
end

#remove(relation, role_name, resource = nil) ⇒ Object



24
25
26
27
28
29
# File 'lib/rolify/adapters/active_record.rb', line 24

def remove(relation, role_name, resource = nil)
  role = relation.where(:name => role_name)
  role = role.where(:resource_type => (resource.is_a?(Class) ? resource.to_s : resource.class.name)) if resource
  role = role.where(:resource_id => resource.id) if resource && !resource.is_a?(Class)
  relation.delete(role) if role
end

#resources_find(roles_table, relation, role_name) ⇒ Object



31
32
33
34
35
# File 'lib/rolify/adapters/active_record.rb', line 31

def resources_find(roles_table, relation, role_name)
  resources = relation.joins("INNER JOIN \"#{roles_table}\" ON \"#{roles_table}\".\"resource_type\" = '#{relation.to_s}'")
  resources = resources.where("#{roles_table}.name = ? AND #{roles_table}.resource_type = ?", role_name, relation.to_s)
  resources
end

#where(relation, args) ⇒ Object



11
12
13
14
# File 'lib/rolify/adapters/active_record.rb', line 11

def where(relation, args)
  conditions, values = build_conditions(relation, args)
  relation.where(conditions, *values)
end