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

Version Path
foreman_discovery-1.0.0 test/foreman_app/app/models/usergroup.rb
foreman_discovery-1.0.0.rc4 test/foreman_app/app/models/usergroup.rb
foreman_discovery-1.0.0.rc3 test/foreman_app/app/models/usergroup.rb
foreman_discovery-1.0.0.rc2 test/foreman_app/app/models/usergroup.rb
foreman_discovery-1.0.0.rc1 test/foreman_app/app/models/usergroup.rb