class GCE::Host::RoleData

Represents each role

Public Class Methods

build(role) click to toggle source

Create a role data with role delimiter by Config.role_value_delimiter

RoleData.build('admin:jenkins:slave')

@param [String] role such as “admin:jenkins:slave”

# File lib/gce/host/role_data.rb, line 19
def self.build(role)
  role_parts = role.split(Config.role_value_delimiter, Config.role_max_depth)
  new(*role_parts)
end
new(*role_parts) click to toggle source

Initialize role data with role parts

RoleData.new('admin', 'jenkins', 'slave')

@param [Array] role_parts such as ['admin', 'jenkins', 'slave']

# File lib/gce/host/role_data.rb, line 10
def initialize(*role_parts)
  @role_parts = role_parts
end

Public Instance Methods

==(other) click to toggle source

Equality

RoleData.new('admin') == Role::Data.new('admin') #=> true
RoleData.new('admin', 'jenkin') == "admin:jenkins" #=> true

@param [Object] other

Calls superclass method
# File lib/gce/host/role_data.rb, line 80
def ==(other)
  case other
  when String
    self.role == other
  when GCE::Host::RoleData
    super(other)
  else
    false
  end
end
inspect() click to toggle source
# File lib/gce/host/role_data.rb, line 91
def inspect
  "\"#{to_s}\""
end
match?(*role_parts) click to toggle source

Check whether given role parts matches with this role data object

RoleData.new('admin', 'jenkins', 'slave').match?('admin') #=> true
RoleData.new('admin', 'jenkins', 'slave').match?('admin', 'jenkins') #=> true
RoleData.new('admin', 'jenkins', 'slave').match?('admin', 'jenkins', 'slave') #=> true
RoleData.new('admin', 'jenkins', 'slave').match?('admin', 'jenkins', 'master') #=> false
RoleData.new('admin', 'jenkins', 'slave').match?(nil, 'jenkins') #=> true
RoleData.new('admin', 'jenkins', 'slave').match?(nil, nil, 'slave') #=> true

RoleData.new('foo', 'a').match?(['foo', 'bar']) #=> true
RoleData.new('bar', 'a').match?(['foo', 'bar']) #=> true
RoleData.new('baz', 'a').match?(['foo', 'bar']) #=> false

RoleData.new('foo', 'a').match?(['foo', 'bar'], ['a', 'b']) #=> true
RoleData.new('bar', 'a').match?(['foo', 'bar'], ['a', 'b']) #=> true
RoleData.new('baz', 'a').match?(['foo', 'bar'], ['a', 'b']) #=> false
RoleData.new('foo', 'b').match?(['foo', 'bar'], ['a', 'b']) #=> true
RoleData.new('bar', 'b').match?(['foo', 'bar'], ['a', 'b']) #=> true
RoleData.new('baz', 'b').match?(['foo', 'bar'], ['a', 'b']) #=> false

@param [Array] role_parts such as [“admin”, “jenkins”, “slave”]

# File lib/gce/host/role_data.rb, line 69
def match?(*role_parts)
  indexes = role_parts.map.with_index {|part, i| part ? i : nil }.compact
  indexes.all? {|i| Array(role_parts[i]).include?(@role_parts[i]) }
end
role() click to toggle source

@return [String] something like “admin:jenkins:slave”

# File lib/gce/host/role_data.rb, line 25
def role
  @role ||= @role_parts.compact.reject(&:empty?).join(Config.role_value_delimiter)
end
Also aliased as: to_s
to_s()
Alias for: role
uppers() click to toggle source

@return [Array] something like [“admin”, “admin:jenkins”, “admin:jenkins:slave”]

# File lib/gce/host/role_data.rb, line 37
def uppers
  role_parts = @role_parts.dup
  upper_role_parts = []
  upper_role_parts << [role_parts.shift]
  role_parts.each do |role_part|
    break if role_part.nil? or role_part.empty?
    upper_role_parts << [*(upper_role_parts.last), role_part]
  end
  upper_role_parts.map {|role_parts| RoleData.new(*role_parts) }
end