openvox 8.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1104) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +19 -0
  3. data/CODEOWNERS +11 -0
  4. data/CODE_OF_CONDUCT.md +70 -0
  5. data/Gemfile +87 -0
  6. data/Guardfile.example +76 -0
  7. data/LICENSE +202 -0
  8. data/README.md +63 -0
  9. data/Rakefile +170 -0
  10. data/bin/puppet +10 -0
  11. data/conf/environment.conf +18 -0
  12. data/conf/fileserver.conf +32 -0
  13. data/conf/hiera.yaml +11 -0
  14. data/conf/puppet.conf +6 -0
  15. data/examples/enc/regexp_nodes/classes/databases +2 -0
  16. data/examples/enc/regexp_nodes/classes/webservers +2 -0
  17. data/examples/enc/regexp_nodes/environment/development +2 -0
  18. data/examples/enc/regexp_nodes/parameters/service/prod +1 -0
  19. data/examples/enc/regexp_nodes/parameters/service/qa +3 -0
  20. data/examples/enc/regexp_nodes/parameters/service/sandbox +1 -0
  21. data/examples/enc/regexp_nodes/regexp_nodes.rb +270 -0
  22. data/examples/hiera/README.md +102 -0
  23. data/examples/hiera/data/common.yaml +12 -0
  24. data/examples/hiera/data/dc1.yaml +6 -0
  25. data/examples/hiera/hiera.yaml +15 -0
  26. data/examples/hiera/modules/ntp/data/common.yaml +4 -0
  27. data/examples/hiera/modules/ntp/hiera.yaml +9 -0
  28. data/examples/hiera/modules/ntp/manifests/config.pp +18 -0
  29. data/examples/hiera/modules/ntp/templates/ntp.conf.epp +3 -0
  30. data/examples/hiera/modules/users/manifests/common.pp +9 -0
  31. data/examples/hiera/modules/users/manifests/dc1.pp +9 -0
  32. data/examples/hiera/site.pp +3 -0
  33. data/examples/nagios/check_puppet.rb +123 -0
  34. data/ext/README.md +13 -0
  35. data/ext/build_defaults.yaml +18 -0
  36. data/ext/debian/puppet.default +4 -0
  37. data/ext/debian/puppet.init +113 -0
  38. data/ext/hiera/hiera.yaml +15 -0
  39. data/ext/osx/puppet.plist +32 -0
  40. data/ext/project_data.yaml +20 -0
  41. data/ext/redhat/client.init +169 -0
  42. data/ext/redhat/client.sysconfig +2 -0
  43. data/ext/solaris/smf/puppet +44 -0
  44. data/ext/solaris/smf/puppet.xml +46 -0
  45. data/ext/suse/client.init +141 -0
  46. data/ext/systemd/puppet.service +26 -0
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.bat +6 -0
  51. data/ext/windows/service/daemon.rb +219 -0
  52. data/install.rb +428 -0
  53. data/lib/hiera/puppet_function.rb +86 -0
  54. data/lib/hiera/scope.rb +92 -0
  55. data/lib/hiera_puppet.rb +78 -0
  56. data/lib/puppet/agent/disabler.rb +55 -0
  57. data/lib/puppet/agent/locker.rb +46 -0
  58. data/lib/puppet/agent.rb +178 -0
  59. data/lib/puppet/application/agent.rb +527 -0
  60. data/lib/puppet/application/apply.rb +435 -0
  61. data/lib/puppet/application/catalog.rb +6 -0
  62. data/lib/puppet/application/config.rb +7 -0
  63. data/lib/puppet/application/describe.rb +255 -0
  64. data/lib/puppet/application/device.rb +440 -0
  65. data/lib/puppet/application/doc.rb +232 -0
  66. data/lib/puppet/application/epp.rb +7 -0
  67. data/lib/puppet/application/face_base.rb +277 -0
  68. data/lib/puppet/application/facts.rb +11 -0
  69. data/lib/puppet/application/filebucket.rb +324 -0
  70. data/lib/puppet/application/generate.rb +7 -0
  71. data/lib/puppet/application/help.rb +7 -0
  72. data/lib/puppet/application/indirection_base.rb +6 -0
  73. data/lib/puppet/application/lookup.rb +433 -0
  74. data/lib/puppet/application/module.rb +6 -0
  75. data/lib/puppet/application/node.rb +6 -0
  76. data/lib/puppet/application/parser.rb +7 -0
  77. data/lib/puppet/application/plugin.rb +6 -0
  78. data/lib/puppet/application/report.rb +6 -0
  79. data/lib/puppet/application/resource.rb +264 -0
  80. data/lib/puppet/application/script.rb +266 -0
  81. data/lib/puppet/application/ssl.rb +331 -0
  82. data/lib/puppet/application.rb +596 -0
  83. data/lib/puppet/application_support.rb +69 -0
  84. data/lib/puppet/coercion.rb +42 -0
  85. data/lib/puppet/compilable_resource_type.rb +17 -0
  86. data/lib/puppet/concurrent/lock.rb +15 -0
  87. data/lib/puppet/concurrent/synchronized.rb +15 -0
  88. data/lib/puppet/concurrent/thread_local_singleton.rb +18 -0
  89. data/lib/puppet/concurrent.rb +4 -0
  90. data/lib/puppet/configurer/downloader.rb +91 -0
  91. data/lib/puppet/configurer/fact_handler.rb +51 -0
  92. data/lib/puppet/configurer/plugin_handler.rb +61 -0
  93. data/lib/puppet/configurer.rb +759 -0
  94. data/lib/puppet/confine/any.rb +28 -0
  95. data/lib/puppet/confine/boolean.rb +47 -0
  96. data/lib/puppet/confine/exists.rb +21 -0
  97. data/lib/puppet/confine/false.rb +27 -0
  98. data/lib/puppet/confine/feature.rb +18 -0
  99. data/lib/puppet/confine/true.rb +28 -0
  100. data/lib/puppet/confine/variable.rb +61 -0
  101. data/lib/puppet/confine.rb +86 -0
  102. data/lib/puppet/confine_collection.rb +54 -0
  103. data/lib/puppet/confiner.rb +48 -0
  104. data/lib/puppet/context/trusted_information.rb +122 -0
  105. data/lib/puppet/context.rb +190 -0
  106. data/lib/puppet/daemon.rb +198 -0
  107. data/lib/puppet/data_binding.rb +16 -0
  108. data/lib/puppet/datatypes/error.rb +23 -0
  109. data/lib/puppet/datatypes/impl/error.rb +42 -0
  110. data/lib/puppet/datatypes.rb +218 -0
  111. data/lib/puppet/defaults.rb +2316 -0
  112. data/lib/puppet/environments.rb +599 -0
  113. data/lib/puppet/error.rb +142 -0
  114. data/lib/puppet/etc.rb +185 -0
  115. data/lib/puppet/external/dot.rb +315 -0
  116. data/lib/puppet/face/catalog/select.rb +51 -0
  117. data/lib/puppet/face/catalog.rb +167 -0
  118. data/lib/puppet/face/config.rb +266 -0
  119. data/lib/puppet/face/epp.rb +565 -0
  120. data/lib/puppet/face/facts.rb +176 -0
  121. data/lib/puppet/face/generate.rb +69 -0
  122. data/lib/puppet/face/help/action.erb +89 -0
  123. data/lib/puppet/face/help/face.erb +114 -0
  124. data/lib/puppet/face/help/global.erb +16 -0
  125. data/lib/puppet/face/help/man.erb +152 -0
  126. data/lib/puppet/face/help.rb +260 -0
  127. data/lib/puppet/face/module/changes.rb +44 -0
  128. data/lib/puppet/face/module/install.rb +149 -0
  129. data/lib/puppet/face/module/list.rb +271 -0
  130. data/lib/puppet/face/module/uninstall.rb +91 -0
  131. data/lib/puppet/face/module/upgrade.rb +89 -0
  132. data/lib/puppet/face/module.rb +21 -0
  133. data/lib/puppet/face/node/clean.rb +109 -0
  134. data/lib/puppet/face/node.rb +45 -0
  135. data/lib/puppet/face/parser.rb +226 -0
  136. data/lib/puppet/face/plugin.rb +62 -0
  137. data/lib/puppet/face/report.rb +54 -0
  138. data/lib/puppet/face/resource.rb +55 -0
  139. data/lib/puppet/face.rb +14 -0
  140. data/lib/puppet/facter_impl.rb +96 -0
  141. data/lib/puppet/feature/base.rb +76 -0
  142. data/lib/puppet/feature/bolt.rb +5 -0
  143. data/lib/puppet/feature/cfpropertylist.rb +5 -0
  144. data/lib/puppet/feature/eventlog.rb +7 -0
  145. data/lib/puppet/feature/hiera_eyaml.rb +5 -0
  146. data/lib/puppet/feature/hocon.rb +5 -0
  147. data/lib/puppet/feature/libuser.rb +10 -0
  148. data/lib/puppet/feature/msgpack.rb +5 -0
  149. data/lib/puppet/feature/pe_license.rb +6 -0
  150. data/lib/puppet/feature/pson.rb +6 -0
  151. data/lib/puppet/feature/selinux.rb +5 -0
  152. data/lib/puppet/feature/ssh.rb +5 -0
  153. data/lib/puppet/feature/telnet.rb +5 -0
  154. data/lib/puppet/feature/zlib.rb +7 -0
  155. data/lib/puppet/ffi/posix/constants.rb +16 -0
  156. data/lib/puppet/ffi/posix/functions.rb +25 -0
  157. data/lib/puppet/ffi/posix.rb +12 -0
  158. data/lib/puppet/ffi/windows/api_types.rb +313 -0
  159. data/lib/puppet/ffi/windows/constants.rb +406 -0
  160. data/lib/puppet/ffi/windows/functions.rb +629 -0
  161. data/lib/puppet/ffi/windows/structs.rb +339 -0
  162. data/lib/puppet/ffi/windows.rb +14 -0
  163. data/lib/puppet/file_bucket/dipper.rb +183 -0
  164. data/lib/puppet/file_bucket/file.rb +131 -0
  165. data/lib/puppet/file_bucket.rb +6 -0
  166. data/lib/puppet/file_serving/base.rb +94 -0
  167. data/lib/puppet/file_serving/configuration/parser.rb +116 -0
  168. data/lib/puppet/file_serving/configuration.rb +116 -0
  169. data/lib/puppet/file_serving/content.rb +45 -0
  170. data/lib/puppet/file_serving/fileset.rb +190 -0
  171. data/lib/puppet/file_serving/http_metadata.rb +61 -0
  172. data/lib/puppet/file_serving/metadata.rb +174 -0
  173. data/lib/puppet/file_serving/mount/file.rb +126 -0
  174. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  175. data/lib/puppet/file_serving/mount/modules.rb +29 -0
  176. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  177. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  178. data/lib/puppet/file_serving/mount/scripts.rb +27 -0
  179. data/lib/puppet/file_serving/mount/tasks.rb +26 -0
  180. data/lib/puppet/file_serving/mount.rb +41 -0
  181. data/lib/puppet/file_serving/terminus_helper.rb +33 -0
  182. data/lib/puppet/file_serving/terminus_selector.rb +33 -0
  183. data/lib/puppet/file_serving.rb +5 -0
  184. data/lib/puppet/file_system/file_impl.rb +189 -0
  185. data/lib/puppet/file_system/jruby.rb +25 -0
  186. data/lib/puppet/file_system/memory_file.rb +82 -0
  187. data/lib/puppet/file_system/memory_impl.rb +103 -0
  188. data/lib/puppet/file_system/path_pattern.rb +95 -0
  189. data/lib/puppet/file_system/posix.rb +52 -0
  190. data/lib/puppet/file_system/uniquefile.rb +190 -0
  191. data/lib/puppet/file_system/windows.rb +224 -0
  192. data/lib/puppet/file_system.rb +421 -0
  193. data/lib/puppet/forge/cache.rb +61 -0
  194. data/lib/puppet/forge/errors.rb +113 -0
  195. data/lib/puppet/forge/repository.rb +98 -0
  196. data/lib/puppet/forge.rb +257 -0
  197. data/lib/puppet/functions/abs.rb +64 -0
  198. data/lib/puppet/functions/alert.rb +16 -0
  199. data/lib/puppet/functions/all.rb +106 -0
  200. data/lib/puppet/functions/annotate.rb +110 -0
  201. data/lib/puppet/functions/any.rb +111 -0
  202. data/lib/puppet/functions/assert_type.rb +96 -0
  203. data/lib/puppet/functions/binary_file.rb +35 -0
  204. data/lib/puppet/functions/break.rb +49 -0
  205. data/lib/puppet/functions/call.rb +81 -0
  206. data/lib/puppet/functions/camelcase.rb +63 -0
  207. data/lib/puppet/functions/capitalize.rb +62 -0
  208. data/lib/puppet/functions/ceiling.rb +38 -0
  209. data/lib/puppet/functions/chomp.rb +58 -0
  210. data/lib/puppet/functions/chop.rb +68 -0
  211. data/lib/puppet/functions/compare.rb +127 -0
  212. data/lib/puppet/functions/contain.rb +58 -0
  213. data/lib/puppet/functions/convert_to.rb +36 -0
  214. data/lib/puppet/functions/crit.rb +16 -0
  215. data/lib/puppet/functions/debug.rb +16 -0
  216. data/lib/puppet/functions/defined.rb +163 -0
  217. data/lib/puppet/functions/dig.rb +70 -0
  218. data/lib/puppet/functions/downcase.rb +91 -0
  219. data/lib/puppet/functions/each.rb +169 -0
  220. data/lib/puppet/functions/emerg.rb +16 -0
  221. data/lib/puppet/functions/empty.rb +87 -0
  222. data/lib/puppet/functions/epp.rb +50 -0
  223. data/lib/puppet/functions/err.rb +16 -0
  224. data/lib/puppet/functions/eyaml_lookup_key.rb +103 -0
  225. data/lib/puppet/functions/filter.rb +138 -0
  226. data/lib/puppet/functions/find_file.rb +50 -0
  227. data/lib/puppet/functions/find_template.rb +65 -0
  228. data/lib/puppet/functions/flatten.rb +66 -0
  229. data/lib/puppet/functions/floor.rb +38 -0
  230. data/lib/puppet/functions/get.rb +152 -0
  231. data/lib/puppet/functions/getvar.rb +89 -0
  232. data/lib/puppet/functions/group_by.rb +62 -0
  233. data/lib/puppet/functions/hiera.rb +91 -0
  234. data/lib/puppet/functions/hiera_array.rb +83 -0
  235. data/lib/puppet/functions/hiera_hash.rb +94 -0
  236. data/lib/puppet/functions/hiera_include.rb +107 -0
  237. data/lib/puppet/functions/hocon_data.rb +41 -0
  238. data/lib/puppet/functions/import.rb +9 -0
  239. data/lib/puppet/functions/include.rb +56 -0
  240. data/lib/puppet/functions/index.rb +168 -0
  241. data/lib/puppet/functions/info.rb +16 -0
  242. data/lib/puppet/functions/inline_epp.rb +61 -0
  243. data/lib/puppet/functions/join.rb +58 -0
  244. data/lib/puppet/functions/json_data.rb +33 -0
  245. data/lib/puppet/functions/keys.rb +27 -0
  246. data/lib/puppet/functions/length.rb +45 -0
  247. data/lib/puppet/functions/lest.rb +57 -0
  248. data/lib/puppet/functions/lookup.rb +224 -0
  249. data/lib/puppet/functions/lstrip.rb +59 -0
  250. data/lib/puppet/functions/map.rb +137 -0
  251. data/lib/puppet/functions/match.rb +133 -0
  252. data/lib/puppet/functions/max.rb +250 -0
  253. data/lib/puppet/functions/min.rb +249 -0
  254. data/lib/puppet/functions/module_directory.rb +43 -0
  255. data/lib/puppet/functions/new.rb +1013 -0
  256. data/lib/puppet/functions/next.rb +35 -0
  257. data/lib/puppet/functions/notice.rb +16 -0
  258. data/lib/puppet/functions/partition.rb +62 -0
  259. data/lib/puppet/functions/reduce.rb +159 -0
  260. data/lib/puppet/functions/regsubst.rb +100 -0
  261. data/lib/puppet/functions/require.rb +81 -0
  262. data/lib/puppet/functions/return.rb +17 -0
  263. data/lib/puppet/functions/reverse_each.rb +96 -0
  264. data/lib/puppet/functions/round.rb +26 -0
  265. data/lib/puppet/functions/rstrip.rb +59 -0
  266. data/lib/puppet/functions/scanf.rb +46 -0
  267. data/lib/puppet/functions/size.rb +15 -0
  268. data/lib/puppet/functions/slice.rb +127 -0
  269. data/lib/puppet/functions/sort.rb +76 -0
  270. data/lib/puppet/functions/split.rb +78 -0
  271. data/lib/puppet/functions/step.rb +100 -0
  272. data/lib/puppet/functions/strftime.rb +214 -0
  273. data/lib/puppet/functions/strip.rb +59 -0
  274. data/lib/puppet/functions/then.rb +80 -0
  275. data/lib/puppet/functions/tree_each.rb +198 -0
  276. data/lib/puppet/functions/type.rb +74 -0
  277. data/lib/puppet/functions/unique.rb +135 -0
  278. data/lib/puppet/functions/unwrap.rb +61 -0
  279. data/lib/puppet/functions/upcase.rb +91 -0
  280. data/lib/puppet/functions/values.rb +27 -0
  281. data/lib/puppet/functions/versioncmp.rb +41 -0
  282. data/lib/puppet/functions/warning.rb +16 -0
  283. data/lib/puppet/functions/with.rb +34 -0
  284. data/lib/puppet/functions/yaml_data.rb +45 -0
  285. data/lib/puppet/functions.rb +858 -0
  286. data/lib/puppet/generate/models/type/property.rb +73 -0
  287. data/lib/puppet/generate/models/type/type.rb +68 -0
  288. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  289. data/lib/puppet/generate/type.rb +255 -0
  290. data/lib/puppet/gettext/config.rb +282 -0
  291. data/lib/puppet/gettext/module_translations.rb +43 -0
  292. data/lib/puppet/gettext/stubs.rb +13 -0
  293. data/lib/puppet/graph/key.rb +28 -0
  294. data/lib/puppet/graph/prioritizer.rb +31 -0
  295. data/lib/puppet/graph/rb_tree_map.rb +407 -0
  296. data/lib/puppet/graph/relationship_graph.rb +286 -0
  297. data/lib/puppet/graph/sequential_prioritizer.rb +33 -0
  298. data/lib/puppet/graph/simple_graph.rb +552 -0
  299. data/lib/puppet/graph.rb +11 -0
  300. data/lib/puppet/http/client.rb +529 -0
  301. data/lib/puppet/http/dns.rb +159 -0
  302. data/lib/puppet/http/errors.rb +50 -0
  303. data/lib/puppet/http/external_client.rb +89 -0
  304. data/lib/puppet/http/factory.rb +53 -0
  305. data/lib/puppet/http/pool.rb +174 -0
  306. data/lib/puppet/http/pool_entry.rb +19 -0
  307. data/lib/puppet/http/proxy.rb +139 -0
  308. data/lib/puppet/http/redirector.rb +87 -0
  309. data/lib/puppet/http/resolver/server_list.rb +88 -0
  310. data/lib/puppet/http/resolver/settings.rb +24 -0
  311. data/lib/puppet/http/resolver/srv.rb +42 -0
  312. data/lib/puppet/http/resolver.rb +50 -0
  313. data/lib/puppet/http/response.rb +104 -0
  314. data/lib/puppet/http/response_converter.rb +25 -0
  315. data/lib/puppet/http/response_net_http.rb +43 -0
  316. data/lib/puppet/http/retry_after_handler.rb +78 -0
  317. data/lib/puppet/http/service/ca.rb +133 -0
  318. data/lib/puppet/http/service/compiler.rb +356 -0
  319. data/lib/puppet/http/service/file_server.rb +200 -0
  320. data/lib/puppet/http/service/puppetserver.rb +54 -0
  321. data/lib/puppet/http/service/report.rb +62 -0
  322. data/lib/puppet/http/service.rb +177 -0
  323. data/lib/puppet/http/session.rb +124 -0
  324. data/lib/puppet/http/site.rb +44 -0
  325. data/lib/puppet/http.rb +48 -0
  326. data/lib/puppet/indirector/catalog/compiler.rb +432 -0
  327. data/lib/puppet/indirector/catalog/json.rb +42 -0
  328. data/lib/puppet/indirector/catalog/msgpack.rb +8 -0
  329. data/lib/puppet/indirector/catalog/rest.rb +51 -0
  330. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  331. data/lib/puppet/indirector/catalog/yaml.rb +8 -0
  332. data/lib/puppet/indirector/code.rb +8 -0
  333. data/lib/puppet/indirector/data_binding/hiera.rb +8 -0
  334. data/lib/puppet/indirector/data_binding/none.rb +10 -0
  335. data/lib/puppet/indirector/direct_file_server.rb +20 -0
  336. data/lib/puppet/indirector/envelope.rb +13 -0
  337. data/lib/puppet/indirector/errors.rb +7 -0
  338. data/lib/puppet/indirector/exec.rb +40 -0
  339. data/lib/puppet/indirector/face.rb +142 -0
  340. data/lib/puppet/indirector/fact_search.rb +62 -0
  341. data/lib/puppet/indirector/facts/facter.rb +120 -0
  342. data/lib/puppet/indirector/facts/json.rb +29 -0
  343. data/lib/puppet/indirector/facts/memory.rb +11 -0
  344. data/lib/puppet/indirector/facts/network_device.rb +29 -0
  345. data/lib/puppet/indirector/facts/rest.rb +46 -0
  346. data/lib/puppet/indirector/facts/store_configs.rb +12 -0
  347. data/lib/puppet/indirector/facts/yaml.rb +31 -0
  348. data/lib/puppet/indirector/file_bucket_file/file.rb +268 -0
  349. data/lib/puppet/indirector/file_bucket_file/rest.rb +53 -0
  350. data/lib/puppet/indirector/file_bucket_file/selector.rb +54 -0
  351. data/lib/puppet/indirector/file_content/file.rb +9 -0
  352. data/lib/puppet/indirector/file_content/file_server.rb +9 -0
  353. data/lib/puppet/indirector/file_content/rest.rb +37 -0
  354. data/lib/puppet/indirector/file_content/selector.rb +32 -0
  355. data/lib/puppet/indirector/file_content.rb +7 -0
  356. data/lib/puppet/indirector/file_metadata/file.rb +9 -0
  357. data/lib/puppet/indirector/file_metadata/file_server.rb +9 -0
  358. data/lib/puppet/indirector/file_metadata/http.rb +49 -0
  359. data/lib/puppet/indirector/file_metadata/rest.rb +58 -0
  360. data/lib/puppet/indirector/file_metadata/selector.rb +32 -0
  361. data/lib/puppet/indirector/file_metadata.rb +7 -0
  362. data/lib/puppet/indirector/file_server.rb +57 -0
  363. data/lib/puppet/indirector/generic_http.rb +7 -0
  364. data/lib/puppet/indirector/hiera.rb +101 -0
  365. data/lib/puppet/indirector/indirection.rb +381 -0
  366. data/lib/puppet/indirector/json.rb +82 -0
  367. data/lib/puppet/indirector/memory.rb +37 -0
  368. data/lib/puppet/indirector/msgpack.rb +87 -0
  369. data/lib/puppet/indirector/node/exec.rb +70 -0
  370. data/lib/puppet/indirector/node/json.rb +9 -0
  371. data/lib/puppet/indirector/node/memory.rb +12 -0
  372. data/lib/puppet/indirector/node/msgpack.rb +9 -0
  373. data/lib/puppet/indirector/node/plain.rb +23 -0
  374. data/lib/puppet/indirector/node/rest.rb +31 -0
  375. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  376. data/lib/puppet/indirector/node/yaml.rb +9 -0
  377. data/lib/puppet/indirector/none.rb +10 -0
  378. data/lib/puppet/indirector/plain.rb +11 -0
  379. data/lib/puppet/indirector/report/json.rb +36 -0
  380. data/lib/puppet/indirector/report/msgpack.rb +13 -0
  381. data/lib/puppet/indirector/report/processor.rb +63 -0
  382. data/lib/puppet/indirector/report/rest.rb +31 -0
  383. data/lib/puppet/indirector/report/yaml.rb +36 -0
  384. data/lib/puppet/indirector/request.rb +197 -0
  385. data/lib/puppet/indirector/resource/ral.rb +66 -0
  386. data/lib/puppet/indirector/resource/store_configs.rb +14 -0
  387. data/lib/puppet/indirector/resource/validator.rb +10 -0
  388. data/lib/puppet/indirector/rest.rb +66 -0
  389. data/lib/puppet/indirector/store_configs.rb +32 -0
  390. data/lib/puppet/indirector/terminus.rb +180 -0
  391. data/lib/puppet/indirector/yaml.rb +65 -0
  392. data/lib/puppet/indirector.rb +64 -0
  393. data/lib/puppet/info_service/class_information_service.rb +108 -0
  394. data/lib/puppet/info_service/plan_information_service.rb +38 -0
  395. data/lib/puppet/info_service/task_information_service.rb +45 -0
  396. data/lib/puppet/info_service.rb +27 -0
  397. data/lib/puppet/interface/action.rb +410 -0
  398. data/lib/puppet/interface/action_builder.rb +167 -0
  399. data/lib/puppet/interface/action_manager.rb +101 -0
  400. data/lib/puppet/interface/documentation.rb +363 -0
  401. data/lib/puppet/interface/face_collection.rb +141 -0
  402. data/lib/puppet/interface/option.rb +184 -0
  403. data/lib/puppet/interface/option_builder.rb +110 -0
  404. data/lib/puppet/interface/option_manager.rb +108 -0
  405. data/lib/puppet/interface.rb +240 -0
  406. data/lib/puppet/loaders.rb +31 -0
  407. data/lib/puppet/metatype/manager.rb +198 -0
  408. data/lib/puppet/module/plan.rb +166 -0
  409. data/lib/puppet/module/task.rb +288 -0
  410. data/lib/puppet/module.rb +487 -0
  411. data/lib/puppet/module_tool/applications/application.rb +96 -0
  412. data/lib/puppet/module_tool/applications/checksummer.rb +62 -0
  413. data/lib/puppet/module_tool/applications/installer.rb +402 -0
  414. data/lib/puppet/module_tool/applications/uninstaller.rb +121 -0
  415. data/lib/puppet/module_tool/applications/unpacker.rb +102 -0
  416. data/lib/puppet/module_tool/applications/upgrader.rb +288 -0
  417. data/lib/puppet/module_tool/applications.rb +14 -0
  418. data/lib/puppet/module_tool/checksums.rb +50 -0
  419. data/lib/puppet/module_tool/dependency.rb +42 -0
  420. data/lib/puppet/module_tool/errors/base.rb +17 -0
  421. data/lib/puppet/module_tool/errors/installer.rb +94 -0
  422. data/lib/puppet/module_tool/errors/shared.rb +228 -0
  423. data/lib/puppet/module_tool/errors/uninstaller.rb +51 -0
  424. data/lib/puppet/module_tool/errors/upgrader.rb +64 -0
  425. data/lib/puppet/module_tool/errors.rb +13 -0
  426. data/lib/puppet/module_tool/install_directory.rb +48 -0
  427. data/lib/puppet/module_tool/installed_modules.rb +99 -0
  428. data/lib/puppet/module_tool/local_tarball.rb +92 -0
  429. data/lib/puppet/module_tool/metadata.rb +227 -0
  430. data/lib/puppet/module_tool/shared_behaviors.rb +199 -0
  431. data/lib/puppet/module_tool/tar/gnu.rb +23 -0
  432. data/lib/puppet/module_tool/tar/mini.rb +118 -0
  433. data/lib/puppet/module_tool/tar.rb +20 -0
  434. data/lib/puppet/module_tool.rb +194 -0
  435. data/lib/puppet/network/authconfig.rb +9 -0
  436. data/lib/puppet/network/authorization.rb +21 -0
  437. data/lib/puppet/network/client_request.rb +32 -0
  438. data/lib/puppet/network/format.rb +116 -0
  439. data/lib/puppet/network/format_handler.rb +110 -0
  440. data/lib/puppet/network/format_support.rb +140 -0
  441. data/lib/puppet/network/formats.rb +338 -0
  442. data/lib/puppet/network/http/api/indirected_routes.rb +270 -0
  443. data/lib/puppet/network/http/api/indirection_type.rb +33 -0
  444. data/lib/puppet/network/http/api/master/v3/environments.rb +4 -0
  445. data/lib/puppet/network/http/api/master/v3.rb +4 -0
  446. data/lib/puppet/network/http/api/master.rb +5 -0
  447. data/lib/puppet/network/http/api/server/v3/environments.rb +54 -0
  448. data/lib/puppet/network/http/api/server/v3.rb +40 -0
  449. data/lib/puppet/network/http/api/server.rb +12 -0
  450. data/lib/puppet/network/http/api.rb +41 -0
  451. data/lib/puppet/network/http/connection.rb +288 -0
  452. data/lib/puppet/network/http/error.rb +75 -0
  453. data/lib/puppet/network/http/handler.rb +213 -0
  454. data/lib/puppet/network/http/issues.rb +14 -0
  455. data/lib/puppet/network/http/memory_response.rb +15 -0
  456. data/lib/puppet/network/http/request.rb +83 -0
  457. data/lib/puppet/network/http/response.rb +25 -0
  458. data/lib/puppet/network/http/route.rb +104 -0
  459. data/lib/puppet/network/http.rb +30 -0
  460. data/lib/puppet/network/http_pool.rb +78 -0
  461. data/lib/puppet/network/uri.rb +20 -0
  462. data/lib/puppet/network.rb +5 -0
  463. data/lib/puppet/node/environment.rb +638 -0
  464. data/lib/puppet/node/facts.rb +165 -0
  465. data/lib/puppet/node/server_facts.rb +46 -0
  466. data/lib/puppet/node.rb +256 -0
  467. data/lib/puppet/pal/catalog_compiler.rb +107 -0
  468. data/lib/puppet/pal/compiler.rb +227 -0
  469. data/lib/puppet/pal/function_signature.rb +54 -0
  470. data/lib/puppet/pal/json_catalog_encoder.rb +76 -0
  471. data/lib/puppet/pal/pal_api.rb +17 -0
  472. data/lib/puppet/pal/pal_impl.rb +585 -0
  473. data/lib/puppet/pal/plan_signature.rb +73 -0
  474. data/lib/puppet/pal/script_compiler.rb +75 -0
  475. data/lib/puppet/pal/task_signature.rb +64 -0
  476. data/lib/puppet/parameter/boolean.rb +17 -0
  477. data/lib/puppet/parameter/package_options.rb +33 -0
  478. data/lib/puppet/parameter/path.rb +61 -0
  479. data/lib/puppet/parameter/value.rb +93 -0
  480. data/lib/puppet/parameter/value_collection.rb +213 -0
  481. data/lib/puppet/parameter.rb +590 -0
  482. data/lib/puppet/parser/abstract_compiler.rb +35 -0
  483. data/lib/puppet/parser/ast/block_expression.rb +17 -0
  484. data/lib/puppet/parser/ast/branch.rb +21 -0
  485. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  486. data/lib/puppet/parser/ast/leaf.rb +84 -0
  487. data/lib/puppet/parser/ast/node.rb +19 -0
  488. data/lib/puppet/parser/ast/pops_bridge.rb +245 -0
  489. data/lib/puppet/parser/ast/resource.rb +66 -0
  490. data/lib/puppet/parser/ast/resource_instance.rb +13 -0
  491. data/lib/puppet/parser/ast/resourceparam.rb +33 -0
  492. data/lib/puppet/parser/ast/top_level_construct.rb +6 -0
  493. data/lib/puppet/parser/ast.rb +62 -0
  494. data/lib/puppet/parser/catalog_compiler.rb +56 -0
  495. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +41 -0
  496. data/lib/puppet/parser/compiler/catalog_validator.rb +35 -0
  497. data/lib/puppet/parser/compiler.rb +616 -0
  498. data/lib/puppet/parser/e4_parser_adapter.rb +61 -0
  499. data/lib/puppet/parser/files.rb +95 -0
  500. data/lib/puppet/parser/functions/assert_type.rb +62 -0
  501. data/lib/puppet/parser/functions/binary_file.rb +26 -0
  502. data/lib/puppet/parser/functions/break.rb +41 -0
  503. data/lib/puppet/parser/functions/contain.rb +32 -0
  504. data/lib/puppet/parser/functions/create_resources.rb +114 -0
  505. data/lib/puppet/parser/functions/defined.rb +109 -0
  506. data/lib/puppet/parser/functions/dig.rb +40 -0
  507. data/lib/puppet/parser/functions/digest.rb +7 -0
  508. data/lib/puppet/parser/functions/each.rb +106 -0
  509. data/lib/puppet/parser/functions/epp.rb +40 -0
  510. data/lib/puppet/parser/functions/fail.rb +13 -0
  511. data/lib/puppet/parser/functions/file.rb +35 -0
  512. data/lib/puppet/parser/functions/filter.rb +81 -0
  513. data/lib/puppet/parser/functions/find_file.rb +29 -0
  514. data/lib/puppet/parser/functions/fqdn_rand.rb +46 -0
  515. data/lib/puppet/parser/functions/generate.rb +39 -0
  516. data/lib/puppet/parser/functions/hiera.rb +105 -0
  517. data/lib/puppet/parser/functions/hiera_array.rb +93 -0
  518. data/lib/puppet/parser/functions/hiera_hash.rb +103 -0
  519. data/lib/puppet/parser/functions/hiera_include.rb +102 -0
  520. data/lib/puppet/parser/functions/include.rb +36 -0
  521. data/lib/puppet/parser/functions/inline_epp.rb +52 -0
  522. data/lib/puppet/parser/functions/inline_template.rb +28 -0
  523. data/lib/puppet/parser/functions/lest.rb +51 -0
  524. data/lib/puppet/parser/functions/lookup.rb +134 -0
  525. data/lib/puppet/parser/functions/map.rb +78 -0
  526. data/lib/puppet/parser/functions/match.rb +45 -0
  527. data/lib/puppet/parser/functions/md5.rb +7 -0
  528. data/lib/puppet/parser/functions/new.rb +992 -0
  529. data/lib/puppet/parser/functions/next.rb +40 -0
  530. data/lib/puppet/parser/functions/realize.rb +22 -0
  531. data/lib/puppet/parser/functions/reduce.rb +139 -0
  532. data/lib/puppet/parser/functions/regsubst.rb +65 -0
  533. data/lib/puppet/parser/functions/require.rb +43 -0
  534. data/lib/puppet/parser/functions/return.rb +94 -0
  535. data/lib/puppet/parser/functions/reverse_each.rb +85 -0
  536. data/lib/puppet/parser/functions/scanf.rb +40 -0
  537. data/lib/puppet/parser/functions/sha1.rb +7 -0
  538. data/lib/puppet/parser/functions/sha256.rb +7 -0
  539. data/lib/puppet/parser/functions/shellquote.rb +63 -0
  540. data/lib/puppet/parser/functions/slice.rb +41 -0
  541. data/lib/puppet/parser/functions/split.rb +29 -0
  542. data/lib/puppet/parser/functions/sprintf.rb +62 -0
  543. data/lib/puppet/parser/functions/step.rb +86 -0
  544. data/lib/puppet/parser/functions/strftime.rb +187 -0
  545. data/lib/puppet/parser/functions/tag.rb +15 -0
  546. data/lib/puppet/parser/functions/tagged.rb +24 -0
  547. data/lib/puppet/parser/functions/template.rb +42 -0
  548. data/lib/puppet/parser/functions/then.rb +75 -0
  549. data/lib/puppet/parser/functions/type.rb +55 -0
  550. data/lib/puppet/parser/functions/versioncmp.rb +31 -0
  551. data/lib/puppet/parser/functions/with.rb +30 -0
  552. data/lib/puppet/parser/functions.rb +324 -0
  553. data/lib/puppet/parser/parser_factory.rb +32 -0
  554. data/lib/puppet/parser/relationship.rb +90 -0
  555. data/lib/puppet/parser/resource/param.rb +37 -0
  556. data/lib/puppet/parser/resource.rb +353 -0
  557. data/lib/puppet/parser/scope.rb +1141 -0
  558. data/lib/puppet/parser/script_compiler.rb +123 -0
  559. data/lib/puppet/parser/templatewrapper.rb +105 -0
  560. data/lib/puppet/parser/type_loader.rb +151 -0
  561. data/lib/puppet/parser.rb +22 -0
  562. data/lib/puppet/plugins/configuration.rb +31 -0
  563. data/lib/puppet/plugins/syntax_checkers.rb +99 -0
  564. data/lib/puppet/plugins.rb +11 -0
  565. data/lib/puppet/pops/adaptable.rb +199 -0
  566. data/lib/puppet/pops/adapters.rb +159 -0
  567. data/lib/puppet/pops/evaluator/access_operator.rb +732 -0
  568. data/lib/puppet/pops/evaluator/callable_signature.rb +108 -0
  569. data/lib/puppet/pops/evaluator/closure.rb +370 -0
  570. data/lib/puppet/pops/evaluator/collector_transformer.rb +237 -0
  571. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +88 -0
  572. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +30 -0
  573. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +71 -0
  574. data/lib/puppet/pops/evaluator/collectors/fixed_set_collector.rb +38 -0
  575. data/lib/puppet/pops/evaluator/compare_operator.rb +269 -0
  576. data/lib/puppet/pops/evaluator/deferred_resolver.rb +227 -0
  577. data/lib/puppet/pops/evaluator/epp_evaluator.rb +121 -0
  578. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1317 -0
  579. data/lib/puppet/pops/evaluator/external_syntax_support.rb +47 -0
  580. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +83 -0
  581. data/lib/puppet/pops/evaluator/literal_evaluator.rb +100 -0
  582. data/lib/puppet/pops/evaluator/puppet_proc.rb +72 -0
  583. data/lib/puppet/pops/evaluator/relationship_operator.rb +188 -0
  584. data/lib/puppet/pops/evaluator/runtime3_converter.rb +225 -0
  585. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  586. data/lib/puppet/pops/evaluator/runtime3_support.rb +528 -0
  587. data/lib/puppet/pops/functions/dispatch.rb +107 -0
  588. data/lib/puppet/pops/functions/dispatcher.rb +76 -0
  589. data/lib/puppet/pops/functions/function.rb +137 -0
  590. data/lib/puppet/pops/issue_reporter.rb +140 -0
  591. data/lib/puppet/pops/issues.rb +933 -0
  592. data/lib/puppet/pops/label_provider.rb +92 -0
  593. data/lib/puppet/pops/loader/base_loader.rb +178 -0
  594. data/lib/puppet/pops/loader/dependency_loader.rb +95 -0
  595. data/lib/puppet/pops/loader/gem_support.rb +54 -0
  596. data/lib/puppet/pops/loader/generic_plan_instantiator.rb +30 -0
  597. data/lib/puppet/pops/loader/loader.rb +221 -0
  598. data/lib/puppet/pops/loader/loader_paths.rb +413 -0
  599. data/lib/puppet/pops/loader/module_loaders.rb +552 -0
  600. data/lib/puppet/pops/loader/predefined_loader.rb +28 -0
  601. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +88 -0
  602. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +97 -0
  603. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  604. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +43 -0
  605. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +49 -0
  606. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +130 -0
  607. data/lib/puppet/pops/loader/runtime3_type_loader.rb +104 -0
  608. data/lib/puppet/pops/loader/simple_environment_loader.rb +20 -0
  609. data/lib/puppet/pops/loader/static_loader.rb +133 -0
  610. data/lib/puppet/pops/loader/task_instantiator.rb +46 -0
  611. data/lib/puppet/pops/loader/type_definition_instantiator.rb +104 -0
  612. data/lib/puppet/pops/loader/typed_name.rb +56 -0
  613. data/lib/puppet/pops/loader/uri_helper.rb +24 -0
  614. data/lib/puppet/pops/loaders.rb +550 -0
  615. data/lib/puppet/pops/lookup/configured_data_provider.rb +95 -0
  616. data/lib/puppet/pops/lookup/context.rb +208 -0
  617. data/lib/puppet/pops/lookup/data_adapter.rb +29 -0
  618. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +146 -0
  619. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +128 -0
  620. data/lib/puppet/pops/lookup/data_provider.rb +94 -0
  621. data/lib/puppet/pops/lookup/environment_data_provider.rb +37 -0
  622. data/lib/puppet/pops/lookup/explainer.rb +597 -0
  623. data/lib/puppet/pops/lookup/function_provider.rb +112 -0
  624. data/lib/puppet/pops/lookup/global_data_provider.rb +76 -0
  625. data/lib/puppet/pops/lookup/hiera_config.rb +823 -0
  626. data/lib/puppet/pops/lookup/interpolation.rb +166 -0
  627. data/lib/puppet/pops/lookup/invocation.rb +272 -0
  628. data/lib/puppet/pops/lookup/key_recorder.rb +21 -0
  629. data/lib/puppet/pops/lookup/location_resolver.rb +101 -0
  630. data/lib/puppet/pops/lookup/lookup_adapter.rb +533 -0
  631. data/lib/puppet/pops/lookup/lookup_key.rb +101 -0
  632. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +94 -0
  633. data/lib/puppet/pops/lookup/module_data_provider.rb +92 -0
  634. data/lib/puppet/pops/lookup/sub_lookup.rb +96 -0
  635. data/lib/puppet/pops/lookup.rb +102 -0
  636. data/lib/puppet/pops/merge_strategy.rb +447 -0
  637. data/lib/puppet/pops/migration/migration_checker.rb +61 -0
  638. data/lib/puppet/pops/model/ast.pp +669 -0
  639. data/lib/puppet/pops/model/ast.rb +4776 -0
  640. data/lib/puppet/pops/model/ast_transformer.rb +131 -0
  641. data/lib/puppet/pops/model/factory.rb +1157 -0
  642. data/lib/puppet/pops/model/model_label_provider.rb +137 -0
  643. data/lib/puppet/pops/model/model_tree_dumper.rb +447 -0
  644. data/lib/puppet/pops/model/pn_transformer.rb +384 -0
  645. data/lib/puppet/pops/model/tree_dumper.rb +62 -0
  646. data/lib/puppet/pops/parser/code_merger.rb +29 -0
  647. data/lib/puppet/pops/parser/egrammar.ra +889 -0
  648. data/lib/puppet/pops/parser/eparser.rb +3184 -0
  649. data/lib/puppet/pops/parser/epp_parser.rb +52 -0
  650. data/lib/puppet/pops/parser/epp_support.rb +266 -0
  651. data/lib/puppet/pops/parser/evaluating_parser.rb +166 -0
  652. data/lib/puppet/pops/parser/heredoc_support.rb +153 -0
  653. data/lib/puppet/pops/parser/interpolation_support.rb +249 -0
  654. data/lib/puppet/pops/parser/lexer2.rb +789 -0
  655. data/lib/puppet/pops/parser/lexer_support.rb +221 -0
  656. data/lib/puppet/pops/parser/locatable.rb +23 -0
  657. data/lib/puppet/pops/parser/locator.rb +361 -0
  658. data/lib/puppet/pops/parser/parser_support.rb +252 -0
  659. data/lib/puppet/pops/parser/pn_parser.rb +318 -0
  660. data/lib/puppet/pops/parser/slurp_support.rb +119 -0
  661. data/lib/puppet/pops/patterns.rb +60 -0
  662. data/lib/puppet/pops/pcore.rb +136 -0
  663. data/lib/puppet/pops/pn.rb +239 -0
  664. data/lib/puppet/pops/puppet_stack.rb +63 -0
  665. data/lib/puppet/pops/resource/param.rb +56 -0
  666. data/lib/puppet/pops/resource/resource_type_impl.rb +296 -0
  667. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  668. data/lib/puppet/pops/semantic_error.rb +31 -0
  669. data/lib/puppet/pops/serialization/abstract_reader.rb +182 -0
  670. data/lib/puppet/pops/serialization/abstract_writer.rb +224 -0
  671. data/lib/puppet/pops/serialization/deserializer.rb +83 -0
  672. data/lib/puppet/pops/serialization/extension.rb +166 -0
  673. data/lib/puppet/pops/serialization/from_data_converter.rb +231 -0
  674. data/lib/puppet/pops/serialization/instance_reader.rb +21 -0
  675. data/lib/puppet/pops/serialization/instance_writer.rb +16 -0
  676. data/lib/puppet/pops/serialization/json.rb +301 -0
  677. data/lib/puppet/pops/serialization/json_path.rb +129 -0
  678. data/lib/puppet/pops/serialization/object.rb +73 -0
  679. data/lib/puppet/pops/serialization/serializer.rb +144 -0
  680. data/lib/puppet/pops/serialization/time_factory.rb +68 -0
  681. data/lib/puppet/pops/serialization/to_data_converter.rb +316 -0
  682. data/lib/puppet/pops/serialization/to_stringified_converter.rb +227 -0
  683. data/lib/puppet/pops/serialization.rb +45 -0
  684. data/lib/puppet/pops/time/timespan.rb +728 -0
  685. data/lib/puppet/pops/time/timestamp.rb +167 -0
  686. data/lib/puppet/pops/types/annotatable.rb +37 -0
  687. data/lib/puppet/pops/types/annotation.rb +73 -0
  688. data/lib/puppet/pops/types/class_loader.rb +134 -0
  689. data/lib/puppet/pops/types/implementation_registry.rb +137 -0
  690. data/lib/puppet/pops/types/iterable.rb +375 -0
  691. data/lib/puppet/pops/types/p_binary_type.rb +232 -0
  692. data/lib/puppet/pops/types/p_init_type.rb +241 -0
  693. data/lib/puppet/pops/types/p_meta_type.rb +95 -0
  694. data/lib/puppet/pops/types/p_object_type.rb +1142 -0
  695. data/lib/puppet/pops/types/p_object_type_extension.rb +229 -0
  696. data/lib/puppet/pops/types/p_runtime_type.rb +117 -0
  697. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  698. data/lib/puppet/pops/types/p_sem_ver_type.rb +155 -0
  699. data/lib/puppet/pops/types/p_sensitive_type.rb +81 -0
  700. data/lib/puppet/pops/types/p_timespan_type.rb +194 -0
  701. data/lib/puppet/pops/types/p_timestamp_type.rb +74 -0
  702. data/lib/puppet/pops/types/p_type_set_type.rb +394 -0
  703. data/lib/puppet/pops/types/p_uri_type.rb +198 -0
  704. data/lib/puppet/pops/types/puppet_object.rb +41 -0
  705. data/lib/puppet/pops/types/recursion_guard.rb +142 -0
  706. data/lib/puppet/pops/types/ruby_generator.rb +477 -0
  707. data/lib/puppet/pops/types/ruby_method.rb +32 -0
  708. data/lib/puppet/pops/types/string_converter.rb +1144 -0
  709. data/lib/puppet/pops/types/tree_iterators.rb +250 -0
  710. data/lib/puppet/pops/types/type_acceptor.rb +27 -0
  711. data/lib/puppet/pops/types/type_asserter.rb +49 -0
  712. data/lib/puppet/pops/types/type_assertion_error.rb +27 -0
  713. data/lib/puppet/pops/types/type_calculator.rb +829 -0
  714. data/lib/puppet/pops/types/type_conversion_error.rb +7 -0
  715. data/lib/puppet/pops/types/type_factory.rb +640 -0
  716. data/lib/puppet/pops/types/type_formatter.rb +796 -0
  717. data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
  718. data/lib/puppet/pops/types/type_parser.rb +690 -0
  719. data/lib/puppet/pops/types/type_set_reference.rb +62 -0
  720. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  721. data/lib/puppet/pops/types/types.rb +3651 -0
  722. data/lib/puppet/pops/utils.rb +117 -0
  723. data/lib/puppet/pops/validation/checker4_0.rb +1155 -0
  724. data/lib/puppet/pops/validation/tasks_checker.rb +95 -0
  725. data/lib/puppet/pops/validation/validator_factory_4_0.rb +45 -0
  726. data/lib/puppet/pops/validation.rb +462 -0
  727. data/lib/puppet/pops/visitable.rb +8 -0
  728. data/lib/puppet/pops/visitor.rb +136 -0
  729. data/lib/puppet/pops.rb +124 -0
  730. data/lib/puppet/property/boolean.rb +9 -0
  731. data/lib/puppet/property/ensure.rb +107 -0
  732. data/lib/puppet/property/keyvalue.rb +159 -0
  733. data/lib/puppet/property/list.rb +71 -0
  734. data/lib/puppet/property/ordered_list.rb +30 -0
  735. data/lib/puppet/property.rb +610 -0
  736. data/lib/puppet/provider/aix_object.rb +491 -0
  737. data/lib/puppet/provider/command.rb +27 -0
  738. data/lib/puppet/provider/confine.rb +8 -0
  739. data/lib/puppet/provider/exec/posix.rb +63 -0
  740. data/lib/puppet/provider/exec/shell.rb +27 -0
  741. data/lib/puppet/provider/exec/windows.rb +57 -0
  742. data/lib/puppet/provider/exec.rb +107 -0
  743. data/lib/puppet/provider/file/posix.rb +162 -0
  744. data/lib/puppet/provider/file/windows.rb +151 -0
  745. data/lib/puppet/provider/group/aix.rb +101 -0
  746. data/lib/puppet/provider/group/directoryservice.rb +24 -0
  747. data/lib/puppet/provider/group/groupadd.rb +180 -0
  748. data/lib/puppet/provider/group/ldap.rb +51 -0
  749. data/lib/puppet/provider/group/pw.rb +52 -0
  750. data/lib/puppet/provider/group/windows_adsi.rb +116 -0
  751. data/lib/puppet/provider/ldap.rb +143 -0
  752. data/lib/puppet/provider/nameservice/directoryservice.rb +522 -0
  753. data/lib/puppet/provider/nameservice/objectadd.rb +22 -0
  754. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  755. data/lib/puppet/provider/nameservice.rb +297 -0
  756. data/lib/puppet/provider/network_device.rb +74 -0
  757. data/lib/puppet/provider/package/aix.rb +171 -0
  758. data/lib/puppet/provider/package/appdmg.rb +113 -0
  759. data/lib/puppet/provider/package/apple.rb +49 -0
  760. data/lib/puppet/provider/package/apt.rb +265 -0
  761. data/lib/puppet/provider/package/aptitude.rb +35 -0
  762. data/lib/puppet/provider/package/aptrpm.rb +87 -0
  763. data/lib/puppet/provider/package/blastwave.rb +109 -0
  764. data/lib/puppet/provider/package/dnf.rb +57 -0
  765. data/lib/puppet/provider/package/dnfmodule.rb +143 -0
  766. data/lib/puppet/provider/package/dpkg.rb +191 -0
  767. data/lib/puppet/provider/package/fink.rb +99 -0
  768. data/lib/puppet/provider/package/freebsd.rb +49 -0
  769. data/lib/puppet/provider/package/gem.rb +296 -0
  770. data/lib/puppet/provider/package/hpux.rb +46 -0
  771. data/lib/puppet/provider/package/macports.rb +112 -0
  772. data/lib/puppet/provider/package/nim.rb +290 -0
  773. data/lib/puppet/provider/package/openbsd.rb +263 -0
  774. data/lib/puppet/provider/package/opkg.rb +85 -0
  775. data/lib/puppet/provider/package/pacman.rb +270 -0
  776. data/lib/puppet/provider/package/pip.rb +347 -0
  777. data/lib/puppet/provider/package/pip2.rb +18 -0
  778. data/lib/puppet/provider/package/pip3.rb +18 -0
  779. data/lib/puppet/provider/package/pkg.rb +300 -0
  780. data/lib/puppet/provider/package/pkgdmg.rb +159 -0
  781. data/lib/puppet/provider/package/pkgin.rb +88 -0
  782. data/lib/puppet/provider/package/pkgng.rb +178 -0
  783. data/lib/puppet/provider/package/pkgutil.rb +186 -0
  784. data/lib/puppet/provider/package/portage.rb +314 -0
  785. data/lib/puppet/provider/package/ports.rb +94 -0
  786. data/lib/puppet/provider/package/portupgrade.rb +233 -0
  787. data/lib/puppet/provider/package/puppet_gem.rb +25 -0
  788. data/lib/puppet/provider/package/puppetserver_gem.rb +174 -0
  789. data/lib/puppet/provider/package/rpm.rb +255 -0
  790. data/lib/puppet/provider/package/rug.rb +51 -0
  791. data/lib/puppet/provider/package/sun.rb +137 -0
  792. data/lib/puppet/provider/package/sunfreeware.rb +11 -0
  793. data/lib/puppet/provider/package/tdnf.rb +35 -0
  794. data/lib/puppet/provider/package/up2date.rb +40 -0
  795. data/lib/puppet/provider/package/urpmi.rb +57 -0
  796. data/lib/puppet/provider/package/windows/exe_package.rb +108 -0
  797. data/lib/puppet/provider/package/windows/msi_package.rb +72 -0
  798. data/lib/puppet/provider/package/windows/package.rb +113 -0
  799. data/lib/puppet/provider/package/windows.rb +131 -0
  800. data/lib/puppet/provider/package/xbps.rb +127 -0
  801. data/lib/puppet/provider/package/yum.rb +390 -0
  802. data/lib/puppet/provider/package/zypper.rb +206 -0
  803. data/lib/puppet/provider/package.rb +61 -0
  804. data/lib/puppet/provider/package_targetable.rb +71 -0
  805. data/lib/puppet/provider/parsedfile.rb +494 -0
  806. data/lib/puppet/provider/service/base.rb +135 -0
  807. data/lib/puppet/provider/service/bsd.rb +53 -0
  808. data/lib/puppet/provider/service/daemontools.rb +196 -0
  809. data/lib/puppet/provider/service/debian.rb +77 -0
  810. data/lib/puppet/provider/service/freebsd.rb +141 -0
  811. data/lib/puppet/provider/service/gentoo.rb +47 -0
  812. data/lib/puppet/provider/service/init.rb +194 -0
  813. data/lib/puppet/provider/service/launchd.rb +391 -0
  814. data/lib/puppet/provider/service/openbsd.rb +101 -0
  815. data/lib/puppet/provider/service/openrc.rb +72 -0
  816. data/lib/puppet/provider/service/openwrt.rb +37 -0
  817. data/lib/puppet/provider/service/rcng.rb +53 -0
  818. data/lib/puppet/provider/service/redhat.rb +75 -0
  819. data/lib/puppet/provider/service/runit.rb +107 -0
  820. data/lib/puppet/provider/service/service.rb +67 -0
  821. data/lib/puppet/provider/service/smf.rb +322 -0
  822. data/lib/puppet/provider/service/src.rb +147 -0
  823. data/lib/puppet/provider/service/systemd.rb +232 -0
  824. data/lib/puppet/provider/service/upstart.rb +385 -0
  825. data/lib/puppet/provider/service/windows.rb +179 -0
  826. data/lib/puppet/provider/user/aix.rb +365 -0
  827. data/lib/puppet/provider/user/directoryservice.rb +687 -0
  828. data/lib/puppet/provider/user/hpux.rb +93 -0
  829. data/lib/puppet/provider/user/ldap.rb +135 -0
  830. data/lib/puppet/provider/user/openbsd.rb +79 -0
  831. data/lib/puppet/provider/user/pw.rb +109 -0
  832. data/lib/puppet/provider/user/user_role_add.rb +243 -0
  833. data/lib/puppet/provider/user/useradd.rb +417 -0
  834. data/lib/puppet/provider/user/windows_adsi.rb +176 -0
  835. data/lib/puppet/provider.rb +613 -0
  836. data/lib/puppet/reference/configuration.rb +105 -0
  837. data/lib/puppet/reference/function.rb +19 -0
  838. data/lib/puppet/reference/indirection.rb +76 -0
  839. data/lib/puppet/reference/metaparameter.rb +35 -0
  840. data/lib/puppet/reference/providers.rb +119 -0
  841. data/lib/puppet/reference/report.rb +22 -0
  842. data/lib/puppet/reference/type.rb +111 -0
  843. data/lib/puppet/relationship.rb +85 -0
  844. data/lib/puppet/reports/http.rb +45 -0
  845. data/lib/puppet/reports/log.rb +15 -0
  846. data/lib/puppet/reports/store.rb +71 -0
  847. data/lib/puppet/reports.rb +95 -0
  848. data/lib/puppet/resource/catalog.rb +655 -0
  849. data/lib/puppet/resource/status.rb +231 -0
  850. data/lib/puppet/resource/type.rb +449 -0
  851. data/lib/puppet/resource/type_collection.rb +235 -0
  852. data/lib/puppet/resource.rb +673 -0
  853. data/lib/puppet/runtime.rb +67 -0
  854. data/lib/puppet/scheduler/job.rb +55 -0
  855. data/lib/puppet/scheduler/scheduler.rb +46 -0
  856. data/lib/puppet/scheduler/splay_job.rb +45 -0
  857. data/lib/puppet/scheduler/timer.rb +15 -0
  858. data/lib/puppet/scheduler.rb +18 -0
  859. data/lib/puppet/settings/alias_setting.rb +37 -0
  860. data/lib/puppet/settings/array_setting.rb +18 -0
  861. data/lib/puppet/settings/autosign_setting.rb +23 -0
  862. data/lib/puppet/settings/base_setting.rb +228 -0
  863. data/lib/puppet/settings/boolean_setting.rb +34 -0
  864. data/lib/puppet/settings/certificate_revocation_setting.rb +22 -0
  865. data/lib/puppet/settings/config_file.rb +148 -0
  866. data/lib/puppet/settings/directory_setting.rb +20 -0
  867. data/lib/puppet/settings/duration_setting.rb +33 -0
  868. data/lib/puppet/settings/enum_setting.rb +18 -0
  869. data/lib/puppet/settings/environment_conf.rb +228 -0
  870. data/lib/puppet/settings/errors.rb +14 -0
  871. data/lib/puppet/settings/file_or_directory_setting.rb +37 -0
  872. data/lib/puppet/settings/file_setting.rb +232 -0
  873. data/lib/puppet/settings/http_extra_headers_setting.rb +26 -0
  874. data/lib/puppet/settings/ini_file.rb +228 -0
  875. data/lib/puppet/settings/integer_setting.rb +19 -0
  876. data/lib/puppet/settings/path_setting.rb +10 -0
  877. data/lib/puppet/settings/port_setting.rb +17 -0
  878. data/lib/puppet/settings/priority_setting.rb +44 -0
  879. data/lib/puppet/settings/server_list_setting.rb +30 -0
  880. data/lib/puppet/settings/string_setting.rb +11 -0
  881. data/lib/puppet/settings/symbolic_enum_setting.rb +19 -0
  882. data/lib/puppet/settings/terminus_setting.rb +16 -0
  883. data/lib/puppet/settings/ttl_setting.rb +53 -0
  884. data/lib/puppet/settings/value_translator.rb +16 -0
  885. data/lib/puppet/settings.rb +1650 -0
  886. data/lib/puppet/ssl/base.rb +152 -0
  887. data/lib/puppet/ssl/certificate.rb +98 -0
  888. data/lib/puppet/ssl/certificate_request.rb +320 -0
  889. data/lib/puppet/ssl/certificate_request_attributes.rb +40 -0
  890. data/lib/puppet/ssl/certificate_signer.rb +39 -0
  891. data/lib/puppet/ssl/digest.rb +22 -0
  892. data/lib/puppet/ssl/error.rb +29 -0
  893. data/lib/puppet/ssl/oids.rb +199 -0
  894. data/lib/puppet/ssl/openssl_loader.rb +26 -0
  895. data/lib/puppet/ssl/ssl_context.rb +27 -0
  896. data/lib/puppet/ssl/ssl_provider.rb +354 -0
  897. data/lib/puppet/ssl/state_machine.rb +605 -0
  898. data/lib/puppet/ssl/verifier.rb +143 -0
  899. data/lib/puppet/ssl.rb +25 -0
  900. data/lib/puppet/syntax_checkers/base64.rb +42 -0
  901. data/lib/puppet/syntax_checkers/epp.rb +35 -0
  902. data/lib/puppet/syntax_checkers/json.rb +35 -0
  903. data/lib/puppet/syntax_checkers/pp.rb +35 -0
  904. data/lib/puppet/syntax_checkers.rb +5 -0
  905. data/lib/puppet/test/test_helper.rb +251 -0
  906. data/lib/puppet/thread_local.rb +6 -0
  907. data/lib/puppet/transaction/additional_resource_generator.rb +225 -0
  908. data/lib/puppet/transaction/event.rb +171 -0
  909. data/lib/puppet/transaction/event_manager.rb +180 -0
  910. data/lib/puppet/transaction/persistence.rb +119 -0
  911. data/lib/puppet/transaction/report.rb +511 -0
  912. data/lib/puppet/transaction/resource_harness.rb +331 -0
  913. data/lib/puppet/transaction.rb +493 -0
  914. data/lib/puppet/trusted_external.rb +46 -0
  915. data/lib/puppet/type/component.rb +96 -0
  916. data/lib/puppet/type/exec.rb +730 -0
  917. data/lib/puppet/type/file/checksum.rb +54 -0
  918. data/lib/puppet/type/file/checksum_value.rb +56 -0
  919. data/lib/puppet/type/file/content.rb +180 -0
  920. data/lib/puppet/type/file/ctime.rb +22 -0
  921. data/lib/puppet/type/file/data_sync.rb +101 -0
  922. data/lib/puppet/type/file/ensure.rb +194 -0
  923. data/lib/puppet/type/file/group.rb +50 -0
  924. data/lib/puppet/type/file/mode.rb +192 -0
  925. data/lib/puppet/type/file/mtime.rb +21 -0
  926. data/lib/puppet/type/file/owner.rb +52 -0
  927. data/lib/puppet/type/file/selcontext.rb +143 -0
  928. data/lib/puppet/type/file/source.rb +380 -0
  929. data/lib/puppet/type/file/target.rb +86 -0
  930. data/lib/puppet/type/file/type.rb +21 -0
  931. data/lib/puppet/type/file.rb +1139 -0
  932. data/lib/puppet/type/filebucket.rb +123 -0
  933. data/lib/puppet/type/group.rb +238 -0
  934. data/lib/puppet/type/notify.rb +48 -0
  935. data/lib/puppet/type/package.rb +715 -0
  936. data/lib/puppet/type/resources.rb +192 -0
  937. data/lib/puppet/type/schedule.rb +441 -0
  938. data/lib/puppet/type/service.rb +310 -0
  939. data/lib/puppet/type/stage.rb +29 -0
  940. data/lib/puppet/type/tidy.rb +382 -0
  941. data/lib/puppet/type/user.rb +865 -0
  942. data/lib/puppet/type/whit.rb +35 -0
  943. data/lib/puppet/type.rb +2629 -0
  944. data/lib/puppet/util/at_fork/noop.rb +20 -0
  945. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  946. data/lib/puppet/util/at_fork.rb +37 -0
  947. data/lib/puppet/util/autoload.rb +221 -0
  948. data/lib/puppet/util/backups.rb +88 -0
  949. data/lib/puppet/util/character_encoding.rb +83 -0
  950. data/lib/puppet/util/checksums.rb +380 -0
  951. data/lib/puppet/util/classgen.rb +223 -0
  952. data/lib/puppet/util/colors.rb +102 -0
  953. data/lib/puppet/util/command_line/puppet_option_parser.rb +89 -0
  954. data/lib/puppet/util/command_line/trollop.rb +847 -0
  955. data/lib/puppet/util/command_line.rb +198 -0
  956. data/lib/puppet/util/constant_inflector.rb +25 -0
  957. data/lib/puppet/util/diff.rb +80 -0
  958. data/lib/puppet/util/docs.rb +132 -0
  959. data/lib/puppet/util/errors.rb +161 -0
  960. data/lib/puppet/util/execution.rb +446 -0
  961. data/lib/puppet/util/execution_stub.rb +28 -0
  962. data/lib/puppet/util/feature.rb +129 -0
  963. data/lib/puppet/util/file_watcher.rb +31 -0
  964. data/lib/puppet/util/fileparsing.rb +404 -0
  965. data/lib/puppet/util/filetype.rb +358 -0
  966. data/lib/puppet/util/http_proxy.rb +6 -0
  967. data/lib/puppet/util/inifile.rb +335 -0
  968. data/lib/puppet/util/instance_loader.rb +69 -0
  969. data/lib/puppet/util/json.rb +94 -0
  970. data/lib/puppet/util/json_lockfile.rb +47 -0
  971. data/lib/puppet/util/ldap/connection.rb +75 -0
  972. data/lib/puppet/util/ldap/generator.rb +44 -0
  973. data/lib/puppet/util/ldap/manager.rb +283 -0
  974. data/lib/puppet/util/ldap.rb +4 -0
  975. data/lib/puppet/util/libuser.conf +15 -0
  976. data/lib/puppet/util/libuser.rb +13 -0
  977. data/lib/puppet/util/limits.rb +14 -0
  978. data/lib/puppet/util/lockfile.rb +66 -0
  979. data/lib/puppet/util/log/destination.rb +50 -0
  980. data/lib/puppet/util/log/destinations.rb +253 -0
  981. data/lib/puppet/util/log.rb +436 -0
  982. data/lib/puppet/util/logging.rb +304 -0
  983. data/lib/puppet/util/metaid.rb +22 -0
  984. data/lib/puppet/util/metric.rb +68 -0
  985. data/lib/puppet/util/monkey_patches.rb +114 -0
  986. data/lib/puppet/util/multi_match.rb +55 -0
  987. data/lib/puppet/util/network_device/base.rb +24 -0
  988. data/lib/puppet/util/network_device/config.rb +105 -0
  989. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  990. data/lib/puppet/util/network_device/transport.rb +7 -0
  991. data/lib/puppet/util/network_device.rb +19 -0
  992. data/lib/puppet/util/package/version/debian.rb +177 -0
  993. data/lib/puppet/util/package/version/gem.rb +18 -0
  994. data/lib/puppet/util/package/version/pip.rb +173 -0
  995. data/lib/puppet/util/package/version/range/eq.rb +17 -0
  996. data/lib/puppet/util/package/version/range/gt.rb +17 -0
  997. data/lib/puppet/util/package/version/range/gt_eq.rb +17 -0
  998. data/lib/puppet/util/package/version/range/lt.rb +17 -0
  999. data/lib/puppet/util/package/version/range/lt_eq.rb +17 -0
  1000. data/lib/puppet/util/package/version/range/min_max.rb +26 -0
  1001. data/lib/puppet/util/package/version/range/simple.rb +13 -0
  1002. data/lib/puppet/util/package/version/range.rb +57 -0
  1003. data/lib/puppet/util/package/version/rpm.rb +75 -0
  1004. data/lib/puppet/util/package.rb +43 -0
  1005. data/lib/puppet/util/pidlock.rb +103 -0
  1006. data/lib/puppet/util/platform.rb +72 -0
  1007. data/lib/puppet/util/plist.rb +161 -0
  1008. data/lib/puppet/util/posix.rb +206 -0
  1009. data/lib/puppet/util/profiler/aggregate.rb +82 -0
  1010. data/lib/puppet/util/profiler/around_profiler.rb +68 -0
  1011. data/lib/puppet/util/profiler/logging.rb +50 -0
  1012. data/lib/puppet/util/profiler/object_counts.rb +19 -0
  1013. data/lib/puppet/util/profiler/wall_clock.rb +36 -0
  1014. data/lib/puppet/util/profiler.rb +55 -0
  1015. data/lib/puppet/util/provider_features.rb +183 -0
  1016. data/lib/puppet/util/psych_support.rb +32 -0
  1017. data/lib/puppet/util/rdoc/code_objects.rb +293 -0
  1018. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +902 -0
  1019. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1068 -0
  1020. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +262 -0
  1021. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +16 -0
  1022. data/lib/puppet/util/rdoc/parser.rb +14 -0
  1023. data/lib/puppet/util/rdoc.rb +54 -0
  1024. data/lib/puppet/util/reference.rb +94 -0
  1025. data/lib/puppet/util/resource_template.rb +63 -0
  1026. data/lib/puppet/util/retry_action.rb +47 -0
  1027. data/lib/puppet/util/rpm_compare.rb +196 -0
  1028. data/lib/puppet/util/rubygems.rb +67 -0
  1029. data/lib/puppet/util/run_mode.rb +164 -0
  1030. data/lib/puppet/util/selinux.rb +331 -0
  1031. data/lib/puppet/util/skip_tags.rb +15 -0
  1032. data/lib/puppet/util/splayer.rb +20 -0
  1033. data/lib/puppet/util/storage.rb +100 -0
  1034. data/lib/puppet/util/suidmanager.rb +167 -0
  1035. data/lib/puppet/util/symbolic_file_mode.rb +156 -0
  1036. data/lib/puppet/util/tag_set.rb +29 -0
  1037. data/lib/puppet/util/tagging.rb +131 -0
  1038. data/lib/puppet/util/terminal.rb +18 -0
  1039. data/lib/puppet/util/user_attr.rb +23 -0
  1040. data/lib/puppet/util/warnings.rb +35 -0
  1041. data/lib/puppet/util/watched_file.rb +40 -0
  1042. data/lib/puppet/util/watcher/change_watcher.rb +35 -0
  1043. data/lib/puppet/util/watcher/periodic_watcher.rb +38 -0
  1044. data/lib/puppet/util/watcher/timer.rb +21 -0
  1045. data/lib/puppet/util/watcher.rb +17 -0
  1046. data/lib/puppet/util/windows/access_control_entry.rb +86 -0
  1047. data/lib/puppet/util/windows/access_control_list.rb +116 -0
  1048. data/lib/puppet/util/windows/adsi.rb +662 -0
  1049. data/lib/puppet/util/windows/com.rb +228 -0
  1050. data/lib/puppet/util/windows/daemon.rb +340 -0
  1051. data/lib/puppet/util/windows/error.rb +86 -0
  1052. data/lib/puppet/util/windows/eventlog.rb +191 -0
  1053. data/lib/puppet/util/windows/file.rb +359 -0
  1054. data/lib/puppet/util/windows/monkey_patches/process.rb +413 -0
  1055. data/lib/puppet/util/windows/principal.rb +204 -0
  1056. data/lib/puppet/util/windows/process.rb +360 -0
  1057. data/lib/puppet/util/windows/registry.rb +443 -0
  1058. data/lib/puppet/util/windows/root_certs.rb +110 -0
  1059. data/lib/puppet/util/windows/security.rb +909 -0
  1060. data/lib/puppet/util/windows/security_descriptor.rb +64 -0
  1061. data/lib/puppet/util/windows/service.rb +708 -0
  1062. data/lib/puppet/util/windows/sid.rb +291 -0
  1063. data/lib/puppet/util/windows/string.rb +17 -0
  1064. data/lib/puppet/util/windows/user.rb +551 -0
  1065. data/lib/puppet/util/windows.rb +58 -0
  1066. data/lib/puppet/util/yaml.rb +67 -0
  1067. data/lib/puppet/util.rb +759 -0
  1068. data/lib/puppet/vendor/require_vendored.rb +4 -0
  1069. data/lib/puppet/vendor.rb +59 -0
  1070. data/lib/puppet/version.rb +98 -0
  1071. data/lib/puppet/x509/cert_provider.rb +405 -0
  1072. data/lib/puppet/x509/pem_store.rb +57 -0
  1073. data/lib/puppet/x509.rb +13 -0
  1074. data/lib/puppet.rb +348 -0
  1075. data/lib/puppet_pal.rb +10 -0
  1076. data/lib/puppet_x.rb +16 -0
  1077. data/locales/config.yaml +29 -0
  1078. data/locales/en/puppet.po +19 -0
  1079. data/locales/puppet.pot +9738 -0
  1080. data/man/man5/puppet.conf.5 +1407 -0
  1081. data/man/man8/puppet-agent.8 +135 -0
  1082. data/man/man8/puppet-apply.8 +67 -0
  1083. data/man/man8/puppet-catalog.8 +194 -0
  1084. data/man/man8/puppet-config.8 +103 -0
  1085. data/man/man8/puppet-describe.8 +35 -0
  1086. data/man/man8/puppet-device.8 +83 -0
  1087. data/man/man8/puppet-doc.8 +30 -0
  1088. data/man/man8/puppet-epp.8 +232 -0
  1089. data/man/man8/puppet-facts.8 +156 -0
  1090. data/man/man8/puppet-filebucket.8 +134 -0
  1091. data/man/man8/puppet-generate.8 +54 -0
  1092. data/man/man8/puppet-help.8 +46 -0
  1093. data/man/man8/puppet-lookup.8 +71 -0
  1094. data/man/man8/puppet-module.8 +220 -0
  1095. data/man/man8/puppet-node.8 +142 -0
  1096. data/man/man8/puppet-parser.8 +87 -0
  1097. data/man/man8/puppet-plugin.8 +50 -0
  1098. data/man/man8/puppet-report.8 +84 -0
  1099. data/man/man8/puppet-resource.8 +63 -0
  1100. data/man/man8/puppet-script.8 +48 -0
  1101. data/man/man8/puppet-ssl.8 +45 -0
  1102. data/man/man8/puppet.8 +98 -0
  1103. data/tasks/tag.rake +34 -0
  1104. metadata +1336 -0
