Class: EC2::Host::RoleData

Inherits:
Object
  • Object
show all
Defined in:
lib/ec2/host/role_data.rb

Overview

Represents each role

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*role_parts) ⇒ RoleData

Initialize role data with role parts

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

Parameters:

  • role_parts (Array)

    such as [‘admin’, ‘jenkins’, ‘slave’]



10
11
12
# File 'lib/ec2/host/role_data.rb', line 10

def initialize(*role_parts)
  @role_parts = role_parts
end

Class Method Details

.build(role) ⇒ Object

Create a role data with role delimiter by Config.role_tag_delimiter

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

Parameters:

  • role (String)

    such as “admin:jenkins:slave”



19
20
21
22
# File 'lib/ec2/host/role_data.rb', line 19

def self.build(role)
  role_parts = role.split(Config.role_tag_delimiter, Config.role_max_depth)
  new(*role_parts)
end

Instance Method Details

#==(other) ⇒ Object

Equality

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

Parameters:

  • other (Object)


80
81
82
83
84
85
86
87
88
89
# File 'lib/ec2/host/role_data.rb', line 80

def ==(other)
  case other
  when String
    self.role == other
  when EC2::Host::RoleData
    super(other)
  else
    false
  end
end

#inspectObject



91
92
93
# File 'lib/ec2/host/role_data.rb', line 91

def inspect
  "\"#{to_s}\""
end

#match?(*role_parts) ⇒ Boolean

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

Parameters:

  • role_parts (Array)

    such as [“admin”, “jenkins”, “slave”]

Returns:

  • (Boolean)


69
70
71
72
# File 'lib/ec2/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

#roleString Also known as: to_s

Returns something like “admin:jenkins:slave”.

Returns:

  • (String)

    something like “admin:jenkins:slave”



25
26
27
# File 'lib/ec2/host/role_data.rb', line 25

def role
  @role ||= @role_parts.compact.reject(&:empty?).join(Config.role_tag_delimiter)
end

#uppersArray

Returns something like [“admin”, “admin:jenkins”, “admin:jenkins:slave”].

Returns:

  • (Array)

    something like [“admin”, “admin:jenkins”, “admin:jenkins:slave”]



37
38
39
40
41
42
43
44
45
46
# File 'lib/ec2/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