openvox 7.37.1

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