@@ -0,0 +1,1142 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ruby_generator'
4
+ require_relative 'type_with_members'
5
+
6
+ module Puppet::Pops
7
+ module Types
8
+ KEY_ATTRIBUTES = 'attributes'
9
+ KEY_CHECKS = 'checks'
10
+ KEY_CONSTANTS = 'constants'
11
+ KEY_EQUALITY = 'equality'
12
+ KEY_EQUALITY_INCLUDE_TYPE = 'equality_include_type'
13
+ KEY_FINAL = 'final'
14
+ KEY_FUNCTIONS = 'functions'
15
+ KEY_KIND = 'kind'
16
+ KEY_OVERRIDE = 'override'
17
+ KEY_PARENT = 'parent'
18
+ KEY_TYPE_PARAMETERS = 'type_parameters'
19
+
20
+ # @api public
21
+ class PObjectType < PMetaType
22
+ include TypeWithMembers
23
+
24
+ ATTRIBUTE_KIND_CONSTANT = 'constant'
25
+ ATTRIBUTE_KIND_DERIVED = 'derived'
26
+ ATTRIBUTE_KIND_GIVEN_OR_DERIVED = 'given_or_derived'
27
+ ATTRIBUTE_KIND_REFERENCE = 'reference'
28
+ TYPE_ATTRIBUTE_KIND = TypeFactory.enum(ATTRIBUTE_KIND_CONSTANT, ATTRIBUTE_KIND_DERIVED, ATTRIBUTE_KIND_GIVEN_OR_DERIVED, ATTRIBUTE_KIND_REFERENCE)
29
+
30
+ TYPE_OBJECT_NAME = Pcore::TYPE_QUALIFIED_REFERENCE
31
+
32
+ TYPE_ATTRIBUTE =
33
+ TypeFactory
34
+ .struct({
35
+ KEY_TYPE => PTypeType::DEFAULT,
36
+ TypeFactory.optional(KEY_FINAL) => PBooleanType::DEFAULT,
37
+ TypeFactory.optional(KEY_OVERRIDE) => PBooleanType::DEFAULT,
38
+ TypeFactory.optional(KEY_KIND) => TYPE_ATTRIBUTE_KIND,
39
+ KEY_VALUE => PAnyType::DEFAULT,
40
+ TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS
41
+ })
42
+
43
+ TYPE_PARAMETER =
44
+ TypeFactory
45
+ .struct({
46
+ KEY_TYPE => PTypeType::DEFAULT,
47
+ TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS
48
+ })
49
+
50
+ TYPE_CONSTANTS = TypeFactory.hash_kv(Pcore::TYPE_MEMBER_NAME, PAnyType::DEFAULT)
51
+ TYPE_ATTRIBUTES = TypeFactory.hash_kv(Pcore::TYPE_MEMBER_NAME, TypeFactory.not_undef)
52
+ TYPE_PARAMETERS = TypeFactory.hash_kv(Pcore::TYPE_MEMBER_NAME, TypeFactory.not_undef)
53
+ TYPE_ATTRIBUTE_CALLABLE = TypeFactory.callable(0, 0)
54
+
55
+ TYPE_FUNCTION_TYPE = PTypeType.new(PCallableType::DEFAULT)
56
+
57
+ TYPE_FUNCTION =
58
+ TypeFactory
59
+ .struct({
60
+ KEY_TYPE => TYPE_FUNCTION_TYPE,
61
+ TypeFactory.optional(KEY_FINAL) => PBooleanType::DEFAULT,
62
+ TypeFactory.optional(KEY_OVERRIDE) => PBooleanType::DEFAULT,
63
+ TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS
64
+ })
65
+
66
+ TYPE_FUNCTIONS = TypeFactory.hash_kv(PVariantType.new([Pcore::TYPE_MEMBER_NAME, PStringType.new('[]')]), TypeFactory.not_undef)
67
+
68
+ TYPE_EQUALITY = TypeFactory.variant(Pcore::TYPE_MEMBER_NAME, TypeFactory.array_of(Pcore::TYPE_MEMBER_NAME))
69
+
70
+ TYPE_CHECKS = PAnyType::DEFAULT # TBD
71
+
72
+ TYPE_OBJECT_I12N =
73
+ TypeFactory
74
+ .struct({
75
+ TypeFactory.optional(KEY_NAME) => TYPE_OBJECT_NAME,
76
+ TypeFactory.optional(KEY_PARENT) => PTypeType::DEFAULT,
77
+ TypeFactory.optional(KEY_TYPE_PARAMETERS) => TYPE_PARAMETERS,
78
+ TypeFactory.optional(KEY_ATTRIBUTES) => TYPE_ATTRIBUTES,
79
+ TypeFactory.optional(KEY_CONSTANTS) => TYPE_CONSTANTS,
80
+ TypeFactory.optional(KEY_FUNCTIONS) => TYPE_FUNCTIONS,
81
+ TypeFactory.optional(KEY_EQUALITY) => TYPE_EQUALITY,
82
+ TypeFactory.optional(KEY_EQUALITY_INCLUDE_TYPE) => PBooleanType::DEFAULT,
83
+ TypeFactory.optional(KEY_CHECKS) => TYPE_CHECKS,
84
+ TypeFactory.optional(KEY_ANNOTATIONS) => TYPE_ANNOTATIONS
85
+ })
86
+
87
+ def self.register_ptype(loader, ir)
88
+ type = create_ptype(loader, ir, 'AnyType', '_pcore_init_hash' => TYPE_OBJECT_I12N)
89
+
90
+ # Now, when the Object type exists, add annotations with keys derived from Annotation and freeze the types.
91
+ annotations = TypeFactory.optional(PHashType.new(PTypeType.new(Annotation._pcore_type), TypeFactory.hash_kv(Pcore::TYPE_MEMBER_NAME, PAnyType::DEFAULT)))
92
+ TYPE_ATTRIBUTE.hashed_elements[KEY_ANNOTATIONS].replace_value_type(annotations)
93
+ TYPE_FUNCTION.hashed_elements[KEY_ANNOTATIONS].replace_value_type(annotations)
94
+ TYPE_OBJECT_I12N.hashed_elements[KEY_ANNOTATIONS].replace_value_type(annotations)
95
+ PTypeSetType::TYPE_TYPESET_I12N.hashed_elements[KEY_ANNOTATIONS].replace_value_type(annotations)
96
+ PTypeSetType::TYPE_TYPE_REFERENCE_I12N.hashed_elements[KEY_ANNOTATIONS].replace_value_type(annotations)
97
+ type
98
+ end
99
+
100
+ # @abstract Encapsulates behavior common to {PAttribute} and {PFunction}
101
+ # @api public
102
+ class PAnnotatedMember
103
+ include Annotatable
104
+ include InvocableMember
105
+
106
+ # @return [PObjectType] the object type containing this member
107
+ # @api public
108
+ attr_reader :container
109
+
110
+ # @return [String] the name of this member
111
+ # @api public
112
+ attr_reader :name
113
+
114
+ # @return [PAnyType] the type of this member
115
+ # @api public
116
+ attr_reader :type
117
+
118
+ # @param name [String] The name of the member
119
+ # @param container [PObjectType] The containing object type
120
+ # @param init_hash [Hash{String=>Object}] Hash containing feature options
121
+ # @option init_hash [PAnyType] 'type' The member type (required)
122
+ # @option init_hash [Boolean] 'override' `true` if this feature must override an inherited feature. Default is `false`.
123
+ # @option init_hash [Boolean] 'final' `true` if this feature cannot be overridden. Default is `false`.
124
+ # @option init_hash [Hash{PTypeType => Hash}] 'annotations' Annotations hash. Default is `nil`.
125
+ # @api public
126
+ def initialize(name, container, init_hash)
127
+ @name = name
128
+ @container = container
129
+ @type = init_hash[KEY_TYPE]
130
+ @override = init_hash[KEY_OVERRIDE]
131
+ @override = false if @override.nil?
132
+ @final = init_hash[KEY_FINAL]
133
+ @final = false if @final.nil?
134
+ init_annotatable(init_hash)
135
+ end
136
+
137
+ # Delegates to the contained type
138
+ # @param visitor [TypeAcceptor] the visitor
139
+ # @param guard [RecursionGuard] guard against recursion. Only used by internal calls
140
+ # @api public
141
+ def accept(visitor, guard)
142
+ annotatable_accept(visitor, guard)
143
+ @type.accept(visitor, guard)
144
+ end
145
+
146
+ # Checks if the this _member_ overrides an inherited member, and if so, that this member is declared with override = true and that
147
+ # the inherited member accepts to be overridden by this member.
148
+ #
149
+ # @param parent_members [Hash{String=>PAnnotatedMember}] the hash of inherited members
150
+ # @return [PAnnotatedMember] this instance
151
+ # @raises [Puppet::ParseError] if the assertion fails
152
+ # @api private
153
+ def assert_override(parent_members)
154
+ parent_member = parent_members[@name]
155
+ if parent_member.nil?
156
+ if @override
157
+ raise Puppet::ParseError, _("expected %{label} to override an inherited %{feature_type}, but no such %{feature_type} was found") %
158
+ { label: label, feature_type: feature_type }
159
+ end
160
+ self
161
+ else
162
+ parent_member.assert_can_be_overridden(self)
163
+ end
164
+ end
165
+
166
+ # Checks if the given _member_ can override this member.
167
+ #
168
+ # @param member [PAnnotatedMember] the overriding member
169
+ # @return [PAnnotatedMember] its argument
170
+ # @raises [Puppet::ParseError] if the assertion fails
171
+ # @api private
172
+ def assert_can_be_overridden(member)
173
+ unless instance_of?(member.class)
174
+ raise Puppet::ParseError, _("%{member} attempts to override %{label}") % { member: member.label, label: label }
175
+ end
176
+ if @final && !(constant? && member.constant?)
177
+ raise Puppet::ParseError, _("%{member} attempts to override final %{label}") % { member: member.label, label: label }
178
+ end
179
+ unless member.override?
180
+ # TRANSLATOR 'override => true' is a puppet syntax and should not be translated
181
+ raise Puppet::ParseError, _("%{member} attempts to override %{label} without having override => true") % { member: member.label, label: label }
182
+ end
183
+ unless @type.assignable?(member.type)
184
+ raise Puppet::ParseError, _("%{member} attempts to override %{label} with a type that does not match") % { member: member.label, label: label }
185
+ end
186
+
187
+ member
188
+ end
189
+
190
+ def constant?
191
+ false
192
+ end
193
+
194
+ # @return [Boolean] `true` if this feature cannot be overridden
195
+ # @api public
196
+ def final?
197
+ @final
198
+ end
199
+
200
+ # @return [Boolean] `true` if this feature must override an inherited feature
201
+ # @api public
202
+ def override?
203
+ @override
204
+ end
205
+
206
+ # @api public
207
+ def hash
208
+ @name.hash ^ @type.hash
209
+ end
210
+
211
+ # @api public
212
+ def eql?(o)
213
+ self.class == o.class && @name == o.name && @type == o.type && @override == o.override? && @final == o.final?
214
+ end
215
+
216
+ # @api public
217
+ def ==(o)
218
+ eql?(o)
219
+ end
220
+
221
+ # Returns the member as a hash suitable as an argument for constructor. Name is excluded
222
+ # @return [Hash{String=>Object}] the initialization hash
223
+ # @api private
224
+ def _pcore_init_hash
225
+ hash = { KEY_TYPE => @type }
226
+ hash[KEY_FINAL] = true if @final
227
+ hash[KEY_OVERRIDE] = true if @override
228
+ hash[KEY_ANNOTATIONS] = @annotations unless @annotations.nil?
229
+ hash
230
+ end
231
+
232
+ # @api private
233
+ def feature_type
234
+ self.class.feature_type
235
+ end
236
+
237
+ # @api private
238
+ def label
239
+ self.class.label(@container, @name)
240
+ end
241
+
242
+ # Performs type checking of arguments and invokes the method that corresponds to this
243
+ # method. The result of the invocation is returned
244
+ #
245
+ # @param receiver [Object] The receiver of the call
246
+ # @param scope [Puppet::Parser::Scope] The caller scope
247
+ # @param args [Array] Array of arguments.
248
+ # @return [Object] The result returned by the member function or attribute
249
+ #
250
+ # @api private
251
+ def invoke(receiver, scope, args, &block)
252
+ @dispatch ||= create_dispatch(receiver)
253
+
254
+ args_type = TypeCalculator.infer_set(block_given? ? args + [block] : args)
255
+ found = @dispatch.find { |d| d.type.callable?(args_type) }
256
+ raise ArgumentError, TypeMismatchDescriber.describe_signatures(label, @dispatch, args_type) if found.nil?
257
+
258
+ found.invoke(receiver, scope, args, &block)
259
+ end
260
+
261
+ # @api private
262
+ def create_dispatch(instance)
263
+ # TODO: Assumes Ruby implementation for now
264
+ if callable_type.is_a?(PVariantType)
265
+ callable_type.types.map do |ct|
266
+ Functions::Dispatch.new(ct, RubyGenerator.protect_reserved_name(name), [], false, ct.block_type.nil? ? nil : 'block')
267
+ end
268
+ else
269
+ [Functions::Dispatch.new(callable_type, RubyGenerator.protect_reserved_name(name), [], false, callable_type.block_type.nil? ? nil : 'block')]
270
+ end
271
+ end
272
+
273
+ # @api private
274
+ def self.feature_type
275
+ raise NotImplementedError, "'#{self.class.name}' should implement #feature_type"
276
+ end
277
+
278
+ def self.label(container, name)
279
+ "#{feature_type} #{container.label}[#{name}]"
280
+ end
281
+ end
282
+
283
+ # Describes a named Attribute in an Object type
284
+ # @api public
285
+ class PAttribute < PAnnotatedMember
286
+ # @return [String,nil] The attribute kind as defined by #TYPE_ATTRIBUTE_KIND, or `nil`
287
+ attr_reader :kind
288
+
289
+ # @param name [String] The name of the attribute
290
+ # @param container [PObjectType] The containing object type
291
+ # @param init_hash [Hash{String=>Object}] Hash containing attribute options
292
+ # @option init_hash [PAnyType] 'type' The attribute type (required)
293
+ # @option init_hash [Object] 'value' The default value, must be an instanceof the given `type` (optional)
294
+ # @option init_hash [String] 'kind' The attribute kind, matching #TYPE_ATTRIBUTE_KIND
295
+ # @api public
296
+ def initialize(name, container, init_hash)
297
+ super(name, container, TypeAsserter.assert_instance_of(nil, TYPE_ATTRIBUTE, init_hash) { "initializer for #{self.class.label(container, name)}" })
298
+ if name == Serialization::PCORE_TYPE_KEY || name == Serialization::PCORE_VALUE_KEY
299
+ raise Puppet::ParseError, _("The attribute '%{name}' is reserved and cannot be used") % { name: name }
300
+ end
301
+
302
+ @kind = init_hash[KEY_KIND]
303
+ if @kind == ATTRIBUTE_KIND_CONSTANT # final is implied
304
+ if init_hash.include?(KEY_FINAL) && !@final
305
+ # TRANSLATOR 'final => false' is puppet syntax and should not be translated
306
+ raise Puppet::ParseError, _("%{label} of kind 'constant' cannot be combined with final => false") % { label: label }
307
+ end
308
+
309
+ @final = true
310
+ end
311
+
312
+ if init_hash.include?(KEY_VALUE)
313
+ if @kind == ATTRIBUTE_KIND_DERIVED || @kind == ATTRIBUTE_KIND_GIVEN_OR_DERIVED
314
+ raise Puppet::ParseError, _("%{label} of kind '%{kind}' cannot be combined with an attribute value") % { label: label, kind: @kind }
315
+ end
316
+
317
+ v = init_hash[KEY_VALUE]
318
+ @value = v == :default ? v : TypeAsserter.assert_instance_of(nil, type, v) { "#{label} #{KEY_VALUE}" }
319
+ else
320
+ raise Puppet::ParseError, _("%{label} of kind 'constant' requires a value") % { label: label } if @kind == ATTRIBUTE_KIND_CONSTANT
321
+
322
+ @value = :undef # Not to be confused with nil or :default
323
+ end
324
+ end
325
+
326
+ def callable_type
327
+ TYPE_ATTRIBUTE_CALLABLE
328
+ end
329
+
330
+ # @api public
331
+ def eql?(o)
332
+ super && @kind == o.kind && @value == (o.value? ? o.value : :undef)
333
+ end
334
+
335
+ # Returns the member as a hash suitable as an argument for constructor. Name is excluded
336
+ # @return [Hash{String=>Object}] the hash
337
+ # @api private
338
+ def _pcore_init_hash
339
+ hash = super
340
+ unless @kind.nil?
341
+ hash[KEY_KIND] = @kind
342
+ hash.delete(KEY_FINAL) if @kind == ATTRIBUTE_KIND_CONSTANT # final is implied
343
+ end
344
+ hash[KEY_VALUE] = @value unless @value == :undef
345
+ hash
346
+ end
347
+
348
+ def constant?
349
+ @kind == ATTRIBUTE_KIND_CONSTANT
350
+ end
351
+
352
+ # @return [Booelan] true if the given value equals the default value for this attribute
353
+ def default_value?(value)
354
+ @value == value
355
+ end
356
+
357
+ # @return [Boolean] `true` if a value has been defined for this attribute.
358
+ def value?
359
+ @value != :undef
360
+ end
361
+
362
+ # Returns the value of this attribute, or raises an error if no value has been defined. Raising an error
363
+ # is necessary since a defined value may be `nil`.
364
+ #
365
+ # @return [Object] the value that has been defined for this attribute.
366
+ # @raise [Puppet::Error] if no value has been defined
367
+ # @api public
368
+ def value
369
+ # An error must be raised here since `nil` is a valid value and it would be bad to leak the :undef symbol
370
+ raise Puppet::Error, "#{label} has no value" if @value == :undef
371
+
372
+ @value
373
+ end
374
+
375
+ # @api private
376
+ def self.feature_type
377
+ 'attribute'
378
+ end
379
+ end
380
+
381
+ class PTypeParameter < PAttribute
382
+ # @return [Hash{String=>Object}] the hash
383
+ # @api private
384
+ def _pcore_init_hash
385
+ hash = super
386
+ hash[KEY_TYPE] = hash[KEY_TYPE].type
387
+ hash.delete(KEY_VALUE) if hash.include?(KEY_VALUE) && hash[KEY_VALUE].nil?
388
+ hash
389
+ end
390
+
391
+ # @api private
392
+ def self.feature_type
393
+ 'type_parameter'
394
+ end
395
+ end
396
+
397
+ # Describes a named Function in an Object type
398
+ # @api public
399
+ class PFunction < PAnnotatedMember
400
+ # @param name [String] The name of the attribute
401
+ # @param container [PObjectType] The containing object type
402
+ # @param init_hash [Hash{String=>Object}] Hash containing function options
403
+ # @api public
404
+ def initialize(name, container, init_hash)
405
+ super(name, container, TypeAsserter.assert_instance_of(["initializer for function '%s'", name], TYPE_FUNCTION, init_hash))
406
+ end
407
+
408
+ def callable_type
409
+ type
410
+ end
411
+
412
+ # @api private
413
+ def self.feature_type
414
+ 'function'
415
+ end
416
+ end
417
+
418
+ attr_reader :name
419
+ attr_reader :parent
420
+ attr_reader :equality
421
+ attr_reader :checks
422
+ attr_reader :annotations
423
+
424
+ # Initialize an Object Type instance. The initialization will use either a name and an initialization
425
+ # hash expression, or a fully resolved initialization hash.
426
+ #
427
+ # @overload initialize(name, init_hash_expression)
428
+ # Used when the Object type is loaded using a type alias expression. When that happens, it is important that
429
+ # the actual resolution of the expression is deferred until all definitions have been made known to the current
430
+ # loader. The object will then be resolved when it is loaded by the {TypeParser}. "resolved" here, means that
431
+ # the hash expression is fully resolved, and then passed to the {#_pcore_init_from_hash} method.
432
+ # @param name [String] The name of the object
433
+ # @param init_hash_expression [Model::LiteralHash] The hash describing the Object features
434
+ #
435
+ # @overload initialize(init_hash)
436
+ # Used when the object is created by the {TypeFactory}. The init_hash must be fully resolved.
437
+ # @param _pcore_init_hash [Hash{String=>Object}] The hash describing the Object features
438
+ # @param loader [Loaders::Loader,nil] the loader that loaded the type
439
+ #
440
+ # @api private
441
+ def initialize(_pcore_init_hash, init_hash_expression = nil) # rubocop:disable Lint/UnderscorePrefixedVariableName
442
+ if _pcore_init_hash.is_a?(Hash)
443
+ _pcore_init_from_hash(_pcore_init_hash)
444
+ @loader = init_hash_expression unless init_hash_expression.nil?
445
+ else
446
+ @type_parameters = EMPTY_HASH
447
+ @attributes = EMPTY_HASH
448
+ @functions = EMPTY_HASH
449
+ @name = TypeAsserter.assert_instance_of('object name', TYPE_OBJECT_NAME, _pcore_init_hash)
450
+ @init_hash_expression = init_hash_expression
451
+ end
452
+ end
453
+
454
+ def instance?(o, guard = nil)
455
+ if o.is_a?(PuppetObject)
456
+ assignable?(o._pcore_type, guard)
457
+ else
458
+ name = o.class.name
459
+ return false if name.nil? # anonymous class that doesn't implement PuppetObject is not an instance
460
+
461
+ ir = Loaders.implementation_registry
462
+ type = ir.nil? ? nil : ir.type_for_module(name)
463
+ !type.nil? && assignable?(type, guard)
464
+ end
465
+ end
466
+
467
+ # @api private
468
+ def new_function
469
+ @new_function ||= create_new_function
470
+ end
471
+
472
+ # Assign a new instance reader to this type
473
+ # @param [Serialization::InstanceReader] reader the reader to assign
474
+ # @api private
475
+ def reader=(reader)
476
+ @reader = reader
477
+ end
478
+
479
+ # Assign a new instance write to this type
480
+ # @param [Serialization::InstanceWriter] the writer to assign
481
+ # @api private
482
+ def writer=(writer)
483
+ @writer = writer
484
+ end
485
+
486
+ # Read an instance of this type from a deserializer
487
+ # @param [Integer] value_count the number attributes needed to create the instance
488
+ # @param [Serialization::Deserializer] deserializer the deserializer to read from
489
+ # @return [Object] the created instance
490
+ # @api private
491
+ def read(value_count, deserializer)
492
+ reader.read(self, implementation_class, value_count, deserializer)
493
+ end
494
+
495
+ # Write an instance of this type using a serializer
496
+ # @param [Object] value the instance to write
497
+ # @param [Serialization::Serializer] the serializer to write to
498
+ # @api private
499
+ def write(value, serializer)
500
+ writer.write(self, value, serializer)
501
+ end
502
+
503
+ # @api private
504
+ def create_new_function
505
+ impl_class = implementation_class
506
+ return impl_class.create_new_function(self) if impl_class.respond_to?(:create_new_function)
507
+
508
+ (param_names, param_types, required_param_count) = parameter_info(impl_class)
509
+
510
+ # Create the callable with a size that reflects the required and optional parameters
511
+ create_type = TypeFactory.callable(*param_types, required_param_count, param_names.size)
512
+ from_hash_type = TypeFactory.callable(init_hash_type, 1, 1)
513
+
514
+ # Create and return a #new_XXX function where the dispatchers are added programmatically.
515
+ Puppet::Functions.create_loaded_function(:"new_#{name}", loader) do
516
+ # The class that creates new instances must be available to the constructor methods
517
+ # and is therefore declared as a variable and accessor on the class that represents
518
+ # this added function.
519
+ @impl_class = impl_class
520
+
521
+ def self.impl_class
522
+ @impl_class
523
+ end
524
+
525
+ # It's recommended that an implementor of an Object type provides the method #from_asserted_hash.
526
+ # This method should accept a hash and assume that type assertion has been made already (it is made
527
+ # by the dispatch added here).
528
+ if impl_class.respond_to?(:from_asserted_hash)
529
+ dispatcher.add(Functions::Dispatch.new(from_hash_type, :from_hash, ['hash']))
530
+ def from_hash(hash)
531
+ self.class.impl_class.from_asserted_hash(hash)
532
+ end
533
+ end
534
+
535
+ # Add the dispatch that uses the standard #from_asserted_args or #new method on the class. It's assumed that the
536
+ # method performs no assertions.
537
+ dispatcher.add(Functions::Dispatch.new(create_type, :create, param_names))
538
+ if impl_class.respond_to?(:from_asserted_args)
539
+ def create(*args)
540
+ self.class.impl_class.from_asserted_args(*args)
541
+ end
542
+ else
543
+ def create(*args)
544
+ self.class.impl_class.new(*args)
545
+ end
546
+ end
547
+ end
548
+ end
549
+
550
+ # @api private
551
+ def implementation_class(create = true)
552
+ if @implementation_class.nil? && create
553
+ ir = Loaders.implementation_registry
554
+ class_name = ir.nil? ? nil : ir.module_name_for_type(self)
555
+ if class_name.nil?
556
+ # Use generator to create a default implementation
557
+ @implementation_class = RubyGenerator.new.create_class(self)
558
+ @implementation_class.class_eval(&@implementation_override) if instance_variable_defined?(:@implementation_override)
559
+ else
560
+ # Can the mapping be loaded?
561
+ @implementation_class = ClassLoader.provide(class_name)
562
+
563
+ raise Puppet::Error, "Unable to load class #{class_name}" if @implementation_class.nil?
564
+ unless @implementation_class < PuppetObject || @implementation_class.respond_to?(:ecore)
565
+ raise Puppet::Error, "Unable to create an instance of #{name}. #{class_name} does not include module #{PuppetObject.name}"
566
+ end
567
+ end
568
+ end
569
+ @implementation_class
570
+ end
571
+
572
+ # @api private
573
+ def implementation_class=(cls)
574
+ raise ArgumentError, "attempt to redefine implementation class for #{label}" unless @implementation_class.nil?
575
+
576
+ @implementation_class = cls
577
+ end
578
+
579
+ # The block passed to this method will be passed in a call to `#class_eval` on the dynamically generated
580
+ # class for this data type. It's indended use is to complement or redefine the generated methods and
581
+ # attribute readers.
582
+ #
583
+ # The method is normally called with the block passed to `#implementation` when a data type is defined using
584
+ # {Puppet::DataTypes::create_type}.
585
+ #
586
+ # @api private
587
+ def implementation_override=(block)
588
+ if !@implementation_class.nil? || instance_variable_defined?(:@implementation_override)
589
+ raise ArgumentError, "attempt to redefine implementation override for #{label}"
590
+ end
591
+
592
+ @implementation_override = block
593
+ end
594
+
595
+ def extract_init_hash(o)
596
+ return o._pcore_init_hash if o.respond_to?(:_pcore_init_hash)
597
+
598
+ result = {}
599
+ pic = parameter_info(o.class)
600
+ attrs = attributes(true)
601
+ pic[0].each do |name|
602
+ v = o.send(name)
603
+ result[name] = v unless attrs[name].default_value?(v)
604
+ end
605
+ result
606
+ end
607
+
608
+ # @api private
609
+ # @return [(Array<String>, Array<PAnyType>, Integer)] array of parameter names, array of parameter types, and a count reflecting the required number of parameters
610
+ def parameter_info(impl_class)
611
+ # Create a types and a names array where optional entries ends up last
612
+ @parameter_info ||= {}
613
+ pic = @parameter_info[impl_class]
614
+ return pic if pic
615
+
616
+ opt_types = []
617
+ opt_names = []
618
+ non_opt_types = []
619
+ non_opt_names = []
620
+ init_hash_type.elements.each do |se|
621
+ if se.key_type.is_a?(POptionalType)
622
+ opt_names << se.name
623
+ opt_types << se.value_type
624
+ else
625
+ non_opt_names << se.name
626
+ non_opt_types << se.value_type
627
+ end
628
+ end
629
+ param_names = non_opt_names + opt_names
630
+ param_types = non_opt_types + opt_types
631
+ param_count = param_names.size
632
+
633
+ init = impl_class.respond_to?(:from_asserted_args) ? impl_class.method(:from_asserted_args) : impl_class.instance_method(:initialize)
634
+ init_non_opt_count = 0
635
+ init_param_names = init.parameters.map do |p|
636
+ init_non_opt_count += 1 if :req == p[0]
637
+ n = p[1].to_s
638
+ r = RubyGenerator.unprotect_reserved_name(n)
639
+ unless r.equal?(n)
640
+ # assert that the protected name wasn't a real name (names can start with underscore)
641
+ n = r unless param_names.index(r).nil?
642
+ end
643
+ n
644
+ end
645
+
646
+ if init_param_names != param_names
647
+ if init_param_names.size < param_count || init_non_opt_count > param_count
648
+ raise Serialization::SerializationError, "Initializer for class #{impl_class.name} does not match the attributes of #{name}"
649
+ end
650
+
651
+ init_param_names = init_param_names[0, param_count] if init_param_names.size > param_count
652
+ unless init_param_names == param_names
653
+ # Reorder needed to match initialize method arguments
654
+ new_param_types = []
655
+ init_param_names.each do |ip|
656
+ index = param_names.index(ip)
657
+ if index.nil?
658
+ raise Serialization::SerializationError,
659
+ "Initializer for class #{impl_class.name} parameter '#{ip}' does not match any of the attributes of type #{name}"
660
+ end
661
+ new_param_types << param_types[index]
662
+ end
663
+ param_names = init_param_names
664
+ param_types = new_param_types
665
+ end
666
+ end
667
+
668
+ pic = [param_names.freeze, param_types.freeze, non_opt_types.size].freeze
669
+ @parameter_info[impl_class] = pic
670
+ pic
671
+ end
672
+
673
+ # @api private
674
+ def attr_reader_name(se)
675
+ if se.value_type.is_a?(PBooleanType) || se.value_type.is_a?(POptionalType) && se.value_type.type.is_a?(PBooleanType)
676
+ "#{se.name}?"
677
+ else
678
+ se.name
679
+ end
680
+ end
681
+
682
+ def self.from_hash(hash)
683
+ new(hash, nil)
684
+ end
685
+
686
+ # @api private
687
+ def _pcore_init_from_hash(init_hash)
688
+ TypeAsserter.assert_instance_of('object initializer', TYPE_OBJECT_I12N, init_hash)
689
+ @type_parameters = EMPTY_HASH
690
+ @attributes = EMPTY_HASH
691
+ @functions = EMPTY_HASH
692
+
693
+ # Name given to the loader have higher precedence than a name declared in the type
694
+ @name ||= init_hash[KEY_NAME]
695
+ @name.freeze unless @name.nil?
696
+
697
+ @parent = init_hash[KEY_PARENT]
698
+
699
+ parent_members = EMPTY_HASH
700
+ parent_type_params = EMPTY_HASH
701
+ parent_object_type = nil
702
+ unless @parent.nil?
703
+ check_self_recursion(self)
704
+ rp = resolved_parent
705
+ raise Puppet::ParseError, _("reference to unresolved type '%{name}'") % { :name => rp.type_string } if rp.is_a?(PTypeReferenceType)
706
+
707
+ if rp.is_a?(PObjectType)
708
+ parent_object_type = rp
709
+ parent_members = rp.members(true)
710
+ parent_type_params = rp.type_parameters(true)
711
+ end
712
+ end
713
+
714
+ type_parameters = init_hash[KEY_TYPE_PARAMETERS]
715
+ unless type_parameters.nil? || type_parameters.empty?
716
+ @type_parameters = {}
717
+ type_parameters.each do |key, param_spec|
718
+ param_value = :undef
719
+ if param_spec.is_a?(Hash)
720
+ param_type = param_spec[KEY_TYPE]
721
+ param_value = param_spec[KEY_VALUE] if param_spec.include?(KEY_VALUE)
722
+ else
723
+ param_type = TypeAsserter.assert_instance_of(nil, PTypeType::DEFAULT, param_spec) { "type_parameter #{label}[#{key}]" }
724
+ end
725
+ param_type = POptionalType.new(param_type) unless param_type.is_a?(POptionalType)
726
+ type_param = PTypeParameter.new(key, self, KEY_TYPE => param_type, KEY_VALUE => param_value).assert_override(parent_type_params)
727
+ @type_parameters[key] = type_param
728
+ end
729
+ end
730
+
731
+ constants = init_hash[KEY_CONSTANTS]
732
+ attr_specs = init_hash[KEY_ATTRIBUTES]
733
+ if attr_specs.nil?
734
+ attr_specs = {}
735
+ else
736
+ # attr_specs might be frozen
737
+ attr_specs = attr_specs.to_h
738
+ end
739
+ unless constants.nil? || constants.empty?
740
+ constants.each do |key, value|
741
+ if attr_specs.include?(key)
742
+ raise Puppet::ParseError, _("attribute %{label}[%{key}] is defined as both a constant and an attribute") % { label: label, key: key }
743
+ end
744
+
745
+ attr_spec = {
746
+ # Type must be generic here, or overrides would become impossible
747
+ KEY_TYPE => TypeCalculator.infer(value).generalize,
748
+ KEY_VALUE => value,
749
+ KEY_KIND => ATTRIBUTE_KIND_CONSTANT
750
+ }
751
+ # Indicate override if parent member exists. Type check etc. will take place later on.
752
+ attr_spec[KEY_OVERRIDE] = parent_members.include?(key)
753
+ attr_specs[key] = attr_spec
754
+ end
755
+ end
756
+
757
+ unless attr_specs.empty?
758
+ @attributes = attr_specs.to_h do |key, attr_spec|
759
+ unless attr_spec.is_a?(Hash)
760
+ attr_type = TypeAsserter.assert_instance_of(nil, PTypeType::DEFAULT, attr_spec) { "attribute #{label}[#{key}]" }
761
+ attr_spec = { KEY_TYPE => attr_type }
762
+ attr_spec[KEY_VALUE] = nil if attr_type.is_a?(POptionalType)
763
+ end
764
+ attr = PAttribute.new(key, self, attr_spec)
765
+ [attr.name, attr.assert_override(parent_members)]
766
+ end.freeze
767
+ end
768
+
769
+ func_specs = init_hash[KEY_FUNCTIONS]
770
+ unless func_specs.nil? || func_specs.empty?
771
+ @functions = func_specs.to_h do |key, func_spec|
772
+ func_spec = { KEY_TYPE => TypeAsserter.assert_instance_of(nil, TYPE_FUNCTION_TYPE, func_spec) { "function #{label}[#{key}]" } } unless func_spec.is_a?(Hash)
773
+ func = PFunction.new(key, self, func_spec)
774
+ name = func.name
775
+ raise Puppet::ParseError, _("%{label} conflicts with attribute with the same name") % { label: func.label } if @attributes.include?(name)
776
+
777
+ [name, func.assert_override(parent_members)]
778
+ end.freeze
779
+ end
780
+
781
+ @equality_include_type = init_hash[KEY_EQUALITY_INCLUDE_TYPE]
782
+ @equality_include_type = true if @equality_include_type.nil?
783
+
784
+ equality = init_hash[KEY_EQUALITY]
785
+ equality = [equality] if equality.is_a?(String)
786
+ if equality.is_a?(Array)
787
+ unless equality.empty?
788
+ # TRANSLATORS equality_include_type = false should not be translated
789
+ raise Puppet::ParseError, _('equality_include_type = false cannot be combined with non empty equality specification') unless @equality_include_type
790
+
791
+ parent_eq_attrs = nil
792
+ equality.each do |attr_name|
793
+ attr = parent_members[attr_name]
794
+ if attr.nil?
795
+ attr = @attributes[attr_name] || @functions[attr_name]
796
+ elsif attr.is_a?(PAttribute)
797
+ # Assert that attribute is not already include by parent equality
798
+ parent_eq_attrs ||= parent_object_type.equality_attributes
799
+ if parent_eq_attrs.include?(attr_name)
800
+ including_parent = find_equality_definer_of(attr)
801
+ raise Puppet::ParseError, _("%{label} equality is referencing %{attribute} which is included in equality of %{including_parent}") %
802
+ { label: label, attribute: attr.label, including_parent: including_parent.label }
803
+ end
804
+ end
805
+
806
+ unless attr.is_a?(PAttribute)
807
+ if attr.nil?
808
+ raise Puppet::ParseError, _("%{label} equality is referencing non existent attribute '%{attribute}'") % { label: label, attribute: attr_name }
809
+ end
810
+
811
+ raise Puppet::ParseError, _("%{label} equality is referencing %{attribute}. Only attribute references are allowed") %
812
+ { label: label, attribute: attr.label }
813
+ end
814
+ if attr.kind == ATTRIBUTE_KIND_CONSTANT
815
+ raise Puppet::ParseError, _("%{label} equality is referencing constant %{attribute}.") % { label: label, attribute: attr.label } + ' ' +
816
+ _("Reference to constant is not allowed in equality")
817
+ end
818
+ end
819
+ end
820
+ equality.freeze
821
+ end
822
+ @equality = equality
823
+
824
+ @checks = init_hash[KEY_CHECKS]
825
+ init_annotatable(init_hash)
826
+ end
827
+
828
+ def [](name)
829
+ member = @attributes[name] || @functions[name]
830
+ if member.nil?
831
+ rp = resolved_parent
832
+ member = rp[name] if rp.is_a?(PObjectType)
833
+ end
834
+ member
835
+ end
836
+
837
+ def accept(visitor, guard)
838
+ guarded_recursion(guard, nil) do |g|
839
+ super(visitor, g)
840
+ @parent.accept(visitor, g) unless parent.nil?
841
+ @type_parameters.values.each { |p| p.accept(visitor, g) }
842
+ @attributes.values.each { |a| a.accept(visitor, g) }
843
+ @functions.values.each { |f| f.accept(visitor, g) }
844
+ end
845
+ end
846
+
847
+ def callable_args?(callable, guard)
848
+ @parent.nil? ? false : @parent.callable_args?(callable, guard)
849
+ end
850
+
851
+ # Returns the type that a initialization hash used for creating instances of this type must conform to.
852
+ #
853
+ # @return [PStructType] the initialization hash type
854
+ # @api public
855
+ def init_hash_type
856
+ @init_hash_type ||= create_init_hash_type
857
+ end
858
+
859
+ def allocate
860
+ implementation_class.allocate
861
+ end
862
+
863
+ def create(*args)
864
+ implementation_class.create(*args)
865
+ end
866
+
867
+ def from_hash(hash)
868
+ implementation_class.from_hash(hash)
869
+ end
870
+
871
+ # Creates the type that a initialization hash used for creating instances of this type must conform to.
872
+ #
873
+ # @return [PStructType] the initialization hash type
874
+ # @api private
875
+ def create_init_hash_type
876
+ struct_elems = {}
877
+ attributes(true).values.each do |attr|
878
+ unless attr.kind == ATTRIBUTE_KIND_CONSTANT || attr.kind == ATTRIBUTE_KIND_DERIVED
879
+ if attr.value?
880
+ struct_elems[TypeFactory.optional(attr.name)] = attr.type
881
+ else
882
+ struct_elems[attr.name] = attr.type
883
+ end
884
+ end
885
+ end
886
+ TypeFactory.struct(struct_elems)
887
+ end
888
+
889
+ # The init_hash is primarily intended for serialization and string representation purposes. It creates a hash
890
+ # suitable for passing to {PObjectType#new(init_hash)}
891
+ #
892
+ # @return [Hash{String=>Object}] the features hash
893
+ # @api public
894
+ def _pcore_init_hash(include_name = true)
895
+ result = super()
896
+ result[KEY_NAME] = @name if include_name && !@name.nil?
897
+ result[KEY_PARENT] = @parent unless @parent.nil?
898
+ result[KEY_TYPE_PARAMETERS] = compressed_members_hash(@type_parameters) unless @type_parameters.empty?
899
+ unless @attributes.empty?
900
+ # Divide attributes into constants and others
901
+ tc = TypeCalculator.singleton
902
+ constants, others = @attributes.partition do |_, a|
903
+ a.kind == ATTRIBUTE_KIND_CONSTANT && a.type == tc.infer(a.value).generalize
904
+ end.map(&:to_h)
905
+
906
+ result[KEY_ATTRIBUTES] = compressed_members_hash(others) unless others.empty?
907
+ unless constants.empty?
908
+ # { kind => 'constant', type => <type of value>, value => <value> } becomes just <value>
909
+ constants.each_pair { |key, a| constants[key] = a.value }
910
+ result[KEY_CONSTANTS] = constants
911
+ end
912
+ end
913
+ result[KEY_FUNCTIONS] = compressed_members_hash(@functions) unless @functions.empty?
914
+ result[KEY_EQUALITY] = @equality unless @equality.nil?
915
+ result[KEY_CHECKS] = @checks unless @checks.nil?
916
+ result
917
+ end
918
+
919
+ def eql?(o)
920
+ self.class == o.class &&
921
+ @name == o.name &&
922
+ @parent == o.parent &&
923
+ @type_parameters == o.type_parameters &&
924
+ @attributes == o.attributes &&
925
+ @functions == o.functions &&
926
+ @equality == o.equality &&
927
+ @checks == o.checks
928
+ end
929
+
930
+ def hash
931
+ @name.nil? ? [@parent, @type_parameters, @attributes, @functions].hash : @name.hash
932
+ end
933
+
934
+ def kind_of_callable?(optional = true, guard = nil)
935
+ @parent.nil? ? false : @parent.kind_of_callable?(optional, guard)
936
+ end
937
+
938
+ def iterable?(guard = nil)
939
+ @parent.nil? ? false : @parent.iterable?(guard)
940
+ end
941
+
942
+ def iterable_type(guard = nil)
943
+ @parent.nil? ? false : @parent.iterable_type(guard)
944
+ end
945
+
946
+ def parameterized?
947
+ if @type_parameters.empty?
948
+ @parent.is_a?(PObjectType) ? @parent.parameterized? : false
949
+ else
950
+ true
951
+ end
952
+ end
953
+
954
+ # Returns the members (attributes and functions) of this `Object` type. If _include_parent_ is `true`, then all
955
+ # inherited members will be included in the returned `Hash`.
956
+ #
957
+ # @param include_parent [Boolean] `true` if inherited members should be included
958
+ # @return [Hash{String=>PAnnotatedMember}] a hash with the members
959
+ # @api public
960
+ def members(include_parent = false)
961
+ get_members(include_parent, :both)
962
+ end
963
+
964
+ # Returns the attributes of this `Object` type. If _include_parent_ is `true`, then all
965
+ # inherited attributes will be included in the returned `Hash`.
966
+ #
967
+ # @param include_parent [Boolean] `true` if inherited attributes should be included
968
+ # @return [Hash{String=>PAttribute}] a hash with the attributes
969
+ # @api public
970
+ def attributes(include_parent = false)
971
+ get_members(include_parent, :attributes)
972
+ end
973
+
974
+ # Returns the attributes that participate in equality comparison. Inherited equality attributes
975
+ # are included.
976
+ # @return [Hash{String=>PAttribute}] a hash of attributes
977
+ # @api public
978
+ def equality_attributes
979
+ all = {}
980
+ collect_equality_attributes(all)
981
+ all
982
+ end
983
+
984
+ # @return [Boolean] `true` if this type is included when comparing instances
985
+ # @api public
986
+ def equality_include_type?
987
+ @equality_include_type
988
+ end
989
+
990
+ # Returns the functions of this `Object` type. If _include_parent_ is `true`, then all
991
+ # inherited functions will be included in the returned `Hash`.
992
+ #
993
+ # @param include_parent [Boolean] `true` if inherited functions should be included
994
+ # @return [Hash{String=>PFunction}] a hash with the functions
995
+ # @api public
996
+ def functions(include_parent = false)
997
+ get_members(include_parent, :functions)
998
+ end
999
+
1000
+ DEFAULT = PObjectType.new(EMPTY_HASH)
1001
+ # Assert that this type does not inherit from itself
1002
+ # @api private
1003
+ def check_self_recursion(originator)
1004
+ unless @parent.nil?
1005
+ raise Puppet::Error, "The Object type '#{originator.label}' inherits from itself" if @parent.equal?(originator)
1006
+
1007
+ @parent.check_self_recursion(originator)
1008
+ end
1009
+ end
1010
+
1011
+ # @api private
1012
+ def label
1013
+ @name || 'Object'
1014
+ end
1015
+
1016
+ # @api private
1017
+ def resolved_parent
1018
+ parent = @parent
1019
+ while parent.is_a?(PTypeAliasType)
1020
+ parent = parent.resolved_type
1021
+ end
1022
+ parent
1023
+ end
1024
+
1025
+ def simple_name
1026
+ label.split(DOUBLE_COLON).last
1027
+ end
1028
+
1029
+ # Returns the type_parameters of this `Object` type. If _include_parent_ is `true`, then all
1030
+ # inherited type_parameters will be included in the returned `Hash`.
1031
+ #
1032
+ # @param include_parent [Boolean] `true` if inherited type_parameters should be included
1033
+ # @return [Hash{String=>PTypeParameter}] a hash with the type_parameters
1034
+ # @api public
1035
+ def type_parameters(include_parent = false)
1036
+ all = {}
1037
+ collect_type_parameters(all, include_parent)
1038
+ all
1039
+ end
1040
+
1041
+ protected
1042
+
1043
+ # An Object type is only assignable from another Object type. The other type
1044
+ # or one of its parents must be equal to this type.
1045
+ def _assignable?(o, guard)
1046
+ case o
1047
+ when PObjectType
1048
+ if DEFAULT == self || self == o
1049
+ true
1050
+ else
1051
+ op = o.parent
1052
+ op.nil? ? false : assignable?(op, guard)
1053
+ end
1054
+ when PObjectTypeExtension
1055
+ assignable?(o.base_type, guard)
1056
+ else
1057
+ false
1058
+ end
1059
+ end
1060
+
1061
+ def get_members(include_parent, member_type)
1062
+ all = {}
1063
+ collect_members(all, include_parent, member_type)
1064
+ all
1065
+ end
1066
+
1067
+ def collect_members(collector, include_parent, member_type)
1068
+ if include_parent
1069
+ parent = resolved_parent
1070
+ parent.collect_members(collector, include_parent, member_type) if parent.is_a?(PObjectType)
1071
+ end
1072
+ collector.merge!(@attributes) unless member_type == :functions
1073
+ collector.merge!(@functions) unless member_type == :attributes
1074
+ nil
1075
+ end
1076
+
1077
+ def collect_equality_attributes(collector)
1078
+ parent = resolved_parent
1079
+ parent.collect_equality_attributes(collector) if parent.is_a?(PObjectType)
1080
+ if @equality.nil?
1081
+ # All attributes except constants participate
1082
+ collector.merge!(@attributes.reject { |_, attr| attr.kind == ATTRIBUTE_KIND_CONSTANT })
1083
+ else
1084
+ collector.merge!(@equality.to_h { |attr_name| [attr_name, @attributes[attr_name]] })
1085
+ end
1086
+ nil
1087
+ end
1088
+
1089
+ def collect_type_parameters(collector, include_parent)
1090
+ if include_parent
1091
+ parent = resolved_parent
1092
+ parent.collect_type_parameters(collector, include_parent) if parent.is_a?(PObjectType)
1093
+ end
1094
+ collector.merge!(@type_parameters)
1095
+ nil
1096
+ end
1097
+
1098
+ private
1099
+
1100
+ def compressed_members_hash(features)
1101
+ features.values.to_h do |feature|
1102
+ fh = feature._pcore_init_hash
1103
+ if fh.size == 1
1104
+ type = fh[KEY_TYPE]
1105
+ fh = type unless type.nil?
1106
+ end
1107
+ [feature.name, fh]
1108
+ end
1109
+ end
1110
+
1111
+ # @return [PObjectType] the topmost parent who's #equality_attributes include the given _attr_
1112
+ def find_equality_definer_of(attr)
1113
+ type = self
1114
+ until type.nil?
1115
+ p = type.resolved_parent
1116
+ return type unless p.is_a?(PObjectType)
1117
+ return type unless p.equality_attributes.include?(attr.name)
1118
+
1119
+ type = p
1120
+ end
1121
+ nil
1122
+ end
1123
+
1124
+ def guarded_recursion(guard, dflt)
1125
+ if @self_recursion
1126
+ guard ||= RecursionGuard.new
1127
+ guard.with_this(self) { |state| (state & RecursionGuard::SELF_RECURSION_IN_THIS) == 0 ? yield(guard) : dflt }
1128
+ else
1129
+ yield(guard)
1130
+ end
1131
+ end
1132
+
1133
+ def reader
1134
+ @reader ||= Serialization::ObjectReader::INSTANCE
1135
+ end
1136
+
1137
+ def writer
1138
+ @writer ||= Serialization::ObjectWriter::INSTANCE
1139
+ end
1140
+ end
1141
+ end
1142
+ end