Class: EC2::Host::RoleData
- Inherits:
-
Object
- Object
- EC2::Host::RoleData
- Defined in:
- lib/ec2/host/role_data.rb
Overview
Represents each role
Class Method Summary collapse
-
.build(role) ⇒ Object
Create a role data with role delimiter by Config.role_tag_delimiter.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Equality.
-
#initialize(*role_parts) ⇒ RoleData
constructor
Initialize role data with role parts.
- #inspect ⇒ Object
-
#match?(*role_parts) ⇒ Boolean
Check whether given role parts matches with this role data object.
-
#role ⇒ String
(also: #to_s)
Something like “admin:jenkins:slave”.
-
#uppers ⇒ Array
Something like [“admin”, “admin:jenkins”, “admin:jenkins:slave”].
Constructor Details
Class Method Details
.build(role) ⇒ Object
Create a role data with role delimiter by Config.role_tag_delimiter
RoleData.build('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
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 |
#inspect ⇒ Object
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
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 |
#role ⇒ String Also known as: to_s
Returns 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 |
#uppers ⇒ Array
Returns 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 |