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 29 def initialize(runtime, name_or_pattern) 30 unless runtime.nil? || runtime.is_a?(Symbol) 31 runtime = TypeAsserter.assert_instance_of("Runtime 'runtime'", PStringType::NON_EMPTY, runtime).to_sym 32 end 33 @runtime = runtime 34 @name_or_pattern = TypeAsserter.assert_instance_of("Runtime 'name_or_pattern'", TYPE_NAME_OR_PATTERN, name_or_pattern, true) 35 end
register_ptype(loader, ir)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 9 def self.register_ptype(loader, ir) 10 create_ptype(loader, ir, 'AnyType', 11 'runtime' => { 12 KEY_TYPE => POptionalType.new(PStringType::NON_EMPTY), 13 KEY_VALUE => nil 14 }, 15 'name_or_pattern' => { 16 KEY_TYPE => POptionalType.new(TYPE_NAME_OR_PATTERN), 17 KEY_VALUE => nil 18 } 19 ) 20 end
Public Instance Methods
class_or_module()
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 70 def class_or_module 71 raise "Only ruby classes or modules can be produced by this runtime, got '#{runtime}" unless runtime == :ruby 72 raise 'A pattern based Runtime type cannot produce a class or module' if @name_or_pattern.is_a?(Array) 73 com = ClassLoader.provide(self) 74 raise "The name #{@name_or_pattern} does not represent a ruby class or module" if com.nil? 75 com 76 end
eql?(o)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 41 def eql?(o) 42 self.class == o.class && @runtime == o.runtime && @name_or_pattern == o.name_or_pattern 43 end
from_puppet_name(puppet_name)
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 79 def from_puppet_name(puppet_name) 80 if @name_or_pattern.is_a?(Array) 81 substituted = puppet_name.sub(*@name_or_pattern) 82 substituted == puppet_name ? nil : PRuntimeType.new(@runtime, substituted) 83 else 84 nil 85 end 86 end
hash()
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 37 def hash 38 @runtime.hash ^ @name_or_pattern.hash 39 end
instance?(o, guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 45 def instance?(o, guard = nil) 46 assignable?(TypeCalculator.infer(o), guard) 47 end
iterable?(guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 49 def iterable?(guard = nil) 50 if @runtime == :ruby && !runtime_type_name.nil? 51 begin 52 c = ClassLoader.provide(self) 53 return c < Iterable unless c.nil? 54 rescue ArgumentError 55 end 56 end 57 false 58 end
iterable_type(guard = nil)
click to toggle source
# File lib/puppet/pops/types/p_runtime_type.rb 60 def iterable_type(guard = nil) 61 iterable?(guard) ? PIterableType.new(self) : nil 62 end
runtime_type_name()
click to toggle source
@api private
# File lib/puppet/pops/types/p_runtime_type.rb 65 def runtime_type_name 66 @name_or_pattern.is_a?(String) ? @name_or_pattern : nil 67 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 96 def _assignable?(o, guard) 97 return false unless o.is_a?(PRuntimeType) 98 return false unless @runtime.nil? || @runtime == o.runtime 99 return true if @name_or_pattern.nil? # t1 is wider 100 101 onp = o.name_or_pattern 102 return true if @name_or_pattern == onp 103 return false unless @name_or_pattern.is_a?(String) && onp.is_a?(String) 104 105 # NOTE: This only supports Ruby, must change when/if the set of runtimes is expanded 106 begin 107 c1 = ClassLoader.provide(self) 108 c2 = ClassLoader.provide(o) 109 c1.is_a?(Module) && c2.is_a?(Module) && !!(c2 <= c1) 110 rescue ArgumentError 111 false 112 end 113 end