-
Notifications
You must be signed in to change notification settings - Fork 398
Expand file tree
/
Copy pathrolify.rb
More file actions
76 lines (57 loc) · 2.51 KB
/
rolify.rb
File metadata and controls
76 lines (57 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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
66
67
68
69
70
71
72
73
74
75
76
require 'rolify/adapters/base'
require 'rolify/configure'
require 'rolify/dynamic'
require 'rolify/railtie' if defined?(Rails)
require 'rolify/resource'
require 'rolify/role'
module Rolify
extend Configure
attr_accessor :role_cname, :adapter, :resource_adapter, :role_join_table_name, :role_table_name, :strict_rolify
@@resource_types = []
def rolify(options = {}, &block)
include Role
extend Dynamic if Rolify.dynamic_shortcuts
options.reverse_merge!({:role_cname => 'Role'})
self.role_cname = options[:role_cname]
self.role_table_name = self.role_cname.tableize.gsub(/\//, "_")
default_join_table = "#{self.to_s.tableize.gsub(/\//, "_")}_#{self.role_table_name}"
options.reverse_merge!({:role_join_table_name => default_join_table})
self.role_join_table_name = options[:role_join_table_name]
rolify_options = { :class_name => options[:role_cname].camelize }
rolify_options.merge!({ :join_table => self.role_join_table_name }) if Rolify.orm == "active_record"
rolify_options.merge!(options.reject{ |k,v| ![ :before_add, :after_add, :before_remove, :after_remove, :inverse_of ].include? k.to_sym })
has_and_belongs_to_many :roles, rolify_options, &block
self.adapter = Rolify::Adapter::Base.create("role_adapter", self.role_cname, self.name)
#use strict roles
self.strict_rolify = true if options[:strict]
end
def adapter
return self.superclass.adapter unless self.instance_variable_defined? '@adapter'
@adapter
end
def resourcify(association_name = :roles, options = {})
include Resource
options.reverse_merge!({ :role_cname => 'Role', :dependent => :destroy })
resourcify_options = { :class_name => options[:role_cname].camelize, :as => :resource, :dependent => options[:dependent] }
self.role_cname = options[:role_cname]
self.role_table_name = self.role_cname.tableize.gsub(/\//, "_")
has_many association_name, resourcify_options
self.resource_adapter = Rolify::Adapter::Base.create("resource_adapter", self.role_cname, self.name)
@@resource_types << self.name
end
def resource_adapter
return self.superclass.resource_adapter unless self.instance_variable_defined? '@resource_adapter'
@resource_adapter
end
def scopify
require "rolify/adapters/#{Rolify.orm}/scopes.rb"
extend Rolify::Adapter::Scopes
end
def role_class
return self.superclass.role_class unless self.instance_variable_defined? '@role_cname'
self.role_cname.constantize
end
def self.resource_types
@@resource_types
end
end