lib/canard/user_model.rb in canard-0.5.0.pre vs lib/canard/user_model.rb in canard-0.6.0.pre

- old
+ new

@@ -1,98 +1,97 @@ +# frozen_string_literal: true + module Canard + # Canard applies roles to a model using the acts_as_user class method. The following User model + # will be given the :manager and :admin roles + # + # class User < ActiveRecord::Base + # + # acts_as_user :roles => [:manager, :admin] + # + # end + # + # If using Canard with a non ActiveRecord class you can still assign roles but you will need to + # extend the class with Canard::UserModel and add a roles_mask attribute. + # + # class User + # + # extend Canard::UserModel + # + # attr_accessor :roles_mask + # + # acts_as_user :roles => [:manager, :admin] + # + # end + # + # You can choose the attribute used for the roles_mask by specifying :roles_mask. If no + # roles_mask is specified it uses RoleModel's default of 'roles_mask' + # + # acts_as_user :roles_mask => :my_roles_mask, :roles => [:manager, :admin] + # + # == Scopes + # + # Beyond applying the roles to the model, acts_as_user also creates some useful scopes for + # ActiveRecord models; + # + # User.with_any_role(:manager, :admin) + # + # returns all the managers and admins + # + # User.with_all_roles(:manager, :admin) + # + # returns only the users with both the manager and admin roles + # + # User.admins + # + # returns all the admins as + # + # User.managers + # + # returns all the users with the maager role likewise + # + # User.non_admins + # + # returns all the users who don't have the admin role and + # + # User.non_managers + # + # returns all the users who don't have the manager role. module UserModel - - # Canard applies roles to a model using the acts_as_user class method. The following User model - # will be given the :manager and :admin roles - # - # class User < ActiveRecord::Base - # - # acts_as_user :roles => [:manager, :admin] - # - # end - # - # If using Canard with a non ActiveRecord class you can still assign roles but you will need to - # extend the class with Canard::UserModel and add a roles_mask attribute. - # - # class User - # - # extend Canard::UserModel - # - # attr_accessor :roles_mask - # - # acts_as_user :roles => [:manager, :admin] - # - # end - # - # You can choose the attribute used for the roles_mask by specifying :roles_mask. If no - # roles_mask is specified it uses RoleModel's default of 'roles_mask' - # - # acts_as_user :roles_mask => :my_roles_mask, :roles => [:manager, :admin] - # - # == Scopes - # - # Beyond applying the roles to the model, acts_as_user also creates some useful scopes for - # ActiveRecord models; - # - # User.with_any_role(:manager, :admin) - # - # returns all the managers and admins - # - # User.with_all_roles(:manager, :admin) - # - # returns only the users with both the manager and admin roles - # - # User.admins - # - # returns all the admins as - # - # User.managers - # - # returns all the users with the maager role likewise - # - # User.non_admins - # - # returns all the users who don't have the admin role and - # - # User.non_managers - # - # returns all the users who don't have the manager role. def acts_as_user(*args) include RoleModel include InstanceMethods - + options = args.last.is_a?(Hash) ? args.pop : {} - + if defined?(ActiveRecord) && self < ActiveRecord::Base extend Adapters::ActiveRecord - elsif defined?(Mongoid) && self.included_modules.include?(Mongoid::Document) + elsif defined?(Mongoid) && included_modules.include?(Mongoid::Document) extend Adapters::Mongoid - field (options[:roles_mask] || :roles_mask), :type => Integer + field (options[:roles_mask] || :roles_mask), type: Integer end - roles_attribute options[:roles_mask] if options.has_key?(:roles_mask) + roles_attribute options[:roles_mask] if options.key?(:roles_mask) - roles options[:roles] if options.has_key?(:roles) && has_roles_mask_accessors? + roles options[:roles] if options.key?(:roles) && has_roles_mask_accessors? add_role_scopes(prefix: options[:prefix]) if respond_to?(:add_role_scopes, true) end private # This is overridden by the ActiveRecord adapter as the attribute accessors # don't show up in instance_methods. def has_roles_mask_accessors? - instance_method_names = instance_methods.map { |method_name| method_name.to_s } - [roles_attribute_name.to_s, "#{roles_attribute_name}="].all? do |accessor| + instance_method_names = instance_methods.map(&:to_s) + [roles_attribute_name.to_s, "#{roles_attribute_name}="].all? do |accessor| instance_method_names.include?(accessor) end end - module InstanceMethods - + module InstanceMethods # :nodoc: def ability @ability ||= Ability.new(self) end - end end end