Sha256: 8be249994b30052511150b20586a533d3edde1767dc22cb258d0048f1dc2fce7

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

class EC2
  class Host
    RoleData = Struct.new(
      :role1, :role2, :role3
    )

    # Represents each role
    class RoleData
      def self.initialize(role)
        role1, role2, role3 = role.split(ROLE_TAG_DELIMITER)
        self.new(role1, role2, role3)
      end

      # @return [String] something like "admin:jenkins:slave"
      def role
        @role ||= [role1, role2, role3].compact.reject(&:empty?).join(ROLE_TAG_DELIMITER)
      end
      alias :to_s :role

      # @return [Array] something like ["admin", "admin:jenkins", "admin:jenkins:slave"]
      def uppers
        uppers = [RoleData.new(role1)]
        uppers << RoleData.new(role1, role2) if role2 and !role2.empty?
        uppers << RoleData.new(role1, role2, role3) if role3 and !role3.empty?
        uppers
      end

      def match?(role1, role2 = nil, role3 = nil)
        if role3
          role1 == self.role1 and role2 == self.role2 and role3 == self.role3
        elsif role2
          role1 == self.role1 and role2 == self.role2
        else
          role1 == self.role1
        end
      end

      # Equality
      #
      #     Role::Data.new('admin') == Role::Data.new('admin') #=> true
      #     Role::Data.new('admin', 'jenkin') == "admin:jenkins" #=> true
      #
      # @param [Object] other
      def ==(other)
        case other
        when String
          self.role == other
        when EC2::Host::RoleData
          super(other)
        else
          false
        end
      end

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ec2-host-0.0.2 lib/ec2/host/role_data.rb
ec2-host-0.0.1 lib/ec2/host/role_data.rb