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

Public Instance Methods

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

Protected Instance Methods

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

Private Instance Methods

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