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,1096 @@
1
+ module Puppet::Pops
2
+ module Types
3
+ # @api private
4
+ class TypePathElement
5
+ attr_reader :key
6
+
7
+ def initialize(key)
8
+ @key = key
9
+ end
10
+
11
+ def hash
12
+ key.hash
13
+ end
14
+
15
+ def ==(o)
16
+ self.class == o.class && key == o.key
17
+ end
18
+
19
+ def eql?(o)
20
+ self == o
21
+ end
22
+ end
23
+
24
+ # @api private
25
+ class SubjectPathElement < TypePathElement
26
+ def to_s
27
+ key
28
+ end
29
+ end
30
+
31
+ # @api private
32
+ class EntryValuePathElement < TypePathElement
33
+ def to_s
34
+ "entry '#{key}'"
35
+ end
36
+ end
37
+
38
+ # @api private
39
+ class EntryKeyPathElement < TypePathElement
40
+ def to_s
41
+ "key of entry '#{key}'"
42
+ end
43
+ end
44
+
45
+ # @api private
46
+ class ParameterPathElement < TypePathElement
47
+ def to_s
48
+ "parameter '#{key}'"
49
+ end
50
+ end
51
+
52
+ # @api private
53
+ class ReturnTypeElement < TypePathElement
54
+ def initialize(name = 'return')
55
+ super(name)
56
+ end
57
+
58
+ def to_s
59
+ key
60
+ end
61
+ end
62
+
63
+ # @api private
64
+ class BlockPathElement < ParameterPathElement
65
+ def initialize(name = 'block')
66
+ super(name)
67
+ end
68
+
69
+ def to_s
70
+ key
71
+ end
72
+ end
73
+
74
+ # @api private
75
+ class ArrayPathElement < TypePathElement
76
+ def to_s
77
+ "index #{key}"
78
+ end
79
+ end
80
+
81
+ # @api private
82
+ class VariantPathElement < TypePathElement
83
+ def to_s
84
+ "variant #{key}"
85
+ end
86
+ end
87
+
88
+ # @api private
89
+ class SignaturePathElement < VariantPathElement
90
+ def to_s
91
+ "#{key+1}."
92
+ end
93
+ end
94
+
95
+ # @api private
96
+ class Mismatch
97
+ attr_reader :path
98
+
99
+ def initialize(path)
100
+ @path = path || EMPTY_ARRAY
101
+ end
102
+
103
+ def canonical_path
104
+ @canonical_path ||= @path.reject { |e| e.is_a?(VariantPathElement) }
105
+ end
106
+
107
+ def message(variant, position)
108
+ "#{variant}unknown mismatch#{position}"
109
+ end
110
+
111
+ def merge(path, o)
112
+ self.class.new(path)
113
+ end
114
+
115
+ def ==(o)
116
+ self.class == o.class && canonical_path == o.canonical_path
117
+ end
118
+
119
+ def eql?(o)
120
+ self == o
121
+ end
122
+
123
+ def hash
124
+ canonical_path.hash
125
+ end
126
+
127
+ def chop_path(element_index)
128
+ return self if element_index >= @path.size
129
+ chopped_path = @path.clone
130
+ chopped_path.delete_at(element_index)
131
+ copy = self.clone
132
+ copy.instance_variable_set(:@path, chopped_path)
133
+ copy
134
+ end
135
+
136
+ def path_string
137
+ @path.join(' ')
138
+ end
139
+
140
+ def to_s
141
+ format
142
+ end
143
+
144
+ def format
145
+ p = @path
146
+ variant = ''
147
+ position = ''
148
+ unless p.empty?
149
+ f = p.first
150
+ if f.is_a?(SignaturePathElement)
151
+ variant = " #{f}"
152
+ p = p.drop(1)
153
+ end
154
+ position = " #{p.join(' ')}" unless p.empty?
155
+ end
156
+ message(variant, position)
157
+ end
158
+ end
159
+
160
+ # @abstract
161
+ # @api private
162
+ class KeyMismatch < Mismatch
163
+ attr_reader :key
164
+
165
+ def initialize(path, key)
166
+ super(path)
167
+ @key = key
168
+ end
169
+
170
+ def ==(o)
171
+ super.==(o) && key == o.key
172
+ end
173
+
174
+ def hash
175
+ super.hash ^ key.hash
176
+ end
177
+ end
178
+
179
+ # @api private
180
+ class MissingKey < KeyMismatch
181
+ def message(variant, position)
182
+ "#{variant}#{position} expects a value for key '#{key}'"
183
+ end
184
+ end
185
+
186
+ # @api private
187
+ class MissingParameter < KeyMismatch
188
+ def message(variant, position)
189
+ "#{variant}#{position} expects a value for parameter '#{key}'"
190
+ end
191
+ end
192
+
193
+ # @api private
194
+ class ExtraneousKey < KeyMismatch
195
+ def message(variant, position)
196
+ "#{variant}#{position} unrecognized key '#{@key}'"
197
+ end
198
+ end
199
+
200
+ # @api private
201
+ class InvalidParameter < ExtraneousKey
202
+ def message(variant, position)
203
+ "#{variant}#{position} has no parameter named '#{@key}'"
204
+ end
205
+ end
206
+
207
+ # @api private
208
+ class UnexpectedBlock < Mismatch
209
+ def message(variant, position)
210
+ "#{variant}#{position} does not expect a block"
211
+ end
212
+ end
213
+
214
+ # @api private
215
+ class MissingRequiredBlock < Mismatch
216
+ def message(variant, position)
217
+ "#{variant}#{position} expects a block"
218
+ end
219
+ end
220
+
221
+ # @api private
222
+ class UnresolvedTypeReference < Mismatch
223
+ attr_reader :unresolved
224
+
225
+ def initialize(path, unresolved)
226
+ super(path)
227
+ @unresolved = unresolved
228
+ end
229
+
230
+ def ==(o)
231
+ super.==(o) && @unresolved == o.unresolved
232
+ end
233
+
234
+ def hash
235
+ @unresolved.hash
236
+ end
237
+
238
+ def message(variant, position)
239
+ "#{variant}#{position} references an unresolved type '#{@unresolved}'"
240
+ end
241
+ end
242
+
243
+ # @api private
244
+ class ExpectedActualMismatch < Mismatch
245
+ attr_reader :expected, :actual
246
+
247
+ def initialize(path, expected, actual)
248
+ super(path)
249
+ @expected = (expected.is_a?(Array) ? PVariantType.maybe_create(expected) : expected).normalize
250
+ @actual = actual.normalize
251
+ end
252
+
253
+ def ==(o)
254
+ super.==(o) && expected == o.expected && actual == o.actual
255
+ end
256
+
257
+ def hash
258
+ [canonical_path, expected, actual].hash
259
+ end
260
+ end
261
+
262
+ # @api private
263
+ class TypeMismatch < ExpectedActualMismatch
264
+ include LabelProvider
265
+
266
+ # @return A new instance with the least restrictive respective boundaries
267
+ def merge(path, o)
268
+ self.class.new(path, [expected, o.expected].flatten.uniq, actual)
269
+ end
270
+
271
+ def message(variant, position)
272
+ e = expected
273
+ a = actual
274
+ multi = false
275
+ if e.is_a?(POptionalType)
276
+ e = e.optional_type
277
+ optional = true
278
+ end
279
+
280
+ if e.is_a?(PVariantType)
281
+ e = e.types
282
+ end
283
+
284
+ if e.is_a?(Array)
285
+ if report_detailed?(e, a)
286
+ a = detailed_actual_to_s(e, a)
287
+ e = e.map { |t| t.to_alias_expanded_s }
288
+ else
289
+ e = e.map { |t| short_name(t) }.uniq
290
+ a = short_name(a)
291
+ end
292
+ e.insert(0, 'Undef') if optional
293
+ case e.size
294
+ when 1
295
+ e = e[0]
296
+ when 2
297
+ e = "#{e[0]} or #{e[1]}"
298
+ multi = true
299
+ else
300
+ e = "#{e[0..e.size-2].join(', ')}, or #{e[e.size-1]}"
301
+ multi = true
302
+ end
303
+ else
304
+ if report_detailed?(e, a)
305
+ a = detailed_actual_to_s(e, a)
306
+ e = e.to_alias_expanded_s
307
+ else
308
+ e = short_name(e)
309
+ a = short_name(a)
310
+ end
311
+ if optional
312
+ e = "Undef or #{e}"
313
+ multi = true
314
+ end
315
+ end
316
+ if multi
317
+ "#{variant}#{position} expects a value of type #{e}, got #{label(a)}"
318
+ else
319
+ "#{variant}#{position} expects #{a_an(e)} value, got #{label(a)}"
320
+ end
321
+ end
322
+
323
+ def label(o)
324
+ o.to_s
325
+ end
326
+
327
+ private
328
+
329
+ def short_name(t)
330
+ # Ensure that Optional, NotUndef, Sensitive, and Type are reported with included
331
+ # type parameter.
332
+ if t.is_a?(PTypeWithContainedType) && !(t.type.nil? || t.type.class == PAnyType)
333
+ "#{t.name}[#{t.type.name}]"
334
+ else
335
+ t.name.nil? ? t.simple_name : t.name
336
+ end
337
+ end
338
+
339
+ # Answers the question if `e` is a specialized type of `a`
340
+ # @param e [PAnyType] the expected type
341
+ # @param a [PAnyType] the actual type
342
+ # @return [Boolean] `true` when the _e_ is a specialization of _a_
343
+ #
344
+ def specialization(e, a)
345
+ case e
346
+ when PStructType
347
+ a.is_a?(PHashType)
348
+ when PTupleType
349
+ a.is_a?(PArrayType)
350
+ else
351
+ false
352
+ end
353
+ end
354
+
355
+ # Decides whether or not the report must be fully detailed, or if generalization can be permitted
356
+ # in the mismatch report. All comparisons are made using resolved aliases rather than the alias
357
+ # itself.
358
+ #
359
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
360
+ # @param a [PAnyType] the actual type
361
+ # @return [Boolean] `true` when the class of _a_ equals the class _e_ or,
362
+ # in case _e_ is an `Array`, the class of at least one element of _e_
363
+ def always_fully_detailed?(e, a)
364
+ if e.is_a?(Array)
365
+ e.any? { |t| always_fully_detailed?(t, a) }
366
+ else
367
+ e.class == a.class || e.is_a?(PTypeAliasType) || a.is_a?(PTypeAliasType) || specialization(e, a)
368
+ end
369
+ end
370
+
371
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
372
+ # @param a [PAnyType] the actual type
373
+ # @return [Boolean] `true` when _a_ is assignable to _e_ or, in case _e_ is an `Array`,
374
+ # to at least one element of _e_
375
+ def any_assignable?(e, a)
376
+ e.is_a?(Array) ? e.any? { |t| t.assignable?(a) } : e.assignable?(a)
377
+ end
378
+
379
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
380
+ # @param a [PAnyType] the actual type
381
+ # @return [Boolean] `true` when _a_ is assignable to the default generalization of _e_ or,
382
+ # in case _e_ is an `Array`, to the default generalization of at least one element of _e_
383
+ def assignable_to_default?(e, a)
384
+ if e.is_a?(Array)
385
+ e.any? { |t| assignable_to_default?(t, a) }
386
+ else
387
+ e = e.resolved_type if e.is_a?(PTypeAliasType)
388
+ e.class::DEFAULT.assignable?(a)
389
+ end
390
+ end
391
+
392
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
393
+ # @param a [PAnyType] the actual type
394
+ # @return [Boolean] `true` when either #always_fully_detailed or #assignable_to_default returns `true`
395
+ def report_detailed?(e, a)
396
+ always_fully_detailed?(e, a) || assignable_to_default?(e, a)
397
+ end
398
+
399
+ # Returns its argument with all type aliases resolved
400
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
401
+ # @return [PAnyType,Array[PAnyType]] the resolved result
402
+ def all_resolved(e)
403
+ if e.is_a?(Array)
404
+ e.map { |t| all_resolved(t) }
405
+ else
406
+ e.is_a?(PTypeAliasType) ? all_resolved(e.resolved_type) : e
407
+ end
408
+ end
409
+
410
+ # Returns a string that either represents the generalized type _a_ or the type _a_ verbatim. The latter
411
+ # form is used when at least one of the following conditions are met:
412
+ #
413
+ # - #always_fully_detailed returns `true` for the resolved type of _e_ and _a_
414
+ # - #any_assignable? returns `true` for the resolved type of _e_ and the generalized type of _a_.
415
+ #
416
+ # @param e [PAnyType,Array[PAnyType]] the expected type or array of expected types
417
+ # @param a [PAnyType] the actual type
418
+ # @return [String] The string representation of the type _a_ or generalized type _a_
419
+ def detailed_actual_to_s(e, a)
420
+ e = all_resolved(e)
421
+ if always_fully_detailed?(e, a)
422
+ a.to_alias_expanded_s
423
+ else
424
+ any_assignable?(e, a.generalize) ? a.to_alias_expanded_s : a.simple_name
425
+ end
426
+ end
427
+ end
428
+
429
+ # @api private
430
+ class PatternMismatch < TypeMismatch
431
+ def message(variant, position)
432
+ e = expected
433
+ value_pfx = ''
434
+ if e.is_a?(POptionalType)
435
+ e = e.optional_type
436
+ value_pfx = 'an undef value or '
437
+ end
438
+ "#{variant}#{position} expects #{value_pfx}a match for #{e.to_alias_expanded_s}, got #{actual_string}"
439
+ end
440
+
441
+ def actual_string
442
+ a = actual
443
+ a.is_a?(PStringType) && !a.value.nil? ? "'#{a.value}'" : short_name(a)
444
+ end
445
+ end
446
+
447
+ # @api private
448
+ class SizeMismatch < ExpectedActualMismatch
449
+ def from
450
+ @expected.from || 0
451
+ end
452
+
453
+ def to
454
+ @expected.to || Float::INFINITY
455
+ end
456
+
457
+ # @return A new instance with the least restrictive respective boundaries
458
+ def merge(path, o)
459
+ range = PIntegerType.new(from < o.from ? from : o.from, to > o.to ? to : o.to)
460
+ self.class.new(path, range, @actual)
461
+ end
462
+
463
+ def message(variant, position)
464
+ "#{variant}#{position} expects size to be #{range_to_s(expected, '0')}, got #{range_to_s(actual, '0')}"
465
+ end
466
+
467
+ def range_to_s(range, zero_string)
468
+ min = range.from || 0
469
+ max = range.to || Float::INFINITY
470
+ if min == max
471
+ min == 0 ? zero_string : min.to_s
472
+ elsif min == 0
473
+ max == Float::INFINITY ? 'unlimited' : "at most #{max}"
474
+ elsif max == Float::INFINITY
475
+ "at least #{min}"
476
+ else
477
+ "between #{min} and #{max}"
478
+ end
479
+ end
480
+ end
481
+
482
+ # @api private
483
+ class CountMismatch < SizeMismatch
484
+ def initialize(path, expected, actual)
485
+ super(path, expected, actual)
486
+ end
487
+
488
+ def message(variant, position)
489
+ min = expected.from || 0
490
+ max = expected.to || Float::INFINITY
491
+ suffix = min == 1 && (max == 1 || max == Float::INFINITY) || min == 0 && max == 1 ? '' : 's'
492
+ "#{variant}#{position} expects #{range_to_s(expected, 'no')} argument#{suffix}, got #{range_to_s(actual, 'none')}"
493
+ end
494
+ end
495
+
496
+ # @api private
497
+ class TypeMismatchDescriber
498
+ def self.validate_parameters(subject, params_struct, given_hash, missing_ok = false)
499
+ singleton.validate_parameters(subject, params_struct, given_hash, missing_ok)
500
+ end
501
+
502
+ def self.validate_default_parameter(subject, param_name, param_type, value)
503
+ singleton.validate_default_parameter(subject, param_name, param_type, value)
504
+ end
505
+
506
+ def self.describe_signatures(closure, signatures, args_tuple)
507
+ singleton.describe_signatures(closure, signatures, args_tuple)
508
+ end
509
+
510
+ def self.singleton
511
+ @singleton ||= new
512
+ end
513
+
514
+ def tense_deprecated
515
+ #TRANSLATORS TypeMismatchDescriber is a class name and 'tense' is a method name and should not be translated
516
+ message = _("Passing a 'tense' argument to the TypeMismatchDescriber is deprecated and ignored.")
517
+ message += ' ' + _("Everything is now reported using present tense")
518
+ Puppet.warn_once('deprecations', 'typemismatch#tense', message)
519
+ end
520
+
521
+ # Validates that all entries in the give_hash exists in the given param_struct, that their type conforms
522
+ # with the corresponding param_struct element and that all required values are provided.
523
+ #
524
+ # @param subject [String] string to be prepended to the exception message
525
+ # @param params_struct [PStructType] Struct to use for validation
526
+ # @param given_hash [Hash<String,Object>] the parameters to validate
527
+ # @param missing_ok [Boolean] Do not generate errors on missing parameters
528
+ # @param tense [Symbol] deprecated and ignored
529
+ #
530
+ def validate_parameters(subject, params_struct, given_hash, missing_ok = false, tense = :ignored)
531
+ tense_deprecated unless tense == :ignored
532
+ errors = describe_struct_signature(params_struct, given_hash, missing_ok).flatten
533
+ case errors.size
534
+ when 0
535
+ when 1
536
+ raise Puppet::ParseError.new("#{subject}:#{errors[0].format}")
537
+ else
538
+ errors_str = errors.map { |error| error.format }.join("\n ")
539
+ raise Puppet::ParseError.new("#{subject}:\n #{errors_str}")
540
+ end
541
+ end
542
+
543
+ # Describe a confirmed mismatch using present tense
544
+ #
545
+ # @param name [String] name of mismatch
546
+ # @param expected [PAnyType] expected type
547
+ # @param actual [PAnyType] actual type
548
+ # @param tense [Symbol] deprecated and ignored
549
+ #
550
+ def describe_mismatch(name, expected, actual, tense = :ignored)
551
+ tense_deprecated unless tense == :ignored
552
+ errors = describe(expected, actual, [SubjectPathElement.new(name)])
553
+ case errors.size
554
+ when 0
555
+ ''
556
+ when 1
557
+ errors[0].format.strip
558
+ else
559
+ errors.map { |error| error.format }.join("\n ")
560
+ end
561
+ end
562
+
563
+ # @param subject [String] string to be prepended to the exception message
564
+ # @param param_name [String] parameter name
565
+ # @param param_type [PAnyType] parameter type
566
+ # @param value [Object] value to be validated against the given type
567
+ # @param tense [Symbol] deprecated and ignored
568
+ #
569
+ def validate_default_parameter(subject, param_name, param_type, value, tense = :ignored)
570
+ tense_deprecated unless tense == :ignored
571
+ unless param_type.instance?(value)
572
+ errors = describe(param_type, TypeCalculator.singleton.infer_set(value).generalize, [ParameterPathElement.new(param_name)])
573
+ case errors.size
574
+ when 0
575
+ when 1
576
+ raise Puppet::ParseError.new("#{subject}:#{errors[0].format}")
577
+ else
578
+ errors_str = errors.map { |error| error.format }.join("\n ")
579
+ raise Puppet::ParseError.new("#{subject}:\n #{errors_str}")
580
+ end
581
+ end
582
+ end
583
+
584
+ def get_deferred_function_return_type(value)
585
+ func = Puppet.lookup(:loaders).private_environment_loader.
586
+ load(:function, value.name)
587
+ dispatcher = func.class.dispatcher.find_matching_dispatcher(value.arguments)
588
+ raise ArgumentError, "No matching arity found for #{func.class.name} with arguments #{value.arguments}" unless dispatcher
589
+ dispatcher.type.return_type
590
+ end
591
+ private :get_deferred_function_return_type
592
+
593
+ # Validates that all entries in the _param_hash_ exists in the given param_struct, that their type conforms
594
+ # with the corresponding param_struct element and that all required values are provided.
595
+ # An error message is created for each problem found.
596
+ #
597
+ # @param params_struct [PStructType] Struct to use for validation
598
+ # @param param_hash [Hash<String,Object>] The parameters to validate
599
+ # @param missing_ok [Boolean] Do not generate errors on missing parameters
600
+ # @return [Array<Mismatch>] An array of found errors. An empty array indicates no errors.
601
+ def describe_struct_signature(params_struct, param_hash, missing_ok = false)
602
+ param_type_hash = params_struct.hashed_elements
603
+ result = param_hash.each_key.reject { |name| param_type_hash.include?(name) }.map { |name| InvalidParameter.new(nil, name) }
604
+
605
+ params_struct.elements.each do |elem|
606
+ name = elem.name
607
+ value = param_hash[name]
608
+ value_type = elem.value_type
609
+ if param_hash.include?(name)
610
+ if Puppet::Pops::Types::TypeFactory.deferred.implementation_class == value.class
611
+ if (df_return_type = get_deferred_function_return_type(value))
612
+ result << describe(value_type, df_return_type, [ParameterPathElement.new(name)]) unless value_type.generalize.assignable?(df_return_type.generalize)
613
+ else
614
+ warning_text = _("Deferred function %{function_name} has no return_type, unable to guarantee value type during compilation.") %
615
+ {function_name: value.name }
616
+ Puppet.warn_once('deprecations',
617
+ "#{value.name}_deferred_warning",
618
+ warning_text)
619
+ end
620
+ else
621
+ result << describe(value_type, TypeCalculator.singleton.infer_set(value), [ParameterPathElement.new(name)]) unless value_type.instance?(value)
622
+ end
623
+ else
624
+ result << MissingParameter.new(nil, name) unless missing_ok || elem.key_type.is_a?(POptionalType)
625
+ end
626
+ end
627
+ result
628
+ end
629
+
630
+ def describe_signatures(closure, signatures, args_tuple, tense = :ignored)
631
+ tense_deprecated unless tense == :ignored
632
+ error_arrays = []
633
+ signatures.each_with_index do |signature, index|
634
+ error_arrays << describe_signature_arguments(signature, args_tuple, [SignaturePathElement.new(index)])
635
+ end
636
+
637
+ # Skip block checks if all signatures have argument errors
638
+ unless error_arrays.all? { |a| !a.empty? }
639
+ block_arrays = []
640
+ signatures.each_with_index do |signature, index|
641
+ block_arrays << describe_signature_block(signature, args_tuple, [SignaturePathElement.new(index)])
642
+ end
643
+ bc_count = block_arrays.count { |a| !a.empty? }
644
+ if bc_count == block_arrays.size
645
+ # Skip argument errors when all alternatives have block errors
646
+ error_arrays = block_arrays
647
+ elsif bc_count > 0
648
+ # Merge errors giving argument errors precedence over block errors
649
+ error_arrays.each_with_index { |a, index| error_arrays[index] = block_arrays[index] if a.empty? }
650
+ end
651
+ end
652
+ return nil if error_arrays.empty?
653
+
654
+ label = closure == 'lambda' ? 'block' : "'#{closure}'"
655
+ errors = merge_descriptions(0, CountMismatch, error_arrays)
656
+ if errors.size == 1
657
+ "#{label}#{errors[0].format}"
658
+ else
659
+ if signatures.size == 1
660
+ sig = signatures[0]
661
+ result = ["#{label} expects (#{signature_string(sig)})"]
662
+ result.concat(error_arrays[0].map { |e| " rejected:#{e.chop_path(0).format}" })
663
+ else
664
+ result = ["The function #{label} was called with arguments it does not accept. It expects one of:"]
665
+ signatures.each_with_index do |sg, index|
666
+ result << " (#{signature_string(sg)})"
667
+ result.concat(error_arrays[index].map { |e| " rejected:#{e.chop_path(0).format}" })
668
+ end
669
+ end
670
+ result.join("\n")
671
+ end
672
+ end
673
+
674
+ def describe_signature_arguments(signature, args_tuple, path)
675
+ params_tuple = signature.type.param_types
676
+ params_size_t = params_tuple.size_type || TypeFactory.range(*params_tuple.size_range)
677
+
678
+ if args_tuple.is_a?(PTupleType)
679
+ arg_types = args_tuple.types
680
+ elsif args_tuple.is_a?(PArrayType)
681
+ arg_types = Array.new(params_tuple.types.size, args_tuple.element_type || PUndefType::DEFAULT)
682
+ else
683
+ return [TypeMismatch.new(path, params_tuple, args_tuple)]
684
+ end
685
+
686
+ if arg_types.last.kind_of_callable?
687
+ # Check other arguments
688
+ arg_count = arg_types.size - 1
689
+ describe_no_block_arguments(signature, arg_types, path, params_size_t, TypeFactory.range(arg_count, arg_count), arg_count)
690
+ else
691
+ args_size_t = TypeFactory.range(*args_tuple.size_range)
692
+ describe_no_block_arguments(signature, arg_types, path, params_size_t, args_size_t, arg_types.size)
693
+ end
694
+ end
695
+
696
+ def describe_signature_block(signature, args_tuple, path)
697
+ param_block_t = signature.block_type
698
+ arg_block_t = args_tuple.is_a?(PTupleType) ? args_tuple.types.last : nil
699
+ if TypeCalculator.is_kind_of_callable?(arg_block_t)
700
+ # Can't pass a block to a callable that doesn't accept one
701
+ if param_block_t.nil?
702
+ [UnexpectedBlock.new(path)]
703
+ else
704
+ # Check that the block is of the right type
705
+ describe(param_block_t, arg_block_t, path + [BlockPathElement.new])
706
+ end
707
+ else
708
+ # Check that the block is optional
709
+ if param_block_t.nil? || param_block_t.assignable?(PUndefType::DEFAULT)
710
+ EMPTY_ARRAY
711
+ else
712
+ [MissingRequiredBlock.new(path)]
713
+ end
714
+ end
715
+ end
716
+
717
+ def describe_no_block_arguments(signature, atypes, path, expected_size, actual_size, arg_count)
718
+ # not assignable if the number of types in actual is outside number of types in expected
719
+ if expected_size.assignable?(actual_size)
720
+ etypes = signature.type.param_types.types
721
+ enames = signature.parameter_names
722
+ arg_count.times do |index|
723
+ adx = index >= etypes.size ? etypes.size - 1 : index
724
+ etype = etypes[adx]
725
+ unless etype.assignable?(atypes[index])
726
+ descriptions = describe(etype, atypes[index], path + [ParameterPathElement.new(enames[adx])])
727
+ return descriptions unless descriptions.empty?
728
+ end
729
+ end
730
+ EMPTY_ARRAY
731
+ else
732
+ [CountMismatch.new(path, expected_size, actual_size)]
733
+ end
734
+ end
735
+
736
+ def describe_PVariantType(expected, original, actual, path)
737
+ variant_descriptions = []
738
+ types = expected.types
739
+ types = [PUndefType::DEFAULT] + types if original.is_a?(POptionalType)
740
+ types.each_with_index do |vt, index|
741
+ d = describe(vt, actual, path + [VariantPathElement.new(index)])
742
+ return EMPTY_ARRAY if d.empty?
743
+ variant_descriptions << d
744
+ end
745
+ descriptions = merge_descriptions(path.length, SizeMismatch, variant_descriptions)
746
+ if original.is_a?(PTypeAliasType) && descriptions.size == 1
747
+ # All variants failed in this alias so we report it as a mismatch on the alias
748
+ # rather than reporting individual failures of the variants
749
+ [TypeMismatch.new(path, original, actual)]
750
+ else
751
+ descriptions
752
+ end
753
+ end
754
+
755
+ def merge_descriptions(varying_path_position, size_mismatch_class, variant_descriptions)
756
+ descriptions = variant_descriptions.flatten
757
+ [size_mismatch_class, MissingRequiredBlock, UnexpectedBlock, TypeMismatch].each do |mismatch_class|
758
+ mismatches = descriptions.select { |desc| desc.is_a?(mismatch_class) }
759
+ if mismatches.size == variant_descriptions.size
760
+ # If they all have the same canonical path, then we can compact this into one
761
+ generic_mismatch = mismatches.inject do |prev, curr|
762
+ break nil unless prev.canonical_path == curr.canonical_path
763
+ prev.merge(prev.path, curr)
764
+ end
765
+ unless generic_mismatch.nil?
766
+ # Report the generic mismatch and skip the rest
767
+ descriptions = [generic_mismatch]
768
+ break
769
+ end
770
+ end
771
+ end
772
+ descriptions = descriptions.uniq
773
+ descriptions.size == 1 ? [descriptions[0].chop_path(varying_path_position)] : descriptions
774
+ end
775
+
776
+ def describe_POptionalType(expected, original, actual, path)
777
+ return EMPTY_ARRAY if actual.is_a?(PUndefType) || expected.optional_type.nil?
778
+ internal_describe(expected.optional_type, original.is_a?(PTypeAliasType) ? original : expected, actual, path)
779
+ end
780
+
781
+ def describe_PEnumType(expected, original, actual, path)
782
+ [PatternMismatch.new(path, original, actual)]
783
+ end
784
+
785
+ def describe_PPatternType(expected, original, actual, path)
786
+ [PatternMismatch.new(path, original, actual)]
787
+ end
788
+
789
+ def describe_PTypeAliasType(expected, original, actual, path)
790
+ internal_describe(expected.resolved_type.normalize, expected, actual, path)
791
+ end
792
+
793
+ def describe_PArrayType(expected, original, actual, path)
794
+ descriptions = []
795
+ element_type = expected.element_type || PAnyType::DEFAULT
796
+ if actual.is_a?(PTupleType)
797
+ types = actual.types
798
+ expected_size = expected.size_type || PCollectionType::DEFAULT_SIZE
799
+ actual_size = actual.size_type || PIntegerType.new(types.size, types.size)
800
+ if expected_size.assignable?(actual_size)
801
+ types.each_with_index do |type, idx|
802
+ descriptions.concat(describe(element_type, type, path + [ArrayPathElement.new(idx)])) unless element_type.assignable?(type)
803
+ end
804
+ else
805
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
806
+ end
807
+ elsif actual.is_a?(PArrayType)
808
+ expected_size = expected.size_type
809
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
810
+ if expected_size.nil? || expected_size.assignable?(actual_size)
811
+ descriptions << TypeMismatch.new(path, original, PArrayType.new(actual.element_type))
812
+ else
813
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
814
+ end
815
+ else
816
+ descriptions << TypeMismatch.new(path, original, actual)
817
+ end
818
+ descriptions
819
+ end
820
+
821
+ def describe_PHashType(expected, original, actual, path)
822
+ descriptions = []
823
+ key_type = expected.key_type || PAnyType::DEFAULT
824
+ value_type = expected.value_type || PAnyType::DEFAULT
825
+ if actual.is_a?(PStructType)
826
+ elements = actual.elements
827
+ expected_size = expected.size_type || PCollectionType::DEFAULT_SIZE
828
+ actual_size = PIntegerType.new(elements.count { |a| !a.key_type.assignable?(PUndefType::DEFAULT) }, elements.size)
829
+ if expected_size.assignable?(actual_size)
830
+ elements.each do |a|
831
+ descriptions.concat(describe(key_type, a.key_type, path + [EntryKeyPathElement.new(a.name)])) unless key_type.assignable?(a.key_type)
832
+ descriptions.concat(describe(value_type, a.value_type, path + [EntryValuePathElement.new(a.name)])) unless value_type.assignable?(a.value_type)
833
+ end
834
+ else
835
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
836
+ end
837
+ elsif actual.is_a?(PHashType)
838
+ expected_size = expected.size_type
839
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
840
+ if expected_size.nil? || expected_size.assignable?(actual_size)
841
+ descriptions << TypeMismatch.new(path, original, PHashType.new(actual.key_type, actual.value_type))
842
+ else
843
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
844
+ end
845
+ else
846
+ descriptions << TypeMismatch.new(path, original, actual)
847
+ end
848
+ descriptions
849
+ end
850
+
851
+ def describe_PStructType(expected, original, actual, path)
852
+ elements = expected.elements
853
+ descriptions = []
854
+ if actual.is_a?(PStructType)
855
+ h2 = actual.hashed_elements.clone
856
+ elements.each do |e1|
857
+ key = e1.name
858
+ e2 = h2.delete(key)
859
+ if e2.nil?
860
+ descriptions << MissingKey.new(path, key) unless e1.key_type.assignable?(PUndefType::DEFAULT)
861
+ else
862
+ descriptions.concat(describe(e1.key_type, e2.key_type, path + [EntryKeyPathElement.new(key)])) unless e1.key_type.assignable?(e2.key_type)
863
+ descriptions.concat(describe(e1.value_type, e2.value_type, path + [EntryValuePathElement.new(key)])) unless e1.value_type.assignable?(e2.value_type)
864
+ end
865
+ end
866
+ h2.each_key { |key| descriptions << ExtraneousKey.new(path, key) }
867
+ elsif actual.is_a?(PHashType)
868
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
869
+ expected_size = PIntegerType.new(elements.count { |e| !e.key_type.assignable?(PUndefType::DEFAULT) }, elements.size)
870
+ if expected_size.assignable?(actual_size)
871
+ descriptions << TypeMismatch.new(path, original, PHashType.new(actual.key_type, actual.value_type))
872
+ else
873
+ descriptions << SizeMismatch.new(path, expected_size, actual_size)
874
+ end
875
+ else
876
+ descriptions << TypeMismatch.new(path, original, actual)
877
+ end
878
+ descriptions
879
+ end
880
+
881
+ def describe_PTupleType(expected, original, actual, path)
882
+ describe_tuple(expected, original, actual, path, SizeMismatch)
883
+ end
884
+
885
+ def describe_argument_tuple(expected, actual, path)
886
+ describe_tuple(expected, expected, actual, path, CountMismatch)
887
+ end
888
+
889
+ def describe_tuple(expected, original, actual, path, size_mismatch_class)
890
+ return EMPTY_ARRAY if expected == actual || expected.types.empty? && (actual.is_a?(PArrayType))
891
+ expected_size = expected.size_type || TypeFactory.range(*expected.size_range)
892
+
893
+ if actual.is_a?(PTupleType)
894
+ actual_size = actual.size_type || TypeFactory.range(*actual.size_range)
895
+
896
+ # not assignable if the number of types in actual is outside number of types in expected
897
+ if expected_size.assignable?(actual_size)
898
+ etypes = expected.types
899
+ descriptions = []
900
+ unless etypes.empty?
901
+ actual.types.each_with_index do |atype, index|
902
+ adx = index >= etypes.size ? etypes.size - 1 : index
903
+ descriptions.concat(describe(etypes[adx], atype, path + [ArrayPathElement.new(adx)]))
904
+ end
905
+ end
906
+ descriptions
907
+ else
908
+ [size_mismatch_class.new(path, expected_size, actual_size)]
909
+ end
910
+ elsif actual.is_a?(PArrayType)
911
+ t2_entry = actual.element_type
912
+
913
+ if t2_entry.nil?
914
+ # Array of anything can not be assigned (unless tuple is tuple of anything) - this case
915
+ # was handled at the top of this method.
916
+ #
917
+ [TypeMismatch.new(path, original, actual)]
918
+ else
919
+ expected_size = expected.size_type || TypeFactory.range(*expected.size_range)
920
+ actual_size = actual.size_type || PCollectionType::DEFAULT_SIZE
921
+ if expected_size.assignable?(actual_size)
922
+ descriptions = []
923
+ expected.types.each_with_index do |etype, index|
924
+ descriptions.concat(describe(etype, actual.element_type, path + [ArrayPathElement.new(index)]))
925
+ end
926
+ descriptions
927
+ else
928
+ [size_mismatch_class.new(path, expected_size, actual_size)]
929
+ end
930
+ end
931
+ else
932
+ [TypeMismatch.new(path, original, actual)]
933
+ end
934
+ end
935
+
936
+ def describe_PCallableType(expected, original, actual, path)
937
+ if actual.is_a?(PCallableType)
938
+ # nil param_types means, any other Callable is assignable
939
+ if expected.param_types.nil? && expected.return_type.nil?
940
+ EMPTY_ARRAY
941
+ else
942
+ # NOTE: these tests are made in reverse as it is calling the callable that is constrained
943
+ # (it's lower bound), not its upper bound
944
+ param_errors = describe_argument_tuple(expected.param_types, actual.param_types, path)
945
+ if param_errors.empty?
946
+ this_return_t = expected.return_type || PAnyType::DEFAULT
947
+ that_return_t = actual.return_type || PAnyType::DEFAULT
948
+ unless this_return_t.assignable?(that_return_t)
949
+ [TypeMismatch.new(path + [ReturnTypeElement.new], this_return_t, that_return_t)]
950
+ else
951
+ # names are ignored, they are just information
952
+ # Blocks must be compatible
953
+ this_block_t = expected.block_type || PUndefType::DEFAULT
954
+ that_block_t = actual.block_type || PUndefType::DEFAULT
955
+ if that_block_t.assignable?(this_block_t)
956
+ EMPTY_ARRAY
957
+ else
958
+ [TypeMismatch.new(path + [BlockPathElement.new], this_block_t, that_block_t)]
959
+ end
960
+ end
961
+ else
962
+ param_errors
963
+ end
964
+ end
965
+ else
966
+ [TypeMismatch.new(path, original, actual)]
967
+ end
968
+ end
969
+
970
+ def describe_PAnyType(expected, original, actual, path)
971
+ expected.assignable?(actual) ? EMPTY_ARRAY : [TypeMismatch.new(path, original, actual)]
972
+ end
973
+
974
+ class UnresolvedTypeFinder
975
+ include TypeAcceptor
976
+
977
+ attr_reader :unresolved
978
+
979
+ def initialize
980
+ @unresolved = nil
981
+ end
982
+
983
+ def visit(type, guard)
984
+ if @unresolved.nil? && type.is_a?(PTypeReferenceType)
985
+ @unresolved = type.type_string
986
+ end
987
+ end
988
+ end
989
+
990
+ def describe(expected, actual, path)
991
+ ures_finder = UnresolvedTypeFinder.new
992
+ expected.accept(ures_finder, nil)
993
+ unresolved = ures_finder.unresolved
994
+ if unresolved
995
+ [UnresolvedTypeReference.new(path, unresolved)]
996
+ else
997
+ internal_describe(expected.normalize, expected, actual, path)
998
+ end
999
+ end
1000
+
1001
+ def internal_describe(expected, original, actual, path)
1002
+ case expected
1003
+ when PVariantType
1004
+ describe_PVariantType(expected, original, actual, path)
1005
+ when PStructType
1006
+ describe_PStructType(expected, original, actual, path)
1007
+ when PHashType
1008
+ describe_PHashType(expected, original, actual, path)
1009
+ when PTupleType
1010
+ describe_PTupleType(expected, original, actual, path)
1011
+ when PArrayType
1012
+ describe_PArrayType(expected, original, actual, path)
1013
+ when PCallableType
1014
+ describe_PCallableType(expected, original, actual, path)
1015
+ when POptionalType
1016
+ describe_POptionalType(expected, original, actual, path)
1017
+ when PPatternType
1018
+ describe_PPatternType(expected, original, actual, path)
1019
+ when PEnumType
1020
+ describe_PEnumType(expected, original, actual, path)
1021
+ when PTypeAliasType
1022
+ describe_PTypeAliasType(expected, original, actual, path)
1023
+ else
1024
+ describe_PAnyType(expected, original, actual, path)
1025
+ end
1026
+ end
1027
+ private :internal_describe
1028
+
1029
+ # Produces a string for the signature(s)
1030
+ #
1031
+ # @api private
1032
+ def signature_string(signature)
1033
+ param_types = signature.type.param_types
1034
+ param_names = signature.parameter_names
1035
+
1036
+ from, to = param_types.size_range
1037
+ if from == 0 && to == 0
1038
+ # No parameters function
1039
+ return ''
1040
+ end
1041
+
1042
+ required_count = from
1043
+ types =
1044
+ case param_types
1045
+ when PTupleType
1046
+ param_types.types
1047
+ when PArrayType
1048
+ [param_types.element_type]
1049
+ end
1050
+
1051
+ # join type with names (types are always present, names are optional)
1052
+ # separate entries with comma
1053
+ #
1054
+ param_names = Array.new(types.size, '') if param_names.empty?
1055
+ limit = param_names.size
1056
+ result = param_names.each_with_index.map do |name, index|
1057
+ type = types[index] || types[-1]
1058
+ indicator = ''
1059
+ if to == Float::INFINITY && index == limit - 1
1060
+ # Last is a repeated_param.
1061
+ indicator = from == param_names.size ? '+' : '*'
1062
+ elsif optional(index, required_count)
1063
+ indicator = '?'
1064
+ type = type.optional_type if type.is_a?(POptionalType)
1065
+ end
1066
+ "#{type} #{name}#{indicator}"
1067
+ end.join(', ')
1068
+
1069
+ # If there is a block, include it
1070
+ case signature.type.block_type
1071
+ when POptionalType
1072
+ result << ', ' unless result == ''
1073
+ result << "#{signature.type.block_type.optional_type} #{signature.block_name}?"
1074
+ when PCallableType
1075
+ result << ', ' unless result == ''
1076
+ result << "#{signature.type.block_type} #{signature.block_name}"
1077
+ when NilClass
1078
+ # nothing
1079
+ end
1080
+ result
1081
+ end
1082
+
1083
+ # Why oh why Ruby do you not have a standard Math.max ?
1084
+ # @api private
1085
+ def max(a, b)
1086
+ a >= b ? a : b
1087
+ end
1088
+
1089
+ # @api private
1090
+ def optional(index, required_count)
1091
+ count = index + 1
1092
+ count > required_count
1093
+ end
1094
+ end
1095
+ end
1096
+ end