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.



1948
1949
1950
1951
# File 'lib/puppet/pops/types/types.rb', line 1948

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

Instance Attribute Details

#key_typeObject



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

def key_type
  @key_type
end

#value_typeObject



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

def value_type
  @value_type
end

Class Method Details

.register_ptype(loader, ir) ⇒ Object



1925
1926
1927
1928
1929
# File 'lib/puppet/pops/types/types.rb', line 1925

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

Instance Method Details

#<=>(o) ⇒ Object



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

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

#==(o) ⇒ Object



1977
1978
1979
# File 'lib/puppet/pops/types/types.rb', line 1977

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

#accept(visitor, guard) ⇒ Object



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

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

#eql?(o) ⇒ Boolean

Returns:

  • (Boolean)


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

def eql?(o)
  self == o
end

#generalizeObject



1953
1954
1955
1956
# File 'lib/puppet/pops/types/types.rb', line 1953

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

#hashObject



1938
1939
1940
# File 'lib/puppet/pops/types/types.rb', line 1938

def hash
  value_type.hash ^ key_type.hash
end

#nameObject



1942
1943
1944
1945
1946
# File 'lib/puppet/pops/types/types.rb', line 1942

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

#normalize(guard = nil) ⇒ Object



1958
1959
1960
1961
# File 'lib/puppet/pops/types/types.rb', line 1958

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)



1985
1986
1987
# File 'lib/puppet/pops/types/types.rb', line 1985

def replace_value_type(new_type)
  @value_type = new_type
end

#resolve(loader) ⇒ Object



1963
1964
1965
1966
1967
# File 'lib/puppet/pops/types/types.rb', line 1963

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