class Puppet::Pops::Types::PURIType

Constants

DEFAULT
FRAGMENT
HOST
OPAQUE
PATH
PORT
QUERY
SCHEME
TYPE_INTEGER_PARAM
TYPE_STRING_PARAM
TYPE_URI_INIT_HASH
TYPE_URI_PARAM_HASH_TYPE
TYPE_URI_PARAM_TYPE
URI_MEMBERS
USERINFO

Attributes

parameters[R]

Public Class Methods

new(parameters = nil) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
102 def initialize(parameters = nil)
103   if parameters.is_a?(String)
104     parameters = TypeAsserter.assert_instance_of('URI-Type parameter', Pcore::TYPE_URI, parameters, true)
105     @parameters = uri_to_hash(URI.parse(parameters))
106   elsif parameters.is_a?(URI)
107     @parameters = uri_to_hash(parameters)
108   elsif parameters.is_a?(Hash)
109     params = TypeAsserter.assert_instance_of('URI-Type parameter', TYPE_URI_PARAM_TYPE, parameters, true)
110     @parameters = params.empty? ? nil : params
111   end
112 end
new_function(type) click to toggle source
   # File lib/puppet/pops/types/p_uri_type.rb
76 def self.new_function(type)
77   @new_function ||= Puppet::Functions.create_loaded_function(:new_error, type.loader) do
78     dispatch :create do
79       param 'String[1]', :uri
80     end
81 
82     dispatch :from_hash do
83       param TYPE_URI_INIT_HASH, :hash
84     end
85 
86     def create(uri)
87       URI.parse(uri)
88     end
89 
90     def from_hash(init_hash)
91       sym_hash = {}
92       init_hash.each_pair { |k, v| sym_hash[k.to_sym] = v }
93       scheme = sym_hash[:scheme]
94       scheme_class = scheme.nil? ? URI::Generic : (URI.scheme_list[scheme.upcase] || URI::Generic)
95       scheme_class.build(sym_hash)
96     end
97   end
98 end
register_ptype(loader, ir) click to toggle source
   # File lib/puppet/pops/types/p_uri_type.rb
68 def self.register_ptype(loader, ir)
69   create_ptype(loader, ir, 'AnyType',
70     {
71       'parameters' => { KEY_TYPE => TypeFactory.optional(TYPE_URI_PARAM_TYPE), KEY_VALUE => nil }
72     }
73   )
74 end

Public Instance Methods

==(o) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
118 def ==(o)
119   eql?(o)
120 end
[](key) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
122 def [](key)
123   URI_MEMBERS[key]
124 end
_pcore_init_hash() click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
146 def _pcore_init_hash
147   @parameters == nil? ? EMPTY_HASH : { 'parameters' => @parameters }
148 end
create(uri) click to toggle source
   # File lib/puppet/pops/types/p_uri_type.rb
86 def create(uri)
87   URI.parse(uri)
88 end
eql?(o) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
114 def eql?(o)
115   self.class == o.class && @parameters == o.parameters
116 end
from_hash(init_hash) click to toggle source
   # File lib/puppet/pops/types/p_uri_type.rb
90 def from_hash(init_hash)
91   sym_hash = {}
92   init_hash.each_pair { |k, v| sym_hash[k.to_sym] = v }
93   scheme = sym_hash[:scheme]
94   scheme_class = scheme.nil? ? URI::Generic : (URI.scheme_list[scheme.upcase] || URI::Generic)
95   scheme_class.build(sym_hash)
96 end
generalize() click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
126 def generalize
127   DEFAULT
128 end
hash() click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
130 def hash
131   self.class.hash ^ @parameters.hash
132 end
instance?(o, guard = nil) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
134 def instance?(o, guard = nil)
135   return false unless o.is_a?(URI)
136   return true if @parameters.nil?
137 
138   eval = Parser::EvaluatingParser.singleton.evaluator
139   @parameters.keys.all? { |pn| eval.match?(o.send(pn), @parameters[pn]) }
140 end
roundtrip_with_string?() click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
142 def roundtrip_with_string?
143   true
144 end

Protected Instance Methods

_assignable?(o, guard = nil) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
152 def _assignable?(o, guard = nil)
153   return false unless o.class == self.class
154   return true if @parameters.nil?
155   o_params = o.parameters || EMPTY_HASH
156 
157   eval = Parser::EvaluatingParser.singleton.evaluator
158   @parameters.keys.all? do |pn|
159     if o_params.include?(pn)
160       a = o_params[pn]
161       b = @parameters[pn]
162       eval.match?(a, b) || a.is_a?(PAnyType) && b.is_a?(PAnyType) && b.assignable?(a)
163     else
164       false
165     end
166   end
167 end

Private Instance Methods

uri_to_hash(uri) click to toggle source
    # File lib/puppet/pops/types/p_uri_type.rb
171 def uri_to_hash(uri)
172   result = {}
173   scheme = uri.scheme
174   unless scheme.nil?
175     scheme = scheme.downcase
176     result[SCHEME] = scheme
177   end
178   result[USERINFO] = uri.userinfo unless uri.userinfo.nil?
179   result[HOST] = uri.host.downcase unless uri.host.nil? || uri.host.empty?
180   result[PORT] = uri.port.to_s unless uri.port.nil? || uri.port == 80 && 'http' == scheme || uri.port == 443 && 'https' == scheme
181   result[PATH] = uri.path unless uri.path.nil? || uri.path.empty?
182   result[QUERY] = uri.query unless uri.query.nil?
183   result[FRAGMENT] = uri.fragment unless uri.fragment.nil?
184   result[OPAQUE] = uri.opaque unless uri.opaque.nil?
185   result.empty? ? nil : result
186 end