class Puppet::Pops::Types::PRuntimeType
@api public
Constants
- DEFAULT
- RUBY
- TYPE_NAME_OR_PATTERN
Attributes
name_or_pattern[R]
runtime[R]
Public Class Methods
new(runtime, name_or_pattern)
click to toggle source
Creates a new instance of a Runtime
type
@param runtime [String] the name of the runtime, e.g. 'ruby' @param name_or_pattern
[String,Array(Regexp,String)] name of runtime or two patterns, mapping Puppet
name => runtime name @api public
# File lib/puppet/pops/types/p_runtime_type.rb 28 def initialize(runtime, name_or_pattern) 29 unless runtime.nil? || runtime.is_a?(Symbol) 30 runtime = TypeAsserter.assert_instance_of("Runtime 'runtime'", PStringType::NON_EMPTY, runtime).to_sym 31 end 32 @runtime = runtime 33 @name_or_pattern = TypeAsserter.assert_instance_of("Runtime 'name_or_pattern'", TYPE_NAME_OR_PATTERN, name_or_pattern, true) 34 end
register_ptype(loader, ir)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 8 def self.register_ptype(loader, ir) 9 create_ptype(loader, ir, 'AnyType', 10 'runtime' => { 11 KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY), 12 KEY_VALUE => nil 13 }, 14 'name_or_pattern' => { 15 KEY_TYPE => POptionalType.new(TYPE_NAME_OR_PATTERN), 16 KEY_VALUE => nil 17 } 18 ) 19 end
Public Instance Methods
class_or_module()
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 69 def class_or_module 70 raise "Only ruby classes or modules can be produced by this runtime, got '#{runtime}" unless runtime == :ruby 71 raise 'A pattern based Runtime type cannot produce a class or module' if @name_or_pattern.is_a?(Array) 72 com = ClassLoader.provide(self) 73 raise "The name #{@name_or_pattern} does not represent a ruby class or module" if com.nil? 74 com 75 end
eql?(o)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 40 def eql?(o) 41 self.class == o.class && @runtime == o.runtime && @name_or_pattern == o.name_or_pattern 42 end
from_puppet_name(puppet_name)
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 78 def from_puppet_name(puppet_name) 79 if @name_or_pattern.is_a?(Array) 80 substituted = puppet_name.sub(*@name_or_pattern) 81 substituted == puppet_name ? nil : PRuntimeType.new(@runtime, substituted) 82 else 83 nil 84 end 85 end
hash()
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 36 def hash 37 @runtime.hash ^ @name_or_pattern.hash 38 end
instance?(o, guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 44 def instance?(o, guard = nil) 45 assignable?(TypeCalculator.infer(o), guard) 46 end
iterable?(guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 48 def iterable?(guard = nil) 49 if @runtime == :ruby && !runtime_type_name.nil? 50 begin 51 c = ClassLoader.provide(self) 52 return c < Iterable unless c.nil? 53 rescue ArgumentError 54 end 55 end 56 false 57 end
iterable_type(guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 59 def iterable_type(guard = nil) 60 iterable?(guard) ? PIterableType.new(self) : nil 61 end
runtime_type_name()
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 64 def runtime_type_name 65 @name_or_pattern.is_a?(String) ? @name_or_pattern : nil 66 end
Protected Instance Methods
_assignable?(o, guard)
click to toggle source
Assignable if o's has the same runtime and the runtime name resolves to a class that is the same or subclass of t1's resolved runtime type name @api private
# File lib/puppet/pops/types/p_runtime_type.rb 95 def _assignable?(o, guard) 96 return false unless o.is_a?(PRuntimeType) 97 return false unless @runtime.nil? || @runtime == o.runtime 98 return true if @name_or_pattern.nil? # t1 is wider 99 100 onp = o.name_or_pattern 101 return true if @name_or_pattern == onp 102 return false unless @name_or_pattern.is_a?(String) && onp.is_a?(String) 103 104 # NOTE: This only supports Ruby, must change when/if the set of runtimes is expanded 105 begin 106 c1 = ClassLoader.provide(self) 107 c2 = ClassLoader.provide(o) 108 c1.is_a?(Module) && c2.is_a?(Module) && !!(c2 <= c1) 109 rescue ArgumentError 110 false 111 end 112 end