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