Class: Puppet::Pops::Types::PStructElement

Inherits:
TypedModelObject show all
Defined in:
lib/puppet/pops/types/types.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from TypedModelObject

_pcore_type, create_ptype, register_ptypes

Methods included from PuppetObject

#_pcore_all_contents, #_pcore_contents, #_pcore_init_hash, #_pcore_type, #to_s

Constructor Details

#initialize(key_type, value_type) ⇒ PStructElement

Returns a new instance of PStructElement


1945
1946
1947
1948
# File 'lib/puppet/pops/types/types.rb', line 1945

def initialize(key_type, value_type)
  @key_type = key_type
  @value_type = value_type
end

Instance Attribute Details

#key_typeObject


1928
1929
1930
# File 'lib/puppet/pops/types/types.rb', line 1928

def key_type
  @key_type
end

#value_typeObject


1928
1929
1930
# File 'lib/puppet/pops/types/types.rb', line 1928

def value_type
  @value_type
end

Class Method Details

.register_ptype(loader, ir) ⇒ Object


1922
1923
1924
1925
1926
# File 'lib/puppet/pops/types/types.rb', line 1922

def self.register_ptype(loader, ir)
  @type = Pcore::create_object_type(loader, ir, self, 'Pcore::StructElement'.freeze, nil,
    'key_type' => PTypeType::DEFAULT,
    'value_type' => PTypeType::DEFAULT)
end

Instance Method Details

#<=>(o) ⇒ Object


1966
1967
1968
# File 'lib/puppet/pops/types/types.rb', line 1966

def <=>(o)
  self.name <=> o.name
end

#==(o) ⇒ Object


1974
1975
1976
# File 'lib/puppet/pops/types/types.rb', line 1974

def ==(o)
  self.class == o.class && value_type == o.value_type && key_type == o.key_type
end

#accept(visitor, guard) ⇒ Object


1930
1931
1932
1933
# File 'lib/puppet/pops/types/types.rb', line 1930

def accept(visitor, guard)
  @key_type.accept(visitor, guard)
  @value_type.accept(visitor, guard)
end

#eql?(o) ⇒ Boolean


1970
1971
1972
# File 'lib/puppet/pops/types/types.rb', line 1970

def eql?(o)
  self == o
end

#generalizeObject


1950
1951
1952
1953
# File 'lib/puppet/pops/types/types.rb', line 1950

def generalize
  gv_type = @value_type.generalize
  @value_type.equal?(gv_type) ? self : PStructElement.new(@key_type, gv_type)
end

#hashObject


1935
1936
1937
# File 'lib/puppet/pops/types/types.rb', line 1935

def hash
  value_type.hash ^ key_type.hash
end

#nameObject


1939
1940
1941
1942
1943
# File 'lib/puppet/pops/types/types.rb', line 1939

def name
  k = key_type
  k = k.optional_type if k.is_a?(POptionalType)
  k.value
end

#normalize(guard = nil) ⇒ Object


1955
1956
1957
1958
# File 'lib/puppet/pops/types/types.rb', line 1955

def normalize(guard = nil)
  nv_type = @value_type.normalize(guard)
  @value_type.equal?(nv_type) ? self : PStructElement.new(@key_type, nv_type)
end

#replace_value_type(new_type) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Special boostrap method to overcome the hen and egg problem with the Object initializer that contains types that are derived from Object (such as Annotation)


1982
1983
1984
# File 'lib/puppet/pops/types/types.rb', line 1982

def replace_value_type(new_type)
  @value_type = new_type
end

#resolve(loader) ⇒ Object


1960
1961
1962
1963
1964
# File 'lib/puppet/pops/types/types.rb', line 1960

def resolve(loader)
  rkey_type = @key_type.resolve(loader)
  rvalue_type = @value_type.resolve(loader)
  rkey_type.equal?(@key_type) && rvalue_type.equal?(@value_type) ? self : self.class.new(rkey_type, rvalue_type)
end