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