lib/role_on.rb in darkhelmet-role_on-0.1.2 vs lib/role_on.rb in darkhelmet-role_on-0.1.3
- old
+ new
@@ -18,19 +18,31 @@
true
end
end
end
- module RoleOnUserMethods
- def has_role?(role)
- return false if roles.nil?
- roles.include?(Role[role])
+ module RoleOnUserInstanceMethods
+ def has_role?(*roles)
+ return false if self.roles.empty?
+ roles.reject { |r| self.roles.include?(Role[r]) }.empty?
end
+ alias :has_roles? :has_role?
end
+ module RoleOnUserClassMethods
+ def helper_for(role,name = role.to_s.pluralize)
+ (class << self; self; end).class_eval do
+ define_method("all_#{name}") do
+ User.find(:all, :conditions => [ 'roles.id is ? or roles.id != ?', nil, Role[role].id ], :include => :roles)
+ end
+ end
+ end
+ end
+
def self.included(klass)
if User == klass
- klass.send(:include, RoleOnUserMethods)
+ klass.send(:include, RoleOnUserInstanceMethods)
+ klass.send(:extend, RoleOnUserClassMethods)
klass.send(:has_and_belongs_to_many, :roles, :join_table => 'user_roles')
elsif ApplicationController == klass
klass.send(:extend, RoleOnControllerMethods)
end
end