Sha256: 8bbe20f1ad0fdb8fa39e3f801e5c7f4b3ee264b79102526ee07f26347a38227f
Contents?: true
Size: 1.97 KB
Versions: 5
Compression:
Stored size: 1.97 KB
Contents
class Usergroup < ActiveRecord::Base include Authorization has_many :usergroup_members, :dependent => :destroy has_many :users, :through => :usergroup_members, :source => :member, :source_type => 'User' has_many :usergroups, :through => :usergroup_members, :source => :member, :source_type => 'Usergroup' has_many_hosts :as => :owner validates_uniqueness_of :name before_destroy EnsureNotUsedBy.new(:hosts, :usergroups) # The text item to see in a select dropdown menu alias_attribute :select_title, :to_s default_scope :order => 'LOWER(usergroups.name)' scoped_search :on => :name, :complete_value => :true validate :ensure_uniq_name # This methods retrieves all user addresses in a usergroup # Returns: Array of strings representing the user's email addresses def recipients all_users.map(&:mail).flatten.sort.uniq end # This methods retrieves all users in a usergroup # Returns: Array of users def all_users(group_list=[self], user_list=[]) retrieve_users_and_groups group_list, user_list user_list.sort.uniq end # This methods retrieves all usergroups in a usergroup # Returns: Array of unique usergroups def all_usergroups(group_list=[self], user_list=[]) retrieve_users_and_groups group_list, user_list group_list.sort.uniq end def as_json(options={}) super({:only => [:name, :id]}) end protected # Recurses down the tree of usergroups and finds the users # [+group_list+]: Array of Usergroups that have already been processed # [+users+] : Array of users accumulated at this point # Returns : Array of non unique users def retrieve_users_and_groups(group_list, user_list) for group in usergroups next if group_list.include? group group_list << group group.retrieve_users_and_groups(group_list, user_list) end user_list.concat users end def ensure_uniq_name errors.add :name, _("is already used by a user account") if User.where(:login => name).first end end
Version data entries
5 entries across 5 versions & 1 rubygems