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