module Rolify

Constants

VERSION

Attributes

adapter[RW]
resource_adapter[RW]
role_cname[RW]
role_join_table_name[RW]
role_table_name[RW]
strict_rolify[RW]

Public Class Methods

resource_types() click to toggle source
# File lib/rolify.rb, line 72
def self.resource_types
  @@resource_types
end

Public Instance Methods

resourcify(association_name = :roles, options = {}) click to toggle source
# File lib/rolify.rb, line 43
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
role_class() click to toggle source
# File lib/rolify.rb, line 67
def role_class
  return self.superclass.role_class unless self.instance_variable_defined? '@role_cname'
  self.role_cname.constantize
end
rolify(options = {}) click to toggle source
# File lib/rolify.rb, line 14
def rolify(options = {})
  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

  self.adapter = Rolify::Adapter::Base.create("role_adapter", self.role_cname, self.name)

  #use strict roles
  self.strict_rolify = true if options[:strict]
end
scopify() click to toggle source
# File lib/rolify.rb, line 62
def scopify
  require "rolify/adapters/#{Rolify.orm}/scopes.rb"
  extend Rolify::Adapter::Scopes
end

Private Instance Methods

parse_args(args, users, &block) click to toggle source
# File lib/rolify/finders.rb, line 37
def parse_args(args, users, &block)
  args.each do |arg|
    if arg.is_a? Hash
      users_to_add = self.with_role(arg[:name], arg[:resource])
    elsif arg.is_a?(String) || arg.is_a?(Symbol)
      users_to_add = self.with_role(arg)
    else
      raise ArgumentError, "Invalid argument type: only hash or string or symbol allowed"
    end
    block.call(users_to_add)
  end
end