Sha256: 9e707e277e83241a0dbbf7e88ff8a443aedc67e1a2846b739687fed907e8a3af

Contents?: true

Size: 1.7 KB

Versions: 40

Compression:

Stored size: 1.7 KB

Contents

module Puppet::Pops
module Types
class TypeSetReference
  include Annotatable

  attr_reader :name_authority
  attr_reader :name
  attr_reader :version_range
  attr_reader :type_set

  def initialize(owner, i12n_hash)
    @owner = owner
    @name_authority = (i12n_hash[KEY_NAME_AUTHORITY] || owner.name_authority).freeze
    @name = i12n_hash[KEY_NAME].freeze
    @version_range = PSemVerRangeType.convert(i12n_hash[KEY_VERSION_RANGE])
    init_annotatable(i12n_hash)
  end

  def accept(visitor, guard)
    annotatable_accept(visitor, guard)
  end

  def eql?(o)
    self.class == o.class && @name_authority.eql?(o.name_authority) && @name.eql?(o.name) && @version_range.eql?(o.version_range)
  end

  def hash
    [@name_authority, @name, @version_range].hash
  end

  def i12n_hash
    result = super
    result[KEY_NAME_AUTHORITY] = @name_authority unless @name_authority == @owner.name_authority
    result[KEY_NAME] = @name
    result[KEY_VERSION_RANGE] = @version_range.to_s
    result
  end

  def resolve(type_parser, loader)
    typed_name = Loader::TypedName.new(:type, @name, @name_authority)
    loaded_entry = loader.load_typed(typed_name)
    type_set = loaded_entry.nil? ? nil : loaded_entry.value

    raise ArgumentError, "#{self} cannot be resolved" if type_set.nil?
    raise ArgumentError, "#{self} resolves to a #{type_set.name}" unless type_set.is_a?(PTypeSetType)

    @type_set = type_set.resolve(type_parser, loader)
    unless @version_range.include?(@type_set.version)
      raise ArgumentError, "#{self} resolves to an incompatible version. Expected #{@version_range}, got #{type_set.version}"
    end
    nil
  end

  def to_s
    "#{@owner.label} reference to TypeSet named '#{@name}'"
  end
end
end
end

Version data entries

40 entries across 40 versions & 2 rubygems

Version Path
puppet-retrospec-1.8.0 vendor/pup410/lib/puppet/pops/types/type_set_reference.rb
puppet-retrospec-1.7.0 vendor/pup410/lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.12 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.12-x86-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.12-x64-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.12-universal-darwin lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.11 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.11-x86-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.11-x64-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.11-universal-darwin lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.10 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.10-x86-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.10-x64-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.10-universal-darwin lib/puppet/pops/types/type_set_reference.rb
puppet-retrospec-1.6.1 vendor/pup410/lib/puppet/pops/types/type_set_reference.rb
puppet-retrospec-1.6.0 vendor/pup410/lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.9 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.9-x86-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.9-x64-mingw32 lib/puppet/pops/types/type_set_reference.rb
puppet-4.10.9-universal-darwin lib/puppet/pops/types/type_set_reference.rb