class Controlrepo::Group

Attributes

members[RW]
name[RW]

Work out how to do class veriables so that I can keep track of all the groups easily

Public Class Methods

all() click to toggle source
# File lib/controlrepo/group.rb, line 55
def self.all
  @@all
end
find(group_name) click to toggle source
# File lib/controlrepo/group.rb, line 46
def self.find(group_name)
  @@all.each do |group|
    if group.name == group_name
      return group
    end
  end
  nil
end
new(name = nil, members = []) click to toggle source

You need to pass in an array of strings for members, not objects, it will find the objects by itself, and yes it will reference them, not just create additional ones, woo!

# File lib/controlrepo/group.rb, line 15
def initialize(name = nil, members = [])
  @name = name
  @members = []

  if Controlrepo::Group.valid_members?(members)
    # If it's already a valid list just chuck it in there
    @members = members
  elsif members.is_a?(Hash)
    # if it's a hash then do subtractive stiff
    @members = Controlrepo::Group.subtractive_to_list(members)
  else
    # Turn it into a full list
    member_objects = []

    # This should also handle lists that include groups
    members.each { |member| member_objects << Controlrepo::TestConfig.find_list(member) }
    member_objects.flatten!

    # Check that they are all the same type
    unless Controlrepo::Group.valid_members?(member_objects)
      raise 'Groups must contain either all nodes or all classes. Either there was a mix, or something was spelled wrong'
    end

    # Smash it into the instance variable
    @members = member_objects
  end

  # Finally add it to the list of all grops
  @@all << self
end
subtractive_to_list(subtractive_hash) click to toggle source
# File lib/controlrepo/group.rb, line 75
def self.subtractive_to_list(subtractive_hash)
  # Take a hash that looks like this:
  # { 'include' => 'somegroup'
  #   'exclude' => 'other'}
  # and return a list of classes/nodes
  include_list = Controlrepo::TestConfig.find_list(subtractive_hash['include'])
  exclude_list = Controlrepo::TestConfig.find_list(subtractive_hash['exclude'])
  include_list - exclude_list
end
valid_members?(members) click to toggle source
# File lib/controlrepo/group.rb, line 59
def self.valid_members?(members)
  # Check that they are all the same type
  # Also catch any errors to assume it's invalid
  begin
    if members.all? { |item| item.is_a?(Controlrepo::Class) }
      return true
    elsif members.all? { |item| item.is_a?(Controlrepo::Node) }
      return true
    else
      return false
    end
  rescue
    return false
  end
end