puppet 3.5.0.rc1-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (2193) hide show
  1. data/COMMITTERS.md +244 -0
  2. data/CONTRIBUTING.md +87 -0
  3. data/Gemfile +88 -0
  4. data/LICENSE +17 -0
  5. data/README.md +75 -0
  6. data/Rakefile +68 -0
  7. data/bin/extlookup2hiera +56 -0
  8. data/bin/puppet +4 -0
  9. data/conf/auth.conf +120 -0
  10. data/conf/fileserver.conf +41 -0
  11. data/conf/tagmail.conf +16 -0
  12. data/examples/hiera/README.md +91 -0
  13. data/examples/hiera/etc/hiera.yaml +15 -0
  14. data/examples/hiera/etc/hieradb/common.yaml +3 -0
  15. data/examples/hiera/etc/hieradb/dc1.yaml +6 -0
  16. data/examples/hiera/etc/hieradb/development.yaml +2 -0
  17. data/examples/hiera/etc/puppet.conf +3 -0
  18. data/examples/hiera/modules/data/manifests/common.pp +4 -0
  19. data/examples/hiera/modules/ntp/manifests/config.pp +6 -0
  20. data/examples/hiera/modules/ntp/manifests/data.pp +4 -0
  21. data/examples/hiera/modules/ntp/templates/ntp.conf.erb +3 -0
  22. data/examples/hiera/modules/users/manifests/common.pp +4 -0
  23. data/examples/hiera/modules/users/manifests/dc1.pp +4 -0
  24. data/examples/hiera/modules/users/manifests/development.pp +4 -0
  25. data/examples/hiera/site.pp +3 -0
  26. data/ext/autotest/Rakefile +8 -0
  27. data/ext/autotest/config +43 -0
  28. data/ext/autotest/readme.rst +16 -0
  29. data/ext/build_defaults.yaml +23 -0
  30. data/ext/cert_inspector +140 -0
  31. data/ext/dbfix.sql +132 -0
  32. data/ext/debian/README.Debian +8 -0
  33. data/ext/debian/README.source +2 -0
  34. data/ext/debian/TODO.Debian +1 -0
  35. data/ext/debian/changelog.erb +1122 -0
  36. data/ext/debian/compat +1 -0
  37. data/ext/debian/control +143 -0
  38. data/ext/debian/copyright +361 -0
  39. data/ext/debian/docs +1 -0
  40. data/ext/debian/fileserver.conf +41 -0
  41. data/ext/debian/puppet-common.dirs +8 -0
  42. data/ext/debian/puppet-common.install +4 -0
  43. data/ext/debian/puppet-common.lintian-overrides +5 -0
  44. data/ext/debian/puppet-common.manpages +35 -0
  45. data/ext/debian/puppet-common.postinst +35 -0
  46. data/ext/debian/puppet-common.postrm +32 -0
  47. data/ext/debian/puppet-el.dirs +1 -0
  48. data/ext/debian/puppet-el.emacsen-install +25 -0
  49. data/ext/debian/puppet-el.emacsen-remove +11 -0
  50. data/ext/debian/puppet-el.emacsen-startup +9 -0
  51. data/ext/debian/puppet-el.install +1 -0
  52. data/ext/debian/puppet-testsuite.install +2 -0
  53. data/ext/debian/puppet-testsuite.lintian-overrides +4 -0
  54. data/ext/debian/puppet.conf +14 -0
  55. data/ext/debian/puppet.default +9 -0
  56. data/ext/debian/puppet.init +117 -0
  57. data/ext/debian/puppet.lintian-overrides +3 -0
  58. data/ext/debian/puppet.logrotate +12 -0
  59. data/ext/debian/puppet.postinst +20 -0
  60. data/ext/debian/puppet.postrm +20 -0
  61. data/ext/debian/puppet.preinst +20 -0
  62. data/ext/debian/puppetmaster-common.install +2 -0
  63. data/ext/debian/puppetmaster-common.manpages +2 -0
  64. data/ext/debian/puppetmaster-common.puppetqd.default +27 -0
  65. data/ext/debian/puppetmaster-common.puppetqd.init +84 -0
  66. data/ext/debian/puppetmaster-passenger.dirs +4 -0
  67. data/ext/debian/puppetmaster-passenger.postinst +66 -0
  68. data/ext/debian/puppetmaster-passenger.postrm +33 -0
  69. data/ext/debian/puppetmaster.README.debian +15 -0
  70. data/ext/debian/puppetmaster.default +14 -0
  71. data/ext/debian/puppetmaster.init +137 -0
  72. data/ext/debian/puppetmaster.lintian-overrides +3 -0
  73. data/ext/debian/puppetmaster.postinst +20 -0
  74. data/ext/debian/puppetmaster.postrm +5 -0
  75. data/ext/debian/puppetmaster.preinst +22 -0
  76. data/ext/debian/rules +125 -0
  77. data/ext/debian/source/format +1 -0
  78. data/ext/debian/source/options +1 -0
  79. data/ext/debian/vim-puppet.README.Debian +13 -0
  80. data/ext/debian/vim-puppet.dirs +3 -0
  81. data/ext/debian/vim-puppet.yaml +5 -0
  82. data/ext/debian/watch +2 -0
  83. data/ext/emacs/puppet-mode-init.el +6 -0
  84. data/ext/emacs/puppet-mode.el +415 -0
  85. data/ext/envpuppet +139 -0
  86. data/ext/envpuppet.bat +14 -0
  87. data/ext/freebsd/puppetd +26 -0
  88. data/ext/freebsd/puppetmasterd +26 -0
  89. data/ext/gentoo/conf.d/puppet +5 -0
  90. data/ext/gentoo/conf.d/puppetmaster +12 -0
  91. data/ext/gentoo/init.d/puppet +38 -0
  92. data/ext/gentoo/init.d/puppetmaster +51 -0
  93. data/ext/gentoo/puppet/fileserver.conf +41 -0
  94. data/ext/gentoo/puppet/puppet.conf +25 -0
  95. data/ext/ips/puppet-agent +44 -0
  96. data/ext/ips/puppet-master +44 -0
  97. data/ext/ips/puppet.conf +29 -0
  98. data/ext/ips/puppet.p5m.erb +12 -0
  99. data/ext/ips/puppetagent.xml +42 -0
  100. data/ext/ips/puppetmaster.xml +42 -0
  101. data/ext/ips/rules +19 -0
  102. data/ext/ips/transforms +34 -0
  103. data/ext/ldap/puppet.schema +24 -0
  104. data/ext/logcheck/puppet +23 -0
  105. data/ext/nagios/check_puppet.rb +123 -0
  106. data/ext/nagios/naggen +309 -0
  107. data/ext/osx/file_mapping.yaml +33 -0
  108. data/ext/osx/postflight.erb +109 -0
  109. data/ext/osx/preflight.erb +52 -0
  110. data/ext/osx/prototype.plist.erb +38 -0
  111. data/ext/project_data.yaml +46 -0
  112. data/ext/puppet-load.rb +393 -0
  113. data/ext/puppet-nm-dispatcher +13 -0
  114. data/ext/puppet-test +566 -0
  115. data/ext/puppetlisten/puppetlisten.rb +75 -0
  116. data/ext/puppetlisten/puppetrun.rb +38 -0
  117. data/ext/pure_ruby_dsl/dsl_test.rb +7 -0
  118. data/ext/rack/config.ru +36 -0
  119. data/ext/rack/example-passenger-vhost.conf +52 -0
  120. data/ext/redhat/client.init +119 -0
  121. data/ext/redhat/client.sysconfig +11 -0
  122. data/ext/redhat/fileserver.conf +41 -0
  123. data/ext/redhat/logrotate +10 -0
  124. data/ext/redhat/puppet.conf +25 -0
  125. data/ext/redhat/puppet.spec.erb +848 -0
  126. data/ext/redhat/queue.init +105 -0
  127. data/ext/redhat/server.init +128 -0
  128. data/ext/redhat/server.sysconfig +13 -0
  129. data/ext/regexp_nodes/classes/databases +2 -0
  130. data/ext/regexp_nodes/classes/webservers +2 -0
  131. data/ext/regexp_nodes/environment/development +2 -0
  132. data/ext/regexp_nodes/parameters/service/prod +1 -0
  133. data/ext/regexp_nodes/parameters/service/qa +3 -0
  134. data/ext/regexp_nodes/parameters/service/sandbox +1 -0
  135. data/ext/regexp_nodes/regexp_nodes.rb +271 -0
  136. data/ext/solaris/pkginfo +6 -0
  137. data/ext/solaris/smf/puppetd.xml +77 -0
  138. data/ext/solaris/smf/puppetmasterd.xml +77 -0
  139. data/ext/solaris/smf/svc-puppetd +64 -0
  140. data/ext/solaris/smf/svc-puppetmasterd +60 -0
  141. data/ext/suse/client.init +144 -0
  142. data/ext/suse/puppet.spec +310 -0
  143. data/ext/suse/server.init +173 -0
  144. data/ext/systemd/puppet.service +13 -0
  145. data/ext/systemd/puppetmaster.service +13 -0
  146. data/ext/upload_facts.rb +119 -0
  147. data/ext/vim/README +3 -0
  148. data/ext/vim/ftdetect/puppet.vim +2 -0
  149. data/ext/vim/ftplugin/puppet.vim +94 -0
  150. data/ext/vim/indent/puppet.vim +76 -0
  151. data/ext/vim/syntax/puppet.vim +115 -0
  152. data/ext/windows/eventlog/Rakefile +32 -0
  153. data/ext/windows/eventlog/puppetres.dll +0 -0
  154. data/ext/windows/eventlog/puppetres.mc +18 -0
  155. data/ext/windows/service/daemon.bat +6 -0
  156. data/ext/windows/service/daemon.rb +169 -0
  157. data/ext/yaml_nodes.rb +105 -0
  158. data/install.rb +429 -0
  159. data/lib/hiera/backend/puppet_backend.rb +103 -0
  160. data/lib/hiera/scope.rb +60 -0
  161. data/lib/hiera_puppet.rb +87 -0
  162. data/lib/puppet.rb +247 -0
  163. data/lib/puppet/agent.rb +122 -0
  164. data/lib/puppet/agent/disabler.rb +53 -0
  165. data/lib/puppet/agent/locker.rb +43 -0
  166. data/lib/puppet/application.rb +485 -0
  167. data/lib/puppet/application/agent.rb +479 -0
  168. data/lib/puppet/application/apply.rb +290 -0
  169. data/lib/puppet/application/ca.rb +5 -0
  170. data/lib/puppet/application/catalog.rb +4 -0
  171. data/lib/puppet/application/cert.rb +277 -0
  172. data/lib/puppet/application/certificate.rb +15 -0
  173. data/lib/puppet/application/certificate_request.rb +7 -0
  174. data/lib/puppet/application/certificate_revocation_list.rb +7 -0
  175. data/lib/puppet/application/config.rb +4 -0
  176. data/lib/puppet/application/describe.rb +254 -0
  177. data/lib/puppet/application/device.rb +238 -0
  178. data/lib/puppet/application/doc.rb +280 -0
  179. data/lib/puppet/application/face_base.rb +250 -0
  180. data/lib/puppet/application/facts.rb +4 -0
  181. data/lib/puppet/application/file.rb +4 -0
  182. data/lib/puppet/application/filebucket.rb +184 -0
  183. data/lib/puppet/application/help.rb +4 -0
  184. data/lib/puppet/application/indirection_base.rb +4 -0
  185. data/lib/puppet/application/inspect.rb +179 -0
  186. data/lib/puppet/application/instrumentation_data.rb +7 -0
  187. data/lib/puppet/application/instrumentation_listener.rb +7 -0
  188. data/lib/puppet/application/instrumentation_probe.rb +7 -0
  189. data/lib/puppet/application/key.rb +4 -0
  190. data/lib/puppet/application/kick.rb +351 -0
  191. data/lib/puppet/application/man.rb +4 -0
  192. data/lib/puppet/application/master.rb +302 -0
  193. data/lib/puppet/application/module.rb +4 -0
  194. data/lib/puppet/application/node.rb +4 -0
  195. data/lib/puppet/application/parser.rb +5 -0
  196. data/lib/puppet/application/plugin.rb +3 -0
  197. data/lib/puppet/application/queue.rb +161 -0
  198. data/lib/puppet/application/report.rb +4 -0
  199. data/lib/puppet/application/resource.rb +229 -0
  200. data/lib/puppet/application/resource_type.rb +7 -0
  201. data/lib/puppet/application/secret_agent.rb +9 -0
  202. data/lib/puppet/application/status.rb +4 -0
  203. data/lib/puppet/bindings.rb +147 -0
  204. data/lib/puppet/coercion.rb +40 -0
  205. data/lib/puppet/configurer.rb +268 -0
  206. data/lib/puppet/configurer/downloader.rb +70 -0
  207. data/lib/puppet/configurer/fact_handler.rb +37 -0
  208. data/lib/puppet/configurer/plugin_handler.rb +28 -0
  209. data/lib/puppet/confine.rb +80 -0
  210. data/lib/puppet/confine/any.rb +26 -0
  211. data/lib/puppet/confine/exists.rb +19 -0
  212. data/lib/puppet/confine/false.rb +19 -0
  213. data/lib/puppet/confine/feature.rb +17 -0
  214. data/lib/puppet/confine/true.rb +20 -0
  215. data/lib/puppet/confine/variable.rb +59 -0
  216. data/lib/puppet/confine_collection.rb +50 -0
  217. data/lib/puppet/confiner.rb +46 -0
  218. data/lib/puppet/context.rb +55 -0
  219. data/lib/puppet/context/trusted_information.rb +56 -0
  220. data/lib/puppet/daemon.rb +182 -0
  221. data/lib/puppet/data_binding.rb +12 -0
  222. data/lib/puppet/defaults.rb +1875 -0
  223. data/lib/puppet/dsl.rb +7 -0
  224. data/lib/puppet/dsl/resource_api.rb +120 -0
  225. data/lib/puppet/dsl/resource_type_api.rb +34 -0
  226. data/lib/puppet/environments.rb +187 -0
  227. data/lib/puppet/error.rb +62 -0
  228. data/lib/puppet/external/dot.rb +326 -0
  229. data/lib/puppet/external/nagios.rb +46 -0
  230. data/lib/puppet/external/nagios/base.rb +472 -0
  231. data/lib/puppet/external/nagios/grammar.ry +246 -0
  232. data/lib/puppet/external/nagios/makefile +9 -0
  233. data/lib/puppet/external/nagios/parser.rb +391 -0
  234. data/lib/puppet/external/pson/common.rb +385 -0
  235. data/lib/puppet/external/pson/pure.rb +15 -0
  236. data/lib/puppet/external/pson/pure/generator.rb +401 -0
  237. data/lib/puppet/external/pson/pure/parser.rb +318 -0
  238. data/lib/puppet/external/pson/version.rb +8 -0
  239. data/lib/puppet/face.rb +12 -0
  240. data/lib/puppet/face/ca.rb +247 -0
  241. data/lib/puppet/face/catalog.rb +130 -0
  242. data/lib/puppet/face/catalog/select.rb +49 -0
  243. data/lib/puppet/face/certificate.rb +160 -0
  244. data/lib/puppet/face/certificate_request.rb +53 -0
  245. data/lib/puppet/face/certificate_revocation_list.rb +58 -0
  246. data/lib/puppet/face/config.rb +106 -0
  247. data/lib/puppet/face/facts.rb +81 -0
  248. data/lib/puppet/face/file.rb +47 -0
  249. data/lib/puppet/face/file/download.rb +54 -0
  250. data/lib/puppet/face/file/store.rb +21 -0
  251. data/lib/puppet/face/help.rb +194 -0
  252. data/lib/puppet/face/help/action.erb +86 -0
  253. data/lib/puppet/face/help/face.erb +111 -0
  254. data/lib/puppet/face/help/global.erb +16 -0
  255. data/lib/puppet/face/help/man.erb +152 -0
  256. data/lib/puppet/face/instrumentation_data.rb +29 -0
  257. data/lib/puppet/face/instrumentation_listener.rb +97 -0
  258. data/lib/puppet/face/instrumentation_probe.rb +78 -0
  259. data/lib/puppet/face/key.rb +15 -0
  260. data/lib/puppet/face/man.rb +99 -0
  261. data/lib/puppet/face/module.rb +19 -0
  262. data/lib/puppet/face/module/build.rb +63 -0
  263. data/lib/puppet/face/module/changes.rb +41 -0
  264. data/lib/puppet/face/module/generate.rb +41 -0
  265. data/lib/puppet/face/module/install.rb +143 -0
  266. data/lib/puppet/face/module/list.rb +274 -0
  267. data/lib/puppet/face/module/search.rb +94 -0
  268. data/lib/puppet/face/module/uninstall.rb +71 -0
  269. data/lib/puppet/face/module/upgrade.rb +77 -0
  270. data/lib/puppet/face/node.rb +43 -0
  271. data/lib/puppet/face/node/clean.rb +159 -0
  272. data/lib/puppet/face/parser.rb +67 -0
  273. data/lib/puppet/face/plugin.rb +61 -0
  274. data/lib/puppet/face/report.rb +54 -0
  275. data/lib/puppet/face/resource.rb +53 -0
  276. data/lib/puppet/face/resource_type.rb +81 -0
  277. data/lib/puppet/face/secret_agent.rb +54 -0
  278. data/lib/puppet/face/status.rb +53 -0
  279. data/lib/puppet/feature/base.rb +88 -0
  280. data/lib/puppet/feature/eventlog.rb +5 -0
  281. data/lib/puppet/feature/external_facts.rb +5 -0
  282. data/lib/puppet/feature/libuser.rb +8 -0
  283. data/lib/puppet/feature/msgpack.rb +3 -0
  284. data/lib/puppet/feature/pson.rb +4 -0
  285. data/lib/puppet/feature/rack.rb +19 -0
  286. data/lib/puppet/feature/rails.rb +47 -0
  287. data/lib/puppet/feature/rdoc1.rb +16 -0
  288. data/lib/puppet/feature/rubygems.rb +7 -0
  289. data/lib/puppet/feature/selinux.rb +3 -0
  290. data/lib/puppet/feature/ssh.rb +3 -0
  291. data/lib/puppet/feature/stomp.rb +5 -0
  292. data/lib/puppet/feature/zlib.rb +5 -0
  293. data/lib/puppet/file_bucket.rb +4 -0
  294. data/lib/puppet/file_bucket/dipper.rb +109 -0
  295. data/lib/puppet/file_bucket/file.rb +92 -0
  296. data/lib/puppet/file_collection.rb +19 -0
  297. data/lib/puppet/file_collection/lookup.rb +10 -0
  298. data/lib/puppet/file_serving.rb +3 -0
  299. data/lib/puppet/file_serving/base.rb +95 -0
  300. data/lib/puppet/file_serving/configuration.rb +109 -0
  301. data/lib/puppet/file_serving/configuration/parser.rb +121 -0
  302. data/lib/puppet/file_serving/content.rb +45 -0
  303. data/lib/puppet/file_serving/fileset.rb +172 -0
  304. data/lib/puppet/file_serving/metadata.rb +199 -0
  305. data/lib/puppet/file_serving/mount.rb +39 -0
  306. data/lib/puppet/file_serving/mount/file.rb +121 -0
  307. data/lib/puppet/file_serving/mount/modules.rb +24 -0
  308. data/lib/puppet/file_serving/mount/pluginfacts.rb +35 -0
  309. data/lib/puppet/file_serving/mount/plugins.rb +35 -0
  310. data/lib/puppet/file_serving/terminus_helper.rb +21 -0
  311. data/lib/puppet/file_serving/terminus_selector.rb +30 -0
  312. data/lib/puppet/file_system.rb +366 -0
  313. data/lib/puppet/file_system/file18.rb +5 -0
  314. data/lib/puppet/file_system/file19.rb +5 -0
  315. data/lib/puppet/file_system/file19windows.rb +108 -0
  316. data/lib/puppet/file_system/file_impl.rb +145 -0
  317. data/lib/puppet/file_system/memory_file.rb +45 -0
  318. data/lib/puppet/file_system/memory_impl.rb +64 -0
  319. data/lib/puppet/file_system/path_pattern.rb +97 -0
  320. data/lib/puppet/file_system/tempfile.rb +20 -0
  321. data/lib/puppet/forge.rb +106 -0
  322. data/lib/puppet/forge/cache.rb +55 -0
  323. data/lib/puppet/forge/errors.rb +103 -0
  324. data/lib/puppet/forge/repository.rb +135 -0
  325. data/lib/puppet/graph.rb +11 -0
  326. data/lib/puppet/graph/key.rb +26 -0
  327. data/lib/puppet/graph/prioritizer.rb +29 -0
  328. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  329. data/lib/puppet/graph/rb_tree_map.rb +388 -0
  330. data/lib/puppet/graph/relationship_graph.rb +246 -0
  331. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  332. data/lib/puppet/graph/simple_graph.rb +566 -0
  333. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  334. data/lib/puppet/indirector.rb +61 -0
  335. data/lib/puppet/indirector/active_record.rb +29 -0
  336. data/lib/puppet/indirector/catalog/active_record.rb +39 -0
  337. data/lib/puppet/indirector/catalog/compiler.rb +175 -0
  338. data/lib/puppet/indirector/catalog/json.rb +6 -0
  339. data/lib/puppet/indirector/catalog/msgpack.rb +6 -0
  340. data/lib/puppet/indirector/catalog/queue.rb +9 -0
  341. data/lib/puppet/indirector/catalog/rest.rb +6 -0
  342. data/lib/puppet/indirector/catalog/static_compiler.rb +214 -0
  343. data/lib/puppet/indirector/catalog/store_configs.rb +8 -0
  344. data/lib/puppet/indirector/catalog/yaml.rb +22 -0
  345. data/lib/puppet/indirector/certificate/ca.rb +9 -0
  346. data/lib/puppet/indirector/certificate/disabled_ca.rb +22 -0
  347. data/lib/puppet/indirector/certificate/file.rb +9 -0
  348. data/lib/puppet/indirector/certificate/rest.rb +16 -0
  349. data/lib/puppet/indirector/certificate_request/ca.rb +22 -0
  350. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +22 -0
  351. data/lib/puppet/indirector/certificate_request/file.rb +8 -0
  352. data/lib/puppet/indirector/certificate_request/memory.rb +6 -0
  353. data/lib/puppet/indirector/certificate_request/rest.rb +10 -0
  354. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  355. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +22 -0
  356. data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  357. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +10 -0
  358. data/lib/puppet/indirector/certificate_status.rb +4 -0
  359. data/lib/puppet/indirector/certificate_status/file.rb +91 -0
  360. data/lib/puppet/indirector/certificate_status/rest.rb +11 -0
  361. data/lib/puppet/indirector/code.rb +6 -0
  362. data/lib/puppet/indirector/couch.rb +78 -0
  363. data/lib/puppet/indirector/data_binding/hiera.rb +50 -0
  364. data/lib/puppet/indirector/data_binding/none.rb +5 -0
  365. data/lib/puppet/indirector/direct_file_server.rb +19 -0
  366. data/lib/puppet/indirector/envelope.rb +11 -0
  367. data/lib/puppet/indirector/errors.rb +5 -0
  368. data/lib/puppet/indirector/exec.rb +38 -0
  369. data/lib/puppet/indirector/face.rb +139 -0
  370. data/lib/puppet/indirector/facts/active_record.rb +44 -0
  371. data/lib/puppet/indirector/facts/couch.rb +34 -0
  372. data/lib/puppet/indirector/facts/facter.rb +91 -0
  373. data/lib/puppet/indirector/facts/inventory_active_record.rb +110 -0
  374. data/lib/puppet/indirector/facts/inventory_service.rb +20 -0
  375. data/lib/puppet/indirector/facts/memory.rb +9 -0
  376. data/lib/puppet/indirector/facts/network_device.rb +24 -0
  377. data/lib/puppet/indirector/facts/rest.rb +8 -0
  378. data/lib/puppet/indirector/facts/store_configs.rb +8 -0
  379. data/lib/puppet/indirector/facts/yaml.rb +82 -0
  380. data/lib/puppet/indirector/file_bucket_file/file.rb +138 -0
  381. data/lib/puppet/indirector/file_bucket_file/rest.rb +8 -0
  382. data/lib/puppet/indirector/file_bucket_file/selector.rb +53 -0
  383. data/lib/puppet/indirector/file_content.rb +5 -0
  384. data/lib/puppet/indirector/file_content/file.rb +7 -0
  385. data/lib/puppet/indirector/file_content/file_server.rb +7 -0
  386. data/lib/puppet/indirector/file_content/rest.rb +9 -0
  387. data/lib/puppet/indirector/file_content/selector.rb +30 -0
  388. data/lib/puppet/indirector/file_metadata.rb +5 -0
  389. data/lib/puppet/indirector/file_metadata/file.rb +22 -0
  390. data/lib/puppet/indirector/file_metadata/file_server.rb +7 -0
  391. data/lib/puppet/indirector/file_metadata/rest.rb +9 -0
  392. data/lib/puppet/indirector/file_metadata/selector.rb +30 -0
  393. data/lib/puppet/indirector/file_server.rb +65 -0
  394. data/lib/puppet/indirector/indirection.rb +336 -0
  395. data/lib/puppet/indirector/instrumentation_data.rb +3 -0
  396. data/lib/puppet/indirector/instrumentation_data/local.rb +22 -0
  397. data/lib/puppet/indirector/instrumentation_data/rest.rb +8 -0
  398. data/lib/puppet/indirector/instrumentation_listener.rb +3 -0
  399. data/lib/puppet/indirector/instrumentation_listener/local.rb +26 -0
  400. data/lib/puppet/indirector/instrumentation_listener/rest.rb +8 -0
  401. data/lib/puppet/indirector/instrumentation_probe.rb +3 -0
  402. data/lib/puppet/indirector/instrumentation_probe/local.rb +27 -0
  403. data/lib/puppet/indirector/instrumentation_probe/rest.rb +8 -0
  404. data/lib/puppet/indirector/json.rb +76 -0
  405. data/lib/puppet/indirector/key/ca.rb +16 -0
  406. data/lib/puppet/indirector/key/disabled_ca.rb +22 -0
  407. data/lib/puppet/indirector/key/file.rb +49 -0
  408. data/lib/puppet/indirector/key/memory.rb +6 -0
  409. data/lib/puppet/indirector/ldap.rb +79 -0
  410. data/lib/puppet/indirector/memory.rb +34 -0
  411. data/lib/puppet/indirector/msgpack.rb +82 -0
  412. data/lib/puppet/indirector/node/active_record.rb +22 -0
  413. data/lib/puppet/indirector/node/exec.rb +69 -0
  414. data/lib/puppet/indirector/node/ldap.rb +257 -0
  415. data/lib/puppet/indirector/node/memory.rb +10 -0
  416. data/lib/puppet/indirector/node/msgpack.rb +7 -0
  417. data/lib/puppet/indirector/node/plain.rb +20 -0
  418. data/lib/puppet/indirector/node/rest.rb +7 -0
  419. data/lib/puppet/indirector/node/store_configs.rb +8 -0
  420. data/lib/puppet/indirector/node/write_only_yaml.rb +32 -0
  421. data/lib/puppet/indirector/node/yaml.rb +22 -0
  422. data/lib/puppet/indirector/none.rb +9 -0
  423. data/lib/puppet/indirector/plain.rb +9 -0
  424. data/lib/puppet/indirector/queue.rb +80 -0
  425. data/lib/puppet/indirector/report/msgpack.rb +11 -0
  426. data/lib/puppet/indirector/report/processor.rb +59 -0
  427. data/lib/puppet/indirector/report/rest.rb +15 -0
  428. data/lib/puppet/indirector/report/yaml.rb +11 -0
  429. data/lib/puppet/indirector/request.rb +312 -0
  430. data/lib/puppet/indirector/resource/active_record.rb +104 -0
  431. data/lib/puppet/indirector/resource/ral.rb +64 -0
  432. data/lib/puppet/indirector/resource/rest.rb +17 -0
  433. data/lib/puppet/indirector/resource/store_configs.rb +13 -0
  434. data/lib/puppet/indirector/resource/validator.rb +8 -0
  435. data/lib/puppet/indirector/resource_type.rb +5 -0
  436. data/lib/puppet/indirector/resource_type/parser.rb +101 -0
  437. data/lib/puppet/indirector/resource_type/rest.rb +7 -0
  438. data/lib/puppet/indirector/rest.rb +246 -0
  439. data/lib/puppet/indirector/run/local.rb +15 -0
  440. data/lib/puppet/indirector/run/rest.rb +12 -0
  441. data/lib/puppet/indirector/ssl_file.rb +180 -0
  442. data/lib/puppet/indirector/status.rb +3 -0
  443. data/lib/puppet/indirector/status/local.rb +12 -0
  444. data/lib/puppet/indirector/status/rest.rb +9 -0
  445. data/lib/puppet/indirector/store_configs.rb +30 -0
  446. data/lib/puppet/indirector/terminus.rb +169 -0
  447. data/lib/puppet/indirector/yaml.rb +63 -0
  448. data/lib/puppet/interface.rb +235 -0
  449. data/lib/puppet/interface/action.rb +374 -0
  450. data/lib/puppet/interface/action_builder.rb +149 -0
  451. data/lib/puppet/interface/action_manager.rb +101 -0
  452. data/lib/puppet/interface/documentation.rb +342 -0
  453. data/lib/puppet/interface/face_collection.rb +125 -0
  454. data/lib/puppet/interface/option.rb +150 -0
  455. data/lib/puppet/interface/option_builder.rb +93 -0
  456. data/lib/puppet/interface/option_manager.rb +99 -0
  457. data/lib/puppet/metatype/manager.rb +184 -0
  458. data/lib/puppet/module.rb +338 -0
  459. data/lib/puppet/module_tool.rb +143 -0
  460. data/lib/puppet/module_tool/applications.rb +15 -0
  461. data/lib/puppet/module_tool/applications/application.rb +89 -0
  462. data/lib/puppet/module_tool/applications/builder.rb +79 -0
  463. data/lib/puppet/module_tool/applications/checksummer.rb +56 -0
  464. data/lib/puppet/module_tool/applications/generator.rb +142 -0
  465. data/lib/puppet/module_tool/applications/installer.rb +192 -0
  466. data/lib/puppet/module_tool/applications/searcher.rb +28 -0
  467. data/lib/puppet/module_tool/applications/uninstaller.rb +110 -0
  468. data/lib/puppet/module_tool/applications/unpacker.rb +60 -0
  469. data/lib/puppet/module_tool/applications/upgrader.rb +113 -0
  470. data/lib/puppet/module_tool/checksums.rb +52 -0
  471. data/lib/puppet/module_tool/contents_description.rb +84 -0
  472. data/lib/puppet/module_tool/dependency.rb +29 -0
  473. data/lib/puppet/module_tool/errors.rb +11 -0
  474. data/lib/puppet/module_tool/errors/base.rb +15 -0
  475. data/lib/puppet/module_tool/errors/installer.rb +127 -0
  476. data/lib/puppet/module_tool/errors/shared.rb +115 -0
  477. data/lib/puppet/module_tool/errors/uninstaller.rb +45 -0
  478. data/lib/puppet/module_tool/errors/upgrader.rb +72 -0
  479. data/lib/puppet/module_tool/install_directory.rb +44 -0
  480. data/lib/puppet/module_tool/metadata.rb +155 -0
  481. data/lib/puppet/module_tool/modulefile.rb +78 -0
  482. data/lib/puppet/module_tool/shared_behaviors.rb +168 -0
  483. data/lib/puppet/module_tool/skeleton.rb +37 -0
  484. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +11 -0
  485. data/lib/puppet/module_tool/skeleton/templates/generator/README.erb +16 -0
  486. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +41 -0
  487. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +17 -0
  488. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +12 -0
  489. data/lib/puppet/module_tool/tar.rb +21 -0
  490. data/lib/puppet/module_tool/tar/gnu.rb +16 -0
  491. data/lib/puppet/module_tool/tar/mini.rb +41 -0
  492. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  493. data/lib/puppet/network.rb +3 -0
  494. data/lib/puppet/network/auth_config_parser.rb +84 -0
  495. data/lib/puppet/network/authconfig.rb +76 -0
  496. data/lib/puppet/network/authentication.rb +35 -0
  497. data/lib/puppet/network/authorization.rb +34 -0
  498. data/lib/puppet/network/authstore.rb +282 -0
  499. data/lib/puppet/network/client_request.rb +29 -0
  500. data/lib/puppet/network/format.rb +110 -0
  501. data/lib/puppet/network/format_handler.rb +105 -0
  502. data/lib/puppet/network/format_support.rb +124 -0
  503. data/lib/puppet/network/formats.rb +216 -0
  504. data/lib/puppet/network/http.rb +15 -0
  505. data/lib/puppet/network/http/api.rb +2 -0
  506. data/lib/puppet/network/http/api/v1.rb +218 -0
  507. data/lib/puppet/network/http/api/v2.rb +32 -0
  508. data/lib/puppet/network/http/api/v2/authorization.rb +13 -0
  509. data/lib/puppet/network/http/api/v2/environments.rb +21 -0
  510. data/lib/puppet/network/http/compression.rb +114 -0
  511. data/lib/puppet/network/http/connection.rb +254 -0
  512. data/lib/puppet/network/http/error.rb +69 -0
  513. data/lib/puppet/network/http/handler.rb +180 -0
  514. data/lib/puppet/network/http/issues.rb +9 -0
  515. data/lib/puppet/network/http/memory_response.rb +13 -0
  516. data/lib/puppet/network/http/rack.rb +33 -0
  517. data/lib/puppet/network/http/rack/rest.rb +136 -0
  518. data/lib/puppet/network/http/request.rb +56 -0
  519. data/lib/puppet/network/http/response.rb +11 -0
  520. data/lib/puppet/network/http/route.rb +91 -0
  521. data/lib/puppet/network/http/webrick.rb +119 -0
  522. data/lib/puppet/network/http/webrick/rest.rb +95 -0
  523. data/lib/puppet/network/http_pool.rb +53 -0
  524. data/lib/puppet/network/resolver.rb +86 -0
  525. data/lib/puppet/network/rest_controller.rb +2 -0
  526. data/lib/puppet/network/rights.rb +219 -0
  527. data/lib/puppet/network/server.rb +39 -0
  528. data/lib/puppet/node.rb +171 -0
  529. data/lib/puppet/node/environment.rb +492 -0
  530. data/lib/puppet/node/facts.rb +155 -0
  531. data/lib/puppet/parameter.rb +585 -0
  532. data/lib/puppet/parameter/boolean.rb +15 -0
  533. data/lib/puppet/parameter/package_options.rb +31 -0
  534. data/lib/puppet/parameter/path.rb +57 -0
  535. data/lib/puppet/parameter/value.rb +93 -0
  536. data/lib/puppet/parameter/value_collection.rb +211 -0
  537. data/lib/puppet/parser.rb +7 -0
  538. data/lib/puppet/parser/ast.rb +130 -0
  539. data/lib/puppet/parser/ast/arithmetic_operator.rb +91 -0
  540. data/lib/puppet/parser/ast/astarray.rb +50 -0
  541. data/lib/puppet/parser/ast/asthash.rb +37 -0
  542. data/lib/puppet/parser/ast/block_expression.rb +40 -0
  543. data/lib/puppet/parser/ast/boolean_operator.rb +46 -0
  544. data/lib/puppet/parser/ast/branch.rb +22 -0
  545. data/lib/puppet/parser/ast/caseopt.rb +52 -0
  546. data/lib/puppet/parser/ast/casestatement.rb +41 -0
  547. data/lib/puppet/parser/ast/collection.rb +49 -0
  548. data/lib/puppet/parser/ast/collexpr.rb +109 -0
  549. data/lib/puppet/parser/ast/comparison_operator.rb +38 -0
  550. data/lib/puppet/parser/ast/definition.rb +17 -0
  551. data/lib/puppet/parser/ast/else.rb +22 -0
  552. data/lib/puppet/parser/ast/function.rb +59 -0
  553. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  554. data/lib/puppet/parser/ast/ifstatement.rb +34 -0
  555. data/lib/puppet/parser/ast/in_operator.rb +24 -0
  556. data/lib/puppet/parser/ast/lambda.rb +135 -0
  557. data/lib/puppet/parser/ast/leaf.rb +232 -0
  558. data/lib/puppet/parser/ast/match_operator.rb +28 -0
  559. data/lib/puppet/parser/ast/method_call.rb +77 -0
  560. data/lib/puppet/parser/ast/minus.rb +23 -0
  561. data/lib/puppet/parser/ast/node.rb +20 -0
  562. data/lib/puppet/parser/ast/nop.rb +11 -0
  563. data/lib/puppet/parser/ast/not.rb +19 -0
  564. data/lib/puppet/parser/ast/pops_bridge.rb +168 -0
  565. data/lib/puppet/parser/ast/relationship.rb +47 -0
  566. data/lib/puppet/parser/ast/resource.rb +67 -0
  567. data/lib/puppet/parser/ast/resource_defaults.rb +24 -0
  568. data/lib/puppet/parser/ast/resource_instance.rb +9 -0
  569. data/lib/puppet/parser/ast/resource_override.rb +62 -0
  570. data/lib/puppet/parser/ast/resource_reference.rb +28 -0
  571. data/lib/puppet/parser/ast/resourceparam.rb +27 -0
  572. data/lib/puppet/parser/ast/selector.rb +50 -0
  573. data/lib/puppet/parser/ast/tag.rb +24 -0
  574. data/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  575. data/lib/puppet/parser/ast/vardef.rb +38 -0
  576. data/lib/puppet/parser/code_merger.rb +13 -0
  577. data/lib/puppet/parser/collector.rb +177 -0
  578. data/lib/puppet/parser/compiler.rb +555 -0
  579. data/lib/puppet/parser/e4_parser_adapter.rb +81 -0
  580. data/lib/puppet/parser/e_parser_adapter.rb +119 -0
  581. data/lib/puppet/parser/files.rb +94 -0
  582. data/lib/puppet/parser/functions.rb +249 -0
  583. data/lib/puppet/parser/functions/collect.rb +15 -0
  584. data/lib/puppet/parser/functions/contain.rb +26 -0
  585. data/lib/puppet/parser/functions/create_resources.rb +78 -0
  586. data/lib/puppet/parser/functions/defined.rb +73 -0
  587. data/lib/puppet/parser/functions/each.rb +109 -0
  588. data/lib/puppet/parser/functions/epp.rb +41 -0
  589. data/lib/puppet/parser/functions/extlookup.rb +153 -0
  590. data/lib/puppet/parser/functions/fail.rb +4 -0
  591. data/lib/puppet/parser/functions/file.rb +23 -0
  592. data/lib/puppet/parser/functions/filter.rb +100 -0
  593. data/lib/puppet/parser/functions/fqdn_rand.rb +21 -0
  594. data/lib/puppet/parser/functions/generate.rb +37 -0
  595. data/lib/puppet/parser/functions/hiera.rb +26 -0
  596. data/lib/puppet/parser/functions/hiera_array.rb +27 -0
  597. data/lib/puppet/parser/functions/hiera_hash.rb +29 -0
  598. data/lib/puppet/parser/functions/hiera_include.rb +44 -0
  599. data/lib/puppet/parser/functions/include.rb +47 -0
  600. data/lib/puppet/parser/functions/inline_epp.rb +79 -0
  601. data/lib/puppet/parser/functions/inline_template.rb +21 -0
  602. data/lib/puppet/parser/functions/lookup.rb +144 -0
  603. data/lib/puppet/parser/functions/map.rb +96 -0
  604. data/lib/puppet/parser/functions/md5.rb +5 -0
  605. data/lib/puppet/parser/functions/realize.rb +14 -0
  606. data/lib/puppet/parser/functions/reduce.rb +100 -0
  607. data/lib/puppet/parser/functions/regsubst.rb +116 -0
  608. data/lib/puppet/parser/functions/require.rb +53 -0
  609. data/lib/puppet/parser/functions/search.rb +7 -0
  610. data/lib/puppet/parser/functions/select.rb +15 -0
  611. data/lib/puppet/parser/functions/sha1.rb +5 -0
  612. data/lib/puppet/parser/functions/shellquote.rb +61 -0
  613. data/lib/puppet/parser/functions/slice.rb +116 -0
  614. data/lib/puppet/parser/functions/split.rb +28 -0
  615. data/lib/puppet/parser/functions/sprintf.rb +36 -0
  616. data/lib/puppet/parser/functions/tag.rb +6 -0
  617. data/lib/puppet/parser/functions/tagged.rb +18 -0
  618. data/lib/puppet/parser/functions/template.rb +23 -0
  619. data/lib/puppet/parser/functions/versioncmp.rb +30 -0
  620. data/lib/puppet/parser/grammar.ra +806 -0
  621. data/lib/puppet/parser/lexer.rb +608 -0
  622. data/lib/puppet/parser/makefile +8 -0
  623. data/lib/puppet/parser/methods.rb +69 -0
  624. data/lib/puppet/parser/parser.rb +2559 -0
  625. data/lib/puppet/parser/parser_factory.rb +88 -0
  626. data/lib/puppet/parser/parser_support.rb +195 -0
  627. data/lib/puppet/parser/relationship.rb +62 -0
  628. data/lib/puppet/parser/resource.rb +267 -0
  629. data/lib/puppet/parser/resource/param.rb +25 -0
  630. data/lib/puppet/parser/scope.rb +833 -0
  631. data/lib/puppet/parser/templatewrapper.rb +127 -0
  632. data/lib/puppet/parser/type_loader.rb +152 -0
  633. data/lib/puppet/parser/yaml_trimmer.rb +7 -0
  634. data/lib/puppet/pops.rb +99 -0
  635. data/lib/puppet/pops/adaptable.rb +190 -0
  636. data/lib/puppet/pops/adapters.rb +101 -0
  637. data/lib/puppet/pops/binder/binder.rb +393 -0
  638. data/lib/puppet/pops/binder/binder_issues.rb +122 -0
  639. data/lib/puppet/pops/binder/bindings_checker.rb +197 -0
  640. data/lib/puppet/pops/binder/bindings_composer.rb +175 -0
  641. data/lib/puppet/pops/binder/bindings_factory.rb +805 -0
  642. data/lib/puppet/pops/binder/bindings_label_provider.rb +43 -0
  643. data/lib/puppet/pops/binder/bindings_loader.rb +88 -0
  644. data/lib/puppet/pops/binder/bindings_model.rb +201 -0
  645. data/lib/puppet/pops/binder/bindings_model_dumper.rb +187 -0
  646. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  647. data/lib/puppet/pops/binder/config/binder_config.rb +107 -0
  648. data/lib/puppet/pops/binder/config/binder_config_checker.rb +142 -0
  649. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  650. data/lib/puppet/pops/binder/config/issues.rb +86 -0
  651. data/lib/puppet/pops/binder/injector.rb +767 -0
  652. data/lib/puppet/pops/binder/injector_entry.rb +57 -0
  653. data/lib/puppet/pops/binder/key_factory.rb +67 -0
  654. data/lib/puppet/pops/binder/lookup.rb +191 -0
  655. data/lib/puppet/pops/binder/producers.rb +829 -0
  656. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  657. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  658. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +53 -0
  659. data/lib/puppet/pops/binder/system_bindings.rb +60 -0
  660. data/lib/puppet/pops/containment.rb +104 -0
  661. data/lib/puppet/pops/evaluator/access_operator.rb +548 -0
  662. data/lib/puppet/pops/evaluator/closure.rb +57 -0
  663. data/lib/puppet/pops/evaluator/compare_operator.rb +168 -0
  664. data/lib/puppet/pops/evaluator/epp_evaluator.rb +87 -0
  665. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1069 -0
  666. data/lib/puppet/pops/evaluator/external_syntax_support.rb +49 -0
  667. data/lib/puppet/pops/evaluator/relationship_operator.rb +156 -0
  668. data/lib/puppet/pops/evaluator/runtime3_support.rb +489 -0
  669. data/lib/puppet/pops/issue_reporter.rb +79 -0
  670. data/lib/puppet/pops/issues.rb +461 -0
  671. data/lib/puppet/pops/label_provider.rb +76 -0
  672. data/lib/puppet/pops/model/ast_transformer.rb +663 -0
  673. data/lib/puppet/pops/model/ast_tree_dumper.rb +386 -0
  674. data/lib/puppet/pops/model/factory.rb +970 -0
  675. data/lib/puppet/pops/model/model.rb +606 -0
  676. data/lib/puppet/pops/model/model_label_provider.rb +104 -0
  677. data/lib/puppet/pops/model/model_tree_dumper.rb +377 -0
  678. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  679. data/lib/puppet/pops/parser/code_merger.rb +17 -0
  680. data/lib/puppet/pops/parser/egrammar.ra +752 -0
  681. data/lib/puppet/pops/parser/eparser.rb +2579 -0
  682. data/lib/puppet/pops/parser/epp_parser.rb +51 -0
  683. data/lib/puppet/pops/parser/epp_support.rb +247 -0
  684. data/lib/puppet/pops/parser/evaluating_parser.rb +200 -0
  685. data/lib/puppet/pops/parser/heredoc_support.rb +139 -0
  686. data/lib/puppet/pops/parser/interpolation_support.rb +227 -0
  687. data/lib/puppet/pops/parser/lexer.rb +753 -0
  688. data/lib/puppet/pops/parser/lexer2.rb +684 -0
  689. data/lib/puppet/pops/parser/lexer_support.rb +107 -0
  690. data/lib/puppet/pops/parser/locatable.rb +23 -0
  691. data/lib/puppet/pops/parser/locator.rb +291 -0
  692. data/lib/puppet/pops/parser/makefile +6 -0
  693. data/lib/puppet/pops/parser/parser_support.rb +231 -0
  694. data/lib/puppet/pops/parser/slurp_support.rb +95 -0
  695. data/lib/puppet/pops/patterns.rb +44 -0
  696. data/lib/puppet/pops/types/class_loader.rb +118 -0
  697. data/lib/puppet/pops/types/enumeration.rb +34 -0
  698. data/lib/puppet/pops/types/type_calculator.rb +1482 -0
  699. data/lib/puppet/pops/types/type_factory.rb +335 -0
  700. data/lib/puppet/pops/types/type_parser.rb +460 -0
  701. data/lib/puppet/pops/types/types.rb +422 -0
  702. data/lib/puppet/pops/utils.rb +120 -0
  703. data/lib/puppet/pops/validation.rb +432 -0
  704. data/lib/puppet/pops/validation/checker3_1.rb +558 -0
  705. data/lib/puppet/pops/validation/checker4_0.rb +514 -0
  706. data/lib/puppet/pops/validation/validator_factory_3_1.rb +31 -0
  707. data/lib/puppet/pops/validation/validator_factory_4_0.rb +31 -0
  708. data/lib/puppet/pops/visitable.rb +6 -0
  709. data/lib/puppet/pops/visitor.rb +192 -0
  710. data/lib/puppet/property.rb +617 -0
  711. data/lib/puppet/property/boolean.rb +7 -0
  712. data/lib/puppet/property/ensure.rb +105 -0
  713. data/lib/puppet/property/keyvalue.rb +95 -0
  714. data/lib/puppet/property/list.rb +78 -0
  715. data/lib/puppet/property/ordered_list.rb +29 -0
  716. data/lib/puppet/provider.rb +651 -0
  717. data/lib/puppet/provider/aixobject.rb +392 -0
  718. data/lib/puppet/provider/augeas/augeas.rb +509 -0
  719. data/lib/puppet/provider/cisco.rb +9 -0
  720. data/lib/puppet/provider/command.rb +25 -0
  721. data/lib/puppet/provider/computer/computer.rb +20 -0
  722. data/lib/puppet/provider/confine.rb +6 -0
  723. data/lib/puppet/provider/cron/crontab.rb +249 -0
  724. data/lib/puppet/provider/exec.rb +91 -0
  725. data/lib/puppet/provider/exec/posix.rb +48 -0
  726. data/lib/puppet/provider/exec/shell.rb +25 -0
  727. data/lib/puppet/provider/exec/windows.rb +55 -0
  728. data/lib/puppet/provider/file/posix.rb +136 -0
  729. data/lib/puppet/provider/file/windows.rb +105 -0
  730. data/lib/puppet/provider/group/aix.rb +141 -0
  731. data/lib/puppet/provider/group/directoryservice.rb +12 -0
  732. data/lib/puppet/provider/group/groupadd.rb +85 -0
  733. data/lib/puppet/provider/group/ldap.rb +45 -0
  734. data/lib/puppet/provider/group/pw.rb +48 -0
  735. data/lib/puppet/provider/group/windows_adsi.rb +86 -0
  736. data/lib/puppet/provider/host/parsed.rb +44 -0
  737. data/lib/puppet/provider/interface/cisco.rb +27 -0
  738. data/lib/puppet/provider/ldap.rb +137 -0
  739. data/lib/puppet/provider/macauthorization/macauthorization.rb +309 -0
  740. data/lib/puppet/provider/mailalias/aliases.rb +39 -0
  741. data/lib/puppet/provider/maillist/mailman.rb +108 -0
  742. data/lib/puppet/provider/mcx/mcxcontent.rb +172 -0
  743. data/lib/puppet/provider/mount.rb +58 -0
  744. data/lib/puppet/provider/mount/parsed.rb +123 -0
  745. data/lib/puppet/provider/naginator.rb +63 -0
  746. data/lib/puppet/provider/nameservice.rb +292 -0
  747. data/lib/puppet/provider/nameservice/directoryservice.rb +589 -0
  748. data/lib/puppet/provider/nameservice/objectadd.rb +33 -0
  749. data/lib/puppet/provider/nameservice/pw.rb +21 -0
  750. data/lib/puppet/provider/network_device.rb +68 -0
  751. data/lib/puppet/provider/package.rb +28 -0
  752. data/lib/puppet/provider/package/aix.rb +152 -0
  753. data/lib/puppet/provider/package/appdmg.rb +106 -0
  754. data/lib/puppet/provider/package/apple.rb +47 -0
  755. data/lib/puppet/provider/package/apt.rb +107 -0
  756. data/lib/puppet/provider/package/aptitude.rb +29 -0
  757. data/lib/puppet/provider/package/aptrpm.rb +83 -0
  758. data/lib/puppet/provider/package/blastwave.rb +111 -0
  759. data/lib/puppet/provider/package/dpkg.rb +165 -0
  760. data/lib/puppet/provider/package/fink.rb +79 -0
  761. data/lib/puppet/provider/package/freebsd.rb +47 -0
  762. data/lib/puppet/provider/package/gem.rb +125 -0
  763. data/lib/puppet/provider/package/hpux.rb +44 -0
  764. data/lib/puppet/provider/package/macports.rb +107 -0
  765. data/lib/puppet/provider/package/msi.rb +140 -0
  766. data/lib/puppet/provider/package/nim.rb +280 -0
  767. data/lib/puppet/provider/package/openbsd.rb +175 -0
  768. data/lib/puppet/provider/package/opkg.rb +76 -0
  769. data/lib/puppet/provider/package/pacman.rb +209 -0
  770. data/lib/puppet/provider/package/pip.rb +119 -0
  771. data/lib/puppet/provider/package/pkg.rb +190 -0
  772. data/lib/puppet/provider/package/pkgdmg.rb +149 -0
  773. data/lib/puppet/provider/package/pkgin.rb +87 -0
  774. data/lib/puppet/provider/package/pkgutil.rb +186 -0
  775. data/lib/puppet/provider/package/portage.rb +149 -0
  776. data/lib/puppet/provider/package/ports.rb +94 -0
  777. data/lib/puppet/provider/package/portupgrade.rb +241 -0
  778. data/lib/puppet/provider/package/rpm.rb +205 -0
  779. data/lib/puppet/provider/package/rug.rb +52 -0
  780. data/lib/puppet/provider/package/sun.rb +128 -0
  781. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  782. data/lib/puppet/provider/package/up2date.rb +40 -0
  783. data/lib/puppet/provider/package/urpmi.rb +55 -0
  784. data/lib/puppet/provider/package/windows.rb +123 -0
  785. data/lib/puppet/provider/package/windows/exe_package.rb +70 -0
  786. data/lib/puppet/provider/package/windows/msi_package.rb +62 -0
  787. data/lib/puppet/provider/package/windows/package.rb +80 -0
  788. data/lib/puppet/provider/package/yum.rb +110 -0
  789. data/lib/puppet/provider/package/yumhelper.py +129 -0
  790. data/lib/puppet/provider/package/zypper.rb +103 -0
  791. data/lib/puppet/provider/parsedfile.rb +443 -0
  792. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +565 -0
  793. data/lib/puppet/provider/selboolean/getsetsebool.rb +47 -0
  794. data/lib/puppet/provider/selmodule/semodule.rb +134 -0
  795. data/lib/puppet/provider/service/base.rb +106 -0
  796. data/lib/puppet/provider/service/bsd.rb +51 -0
  797. data/lib/puppet/provider/service/daemontools.rb +194 -0
  798. data/lib/puppet/provider/service/debian.rb +64 -0
  799. data/lib/puppet/provider/service/freebsd.rb +143 -0
  800. data/lib/puppet/provider/service/gentoo.rb +45 -0
  801. data/lib/puppet/provider/service/init.rb +161 -0
  802. data/lib/puppet/provider/service/launchd.rb +356 -0
  803. data/lib/puppet/provider/service/openbsd.rb +23 -0
  804. data/lib/puppet/provider/service/openrc.rb +71 -0
  805. data/lib/puppet/provider/service/openwrt.rb +36 -0
  806. data/lib/puppet/provider/service/redhat.rb +64 -0
  807. data/lib/puppet/provider/service/runit.rb +111 -0
  808. data/lib/puppet/provider/service/service.rb +42 -0
  809. data/lib/puppet/provider/service/smf.rb +116 -0
  810. data/lib/puppet/provider/service/src.rb +120 -0
  811. data/lib/puppet/provider/service/systemd.rb +65 -0
  812. data/lib/puppet/provider/service/upstart.rb +355 -0
  813. data/lib/puppet/provider/service/windows.rb +106 -0
  814. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +89 -0
  815. data/lib/puppet/provider/sshkey/parsed.rb +35 -0
  816. data/lib/puppet/provider/user/aix.rb +369 -0
  817. data/lib/puppet/provider/user/directoryservice.rb +671 -0
  818. data/lib/puppet/provider/user/hpux.rb +66 -0
  819. data/lib/puppet/provider/user/ldap.rb +128 -0
  820. data/lib/puppet/provider/user/pw.rb +97 -0
  821. data/lib/puppet/provider/user/user_role_add.rb +209 -0
  822. data/lib/puppet/provider/user/useradd.rb +231 -0
  823. data/lib/puppet/provider/user/windows_adsi.rb +99 -0
  824. data/lib/puppet/provider/vlan/cisco.rb +28 -0
  825. data/lib/puppet/provider/yumrepo/inifile.rb +187 -0
  826. data/lib/puppet/provider/zfs/zfs.rb +83 -0
  827. data/lib/puppet/provider/zone/solaris.rb +361 -0
  828. data/lib/puppet/provider/zpool/zpool.rb +120 -0
  829. data/lib/puppet/rails.rb +139 -0
  830. data/lib/puppet/rails/benchmark.rb +63 -0
  831. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +13 -0
  832. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +13 -0
  833. data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
  834. data/lib/puppet/rails/database/004_add_inventory_service_tables.rb +36 -0
  835. data/lib/puppet/rails/database/schema.rb +136 -0
  836. data/lib/puppet/rails/fact_name.rb +7 -0
  837. data/lib/puppet/rails/fact_value.rb +10 -0
  838. data/lib/puppet/rails/host.rb +258 -0
  839. data/lib/puppet/rails/inventory_fact.rb +5 -0
  840. data/lib/puppet/rails/inventory_node.rb +43 -0
  841. data/lib/puppet/rails/param_name.rb +25 -0
  842. data/lib/puppet/rails/param_value.rb +74 -0
  843. data/lib/puppet/rails/puppet_tag.rb +10 -0
  844. data/lib/puppet/rails/resource.rb +235 -0
  845. data/lib/puppet/rails/resource_tag.rb +26 -0
  846. data/lib/puppet/rails/source_file.rb +8 -0
  847. data/lib/puppet/reference/configuration.rb +73 -0
  848. data/lib/puppet/reference/function.rb +17 -0
  849. data/lib/puppet/reference/indirection.rb +71 -0
  850. data/lib/puppet/reference/metaparameter.rb +42 -0
  851. data/lib/puppet/reference/providers.rb +119 -0
  852. data/lib/puppet/reference/report.rb +23 -0
  853. data/lib/puppet/reference/type.rb +116 -0
  854. data/lib/puppet/relationship.rb +103 -0
  855. data/lib/puppet/reports.rb +89 -0
  856. data/lib/puppet/reports/http.rb +31 -0
  857. data/lib/puppet/reports/log.rb +14 -0
  858. data/lib/puppet/reports/rrdgraph.rb +128 -0
  859. data/lib/puppet/reports/store.rb +73 -0
  860. data/lib/puppet/reports/tagmail.rb +179 -0
  861. data/lib/puppet/resource.rb +542 -0
  862. data/lib/puppet/resource/catalog.rb +543 -0
  863. data/lib/puppet/resource/status.rb +155 -0
  864. data/lib/puppet/resource/type.rb +386 -0
  865. data/lib/puppet/resource/type_collection.rb +230 -0
  866. data/lib/puppet/resource/type_collection_helper.rb +7 -0
  867. data/lib/puppet/run.rb +109 -0
  868. data/lib/puppet/scheduler.rb +16 -0
  869. data/lib/puppet/scheduler/job.rb +53 -0
  870. data/lib/puppet/scheduler/scheduler.rb +44 -0
  871. data/lib/puppet/scheduler/splay_job.rb +32 -0
  872. data/lib/puppet/scheduler/timer.rb +13 -0
  873. data/lib/puppet/settings.rb +1312 -0
  874. data/lib/puppet/settings/autosign_setting.rb +22 -0
  875. data/lib/puppet/settings/base_setting.rb +168 -0
  876. data/lib/puppet/settings/boolean_setting.rb +32 -0
  877. data/lib/puppet/settings/config_file.rb +134 -0
  878. data/lib/puppet/settings/directory_setting.rb +12 -0
  879. data/lib/puppet/settings/duration_setting.rb +32 -0
  880. data/lib/puppet/settings/enum_setting.rb +16 -0
  881. data/lib/puppet/settings/errors.rb +11 -0
  882. data/lib/puppet/settings/file_setting.rb +226 -0
  883. data/lib/puppet/settings/ini_file.rb +171 -0
  884. data/lib/puppet/settings/path_setting.rb +8 -0
  885. data/lib/puppet/settings/priority_setting.rb +42 -0
  886. data/lib/puppet/settings/string_setting.rb +9 -0
  887. data/lib/puppet/settings/terminus_setting.rb +14 -0
  888. data/lib/puppet/settings/value_translator.rb +15 -0
  889. data/lib/puppet/ssl.rb +12 -0
  890. data/lib/puppet/ssl/base.rb +140 -0
  891. data/lib/puppet/ssl/certificate.rb +65 -0
  892. data/lib/puppet/ssl/certificate_authority.rb +509 -0
  893. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +44 -0
  894. data/lib/puppet/ssl/certificate_authority/interface.rb +178 -0
  895. data/lib/puppet/ssl/certificate_factory.rb +219 -0
  896. data/lib/puppet/ssl/certificate_request.rb +299 -0
  897. data/lib/puppet/ssl/certificate_request_attributes.rb +37 -0
  898. data/lib/puppet/ssl/certificate_revocation_list.rb +110 -0
  899. data/lib/puppet/ssl/certificate_signer.rb +22 -0
  900. data/lib/puppet/ssl/configuration.rb +64 -0
  901. data/lib/puppet/ssl/digest.rb +20 -0
  902. data/lib/puppet/ssl/host.rb +371 -0
  903. data/lib/puppet/ssl/inventory.rb +50 -0
  904. data/lib/puppet/ssl/key.rb +59 -0
  905. data/lib/puppet/ssl/oids.rb +78 -0
  906. data/lib/puppet/ssl/validator.rb +60 -0
  907. data/lib/puppet/ssl/validator/default_validator.rb +153 -0
  908. data/lib/puppet/ssl/validator/no_validator.rb +17 -0
  909. data/lib/puppet/status.rb +45 -0
  910. data/lib/puppet/test/test_helper.rb +216 -0
  911. data/lib/puppet/transaction.rb +340 -0
  912. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  913. data/lib/puppet/transaction/event.rb +107 -0
  914. data/lib/puppet/transaction/event_manager.rb +122 -0
  915. data/lib/puppet/transaction/report.rb +383 -0
  916. data/lib/puppet/transaction/resource_harness.rb +238 -0
  917. data/lib/puppet/type.rb +2430 -0
  918. data/lib/puppet/type/augeas.rb +189 -0
  919. data/lib/puppet/type/component.rb +77 -0
  920. data/lib/puppet/type/computer.rb +66 -0
  921. data/lib/puppet/type/cron.rb +474 -0
  922. data/lib/puppet/type/exec.rb +564 -0
  923. data/lib/puppet/type/file.rb +891 -0
  924. data/lib/puppet/type/file/checksum.rb +33 -0
  925. data/lib/puppet/type/file/content.rb +239 -0
  926. data/lib/puppet/type/file/ctime.rb +20 -0
  927. data/lib/puppet/type/file/ensure.rb +189 -0
  928. data/lib/puppet/type/file/group.rb +41 -0
  929. data/lib/puppet/type/file/mode.rb +159 -0
  930. data/lib/puppet/type/file/mtime.rb +18 -0
  931. data/lib/puppet/type/file/owner.rb +44 -0
  932. data/lib/puppet/type/file/selcontext.rb +124 -0
  933. data/lib/puppet/type/file/source.rb +256 -0
  934. data/lib/puppet/type/file/target.rb +87 -0
  935. data/lib/puppet/type/file/type.rb +19 -0
  936. data/lib/puppet/type/filebucket.rb +122 -0
  937. data/lib/puppet/type/group.rb +188 -0
  938. data/lib/puppet/type/host.rb +86 -0
  939. data/lib/puppet/type/interface.rb +116 -0
  940. data/lib/puppet/type/k5login.rb +88 -0
  941. data/lib/puppet/type/macauthorization.rb +167 -0
  942. data/lib/puppet/type/mailalias.rb +48 -0
  943. data/lib/puppet/type/maillist.rb +62 -0
  944. data/lib/puppet/type/mcx.rb +98 -0
  945. data/lib/puppet/type/mount.rb +288 -0
  946. data/lib/puppet/type/nagios_command.rb +3 -0
  947. data/lib/puppet/type/nagios_contact.rb +3 -0
  948. data/lib/puppet/type/nagios_contactgroup.rb +3 -0
  949. data/lib/puppet/type/nagios_host.rb +3 -0
  950. data/lib/puppet/type/nagios_hostdependency.rb +3 -0
  951. data/lib/puppet/type/nagios_hostescalation.rb +3 -0
  952. data/lib/puppet/type/nagios_hostextinfo.rb +3 -0
  953. data/lib/puppet/type/nagios_hostgroup.rb +3 -0
  954. data/lib/puppet/type/nagios_service.rb +3 -0
  955. data/lib/puppet/type/nagios_servicedependency.rb +3 -0
  956. data/lib/puppet/type/nagios_serviceescalation.rb +3 -0
  957. data/lib/puppet/type/nagios_serviceextinfo.rb +3 -0
  958. data/lib/puppet/type/nagios_servicegroup.rb +3 -0
  959. data/lib/puppet/type/nagios_timeperiod.rb +3 -0
  960. data/lib/puppet/type/notify.rb +44 -0
  961. data/lib/puppet/type/package.rb +460 -0
  962. data/lib/puppet/type/resources.rb +161 -0
  963. data/lib/puppet/type/router.rb +17 -0
  964. data/lib/puppet/type/schedule.rb +469 -0
  965. data/lib/puppet/type/scheduled_task.rb +170 -0
  966. data/lib/puppet/type/selboolean.rb +26 -0
  967. data/lib/puppet/type/selmodule.rb +59 -0
  968. data/lib/puppet/type/service.rb +224 -0
  969. data/lib/puppet/type/ssh_authorized_key.rb +115 -0
  970. data/lib/puppet/type/sshkey.rb +73 -0
  971. data/lib/puppet/type/stage.rb +27 -0
  972. data/lib/puppet/type/tidy.rb +324 -0
  973. data/lib/puppet/type/user.rb +572 -0
  974. data/lib/puppet/type/vlan.rb +26 -0
  975. data/lib/puppet/type/whit.rb +34 -0
  976. data/lib/puppet/type/yumrepo.rb +270 -0
  977. data/lib/puppet/type/zfs.rb +150 -0
  978. data/lib/puppet/type/zone.rb +385 -0
  979. data/lib/puppet/type/zpool.rb +91 -0
  980. data/lib/puppet/util.rb +545 -0
  981. data/lib/puppet/util/adsi.rb +368 -0
  982. data/lib/puppet/util/autoload.rb +227 -0
  983. data/lib/puppet/util/backups.rb +86 -0
  984. data/lib/puppet/util/cacher.rb +74 -0
  985. data/lib/puppet/util/checksums.rb +143 -0
  986. data/lib/puppet/util/classgen.rb +236 -0
  987. data/lib/puppet/util/colors.rb +175 -0
  988. data/lib/puppet/util/command_line.rb +182 -0
  989. data/lib/puppet/util/command_line/puppet_option_parser.rb +87 -0
  990. data/lib/puppet/util/command_line/trollop.rb +824 -0
  991. data/lib/puppet/util/constant_inflector.rb +24 -0
  992. data/lib/puppet/util/diff.rb +77 -0
  993. data/lib/puppet/util/docs.rb +128 -0
  994. data/lib/puppet/util/errors.rb +106 -0
  995. data/lib/puppet/util/execution.rb +313 -0
  996. data/lib/puppet/util/execution_stub.rb +26 -0
  997. data/lib/puppet/util/feature.rb +83 -0
  998. data/lib/puppet/util/file_watcher.rb +28 -0
  999. data/lib/puppet/util/fileparsing.rb +376 -0
  1000. data/lib/puppet/util/filetype.rb +299 -0
  1001. data/lib/puppet/util/http_proxy.rb +38 -0
  1002. data/lib/puppet/util/inifile.rb +218 -0
  1003. data/lib/puppet/util/inline_docs.rb +26 -0
  1004. data/lib/puppet/util/instance_loader.rb +81 -0
  1005. data/lib/puppet/util/instrumentation.rb +152 -0
  1006. data/lib/puppet/util/instrumentation/data.rb +46 -0
  1007. data/lib/puppet/util/instrumentation/indirection_probe.rb +41 -0
  1008. data/lib/puppet/util/instrumentation/instrumentable.rb +136 -0
  1009. data/lib/puppet/util/instrumentation/listener.rb +72 -0
  1010. data/lib/puppet/util/instrumentation/listeners/log.rb +23 -0
  1011. data/lib/puppet/util/instrumentation/listeners/performance.rb +24 -0
  1012. data/lib/puppet/util/json_lockfile.rb +44 -0
  1013. data/lib/puppet/util/ldap.rb +2 -0
  1014. data/lib/puppet/util/ldap/connection.rb +71 -0
  1015. data/lib/puppet/util/ldap/generator.rb +42 -0
  1016. data/lib/puppet/util/ldap/manager.rb +278 -0
  1017. data/lib/puppet/util/libuser.conf +15 -0
  1018. data/lib/puppet/util/libuser.rb +12 -0
  1019. data/lib/puppet/util/limits.rb +12 -0
  1020. data/lib/puppet/util/lockfile.rb +66 -0
  1021. data/lib/puppet/util/log.rb +343 -0
  1022. data/lib/puppet/util/log/destination.rb +49 -0
  1023. data/lib/puppet/util/log/destinations.rb +228 -0
  1024. data/lib/puppet/util/log/rate_limited_logger.rb +40 -0
  1025. data/lib/puppet/util/logging.rb +143 -0
  1026. data/lib/puppet/util/metaid.rb +21 -0
  1027. data/lib/puppet/util/methodhelper.rb +32 -0
  1028. data/lib/puppet/util/metric.rb +210 -0
  1029. data/lib/puppet/util/monkey_patches.rb +225 -0
  1030. data/lib/puppet/util/monkey_patches/lines.rb +13 -0
  1031. data/lib/puppet/util/nagios_maker.rb +85 -0
  1032. data/lib/puppet/util/network_device.rb +17 -0
  1033. data/lib/puppet/util/network_device/base.rb +27 -0
  1034. data/lib/puppet/util/network_device/cisco.rb +4 -0
  1035. data/lib/puppet/util/network_device/cisco/device.rb +267 -0
  1036. data/lib/puppet/util/network_device/cisco/facts.rb +72 -0
  1037. data/lib/puppet/util/network_device/cisco/interface.rb +82 -0
  1038. data/lib/puppet/util/network_device/config.rb +93 -0
  1039. data/lib/puppet/util/network_device/ipcalc.rb +68 -0
  1040. data/lib/puppet/util/network_device/transport.rb +5 -0
  1041. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  1042. data/lib/puppet/util/network_device/transport/ssh.rb +122 -0
  1043. data/lib/puppet/util/network_device/transport/telnet.rb +44 -0
  1044. data/lib/puppet/util/package.rb +31 -0
  1045. data/lib/puppet/util/pidlock.rb +56 -0
  1046. data/lib/puppet/util/platform.rb +22 -0
  1047. data/lib/puppet/util/plugins.rb +82 -0
  1048. data/lib/puppet/util/posix.rb +147 -0
  1049. data/lib/puppet/util/profiler.rb +45 -0
  1050. data/lib/puppet/util/profiler/logging.rb +47 -0
  1051. data/lib/puppet/util/profiler/none.rb +8 -0
  1052. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  1053. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  1054. data/lib/puppet/util/provider_features.rb +184 -0
  1055. data/lib/puppet/util/pson.rb +13 -0
  1056. data/lib/puppet/util/queue.rb +96 -0
  1057. data/lib/puppet/util/queue/stomp.rb +60 -0
  1058. data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
  1059. data/lib/puppet/util/rails/collection_merger.rb +17 -0
  1060. data/lib/puppet/util/rails/reference_serializer.rb +32 -0
  1061. data/lib/puppet/util/rdoc.rb +89 -0
  1062. data/lib/puppet/util/rdoc/code_objects.rb +334 -0
  1063. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +910 -0
  1064. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1085 -0
  1065. data/lib/puppet/util/rdoc/parser.rb +22 -0
  1066. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +477 -0
  1067. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +19 -0
  1068. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +14 -0
  1069. data/lib/puppet/util/reference.rb +124 -0
  1070. data/lib/puppet/util/resource_template.rb +61 -0
  1071. data/lib/puppet/util/retryaction.rb +47 -0
  1072. data/lib/puppet/util/rubygems.rb +65 -0
  1073. data/lib/puppet/util/run_mode.rb +82 -0
  1074. data/lib/puppet/util/selinux.rb +222 -0
  1075. data/lib/puppet/util/ssl.rb +53 -0
  1076. data/lib/puppet/util/storage.rb +89 -0
  1077. data/lib/puppet/util/suidmanager.rb +198 -0
  1078. data/lib/puppet/util/symbolic_file_mode.rb +144 -0
  1079. data/lib/puppet/util/tag_set.rb +41 -0
  1080. data/lib/puppet/util/tagging.rb +55 -0
  1081. data/lib/puppet/util/terminal.rb +16 -0
  1082. data/lib/puppet/util/user_attr.rb +21 -0
  1083. data/lib/puppet/util/warnings.rb +32 -0
  1084. data/lib/puppet/util/watched_file.rb +37 -0
  1085. data/lib/puppet/util/watcher.rb +17 -0
  1086. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  1087. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  1088. data/lib/puppet/util/watcher/timer.rb +19 -0
  1089. data/lib/puppet/util/windows.rb +17 -0
  1090. data/lib/puppet/util/windows/access_control_entry.rb +84 -0
  1091. data/lib/puppet/util/windows/access_control_list.rb +113 -0
  1092. data/lib/puppet/util/windows/error.rb +16 -0
  1093. data/lib/puppet/util/windows/file.rb +279 -0
  1094. data/lib/puppet/util/windows/process.rb +238 -0
  1095. data/lib/puppet/util/windows/registry.rb +70 -0
  1096. data/lib/puppet/util/windows/root_certs.rb +101 -0
  1097. data/lib/puppet/util/windows/security.rb +649 -0
  1098. data/lib/puppet/util/windows/security_descriptor.rb +62 -0
  1099. data/lib/puppet/util/windows/sid.rb +118 -0
  1100. data/lib/puppet/util/windows/string.rb +14 -0
  1101. data/lib/puppet/util/windows/user.rb +108 -0
  1102. data/lib/puppet/util/yaml.rb +24 -0
  1103. data/lib/puppet/util/zaml.rb +419 -0
  1104. data/lib/puppet/vendor.rb +55 -0
  1105. data/lib/puppet/vendor/load_safe_yaml.rb +1 -0
  1106. data/lib/puppet/vendor/require_vendored.rb +5 -0
  1107. data/lib/puppet/vendor/safe_yaml/CHANGES.md +104 -0
  1108. data/lib/puppet/vendor/safe_yaml/Gemfile +11 -0
  1109. data/lib/puppet/vendor/safe_yaml/LICENSE.txt +22 -0
  1110. data/lib/puppet/vendor/safe_yaml/README.md +179 -0
  1111. data/lib/puppet/vendor/safe_yaml/Rakefile +6 -0
  1112. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml.rb +253 -0
  1113. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/deep.rb +34 -0
  1114. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/date.rb +27 -0
  1115. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/hexadecimal.rb +12 -0
  1116. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/sexagesimal.rb +26 -0
  1117. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_handler.rb +92 -0
  1118. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_resolver.rb +52 -0
  1119. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/resolver.rb +94 -0
  1120. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/safe_to_ruby_visitor.rb +17 -0
  1121. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_hack.rb +36 -0
  1122. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_node_monkeypatch.rb +43 -0
  1123. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_resolver.rb +38 -0
  1124. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform.rb +41 -0
  1125. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_boolean.rb +21 -0
  1126. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_date.rb +11 -0
  1127. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_float.rb +33 -0
  1128. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_integer.rb +25 -0
  1129. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_nil.rb +18 -0
  1130. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_symbol.rb +13 -0
  1131. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/transformation_map.rb +47 -0
  1132. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/version.rb +3 -0
  1133. data/lib/puppet/vendor/safe_yaml/run_specs_all_ruby_versions.sh +21 -0
  1134. data/lib/puppet/vendor/safe_yaml/safe_yaml.gemspec +18 -0
  1135. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.2.yaml +2 -0
  1136. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.3.yaml +2 -0
  1137. data/lib/puppet/vendor/safe_yaml/spec/psych_resolver_spec.rb +10 -0
  1138. data/lib/puppet/vendor/safe_yaml/spec/resolver_specs.rb +250 -0
  1139. data/lib/puppet/vendor/safe_yaml/spec/safe_yaml_spec.rb +702 -0
  1140. data/lib/puppet/vendor/safe_yaml/spec/spec_helper.rb +18 -0
  1141. data/lib/puppet/vendor/safe_yaml/spec/support/exploitable_back_door.rb +29 -0
  1142. data/lib/puppet/vendor/safe_yaml/spec/syck_resolver_spec.rb +10 -0
  1143. data/lib/puppet/vendor/safe_yaml/spec/transform/base64_spec.rb +11 -0
  1144. data/lib/puppet/vendor/safe_yaml/spec/transform/to_date_spec.rb +34 -0
  1145. data/lib/puppet/vendor/safe_yaml/spec/transform/to_float_spec.rb +42 -0
  1146. data/lib/puppet/vendor/safe_yaml/spec/transform/to_integer_spec.rb +59 -0
  1147. data/lib/puppet/vendor/safe_yaml/spec/transform/to_symbol_spec.rb +49 -0
  1148. data/lib/puppet/vendor/safe_yaml_patches.rb +9 -0
  1149. data/lib/puppet/version.rb +89 -0
  1150. data/lib/puppetx.rb +89 -0
  1151. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  1152. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  1153. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +37 -0
  1154. data/lib/semver.rb +124 -0
  1155. data/man/man5/puppet.conf.5 +1581 -0
  1156. data/man/man8/extlookup2hiera.8 +23 -0
  1157. data/man/man8/puppet-agent.8 +157 -0
  1158. data/man/man8/puppet-apply.8 +80 -0
  1159. data/man/man8/puppet-ca.8 +170 -0
  1160. data/man/man8/puppet-catalog.8 +292 -0
  1161. data/man/man8/puppet-cert.8 +97 -0
  1162. data/man/man8/puppet-certificate.8 +238 -0
  1163. data/man/man8/puppet-certificate_request.8 +168 -0
  1164. data/man/man8/puppet-certificate_revocation_list.8 +165 -0
  1165. data/man/man8/puppet-config.8 +76 -0
  1166. data/man/man8/puppet-describe.8 +51 -0
  1167. data/man/man8/puppet-device.8 +86 -0
  1168. data/man/man8/puppet-doc.8 +119 -0
  1169. data/man/man8/puppet-facts.8 +223 -0
  1170. data/man/man8/puppet-file.8 +215 -0
  1171. data/man/man8/puppet-filebucket.8 +81 -0
  1172. data/man/man8/puppet-help.8 +64 -0
  1173. data/man/man8/puppet-inspect.8 +36 -0
  1174. data/man/man8/puppet-instrumentation_data.8 +141 -0
  1175. data/man/man8/puppet-instrumentation_listener.8 +218 -0
  1176. data/man/man8/puppet-instrumentation_probe.8 +203 -0
  1177. data/man/man8/puppet-key.8 +129 -0
  1178. data/man/man8/puppet-kick.8 +131 -0
  1179. data/man/man8/puppet-man.8 +70 -0
  1180. data/man/man8/puppet-master.8 +78 -0
  1181. data/man/man8/puppet-module.8 +422 -0
  1182. data/man/man8/puppet-node.8 +211 -0
  1183. data/man/man8/puppet-parser.8 +73 -0
  1184. data/man/man8/puppet-plugin.8 +73 -0
  1185. data/man/man8/puppet-queue.8 +55 -0
  1186. data/man/man8/puppet-report.8 +186 -0
  1187. data/man/man8/puppet-resource.8 +84 -0
  1188. data/man/man8/puppet-resource_type.8 +214 -0
  1189. data/man/man8/puppet-secret_agent.8 +70 -0
  1190. data/man/man8/puppet-status.8 +150 -0
  1191. data/man/man8/puppet.8 +10 -0
  1192. data/spec/fixtures/faulty_face/puppet/face/syntax.rb +8 -0
  1193. data/spec/fixtures/hiera.yaml +9 -0
  1194. data/spec/fixtures/integration/node/environment/sitedir/00_a.pp +2 -0
  1195. data/spec/fixtures/integration/node/environment/sitedir/01_b.pp +6 -0
  1196. data/spec/fixtures/integration/node/environment/sitedir/03_empty.pp +0 -0
  1197. data/spec/fixtures/integration/node/environment/sitedir/04_include.pp +2 -0
  1198. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  1199. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  1200. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  1201. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  1202. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  1203. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  1204. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  1205. data/spec/fixtures/integration/provider/cron/crontab/purged +8 -0
  1206. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  1207. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  1208. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  1209. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +28 -0
  1210. data/spec/fixtures/manifests/site.pp +0 -0
  1211. data/spec/fixtures/releases/jamtur01-apache/Modulefile +2 -0
  1212. data/spec/fixtures/releases/jamtur01-apache/files/httpd +24 -0
  1213. data/spec/fixtures/releases/jamtur01-apache/files/test.vhost +18 -0
  1214. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/provider/a2mod/debian.rb +21 -0
  1215. data/spec/fixtures/releases/jamtur01-apache/lib/puppet/type/a2mod.rb +12 -0
  1216. data/spec/fixtures/releases/jamtur01-apache/manifests/dev.pp +5 -0
  1217. data/spec/fixtures/releases/jamtur01-apache/manifests/init.pp +34 -0
  1218. data/spec/fixtures/releases/jamtur01-apache/manifests/params.pp +17 -0
  1219. data/spec/fixtures/releases/jamtur01-apache/manifests/php.pp +5 -0
  1220. data/spec/fixtures/releases/jamtur01-apache/manifests/ssl.pp +15 -0
  1221. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +15 -0
  1222. data/spec/fixtures/releases/jamtur01-apache/metadata.json +1 -0
  1223. data/spec/fixtures/releases/jamtur01-apache/templates/vhost-default.conf.erb +20 -0
  1224. data/spec/fixtures/releases/jamtur01-apache/tests/apache.pp +1 -0
  1225. data/spec/fixtures/releases/jamtur01-apache/tests/dev.pp +1 -0
  1226. data/spec/fixtures/releases/jamtur01-apache/tests/init.pp +1 -0
  1227. data/spec/fixtures/releases/jamtur01-apache/tests/php.pp +1 -0
  1228. data/spec/fixtures/releases/jamtur01-apache/tests/ssl.pp +1 -0
  1229. data/spec/fixtures/releases/jamtur01-apache/tests/vhost.pp +2 -0
  1230. data/spec/fixtures/unit/indirector/data_binding/hiera/global.yaml +10 -0
  1231. data/spec/fixtures/unit/indirector/data_binding/hiera/invalid.yaml +1 -0
  1232. data/spec/fixtures/unit/module/trailing-comma.json +24 -0
  1233. data/spec/fixtures/unit/parser/lexer/aliastest.pp +16 -0
  1234. data/spec/fixtures/unit/parser/lexer/append.pp +11 -0
  1235. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +14 -0
  1236. data/spec/fixtures/unit/parser/lexer/arithmetic_expression.pp +8 -0
  1237. data/spec/fixtures/unit/parser/lexer/arraytrailingcomma.pp +3 -0
  1238. data/spec/fixtures/unit/parser/lexer/casestatement.pp +65 -0
  1239. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +15 -0
  1240. data/spec/fixtures/unit/parser/lexer/classincludes.pp +17 -0
  1241. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +11 -0
  1242. data/spec/fixtures/unit/parser/lexer/collection.pp +10 -0
  1243. data/spec/fixtures/unit/parser/lexer/collection_override.pp +8 -0
  1244. data/spec/fixtures/unit/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  1245. data/spec/fixtures/unit/parser/lexer/componentmetaparams.pp +11 -0
  1246. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +8 -0
  1247. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +23 -0
  1248. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +17 -0
  1249. data/spec/fixtures/unit/parser/lexer/emptyclass.pp +9 -0
  1250. data/spec/fixtures/unit/parser/lexer/emptyexec.pp +3 -0
  1251. data/spec/fixtures/unit/parser/lexer/emptyifelse.pp +9 -0
  1252. data/spec/fixtures/unit/parser/lexer/falsevalues.pp +3 -0
  1253. data/spec/fixtures/unit/parser/lexer/filecreate.pp +11 -0
  1254. data/spec/fixtures/unit/parser/lexer/fqdefinition.pp +5 -0
  1255. data/spec/fixtures/unit/parser/lexer/fqparents.pp +11 -0
  1256. data/spec/fixtures/unit/parser/lexer/funccomma.pp +5 -0
  1257. data/spec/fixtures/unit/parser/lexer/hash.pp +33 -0
  1258. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +12 -0
  1259. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +15 -0
  1260. data/spec/fixtures/unit/parser/lexer/multilinecomments.pp +10 -0
  1261. data/spec/fixtures/unit/parser/lexer/multipleclass.pp +9 -0
  1262. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +7 -0
  1263. data/spec/fixtures/unit/parser/lexer/multisubs.pp +13 -0
  1264. data/spec/fixtures/unit/parser/lexer/namevartest.pp +9 -0
  1265. data/spec/fixtures/unit/parser/lexer/scopetest.pp +13 -0
  1266. data/spec/fixtures/unit/parser/lexer/selectorvalues.pp +49 -0
  1267. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +5 -0
  1268. data/spec/fixtures/unit/parser/lexer/simpleselector.pp +38 -0
  1269. data/spec/fixtures/unit/parser/lexer/singleary.pp +19 -0
  1270. data/spec/fixtures/unit/parser/lexer/singlequote.pp +11 -0
  1271. data/spec/fixtures/unit/parser/lexer/singleselector.pp +22 -0
  1272. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +11 -0
  1273. data/spec/fixtures/unit/parser/lexer/tag.pp +9 -0
  1274. data/spec/fixtures/unit/parser/lexer/tagged.pp +35 -0
  1275. data/spec/fixtures/unit/parser/lexer/virtualresources.pp +14 -0
  1276. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +10 -0
  1277. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/lib/puppet/bindings/confdirtest.rb +10 -0
  1278. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppet/bindings/awesome2/default.rb +20 -0
  1279. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/puppetx/awesome2/echo_scheme_handler.rb +18 -0
  1280. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/lib/puppet/bindings/bad/default.rb +5 -0
  1281. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/lib/puppet/bindings/good/default.rb +6 -0
  1282. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  1283. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  1284. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  1285. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  1286. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  1287. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  1288. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  1289. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  1290. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  1291. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  1292. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  1293. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  1294. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  1295. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  1296. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  1297. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  1298. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  1299. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  1300. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  1301. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  1302. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  1303. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  1304. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  1305. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  1306. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  1307. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  1308. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  1309. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  1310. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  1311. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  1312. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  1313. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  1314. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  1315. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  1316. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  1317. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  1318. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  1319. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  1320. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  1321. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  1322. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  1323. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  1324. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  1325. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  1326. data/spec/fixtures/unit/provider/augeas/augeas/augeas/lenses/test.aug +13 -0
  1327. data/spec/fixtures/unit/provider/augeas/augeas/etc/fstab +10 -0
  1328. data/spec/fixtures/unit/provider/augeas/augeas/etc/hosts +6 -0
  1329. data/spec/fixtures/unit/provider/augeas/augeas/etc/test +3 -0
  1330. data/spec/fixtures/unit/provider/augeas/augeas/test.aug +13 -0
  1331. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +272 -0
  1332. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  1333. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  1334. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  1335. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +19 -0
  1336. data/spec/fixtures/unit/provider/mount/mount-output.aix.txt +7 -0
  1337. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +144 -0
  1338. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +7 -0
  1339. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +6 -0
  1340. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +8 -0
  1341. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +3 -0
  1342. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +17 -0
  1343. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +11 -0
  1344. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +5 -0
  1345. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +9 -0
  1346. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +8 -0
  1347. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +4 -0
  1348. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +4 -0
  1349. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +11 -0
  1350. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +6 -0
  1351. data/spec/fixtures/unit/provider/package/gem/line-with-1.8.5-warning +14 -0
  1352. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.detail +19 -0
  1353. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.list +10 -0
  1354. data/spec/fixtures/unit/provider/package/openbsd/pkginfo.query +1 -0
  1355. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  1356. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris10 +1 -0
  1357. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.installed +1 -0
  1358. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.known +1 -0
  1359. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.installed +1 -0
  1360. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.known +1 -0
  1361. data/spec/fixtures/unit/provider/package/pkg/incomplete +1 -0
  1362. data/spec/fixtures/unit/provider/package/pkg/publisher +2 -0
  1363. data/spec/fixtures/unit/provider/package/pkg/simple +2 -0
  1364. data/spec/fixtures/unit/provider/package/pkg/solaris11 +2 -0
  1365. data/spec/fixtures/unit/provider/package/pkg/unknown_status +12 -0
  1366. data/spec/fixtures/unit/provider/package/sun/dummy.server +12 -0
  1367. data/spec/fixtures/unit/provider/package/sun/simple +24 -0
  1368. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-SLES11sp1.out +369 -0
  1369. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  1370. data/spec/fixtures/unit/provider/service/gentoo/rc_update_show +30 -0
  1371. data/spec/fixtures/unit/provider/service/openrc/rcservice_list +8 -0
  1372. data/spec/fixtures/unit/provider/service/openrc/rcstatus +43 -0
  1373. data/spec/fixtures/unit/provider/service/smf/svcs.out +3 -0
  1374. data/spec/fixtures/unit/provider/service/systemd/list_units_services +17 -0
  1375. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +7 -0
  1376. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +3 -0
  1377. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +1 -0
  1378. data/spec/fixtures/unit/provider/sshkey/parsed/sample +21 -0
  1379. data/spec/fixtures/unit/provider/zfs/zfs/zfs-list.out +2 -0
  1380. data/spec/fixtures/unit/provider/zpool/zpool/zpool-list.out +2 -0
  1381. data/spec/fixtures/unit/reports/tagmail/tagmail_email.conf +2 -0
  1382. data/spec/fixtures/unit/reports/tagmail/tagmail_failers.conf +3 -0
  1383. data/spec/fixtures/unit/reports/tagmail/tagmail_passers.conf +30 -0
  1384. data/spec/fixtures/unit/util/filetype/aixtab_output +44 -0
  1385. data/spec/fixtures/unit/util/filetype/suntab_output +9 -0
  1386. data/spec/fixtures/unit/util/monkey_patches/x509.pem +32 -0
  1387. data/spec/fixtures/unit/util/rdoc/basic.pp +16 -0
  1388. data/spec/fixtures/yaml/report0.25.x.yaml +64 -0
  1389. data/spec/fixtures/yaml/report2.6.x.yaml +190 -0
  1390. data/spec/fixtures/yaml/test.local.yaml +16 -0
  1391. data/spec/integration/agent/logging_spec.rb +178 -0
  1392. data/spec/integration/application/apply_spec.rb +108 -0
  1393. data/spec/integration/application/doc_spec.rb +56 -0
  1394. data/spec/integration/configurer_spec.rb +81 -0
  1395. data/spec/integration/data_binding.rb +100 -0
  1396. data/spec/integration/defaults_spec.rb +315 -0
  1397. data/spec/integration/directory_environments_spec.rb +50 -0
  1398. data/spec/integration/faces/ca_spec.rb +354 -0
  1399. data/spec/integration/faces/documentation_spec.rb +62 -0
  1400. data/spec/integration/file_bucket/file_spec.rb +44 -0
  1401. data/spec/integration/file_serving/content_spec.rb +8 -0
  1402. data/spec/integration/file_serving/fileset_spec.rb +13 -0
  1403. data/spec/integration/file_serving/metadata_spec.rb +9 -0
  1404. data/spec/integration/file_serving/terminus_helper_spec.rb +21 -0
  1405. data/spec/integration/indirector/catalog/compiler_spec.rb +67 -0
  1406. data/spec/integration/indirector/catalog/queue_spec.rb +57 -0
  1407. data/spec/integration/indirector/direct_file_server_spec.rb +67 -0
  1408. data/spec/integration/indirector/facts/facter_spec.rb +22 -0
  1409. data/spec/integration/indirector/file_content/file_server_spec.rb +89 -0
  1410. data/spec/integration/indirector/file_metadata/file_server_spec.rb +14 -0
  1411. data/spec/integration/indirector/node/ldap_spec.rb +14 -0
  1412. data/spec/integration/network/authconfig_spec.rb +257 -0
  1413. data/spec/integration/network/formats_spec.rb +91 -0
  1414. data/spec/integration/node/environment_spec.rb +109 -0
  1415. data/spec/integration/node/facts_spec.rb +41 -0
  1416. data/spec/integration/node_spec.rb +82 -0
  1417. data/spec/integration/parser/catalog_spec.rb +125 -0
  1418. data/spec/integration/parser/collector_spec.rb +117 -0
  1419. data/spec/integration/parser/compiler_spec.rb +513 -0
  1420. data/spec/integration/parser/functions/require_spec.rb +43 -0
  1421. data/spec/integration/parser/future_compiler_spec.rb +416 -0
  1422. data/spec/integration/parser/parser_spec.rb +207 -0
  1423. data/spec/integration/parser/ruby_manifest_spec.rb +128 -0
  1424. data/spec/integration/parser/scope_spec.rb +757 -0
  1425. data/spec/integration/parser/undef_param_spec.rb +87 -0
  1426. data/spec/integration/provider/cron/crontab_spec.rb +217 -0
  1427. data/spec/integration/provider/mailalias/aliases_spec.rb +10 -0
  1428. data/spec/integration/provider/mount_spec.rb +169 -0
  1429. data/spec/integration/provider/package_spec.rb +44 -0
  1430. data/spec/integration/provider/service/init_spec.rb +46 -0
  1431. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  1432. data/spec/integration/provider/ssh_authorized_key_spec.rb +219 -0
  1433. data/spec/integration/reference/providers_spec.rb +16 -0
  1434. data/spec/integration/reports_spec.rb +14 -0
  1435. data/spec/integration/resource/catalog_spec.rb +54 -0
  1436. data/spec/integration/resource/type_collection_spec.rb +94 -0
  1437. data/spec/integration/ssl/autosign_spec.rb +130 -0
  1438. data/spec/integration/ssl/certificate_authority_spec.rb +137 -0
  1439. data/spec/integration/ssl/certificate_request_spec.rb +54 -0
  1440. data/spec/integration/ssl/certificate_revocation_list_spec.rb +37 -0
  1441. data/spec/integration/ssl/host_spec.rb +84 -0
  1442. data/spec/integration/transaction/report_spec.rb +24 -0
  1443. data/spec/integration/transaction_spec.rb +346 -0
  1444. data/spec/integration/type/exec_spec.rb +77 -0
  1445. data/spec/integration/type/file_spec.rb +1375 -0
  1446. data/spec/integration/type/nagios_spec.rb +80 -0
  1447. data/spec/integration/type/package_spec.rb +28 -0
  1448. data/spec/integration/type/tidy_spec.rb +31 -0
  1449. data/spec/integration/type_spec.rb +32 -0
  1450. data/spec/integration/util/autoload_spec.rb +107 -0
  1451. data/spec/integration/util/execution_spec.rb +17 -0
  1452. data/spec/integration/util/feature_spec.rb +53 -0
  1453. data/spec/integration/util/rdoc/parser_spec.rb +261 -0
  1454. data/spec/integration/util/settings_spec.rb +89 -0
  1455. data/spec/integration/util/windows/process_spec.rb +22 -0
  1456. data/spec/integration/util/windows/security_spec.rb +846 -0
  1457. data/spec/integration/util/windows/user_spec.rb +59 -0
  1458. data/spec/integration/util_spec.rb +111 -0
  1459. data/spec/lib/matchers/containment_matchers.rb +52 -0
  1460. data/spec/lib/matchers/include.rb +27 -0
  1461. data/spec/lib/matchers/include_in_order.rb +21 -0
  1462. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  1463. data/spec/lib/matchers/include_spec.rb +32 -0
  1464. data/spec/lib/matchers/json.rb +167 -0
  1465. data/spec/lib/matchers/match_tokens2.rb +74 -0
  1466. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  1467. data/spec/lib/matchers/resource.rb +35 -0
  1468. data/spec/lib/puppet/face/1.0.0/huzzah.rb +8 -0
  1469. data/spec/lib/puppet/face/basetest.rb +51 -0
  1470. data/spec/lib/puppet/face/huzzah.rb +8 -0
  1471. data/spec/lib/puppet/face/huzzah/obsolete.rb +6 -0
  1472. data/spec/lib/puppet/face/version_matching.rb +12 -0
  1473. data/spec/lib/puppet/indirector/indirector_testing/json.rb +6 -0
  1474. data/spec/lib/puppet/indirector/indirector_testing/memory.rb +7 -0
  1475. data/spec/lib/puppet/indirector/indirector_testing/msgpack.rb +6 -0
  1476. data/spec/lib/puppet/indirector_testing.rb +37 -0
  1477. data/spec/lib/puppet_spec/compiler.rb +36 -0
  1478. data/spec/lib/puppet_spec/database.rb +29 -0
  1479. data/spec/lib/puppet_spec/files.rb +60 -0
  1480. data/spec/lib/puppet_spec/fixtures.rb +28 -0
  1481. data/spec/lib/puppet_spec/matchers.rb +120 -0
  1482. data/spec/lib/puppet_spec/modules.rb +26 -0
  1483. data/spec/lib/puppet_spec/pops.rb +16 -0
  1484. data/spec/lib/puppet_spec/scope.rb +14 -0
  1485. data/spec/lib/puppet_spec/settings.rb +15 -0
  1486. data/spec/lib/puppet_spec/verbose.rb +9 -0
  1487. data/spec/monkey_patches/alias_should_to_must.rb +21 -0
  1488. data/spec/shared_behaviours/all_parsedfile_providers.rb +21 -0
  1489. data/spec/shared_behaviours/an_indirector_face.rb +6 -0
  1490. data/spec/shared_behaviours/documentation_on_faces.rb +263 -0
  1491. data/spec/shared_behaviours/file_server_terminus.rb +41 -0
  1492. data/spec/shared_behaviours/file_serving.rb +75 -0
  1493. data/spec/shared_behaviours/file_serving_model.rb +72 -0
  1494. data/spec/shared_behaviours/memory_terminus.rb +28 -0
  1495. data/spec/shared_behaviours/path_parameters.rb +160 -0
  1496. data/spec/shared_behaviours/store_configs_terminus.rb +21 -0
  1497. data/spec/shared_behaviours/things_that_declare_options.rb +262 -0
  1498. data/spec/shared_contexts/platform.rb +52 -0
  1499. data/spec/spec_helper.rb +193 -0
  1500. data/spec/unit/agent/disabler_spec.rb +64 -0
  1501. data/spec/unit/agent/locker_spec.rb +100 -0
  1502. data/spec/unit/agent_spec.rb +327 -0
  1503. data/spec/unit/application/agent_spec.rb +656 -0
  1504. data/spec/unit/application/apply_spec.rb +455 -0
  1505. data/spec/unit/application/cert_spec.rb +220 -0
  1506. data/spec/unit/application/certificate_spec.rb +22 -0
  1507. data/spec/unit/application/config_spec.rb +9 -0
  1508. data/spec/unit/application/describe_spec.rb +79 -0
  1509. data/spec/unit/application/device_spec.rb +415 -0
  1510. data/spec/unit/application/doc_spec.rb +333 -0
  1511. data/spec/unit/application/face_base_spec.rb +408 -0
  1512. data/spec/unit/application/facts_spec.rb +32 -0
  1513. data/spec/unit/application/filebucket_spec.rb +207 -0
  1514. data/spec/unit/application/indirection_base_spec.rb +44 -0
  1515. data/spec/unit/application/inspect_spec.rb +285 -0
  1516. data/spec/unit/application/kick_spec.rb +296 -0
  1517. data/spec/unit/application/master_spec.rb +355 -0
  1518. data/spec/unit/application/queue_spec.rb +168 -0
  1519. data/spec/unit/application/resource_spec.rb +214 -0
  1520. data/spec/unit/application/secret_agent_spec.rb +34 -0
  1521. data/spec/unit/application_spec.rb +645 -0
  1522. data/spec/unit/configurer/downloader_spec.rb +210 -0
  1523. data/spec/unit/configurer/fact_handler_spec.rb +89 -0
  1524. data/spec/unit/configurer/plugin_handler_spec.rb +42 -0
  1525. data/spec/unit/configurer_spec.rb +655 -0
  1526. data/spec/unit/confine/exists_spec.rb +80 -0
  1527. data/spec/unit/confine/false_spec.rb +52 -0
  1528. data/spec/unit/confine/feature_spec.rb +57 -0
  1529. data/spec/unit/confine/true_spec.rb +52 -0
  1530. data/spec/unit/confine/variable_spec.rb +106 -0
  1531. data/spec/unit/confine_collection_spec.rb +133 -0
  1532. data/spec/unit/confine_spec.rb +77 -0
  1533. data/spec/unit/confiner_spec.rb +62 -0
  1534. data/spec/unit/context/trusted_information_spec.rb +124 -0
  1535. data/spec/unit/context_spec.rb +74 -0
  1536. data/spec/unit/daemon_spec.rb +255 -0
  1537. data/spec/unit/data_binding_spec.rb +11 -0
  1538. data/spec/unit/defaults_spec.rb +44 -0
  1539. data/spec/unit/dsl/resource_api_spec.rb +180 -0
  1540. data/spec/unit/dsl/resource_type_api_spec.rb +53 -0
  1541. data/spec/unit/environments_spec.rb +126 -0
  1542. data/spec/unit/face/catalog_spec.rb +7 -0
  1543. data/spec/unit/face/certificate_request_spec.rb +7 -0
  1544. data/spec/unit/face/certificate_revocation_list_spec.rb +7 -0
  1545. data/spec/unit/face/certificate_spec.rb +223 -0
  1546. data/spec/unit/face/config_spec.rb +46 -0
  1547. data/spec/unit/face/facts_spec.rb +23 -0
  1548. data/spec/unit/face/file_spec.rb +12 -0
  1549. data/spec/unit/face/help_spec.rb +144 -0
  1550. data/spec/unit/face/instrumentation_data_spec.rb +7 -0
  1551. data/spec/unit/face/instrumentation_listener_spec.rb +38 -0
  1552. data/spec/unit/face/instrumentation_probe_spec.rb +21 -0
  1553. data/spec/unit/face/key_spec.rb +7 -0
  1554. data/spec/unit/face/module/build_spec.rb +69 -0
  1555. data/spec/unit/face/module/install_spec.rb +113 -0
  1556. data/spec/unit/face/module/list_spec.rb +195 -0
  1557. data/spec/unit/face/module/search_spec.rb +201 -0
  1558. data/spec/unit/face/module/uninstall_spec.rb +70 -0
  1559. data/spec/unit/face/module/upgrade_spec.rb +26 -0
  1560. data/spec/unit/face/module_spec.rb +3 -0
  1561. data/spec/unit/face/node_spec.rb +272 -0
  1562. data/spec/unit/face/parser_spec.rb +70 -0
  1563. data/spec/unit/face/plugin_spec.rb +10 -0
  1564. data/spec/unit/face/report_spec.rb +7 -0
  1565. data/spec/unit/face/resource_spec.rb +7 -0
  1566. data/spec/unit/face/resource_type_spec.rb +7 -0
  1567. data/spec/unit/face/secret_agent_spec.rb +27 -0
  1568. data/spec/unit/face_spec.rb +1 -0
  1569. data/spec/unit/file_bucket/dipper_spec.rb +170 -0
  1570. data/spec/unit/file_bucket/file_spec.rb +128 -0
  1571. data/spec/unit/file_serving/base_spec.rb +168 -0
  1572. data/spec/unit/file_serving/configuration/parser_spec.rb +186 -0
  1573. data/spec/unit/file_serving/configuration_spec.rb +231 -0
  1574. data/spec/unit/file_serving/content_spec.rb +112 -0
  1575. data/spec/unit/file_serving/fileset_spec.rb +354 -0
  1576. data/spec/unit/file_serving/metadata_spec.rb +432 -0
  1577. data/spec/unit/file_serving/mount/file_spec.rb +189 -0
  1578. data/spec/unit/file_serving/mount/modules_spec.rb +70 -0
  1579. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +73 -0
  1580. data/spec/unit/file_serving/mount/plugins_spec.rb +73 -0
  1581. data/spec/unit/file_serving/mount_spec.rb +31 -0
  1582. data/spec/unit/file_serving/terminus_helper_spec.rb +94 -0
  1583. data/spec/unit/file_serving/terminus_selector_spec.rb +58 -0
  1584. data/spec/unit/file_system/path_pattern_spec.rb +138 -0
  1585. data/spec/unit/file_system/tempfile_spec.rb +48 -0
  1586. data/spec/unit/file_system_spec.rb +508 -0
  1587. data/spec/unit/forge/errors_spec.rb +82 -0
  1588. data/spec/unit/forge/repository_spec.rb +121 -0
  1589. data/spec/unit/forge_spec.rb +60 -0
  1590. data/spec/unit/graph/key_spec.rb +41 -0
  1591. data/spec/unit/graph/rb_tree_map_spec.rb +572 -0
  1592. data/spec/unit/graph/relationship_graph_spec.rb +387 -0
  1593. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  1594. data/spec/unit/graph/simple_graph.rb +721 -0
  1595. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  1596. data/spec/unit/hiera/backend/puppet_backend_spec.rb +148 -0
  1597. data/spec/unit/hiera/scope_spec.rb +89 -0
  1598. data/spec/unit/hiera_puppet_spec.rb +118 -0
  1599. data/spec/unit/indirector/active_record_spec.rb +75 -0
  1600. data/spec/unit/indirector/catalog/active_record_spec.rb +107 -0
  1601. data/spec/unit/indirector/catalog/compiler_spec.rb +253 -0
  1602. data/spec/unit/indirector/catalog/json_spec.rb +12 -0
  1603. data/spec/unit/indirector/catalog/msgpack_spec.rb +12 -0
  1604. data/spec/unit/indirector/catalog/queue_spec.rb +19 -0
  1605. data/spec/unit/indirector/catalog/rest_spec.rb +10 -0
  1606. data/spec/unit/indirector/catalog/static_compiler_spec.rb +225 -0
  1607. data/spec/unit/indirector/catalog/store_configs_spec.rb +17 -0
  1608. data/spec/unit/indirector/catalog/yaml_spec.rb +24 -0
  1609. data/spec/unit/indirector/certificate/ca_spec.rb +23 -0
  1610. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +33 -0
  1611. data/spec/unit/indirector/certificate/file_spec.rb +23 -0
  1612. data/spec/unit/indirector/certificate/rest_spec.rb +63 -0
  1613. data/spec/unit/indirector/certificate_request/ca_spec.rb +57 -0
  1614. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +33 -0
  1615. data/spec/unit/indirector/certificate_request/file_spec.rb +15 -0
  1616. data/spec/unit/indirector/certificate_request/rest_spec.rb +26 -0
  1617. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +16 -0
  1618. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +33 -0
  1619. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +17 -0
  1620. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +26 -0
  1621. data/spec/unit/indirector/certificate_status/file_spec.rb +191 -0
  1622. data/spec/unit/indirector/certificate_status/rest_spec.rb +18 -0
  1623. data/spec/unit/indirector/code_spec.rb +31 -0
  1624. data/spec/unit/indirector/data_binding/hiera_spec.rb +114 -0
  1625. data/spec/unit/indirector/data_binding/none_spec.rb +28 -0
  1626. data/spec/unit/indirector/direct_file_server_spec.rb +80 -0
  1627. data/spec/unit/indirector/envelope_spec.rb +33 -0
  1628. data/spec/unit/indirector/exec_spec.rb +58 -0
  1629. data/spec/unit/indirector/face_spec.rb +70 -0
  1630. data/spec/unit/indirector/facts/active_record_spec.rb +113 -0
  1631. data/spec/unit/indirector/facts/couch_spec.rb +102 -0
  1632. data/spec/unit/indirector/facts/facter_spec.rb +197 -0
  1633. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +175 -0
  1634. data/spec/unit/indirector/facts/inventory_service_spec.rb +21 -0
  1635. data/spec/unit/indirector/facts/network_device_spec.rb +88 -0
  1636. data/spec/unit/indirector/facts/rest_spec.rb +10 -0
  1637. data/spec/unit/indirector/facts/store_configs_spec.rb +17 -0
  1638. data/spec/unit/indirector/facts/yaml_spec.rb +239 -0
  1639. data/spec/unit/indirector/file_bucket_file/file_spec.rb +285 -0
  1640. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +10 -0
  1641. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +29 -0
  1642. data/spec/unit/indirector/file_content/file_server_spec.rb +14 -0
  1643. data/spec/unit/indirector/file_content/file_spec.rb +14 -0
  1644. data/spec/unit/indirector/file_content/rest_spec.rb +14 -0
  1645. data/spec/unit/indirector/file_content/selector_spec.rb +10 -0
  1646. data/spec/unit/indirector/file_metadata/file_server_spec.rb +14 -0
  1647. data/spec/unit/indirector/file_metadata/file_spec.rb +50 -0
  1648. data/spec/unit/indirector/file_metadata/rest_spec.rb +13 -0
  1649. data/spec/unit/indirector/file_metadata/selector_spec.rb +11 -0
  1650. data/spec/unit/indirector/file_server_spec.rb +263 -0
  1651. data/spec/unit/indirector/indirection_spec.rb +875 -0
  1652. data/spec/unit/indirector/instrumentation_data/local_spec.rb +52 -0
  1653. data/spec/unit/indirector/instrumentation_data/rest_spec.rb +11 -0
  1654. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +65 -0
  1655. data/spec/unit/indirector/instrumentation_listener/rest_spec.rb +11 -0
  1656. data/spec/unit/indirector/instrumentation_probe/local_spec.rb +65 -0
  1657. data/spec/unit/indirector/instrumentation_probe/rest_spec.rb +11 -0
  1658. data/spec/unit/indirector/json_spec.rb +193 -0
  1659. data/spec/unit/indirector/key/ca_spec.rb +23 -0
  1660. data/spec/unit/indirector/key/disabled_ca_spec.rb +33 -0
  1661. data/spec/unit/indirector/key/file_spec.rb +97 -0
  1662. data/spec/unit/indirector/ldap_spec.rb +137 -0
  1663. data/spec/unit/indirector/memory_spec.rb +27 -0
  1664. data/spec/unit/indirector/msgpack_spec.rb +191 -0
  1665. data/spec/unit/indirector/node/active_record_spec.rb +48 -0
  1666. data/spec/unit/indirector/node/exec_spec.rb +76 -0
  1667. data/spec/unit/indirector/node/ldap_spec.rb +441 -0
  1668. data/spec/unit/indirector/node/memory_spec.rb +18 -0
  1669. data/spec/unit/indirector/node/msgpack_spec.rb +24 -0
  1670. data/spec/unit/indirector/node/plain_spec.rb +26 -0
  1671. data/spec/unit/indirector/node/rest_spec.rb +12 -0
  1672. data/spec/unit/indirector/node/store_configs_spec.rb +17 -0
  1673. data/spec/unit/indirector/node/yaml_spec.rb +24 -0
  1674. data/spec/unit/indirector/none_spec.rb +33 -0
  1675. data/spec/unit/indirector/plain_spec.rb +27 -0
  1676. data/spec/unit/indirector/queue_spec.rb +115 -0
  1677. data/spec/unit/indirector/report/msgpack_spec.rb +28 -0
  1678. data/spec/unit/indirector/report/processor_spec.rb +100 -0
  1679. data/spec/unit/indirector/report/rest_spec.rb +67 -0
  1680. data/spec/unit/indirector/report/yaml_spec.rb +28 -0
  1681. data/spec/unit/indirector/request_spec.rb +605 -0
  1682. data/spec/unit/indirector/resource/active_record_spec.rb +166 -0
  1683. data/spec/unit/indirector/resource/ral_spec.rb +142 -0
  1684. data/spec/unit/indirector/resource/rest_spec.rb +10 -0
  1685. data/spec/unit/indirector/resource/store_configs_spec.rb +23 -0
  1686. data/spec/unit/indirector/resource_type/parser_spec.rb +249 -0
  1687. data/spec/unit/indirector/resource_type/rest_spec.rb +14 -0
  1688. data/spec/unit/indirector/rest_spec.rb +537 -0
  1689. data/spec/unit/indirector/run/local_spec.rb +21 -0
  1690. data/spec/unit/indirector/run/rest_spec.rb +10 -0
  1691. data/spec/unit/indirector/ssl_file_spec.rb +328 -0
  1692. data/spec/unit/indirector/status/local_spec.rb +11 -0
  1693. data/spec/unit/indirector/status/rest_spec.rb +10 -0
  1694. data/spec/unit/indirector/store_configs_spec.rb +8 -0
  1695. data/spec/unit/indirector/terminus_spec.rb +264 -0
  1696. data/spec/unit/indirector/yaml_spec.rb +166 -0
  1697. data/spec/unit/indirector_spec.rb +150 -0
  1698. data/spec/unit/interface/action_builder_spec.rb +217 -0
  1699. data/spec/unit/interface/action_manager_spec.rb +280 -0
  1700. data/spec/unit/interface/action_spec.rb +650 -0
  1701. data/spec/unit/interface/documentation_spec.rb +33 -0
  1702. data/spec/unit/interface/face_collection_spec.rb +200 -0
  1703. data/spec/unit/interface/option_builder_spec.rb +86 -0
  1704. data/spec/unit/interface/option_spec.rb +156 -0
  1705. data/spec/unit/interface_spec.rb +271 -0
  1706. data/spec/unit/man_spec.rb +32 -0
  1707. data/spec/unit/module_spec.rb +710 -0
  1708. data/spec/unit/module_tool/application_spec.rb +25 -0
  1709. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  1710. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  1711. data/spec/unit/module_tool/applications/installer_spec.rb +331 -0
  1712. data/spec/unit/module_tool/applications/searcher_spec.rb +38 -0
  1713. data/spec/unit/module_tool/applications/uninstaller_spec.rb +207 -0
  1714. data/spec/unit/module_tool/applications/unpacker_spec.rb +34 -0
  1715. data/spec/unit/module_tool/applications/upgrader_spec.rb +34 -0
  1716. data/spec/unit/module_tool/install_directory_spec.rb +70 -0
  1717. data/spec/unit/module_tool/metadata_spec.rb +24 -0
  1718. data/spec/unit/module_tool/tar/gnu_spec.rb +22 -0
  1719. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  1720. data/spec/unit/module_tool/tar/solaris_spec.rb +22 -0
  1721. data/spec/unit/module_tool/tar_spec.rb +45 -0
  1722. data/spec/unit/module_tool_spec.rb +204 -0
  1723. data/spec/unit/network/auth_config_parser_spec.rb +101 -0
  1724. data/spec/unit/network/authconfig_spec.rb +109 -0
  1725. data/spec/unit/network/authentication_spec.rb +100 -0
  1726. data/spec/unit/network/authorization_spec.rb +34 -0
  1727. data/spec/unit/network/authstore_spec.rb +424 -0
  1728. data/spec/unit/network/format_handler_spec.rb +94 -0
  1729. data/spec/unit/network/format_spec.rb +197 -0
  1730. data/spec/unit/network/format_support_spec.rb +199 -0
  1731. data/spec/unit/network/formats_spec.rb +422 -0
  1732. data/spec/unit/network/http/api/v1_spec.rb +519 -0
  1733. data/spec/unit/network/http/api/v2/authorization_spec.rb +57 -0
  1734. data/spec/unit/network/http/api/v2/environments_spec.rb +42 -0
  1735. data/spec/unit/network/http/api/v2_spec.rb +14 -0
  1736. data/spec/unit/network/http/compression_spec.rb +196 -0
  1737. data/spec/unit/network/http/connection_spec.rb +271 -0
  1738. data/spec/unit/network/http/error_spec.rb +30 -0
  1739. data/spec/unit/network/http/handler_spec.rb +222 -0
  1740. data/spec/unit/network/http/rack/rest_spec.rb +316 -0
  1741. data/spec/unit/network/http/rack_spec.rb +43 -0
  1742. data/spec/unit/network/http/route_spec.rb +75 -0
  1743. data/spec/unit/network/http/webrick/rest_spec.rb +231 -0
  1744. data/spec/unit/network/http/webrick_spec.rb +271 -0
  1745. data/spec/unit/network/http_pool_spec.rb +74 -0
  1746. data/spec/unit/network/resolver_spec.rb +207 -0
  1747. data/spec/unit/network/rights_spec.rb +438 -0
  1748. data/spec/unit/network/server_spec.rb +95 -0
  1749. data/spec/unit/node/environment_spec.rb +466 -0
  1750. data/spec/unit/node/facts_spec.rb +175 -0
  1751. data/spec/unit/node_spec.rb +323 -0
  1752. data/spec/unit/other/selinux_spec.rb +99 -0
  1753. data/spec/unit/parameter/boolean_spec.rb +35 -0
  1754. data/spec/unit/parameter/package_options_spec.rb +44 -0
  1755. data/spec/unit/parameter/path_spec.rb +24 -0
  1756. data/spec/unit/parameter/value_collection_spec.rb +166 -0
  1757. data/spec/unit/parameter/value_spec.rb +87 -0
  1758. data/spec/unit/parameter_spec.rb +193 -0
  1759. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +160 -0
  1760. data/spec/unit/parser/ast/astarray_spec.rb +56 -0
  1761. data/spec/unit/parser/ast/asthash_spec.rb +98 -0
  1762. data/spec/unit/parser/ast/block_expression_spec.rb +67 -0
  1763. data/spec/unit/parser/ast/boolean_operator_spec.rb +54 -0
  1764. data/spec/unit/parser/ast/casestatement_spec.rb +168 -0
  1765. data/spec/unit/parser/ast/collection_spec.rb +70 -0
  1766. data/spec/unit/parser/ast/collexpr_spec.rb +120 -0
  1767. data/spec/unit/parser/ast/comparison_operator_spec.rb +118 -0
  1768. data/spec/unit/parser/ast/definition_spec.rb +21 -0
  1769. data/spec/unit/parser/ast/function_spec.rb +92 -0
  1770. data/spec/unit/parser/ast/hostclass_spec.rb +72 -0
  1771. data/spec/unit/parser/ast/ifstatement_spec.rb +77 -0
  1772. data/spec/unit/parser/ast/in_operator_spec.rb +61 -0
  1773. data/spec/unit/parser/ast/leaf_spec.rb +511 -0
  1774. data/spec/unit/parser/ast/match_operator_spec.rb +51 -0
  1775. data/spec/unit/parser/ast/minus_spec.rb +37 -0
  1776. data/spec/unit/parser/ast/node_spec.rb +30 -0
  1777. data/spec/unit/parser/ast/nop_spec.rb +19 -0
  1778. data/spec/unit/parser/ast/not_spec.rb +31 -0
  1779. data/spec/unit/parser/ast/relationship_spec.rb +87 -0
  1780. data/spec/unit/parser/ast/resource_defaults_spec.rb +21 -0
  1781. data/spec/unit/parser/ast/resource_override_spec.rb +50 -0
  1782. data/spec/unit/parser/ast/resource_reference_spec.rb +56 -0
  1783. data/spec/unit/parser/ast/resource_spec.rb +183 -0
  1784. data/spec/unit/parser/ast/resourceparam_spec.rb +51 -0
  1785. data/spec/unit/parser/ast/selector_spec.rb +88 -0
  1786. data/spec/unit/parser/ast/vardef_spec.rb +68 -0
  1787. data/spec/unit/parser/ast_spec.rb +76 -0
  1788. data/spec/unit/parser/collector_spec.rb +438 -0
  1789. data/spec/unit/parser/compiler_spec.rb +903 -0
  1790. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  1791. data/spec/unit/parser/files_spec.rb +149 -0
  1792. data/spec/unit/parser/functions/contain_spec.rb +185 -0
  1793. data/spec/unit/parser/functions/create_resources_spec.rb +206 -0
  1794. data/spec/unit/parser/functions/defined_spec.rb +114 -0
  1795. data/spec/unit/parser/functions/epp_spec.rb +88 -0
  1796. data/spec/unit/parser/functions/extlookup_spec.rb +102 -0
  1797. data/spec/unit/parser/functions/fail_spec.rb +28 -0
  1798. data/spec/unit/parser/functions/file_spec.rb +55 -0
  1799. data/spec/unit/parser/functions/fqdn_rand_spec.rb +46 -0
  1800. data/spec/unit/parser/functions/generate_spec.rb +132 -0
  1801. data/spec/unit/parser/functions/hiera_array_spec.rb +26 -0
  1802. data/spec/unit/parser/functions/hiera_hash_spec.rb +22 -0
  1803. data/spec/unit/parser/functions/hiera_include_spec.rb +39 -0
  1804. data/spec/unit/parser/functions/hiera_spec.rb +22 -0
  1805. data/spec/unit/parser/functions/include_spec.rb +51 -0
  1806. data/spec/unit/parser/functions/inline_epp_spec.rb +82 -0
  1807. data/spec/unit/parser/functions/inline_template_spec.rb +34 -0
  1808. data/spec/unit/parser/functions/lookup_spec.rb +146 -0
  1809. data/spec/unit/parser/functions/realize_spec.rb +53 -0
  1810. data/spec/unit/parser/functions/regsubst_spec.rb +196 -0
  1811. data/spec/unit/parser/functions/require_spec.rb +61 -0
  1812. data/spec/unit/parser/functions/search_spec.rb +23 -0
  1813. data/spec/unit/parser/functions/shellquote_spec.rb +67 -0
  1814. data/spec/unit/parser/functions/split_spec.rb +53 -0
  1815. data/spec/unit/parser/functions/sprintf_spec.rb +51 -0
  1816. data/spec/unit/parser/functions/tag_spec.rb +28 -0
  1817. data/spec/unit/parser/functions/template_spec.rb +89 -0
  1818. data/spec/unit/parser/functions/versioncmp_spec.rb +33 -0
  1819. data/spec/unit/parser/functions_spec.rb +135 -0
  1820. data/spec/unit/parser/lexer_spec.rb +868 -0
  1821. data/spec/unit/parser/methods/each_spec.rb +91 -0
  1822. data/spec/unit/parser/methods/filter_spec.rb +135 -0
  1823. data/spec/unit/parser/methods/map_spec.rb +184 -0
  1824. data/spec/unit/parser/methods/reduce_spec.rb +78 -0
  1825. data/spec/unit/parser/methods/shared.rb +45 -0
  1826. data/spec/unit/parser/methods/slice_spec.rb +135 -0
  1827. data/spec/unit/parser/parser_spec.rb +535 -0
  1828. data/spec/unit/parser/relationship_spec.rb +93 -0
  1829. data/spec/unit/parser/resource/param_spec.rb +44 -0
  1830. data/spec/unit/parser/resource_spec.rb +586 -0
  1831. data/spec/unit/parser/scope_spec.rb +661 -0
  1832. data/spec/unit/parser/templatewrapper_spec.rb +118 -0
  1833. data/spec/unit/parser/type_loader_spec.rb +225 -0
  1834. data/spec/unit/pops/adaptable_spec.rb +141 -0
  1835. data/spec/unit/pops/benchmark_spec.rb +142 -0
  1836. data/spec/unit/pops/binder/binder_spec.rb +43 -0
  1837. data/spec/unit/pops/binder/bindings_checker_spec.rb +155 -0
  1838. data/spec/unit/pops/binder/bindings_composer_spec.rb +64 -0
  1839. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  1840. data/spec/unit/pops/binder/config/binder_config_spec.rb +35 -0
  1841. data/spec/unit/pops/binder/injector_spec.rb +784 -0
  1842. data/spec/unit/pops/containment_spec.rb +26 -0
  1843. data/spec/unit/pops/evaluator/access_ops_spec.rb +376 -0
  1844. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +77 -0
  1845. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +103 -0
  1846. data/spec/unit/pops/evaluator/collections_ops_spec.rb +111 -0
  1847. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +256 -0
  1848. data/spec/unit/pops/evaluator/conditionals_spec.rb +190 -0
  1849. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +1045 -0
  1850. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +75 -0
  1851. data/spec/unit/pops/evaluator/logical_ops_spec.rb +90 -0
  1852. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +44 -0
  1853. data/spec/unit/pops/evaluator/variables_spec.rb +194 -0
  1854. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  1855. data/spec/unit/pops/factory_spec.rb +306 -0
  1856. data/spec/unit/pops/issues_spec.rb +26 -0
  1857. data/spec/unit/pops/label_provider_spec.rb +42 -0
  1858. data/spec/unit/pops/model/ast_transformer_spec.rb +76 -0
  1859. data/spec/unit/pops/model/model_spec.rb +37 -0
  1860. data/spec/unit/pops/parser/epp_parser_spec.rb +86 -0
  1861. data/spec/unit/pops/parser/evaluating_parser_spec.rb +90 -0
  1862. data/spec/unit/pops/parser/lexer2_spec.rb +428 -0
  1863. data/spec/unit/pops/parser/lexer_spec.rb +840 -0
  1864. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +273 -0
  1865. data/spec/unit/pops/parser/parse_calls_spec.rb +101 -0
  1866. data/spec/unit/pops/parser/parse_conditionals_spec.rb +150 -0
  1867. data/spec/unit/pops/parser/parse_containers_spec.rb +206 -0
  1868. data/spec/unit/pops/parser/parse_heredoc_spec.rb +73 -0
  1869. data/spec/unit/pops/parser/parse_resource_spec.rb +242 -0
  1870. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  1871. data/spec/unit/pops/parser/parser_spec.rb +17 -0
  1872. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +23 -0
  1873. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  1874. data/spec/unit/pops/transformer/transform_calls_spec.rb +115 -0
  1875. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +123 -0
  1876. data/spec/unit/pops/transformer/transform_containers_spec.rb +190 -0
  1877. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  1878. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  1879. data/spec/unit/pops/types/enumeration_spec.rb +50 -0
  1880. data/spec/unit/pops/types/type_calculator_spec.rb +1459 -0
  1881. data/spec/unit/pops/types/type_factory_spec.rb +169 -0
  1882. data/spec/unit/pops/types/type_parser_spec.rb +197 -0
  1883. data/spec/unit/pops/validator/validator_spec.rb +68 -0
  1884. data/spec/unit/pops/visitor_spec.rb +94 -0
  1885. data/spec/unit/property/boolean_spec.rb +24 -0
  1886. data/spec/unit/property/ensure_spec.rb +12 -0
  1887. data/spec/unit/property/keyvalue_spec.rb +170 -0
  1888. data/spec/unit/property/list_spec.rb +165 -0
  1889. data/spec/unit/property/ordered_list_spec.rb +63 -0
  1890. data/spec/unit/property_spec.rb +541 -0
  1891. data/spec/unit/provider/README.markdown +4 -0
  1892. data/spec/unit/provider/aixobject_spec.rb +101 -0
  1893. data/spec/unit/provider/augeas/augeas_spec.rb +897 -0
  1894. data/spec/unit/provider/cisco_spec.rb +15 -0
  1895. data/spec/unit/provider/command_spec.rb +62 -0
  1896. data/spec/unit/provider/cron/crontab_spec.rb +206 -0
  1897. data/spec/unit/provider/cron/parsed_spec.rb +321 -0
  1898. data/spec/unit/provider/exec/posix_spec.rb +211 -0
  1899. data/spec/unit/provider/exec/shell_spec.rb +53 -0
  1900. data/spec/unit/provider/exec/windows_spec.rb +107 -0
  1901. data/spec/unit/provider/exec_spec.rb +35 -0
  1902. data/spec/unit/provider/file/posix_spec.rb +232 -0
  1903. data/spec/unit/provider/file/windows_spec.rb +154 -0
  1904. data/spec/unit/provider/group/groupadd_spec.rb +76 -0
  1905. data/spec/unit/provider/group/ldap_spec.rb +101 -0
  1906. data/spec/unit/provider/group/pw_spec.rb +81 -0
  1907. data/spec/unit/provider/group/windows_adsi_spec.rb +168 -0
  1908. data/spec/unit/provider/host/parsed_spec.rb +197 -0
  1909. data/spec/unit/provider/interface/cisco_spec.rb +57 -0
  1910. data/spec/unit/provider/ldap_spec.rb +244 -0
  1911. data/spec/unit/provider/macauthorization_spec.rb +152 -0
  1912. data/spec/unit/provider/mcx/mcxcontent_spec.rb +192 -0
  1913. data/spec/unit/provider/mount/parsed_spec.rb +283 -0
  1914. data/spec/unit/provider/mount_spec.rb +165 -0
  1915. data/spec/unit/provider/naginator_spec.rb +65 -0
  1916. data/spec/unit/provider/nameservice/directoryservice_spec.rb +189 -0
  1917. data/spec/unit/provider/nameservice_spec.rb +304 -0
  1918. data/spec/unit/provider/network_device_spec.rb +152 -0
  1919. data/spec/unit/provider/package/aix_spec.rb +107 -0
  1920. data/spec/unit/provider/package/appdmg_spec.rb +42 -0
  1921. data/spec/unit/provider/package/apt_spec.rb +146 -0
  1922. data/spec/unit/provider/package/aptitude_spec.rb +45 -0
  1923. data/spec/unit/provider/package/aptrpm_spec.rb +45 -0
  1924. data/spec/unit/provider/package/dpkg_spec.rb +281 -0
  1925. data/spec/unit/provider/package/freebsd_spec.rb +54 -0
  1926. data/spec/unit/provider/package/gem_spec.rb +162 -0
  1927. data/spec/unit/provider/package/hpux_spec.rb +51 -0
  1928. data/spec/unit/provider/package/macports_spec.rb +140 -0
  1929. data/spec/unit/provider/package/msi_spec.rb +229 -0
  1930. data/spec/unit/provider/package/nim_spec.rb +250 -0
  1931. data/spec/unit/provider/package/openbsd_spec.rb +312 -0
  1932. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  1933. data/spec/unit/provider/package/pacman_spec.rb +295 -0
  1934. data/spec/unit/provider/package/pip_spec.rb +247 -0
  1935. data/spec/unit/provider/package/pkg_spec.rb +255 -0
  1936. data/spec/unit/provider/package/pkgdmg_spec.rb +144 -0
  1937. data/spec/unit/provider/package/pkgin_spec.rb +178 -0
  1938. data/spec/unit/provider/package/pkgutil_spec.rb +235 -0
  1939. data/spec/unit/provider/package/portage_spec.rb +65 -0
  1940. data/spec/unit/provider/package/rpm_spec.rb +367 -0
  1941. data/spec/unit/provider/package/sun_spec.rb +114 -0
  1942. data/spec/unit/provider/package/up2date_spec.rb +24 -0
  1943. data/spec/unit/provider/package/urpmi.rb +80 -0
  1944. data/spec/unit/provider/package/windows/exe_package_spec.rb +99 -0
  1945. data/spec/unit/provider/package/windows/msi_package_spec.rb +115 -0
  1946. data/spec/unit/provider/package/windows/package_spec.rb +126 -0
  1947. data/spec/unit/provider/package/windows_spec.rb +251 -0
  1948. data/spec/unit/provider/package/yum_spec.rb +195 -0
  1949. data/spec/unit/provider/package/zypper_spec.rb +141 -0
  1950. data/spec/unit/provider/parsedfile_spec.rb +228 -0
  1951. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +1574 -0
  1952. data/spec/unit/provider/selboolean_spec.rb +36 -0
  1953. data/spec/unit/provider/selmodule-example.pp +0 -0
  1954. data/spec/unit/provider/selmodule_spec.rb +73 -0
  1955. data/spec/unit/provider/service/base_spec.rb +77 -0
  1956. data/spec/unit/provider/service/daemontools_spec.rb +171 -0
  1957. data/spec/unit/provider/service/debian_spec.rb +116 -0
  1958. data/spec/unit/provider/service/freebsd_spec.rb +75 -0
  1959. data/spec/unit/provider/service/gentoo_spec.rb +241 -0
  1960. data/spec/unit/provider/service/init_spec.rb +212 -0
  1961. data/spec/unit/provider/service/launchd_spec.rb +290 -0
  1962. data/spec/unit/provider/service/openbsd_spec.rb +125 -0
  1963. data/spec/unit/provider/service/openrc_spec.rb +225 -0
  1964. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  1965. data/spec/unit/provider/service/redhat_spec.rb +148 -0
  1966. data/spec/unit/provider/service/runit_spec.rb +145 -0
  1967. data/spec/unit/provider/service/smf_spec.rb +153 -0
  1968. data/spec/unit/provider/service/src_spec.rb +173 -0
  1969. data/spec/unit/provider/service/systemd_spec.rb +162 -0
  1970. data/spec/unit/provider/service/upstart_spec.rb +522 -0
  1971. data/spec/unit/provider/service/windows_spec.rb +183 -0
  1972. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +255 -0
  1973. data/spec/unit/provider/sshkey/parsed_spec.rb +71 -0
  1974. data/spec/unit/provider/user/aix_spec.rb +162 -0
  1975. data/spec/unit/provider/user/directoryservice_spec.rb +1063 -0
  1976. data/spec/unit/provider/user/hpux_spec.rb +52 -0
  1977. data/spec/unit/provider/user/ldap_spec.rb +289 -0
  1978. data/spec/unit/provider/user/pw_spec.rb +214 -0
  1979. data/spec/unit/provider/user/user_role_add_spec.rb +335 -0
  1980. data/spec/unit/provider/user/useradd_spec.rb +430 -0
  1981. data/spec/unit/provider/user/windows_adsi_spec.rb +173 -0
  1982. data/spec/unit/provider/vlan/cisco_spec.rb +55 -0
  1983. data/spec/unit/provider/yumrepo/inifile_spec.rb +105 -0
  1984. data/spec/unit/provider/zfs/zfs_spec.rb +106 -0
  1985. data/spec/unit/provider/zone/solaris_spec.rb +195 -0
  1986. data/spec/unit/provider/zpool/zpool_spec.rb +214 -0
  1987. data/spec/unit/provider_spec.rb +714 -0
  1988. data/spec/unit/puppet_spec.rb +41 -0
  1989. data/spec/unit/rails/host_spec.rb +162 -0
  1990. data/spec/unit/rails/param_value_spec.rb +46 -0
  1991. data/spec/unit/rails/resource_spec.rb +115 -0
  1992. data/spec/unit/rails_spec.rb +244 -0
  1993. data/spec/unit/relationship_spec.rb +228 -0
  1994. data/spec/unit/reports/http_spec.rb +100 -0
  1995. data/spec/unit/reports/rrdgraph_spec.rb +29 -0
  1996. data/spec/unit/reports/store_spec.rb +76 -0
  1997. data/spec/unit/reports/tagmail_spec.rb +218 -0
  1998. data/spec/unit/reports_spec.rb +60 -0
  1999. data/spec/unit/resource/catalog_spec.rb +973 -0
  2000. data/spec/unit/resource/status_spec.rb +220 -0
  2001. data/spec/unit/resource/type_collection_helper_spec.rb +24 -0
  2002. data/spec/unit/resource/type_collection_spec.rb +417 -0
  2003. data/spec/unit/resource/type_spec.rb +777 -0
  2004. data/spec/unit/resource_spec.rb +979 -0
  2005. data/spec/unit/run_spec.rb +175 -0
  2006. data/spec/unit/scheduler/job_spec.rb +79 -0
  2007. data/spec/unit/scheduler/scheduler_spec.rb +116 -0
  2008. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  2009. data/spec/unit/semver_spec.rb +303 -0
  2010. data/spec/unit/settings/autosign_setting_spec.rb +103 -0
  2011. data/spec/unit/settings/config_file_spec.rb +153 -0
  2012. data/spec/unit/settings/directory_setting_spec.rb +32 -0
  2013. data/spec/unit/settings/duration_setting_spec.rb +45 -0
  2014. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  2015. data/spec/unit/settings/file_setting_spec.rb +297 -0
  2016. data/spec/unit/settings/ini_file_spec.rb +184 -0
  2017. data/spec/unit/settings/path_setting_spec.rb +30 -0
  2018. data/spec/unit/settings/priority_setting_spec.rb +66 -0
  2019. data/spec/unit/settings/string_setting_spec.rb +75 -0
  2020. data/spec/unit/settings/terminus_setting_spec.rb +28 -0
  2021. data/spec/unit/settings/value_translator_spec.rb +77 -0
  2022. data/spec/unit/settings_spec.rb +1735 -0
  2023. data/spec/unit/ssl/base_spec.rb +85 -0
  2024. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +30 -0
  2025. data/spec/unit/ssl/certificate_authority/interface_spec.rb +366 -0
  2026. data/spec/unit/ssl/certificate_authority_spec.rb +1105 -0
  2027. data/spec/unit/ssl/certificate_factory_spec.rb +168 -0
  2028. data/spec/unit/ssl/certificate_request_attributes_spec.rb +61 -0
  2029. data/spec/unit/ssl/certificate_request_spec.rb +369 -0
  2030. data/spec/unit/ssl/certificate_revocation_list_spec.rb +196 -0
  2031. data/spec/unit/ssl/certificate_spec.rb +193 -0
  2032. data/spec/unit/ssl/configuration_spec.rb +134 -0
  2033. data/spec/unit/ssl/digest_spec.rb +35 -0
  2034. data/spec/unit/ssl/host_spec.rb +940 -0
  2035. data/spec/unit/ssl/inventory_spec.rb +137 -0
  2036. data/spec/unit/ssl/key_spec.rb +191 -0
  2037. data/spec/unit/ssl/oids_spec.rb +48 -0
  2038. data/spec/unit/ssl/validator_spec.rb +354 -0
  2039. data/spec/unit/status_spec.rb +51 -0
  2040. data/spec/unit/transaction/additional_resource_generator_spec.rb +411 -0
  2041. data/spec/unit/transaction/event_manager_spec.rb +310 -0
  2042. data/spec/unit/transaction/event_spec.rb +192 -0
  2043. data/spec/unit/transaction/report_spec.rb +497 -0
  2044. data/spec/unit/transaction/resource_harness_spec.rb +478 -0
  2045. data/spec/unit/transaction_spec.rb +671 -0
  2046. data/spec/unit/type/README.markdown +4 -0
  2047. data/spec/unit/type/augeas_spec.rb +119 -0
  2048. data/spec/unit/type/component_spec.rb +53 -0
  2049. data/spec/unit/type/computer_spec.rb +80 -0
  2050. data/spec/unit/type/cron_spec.rb +544 -0
  2051. data/spec/unit/type/exec_spec.rb +763 -0
  2052. data/spec/unit/type/file/checksum_spec.rb +73 -0
  2053. data/spec/unit/type/file/content_spec.rb +463 -0
  2054. data/spec/unit/type/file/ctime_spec.rb +34 -0
  2055. data/spec/unit/type/file/ensure_spec.rb +123 -0
  2056. data/spec/unit/type/file/group_spec.rb +60 -0
  2057. data/spec/unit/type/file/mode_spec.rb +195 -0
  2058. data/spec/unit/type/file/mtime_spec.rb +34 -0
  2059. data/spec/unit/type/file/owner_spec.rb +58 -0
  2060. data/spec/unit/type/file/selinux_spec.rb +89 -0
  2061. data/spec/unit/type/file/source_spec.rb +555 -0
  2062. data/spec/unit/type/file/type_spec.rb +19 -0
  2063. data/spec/unit/type/file_spec.rb +1502 -0
  2064. data/spec/unit/type/filebucket_spec.rb +103 -0
  2065. data/spec/unit/type/group_spec.rb +84 -0
  2066. data/spec/unit/type/host_spec.rb +665 -0
  2067. data/spec/unit/type/interface_spec.rb +97 -0
  2068. data/spec/unit/type/k5login_spec.rb +115 -0
  2069. data/spec/unit/type/macauthorization_spec.rb +110 -0
  2070. data/spec/unit/type/mailalias_spec.rb +21 -0
  2071. data/spec/unit/type/maillist_spec.rb +41 -0
  2072. data/spec/unit/type/mcx_spec.rb +79 -0
  2073. data/spec/unit/type/mount_spec.rb +592 -0
  2074. data/spec/unit/type/nagios_spec.rb +284 -0
  2075. data/spec/unit/type/noop_metaparam_spec.rb +38 -0
  2076. data/spec/unit/type/package/package_settings_spec.rb +135 -0
  2077. data/spec/unit/type/package_spec.rb +304 -0
  2078. data/spec/unit/type/resources_spec.rb +284 -0
  2079. data/spec/unit/type/schedule_spec.rb +607 -0
  2080. data/spec/unit/type/scheduled_task_spec.rb +103 -0
  2081. data/spec/unit/type/selboolean_spec.rb +44 -0
  2082. data/spec/unit/type/selmodule_spec.rb +17 -0
  2083. data/spec/unit/type/service_spec.rb +261 -0
  2084. data/spec/unit/type/ssh_authorized_key_spec.rb +258 -0
  2085. data/spec/unit/type/sshkey_spec.rb +77 -0
  2086. data/spec/unit/type/stage_spec.rb +8 -0
  2087. data/spec/unit/type/tidy_spec.rb +433 -0
  2088. data/spec/unit/type/user_spec.rb +419 -0
  2089. data/spec/unit/type/vlan_spec.rb +44 -0
  2090. data/spec/unit/type/whit_spec.rb +10 -0
  2091. data/spec/unit/type/yumrepo_spec.rb +78 -0
  2092. data/spec/unit/type/zfs_spec.rb +46 -0
  2093. data/spec/unit/type/zone_spec.rb +129 -0
  2094. data/spec/unit/type/zpool_spec.rb +109 -0
  2095. data/spec/unit/type_spec.rb +1094 -0
  2096. data/spec/unit/util/adsi_spec.rb +437 -0
  2097. data/spec/unit/util/autoload_spec.rb +256 -0
  2098. data/spec/unit/util/backups_spec.rb +134 -0
  2099. data/spec/unit/util/cache_accumulator_spec.rb +74 -0
  2100. data/spec/unit/util/cacher_spec.rb +107 -0
  2101. data/spec/unit/util/checksums_spec.rb +173 -0
  2102. data/spec/unit/util/colors_spec.rb +83 -0
  2103. data/spec/unit/util/command_line_spec.rb +188 -0
  2104. data/spec/unit/util/command_line_utils/puppet_option_parser_spec.rb +129 -0
  2105. data/spec/unit/util/constant_inflector_spec.rb +56 -0
  2106. data/spec/unit/util/diff_spec.rb +31 -0
  2107. data/spec/unit/util/docs_spec.rb +100 -0
  2108. data/spec/unit/util/errors_spec.rb +37 -0
  2109. data/spec/unit/util/execution_spec.rb +637 -0
  2110. data/spec/unit/util/execution_stub_spec.rb +39 -0
  2111. data/spec/unit/util/feature_spec.rb +92 -0
  2112. data/spec/unit/util/filetype_spec.rb +211 -0
  2113. data/spec/unit/util/http_proxy_spec.rb +83 -0
  2114. data/spec/unit/util/inline_docs_spec.rb +31 -0
  2115. data/spec/unit/util/instrumentation/data_spec.rb +46 -0
  2116. data/spec/unit/util/instrumentation/indirection_probe_spec.rb +21 -0
  2117. data/spec/unit/util/instrumentation/instrumentable_spec.rb +186 -0
  2118. data/spec/unit/util/instrumentation/listener_spec.rb +101 -0
  2119. data/spec/unit/util/instrumentation/listeners/log_spec.rb +34 -0
  2120. data/spec/unit/util/instrumentation/listeners/performance_spec.rb +36 -0
  2121. data/spec/unit/util/instrumentation_spec.rb +181 -0
  2122. data/spec/unit/util/json_lockfile_spec.rb +50 -0
  2123. data/spec/unit/util/ldap/connection_spec.rb +161 -0
  2124. data/spec/unit/util/ldap/generator_spec.rb +50 -0
  2125. data/spec/unit/util/ldap/manager_spec.rb +641 -0
  2126. data/spec/unit/util/lockfile_spec.rb +118 -0
  2127. data/spec/unit/util/log/destinations_spec.rb +183 -0
  2128. data/spec/unit/util/log/rate_limited_logger_spec.rb +51 -0
  2129. data/spec/unit/util/log_spec.rb +378 -0
  2130. data/spec/unit/util/logging_spec.rb +151 -0
  2131. data/spec/unit/util/metric_spec.rb +98 -0
  2132. data/spec/unit/util/monkey_patches/lines_spec.rb +83 -0
  2133. data/spec/unit/util/monkey_patches_spec.rb +328 -0
  2134. data/spec/unit/util/nagios_maker_spec.rb +122 -0
  2135. data/spec/unit/util/network_device/cisco/device_spec.rb +445 -0
  2136. data/spec/unit/util/network_device/cisco/facts_spec.rb +64 -0
  2137. data/spec/unit/util/network_device/cisco/interface_spec.rb +88 -0
  2138. data/spec/unit/util/network_device/config_spec.rb +86 -0
  2139. data/spec/unit/util/network_device/ipcalc_spec.rb +62 -0
  2140. data/spec/unit/util/network_device/transport/base_spec.rb +41 -0
  2141. data/spec/unit/util/network_device/transport/ssh_spec.rb +218 -0
  2142. data/spec/unit/util/network_device/transport/telnet_spec.rb +84 -0
  2143. data/spec/unit/util/network_device_spec.rb +50 -0
  2144. data/spec/unit/util/package_spec.rb +20 -0
  2145. data/spec/unit/util/pidlock_spec.rb +182 -0
  2146. data/spec/unit/util/posix_spec.rb +251 -0
  2147. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  2148. data/spec/unit/util/profiler/none_spec.rb +12 -0
  2149. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  2150. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  2151. data/spec/unit/util/pson_spec.rb +71 -0
  2152. data/spec/unit/util/queue/stomp_spec.rb +137 -0
  2153. data/spec/unit/util/queue_spec.rb +95 -0
  2154. data/spec/unit/util/rdoc/parser_spec.rb +599 -0
  2155. data/spec/unit/util/rdoc_spec.rb +141 -0
  2156. data/spec/unit/util/reference_serializer_spec.rb +51 -0
  2157. data/spec/unit/util/reference_spec.rb +39 -0
  2158. data/spec/unit/util/resource_template_spec.rb +57 -0
  2159. data/spec/unit/util/retryaction_spec.rb +62 -0
  2160. data/spec/unit/util/rubygems_spec.rb +68 -0
  2161. data/spec/unit/util/run_mode_spec.rb +145 -0
  2162. data/spec/unit/util/selinux_spec.rb +289 -0
  2163. data/spec/unit/util/ssl_spec.rb +92 -0
  2164. data/spec/unit/util/storage_spec.rb +210 -0
  2165. data/spec/unit/util/suidmanager_spec.rb +297 -0
  2166. data/spec/unit/util/symbolic_file_mode_spec.rb +182 -0
  2167. data/spec/unit/util/tag_set_spec.rb +46 -0
  2168. data/spec/unit/util/tagging_spec.rb +131 -0
  2169. data/spec/unit/util/terminal_spec.rb +42 -0
  2170. data/spec/unit/util/user_attr_spec.rb +46 -0
  2171. data/spec/unit/util/warnings_spec.rb +38 -0
  2172. data/spec/unit/util/watched_file_spec.rb +52 -0
  2173. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  2174. data/spec/unit/util/watcher_spec.rb +56 -0
  2175. data/spec/unit/util/windows/access_control_entry_spec.rb +67 -0
  2176. data/spec/unit/util/windows/access_control_list_spec.rb +133 -0
  2177. data/spec/unit/util/windows/registry_spec.rb +140 -0
  2178. data/spec/unit/util/windows/root_certs_spec.rb +17 -0
  2179. data/spec/unit/util/windows/security_descriptor_spec.rb +117 -0
  2180. data/spec/unit/util/windows/sid_spec.rb +169 -0
  2181. data/spec/unit/util/windows/string_spec.rb +54 -0
  2182. data/spec/unit/util/yaml_spec.rb +55 -0
  2183. data/spec/unit/util/zaml_spec.rb +304 -0
  2184. data/spec/unit/util_spec.rb +577 -0
  2185. data/spec/unit/version_spec.rb +42 -0
  2186. data/spec/watchr.rb +142 -0
  2187. data/tasks/benchmark.rake +109 -0
  2188. data/tasks/ci.rake +29 -0
  2189. data/tasks/manpages.rake +84 -0
  2190. data/tasks/parallel.rake +408 -0
  2191. data/tasks/parser.rake +5 -0
  2192. data/tasks/yard.rake +59 -0
  2193. metadata +3515 -0
@@ -0,0 +1,95 @@
1
+ # This module is an integral part of the Lexer.
2
+ # It defines the string slurping behavior - finding the string and non string parts in interpolated
3
+ # strings, translating escape sequences in strings to their single character equivalence.
4
+ #
5
+ # PERFORMANCE NOTE: The various kinds of slurping could be made even more generic, but requires
6
+ # additional parameter passing and evaluation of conditional logic.
7
+ # TODO: More detailed performance analysis of excessive character escaping and interpolation.
8
+ #
9
+ module Puppet::Pops::Parser::SlurpSupport
10
+
11
+ SLURP_SQ_PATTERN = /(?:[^\\]|^|[^\\])(?:[\\]{2})*[']/
12
+ SLURP_DQ_PATTERN = /(?:[^\\]|^|[^\\])(?:[\\]{2})*(["]|[$]\{?)/
13
+ SLURP_UQ_PATTERN = /(?:[^\\]|^|[^\\])(?:[\\]{2})*([$]\{?|\z)/
14
+ SLURP_ALL_PATTERN = /.*(\z)/m
15
+ SQ_ESCAPES = %w{ \\ ' }
16
+ DQ_ESCAPES = %w{ \\ $ ' " r n t s u}+["\r\n", "\n"]
17
+ UQ_ESCAPES = %w{ \\ $ r n t s u}+["\r\n", "\n"]
18
+
19
+ def slurp_sqstring
20
+ # skip the leading '
21
+ @scanner.pos += 1
22
+ str = slurp(@scanner, SLURP_SQ_PATTERN, SQ_ESCAPES, :ignore_invalid_escapes) || lex_error("Unclosed quote after \"'\" followed by '#{followed_by}'")
23
+ str[0..-2] # strip closing "'" from result
24
+ end
25
+
26
+ def slurp_dqstring
27
+ scn = @scanner
28
+ last = scn.matched
29
+ str = slurp(scn, SLURP_DQ_PATTERN, DQ_ESCAPES, false)
30
+ unless str
31
+ lex_error("Unclosed quote after #{format_quote(last)} followed by '#{followed_by}'")
32
+ end
33
+
34
+ # Terminator may be a single char '"', '$', or two characters '${' group match 1 (scn[1]) from the last slurp holds this
35
+ terminator = scn[1]
36
+ [str[0..(-1 - terminator.length)], terminator]
37
+ end
38
+
39
+ # Copy from old lexer - can do much better
40
+ def slurp_uqstring
41
+ scn = @scanner
42
+ last = scn.matched
43
+ ignore = true
44
+ str = slurp(scn, @lexing_context[:uq_slurp_pattern], @lexing_context[:escapes], :ignore_invalid_escapes)
45
+
46
+ # Terminator may be a single char '$', two characters '${', or empty string '' at the end of intput.
47
+ # Group match 1 holds this.
48
+ # The exceptional case is found by looking at the subgroup 1 of the most recent match made by the scanner (i.e. @scanner[1]).
49
+ # This is the last match made by the slurp method (having called scan_until on the scanner).
50
+ # If there is a terminating character is must be stripped and returned separately.
51
+ #
52
+ terminator = scn[1]
53
+ [str[0..(-1 - terminator.length)], terminator]
54
+ end
55
+
56
+ # Slurps a string from the given scanner until the given pattern and then replaces any escaped
57
+ # characters given by escapes into their control-character equivalent or in case of line breaks, replaces the
58
+ # pattern \r?\n with an empty string.
59
+ # The returned string contains the terminating character. Returns nil if the scanner can not scan until the given
60
+ # pattern.
61
+ #
62
+ def slurp(scanner, pattern, escapes, ignore_invalid_escapes)
63
+ str = scanner.scan_until(pattern) || return
64
+
65
+ # Process unicode escapes first as they require getting 4 hex digits
66
+ # If later a \u is found it is warned not to be a unicode escape
67
+ if escapes.include?('u')
68
+ str.gsub!(/\\u([\da-fA-F]{4})/m) {
69
+ [$1.hex].pack("U")
70
+ }
71
+ end
72
+
73
+ str.gsub!(/\\([^\r\n]|(?:\r?\n))/m) {
74
+ ch = $1
75
+ if escapes.include? ch
76
+ case ch
77
+ when 'r' ; "\r"
78
+ when 'n' ; "\n"
79
+ when 't' ; "\t"
80
+ when 's' ; " "
81
+ when 'u'
82
+ Puppet.warning(positioned_message("Unicode escape '\\u' was not followed by 4 hex digits"))
83
+ "\\u"
84
+ when "\n" ; ''
85
+ when "\r\n"; ''
86
+ else ch
87
+ end
88
+ else
89
+ Puppet.warning(positioned_message("Unrecognized escape sequence '\\#{ch}'")) unless ignore_invalid_escapes
90
+ "\\#{ch}"
91
+ end
92
+ }
93
+ str
94
+ end
95
+ end
@@ -0,0 +1,44 @@
1
+ # The Patterns module contains common regular expression patters for the Puppet DSL language
2
+ module Puppet::Pops::Patterns
3
+
4
+ # NUMERIC matches hex, octal, decimal, and floating point and captures three parts
5
+ # 0 = entire matched number, leading and trailing whitespace included
6
+ # 1 = hexadecimal number
7
+ # 2 = non hex integer portion, possibly with leading 0 (octal)
8
+ # 3 = floating point part, starts with ".", decimals and optional exponent
9
+ #
10
+ # Thus, a hex number has group 1 value, an octal value has group 2 (if it starts with 0), and no group 3
11
+ # and a floating point value has group 2 and group 3.
12
+ #
13
+ NUMERIC = %r{^\s*(?:(0[xX][0-9A-Fa-f]+)|(0?\d+)((?:\.\d+)?(?:[eE]-?\d+)?))\s*$}
14
+
15
+ # ILLEGAL_P3_1_HOSTNAME matches if a hostname contains illegal characters.
16
+ # This check does not prevent pathological names like 'a....b', '.....', "---". etc.
17
+ ILLEGAL_HOSTNAME_CHARS = %r{[^-\w.]}
18
+
19
+ # NAME matches a name the same way as the lexer.
20
+ NAME = %r{\A((::)?[a-z]\w*)(::[a-z]\w*)*\z}
21
+
22
+ # CLASSREF_EXT matches a class reference the same way as the lexer - i.e. the external source form
23
+ # where each part must start with a capital letter A-Z.
24
+ # This name includes hyphen, which may be illegal in some cases.
25
+ #
26
+ CLASSREF_EXT = %r{\A((::){0,1}[A-Z][\w]*)+\z}
27
+
28
+ # CLASSREF matches a class reference the way it is represented internally in the
29
+ # model (i.e. in lower case).
30
+ # This name includes hyphen, which may be illegal in some cases.
31
+ #
32
+ CLASSREF = %r{\A((::){0,1}[a-z][\w]*)+\z}
33
+
34
+ # DOLLAR_VAR matches a variable name including the initial $ character
35
+ DOLLAR_VAR = %r{\$(::)?(\w+::)*\w+}
36
+
37
+ # VAR_NAME matches the name part of a variable (The $ character is not included)
38
+ # Note, that only the final segment may start with an underscore.
39
+ VAR_NAME = %r{\A(:?(::)?[a-z]\w*)*(:?(::)?[a-z_]\w*)\z}
40
+
41
+ # A Numeric var name must be the decimal number 0, or a decimal number not starting with 0
42
+ NUMERIC_VAR_NAME = %r{\A(?:0|(?:[1-9][0-9]*))\z}
43
+
44
+ end
@@ -0,0 +1,118 @@
1
+ require 'rgen/metamodel_builder'
2
+
3
+ # The ClassLoader provides a Class instance given a class name or a meta-type.
4
+ # If the class is not already loaded, it is loaded using the Puppet Autoloader.
5
+ # This means it can load a class from a gem, or from puppet modules.
6
+ #
7
+ class Puppet::Pops::Types::ClassLoader
8
+ @autoloader = Puppet::Util::Autoload.new("ClassLoader", "", :wrap => false)
9
+
10
+ # Returns a Class given a fully qualified class name.
11
+ # Lookup of class is never relative to the calling namespace.
12
+ # @param name [String, Array<String>, Array<Symbol>, Puppet::Pops::Types::PObjectType] A fully qualified
13
+ # class name String (e.g. '::Foo::Bar', 'Foo::Bar'), a PObjectType, or a fully qualified name in Array form where each part
14
+ # is either a String or a Symbol, e.g. `%w{Puppetx Puppetlabs SomeExtension}`.
15
+ # @return [Class, nil] the looked up class or nil if no such class is loaded
16
+ # @raise ArgumentError If the given argument has the wrong type
17
+ # @api public
18
+ #
19
+ def self.provide(name)
20
+ case name
21
+ when String
22
+ provide_from_string(name)
23
+
24
+ when Array
25
+ provide_from_name_path(name.join('::'), name)
26
+
27
+ when Puppet::Pops::Types::PObjectType, Puppet::Pops::Types::PType
28
+ provide_from_type(name)
29
+
30
+ else
31
+ raise ArgumentError, "Cannot provide a class from a '#{name.class.name}'"
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def self.provide_from_type(type)
38
+ case type
39
+ when Puppet::Pops::Types::PRubyType
40
+ provide_from_string(type.ruby_class)
41
+
42
+ when Puppet::Pops::Types::PBooleanType
43
+ # There is no other thing to load except this Enum meta type
44
+ RGen::MetamodelBuilder::MMBase::Boolean
45
+
46
+ when Puppet::Pops::Types::PType
47
+ # TODO: PType should have a type argument (a PObjectType)
48
+ Class
49
+
50
+ # Although not expected to be the first choice for getting a concrete class for these
51
+ # types, these are of value if the calling logic just has a reference to type.
52
+ #
53
+ when Puppet::Pops::Types::PArrayType ; Array
54
+ when Puppet::Pops::Types::PHashType ; Hash
55
+ when Puppet::Pops::Types::PRegexpType ; Regexp
56
+ when Puppet::Pops::Types::PIntegerType ; Integer
57
+ when Puppet::Pops::Types::PStringType ; String
58
+ when Puppet::Pops::Types::PFloatType ; Float
59
+ when Puppet::Pops::Types::PNilType ; NilClass
60
+ else
61
+ nil
62
+ end
63
+ end
64
+
65
+ def self.provide_from_string(name)
66
+ name_path = name.split('::')
67
+ # always from the root, so remove an empty first segment
68
+ if name_path[0].empty?
69
+ name_path = name_path[1..-1]
70
+ end
71
+ provide_from_name_path(name, name_path)
72
+ end
73
+
74
+ def self.provide_from_name_path(name, name_path)
75
+ # If class is already loaded, try this first
76
+ result = find_class(name_path)
77
+
78
+ unless result.is_a?(Class)
79
+ # Attempt to load it using the auto loader
80
+ loaded_path = nil
81
+ if paths_for_name(name).find {|path| loaded_path = path; @autoloader.load(path) }
82
+ result = find_class(name_path)
83
+ unless result.is_a?(Class)
84
+ raise RuntimeError, "Loading of #{name} using relative path: '#{loaded_path}' did not create expected class"
85
+ end
86
+ end
87
+ end
88
+ return nil unless result.is_a?(Class)
89
+ result
90
+ end
91
+
92
+ def self.find_class(name_path)
93
+ name_path.reduce(Object) do |ns, name|
94
+ begin
95
+ ns.const_get(name)
96
+ rescue NameError
97
+ return nil
98
+ end
99
+ end
100
+ end
101
+
102
+ def self.paths_for_name(fq_name)
103
+ [de_camel(fq_name), downcased_path(fq_name)]
104
+ end
105
+
106
+ def self.downcased_path(fq_name)
107
+ fq_name.to_s.gsub(/::/, '/').downcase
108
+ end
109
+
110
+ def self.de_camel(fq_name)
111
+ fq_name.to_s.gsub(/::/, '/').
112
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
113
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
114
+ tr("-", "_").
115
+ downcase
116
+ end
117
+
118
+ end
@@ -0,0 +1,34 @@
1
+ # The Enumeration class provides default Enumerable::Enumerator creation for Puppet Programming Language
2
+ # runtime objects that supports the concept of enumeration.
3
+ #
4
+ class Puppet::Pops::Types::Enumeration
5
+ # Produces an Enumerable::Enumerator for Array, Hash, Integer, Integer Range, and String.
6
+ #
7
+ def self.enumerator(o)
8
+ @@singleton ||= new
9
+ @@singleton.enumerator(o)
10
+ end
11
+
12
+ # Produces an Enumerator for Array, Hash, Integer, Integer Range, and String.
13
+ #
14
+ def enumerator(o)
15
+ case o
16
+ when String
17
+ x = o.chars
18
+ # Ruby 1.8.7 returns Enumerable::Enumerator, Ruby 1.8.9 Enumerator, and 2.0.0 an Array
19
+ x.is_a?(Array) ? x.each : x
20
+ when Integer
21
+ o.times
22
+ when Array
23
+ o.each
24
+ when Hash
25
+ o.each
26
+ when Puppet::Pops::Types::PIntegerType
27
+ # Not enumerable if representing an infinite range
28
+ return nil if o.to.nil? || o.from.nil?
29
+ o.each
30
+ else
31
+ nil
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,1482 @@
1
+ # The TypeCalculator can answer questions about puppet types.
2
+ #
3
+ # The Puppet type system is primarily based on sub-classing. When asking the type calculator to infer types from Ruby in general, it
4
+ # may not provide the wanted answer; it does not for instance take module inclusions and extensions into account. In general the type
5
+ # system should be unsurprising for anyone being exposed to the notion of type. The type `Data` may require a bit more explanation; this
6
+ # is an abstract type that includes all scalar types, as well as Array with an element type compatible with Data, and Hash with key
7
+ # compatible with scalar and elements compatible with Data. Expressed differently; Data is what you typically express using JSON (with
8
+ # the exception that the Puppet type system also includes Pattern (regular expression) as a scalar.
9
+ #
10
+ # Inference
11
+ # ---------
12
+ # The `infer(o)` method infers a Puppet type for scalar Ruby objects, and for Arrays and Hashes.
13
+ # The inference result is instance specific for single typed collections
14
+ # and allows answering questions about its embedded type. It does not however preserve multiple types in
15
+ # a collection, and can thus not answer questions like `[1,a].infer() =~ Array[Integer, String]` since the inference
16
+ # computes the common type Scalar when combining Integer and String.
17
+ #
18
+ # The `infer_generic(o)` method infers a generic Puppet type for scalar Ruby object, Arrays and Hashes.
19
+ # This inference result does not contain instance specific information; e.g. Array[Integer] where the integer
20
+ # range is the generic default. Just `infer` it also combines types into a common type.
21
+ #
22
+ # The `infer_set(o)` method works like `infer` but preserves all type information. It does not do any
23
+ # reduction into common types or ranges. This method of inference is best suited for answering questions
24
+ # about an object being an instance of a type. It correctly answers: `[1,a].infer_set() =~ Array[Integer, String]`
25
+ #
26
+ # The `generalize!(t)` method modifies an instance specific inference result to a generic. The method mutates
27
+ # the given argument. Basically, this removes string instances from String, and range from Integer and Float.
28
+ #
29
+ # Assignability
30
+ # -------------
31
+ # The `assignable?(t1, t2)` method answers if t2 conforms to t1. The type t2 may be an instance, in which case
32
+ # its type is inferred, or a type.
33
+ #
34
+ # Instance?
35
+ # ---------
36
+ # The `instance?(t, o)` method answers if the given object (instance) is an instance that is assignable to the given type.
37
+ #
38
+ # String
39
+ # ------
40
+ # Creates a string representation of a type.
41
+ #
42
+ # Creation of Type instances
43
+ # --------------------------
44
+ # Instance of the classes in the {Puppet::Pops::Types type model} are used to denote a specific type. It is most convenient
45
+ # to use the {Puppet::Pops::Types::TypeFactory TypeFactory} when creating instances.
46
+ #
47
+ # @note
48
+ # In general, new instances of the wanted type should be created as they are assigned to models using containment, and a
49
+ # contained object can only be in one container at a time. Also, the type system may include more details in each type
50
+ # instance, such as if it may be nil, be empty, contain a certain count etc. Or put differently, the puppet types are not
51
+ # singletons.
52
+ #
53
+ # All types support `copy` which should be used when assigning a type where it is unknown if it is bound or not
54
+ # to a parent type. A check can be made with `t.eContainer().nil?`
55
+ #
56
+ # Equality and Hash
57
+ # -----------------
58
+ # Type instances are equal in terms of Ruby eql? and `==` if they describe the same type, but they are not `equal?` if they are not
59
+ # the same type instance. Two types that describe the same type have identical hash - this makes them usable as hash keys.
60
+ #
61
+ # Types and Subclasses
62
+ # --------------------
63
+ # In general, the type calculator should be used to answer questions if a type is a subtype of another (using {#assignable?}, or
64
+ # {#instance?} if the question is if a given object is an instance of a given type (or is a subtype thereof).
65
+ # Many of the types also have a Ruby subtype relationship; e.g. PHashType and PArrayType are both subtypes of PCollectionType, and
66
+ # PIntegerType, PFloatType, PStringType,... are subtypes of PScalarType. Even if it is possible to answer certain questions about
67
+ # type by looking at the Ruby class of the types this is considered an implementation detail, and such checks should in general
68
+ # be performed by the type_calculator which implements the type system semantics.
69
+ #
70
+ # The PRubyType
71
+ # -------------
72
+ # The PRubyType corresponds to a Ruby Class, except for the puppet types that are specialized (i.e. PRubyType should not be
73
+ # used for Integer, String, etc. since there are specialized types for those).
74
+ # When the type calculator deals with PRubyTypes and checks for assignability, it determines the "common ancestor class" of two classes.
75
+ # This check is made based on the superclasses of the two classes being compared. In order to perform this, the classes must be present
76
+ # (i.e. they are resolved from the string form in the PRubyType to a loaded, instantiated Ruby Class). In general this is not a problem,
77
+ # since the question to produce the common super type for two objects means that the classes must be present or there would have been
78
+ # no instances present in the first place. If however the classes are not present, the type calculator will fall back and state that
79
+ # the two types at least have Object in common.
80
+ #
81
+ # @see Puppet::Pops::Types::TypeFactory TypeFactory for how to create instances of types
82
+ # @see Puppet::Pops::Types::TypeParser TypeParser how to construct a type instance from a String
83
+ # @see Puppet::Pops::Types Types for details about the type model
84
+ #
85
+ # Using the Type Calculator
86
+ # -----
87
+ # The type calculator can be directly used via its class methods. If doing time critical work and doing many
88
+ # calls to the type calculator, it is more performant to create an instance and invoke the corresponding
89
+ # instance methods. Note that inference is an expensive operation, rather than infering the same thing
90
+ # several times, it is in general better to infer once and then copy the result if mutation to a more generic form is
91
+ # required.
92
+ #
93
+ # @api public
94
+ #
95
+ class Puppet::Pops::Types::TypeCalculator
96
+
97
+ Types = Puppet::Pops::Types
98
+ TheInfinity = 1.0 / 0.0 # because the Infinity symbol is not defined
99
+
100
+ # @api public
101
+ def self.assignable?(t1, t2)
102
+ singleton.assignable?(t1,t2)
103
+ end
104
+
105
+ # @api public
106
+ def self.string(t)
107
+ singleton.string(t)
108
+ end
109
+
110
+ # @api public
111
+ def self.infer(o)
112
+ singleton.infer(o)
113
+ end
114
+
115
+ # @api public
116
+ def self.generalize!(o)
117
+ singleton.generalize!(o)
118
+ end
119
+
120
+ # @api public
121
+ def self.infer_set(o)
122
+ singleton.infer_set(o)
123
+ end
124
+
125
+ # @api public
126
+ def self.debug_string(t)
127
+ singleton.debug_string(t)
128
+ end
129
+
130
+ # @api public
131
+ def self.enumerable(t)
132
+ singleton.enumerable(t)
133
+ end
134
+
135
+ # @api private
136
+ def self.singleton()
137
+ @tc_instance ||= new
138
+ end
139
+
140
+ # @api public
141
+ #
142
+ def initialize
143
+ @@assignable_visitor ||= Puppet::Pops::Visitor.new(nil,"assignable",1,1)
144
+ @@infer_visitor ||= Puppet::Pops::Visitor.new(nil,"infer",0,0)
145
+ @@infer_set_visitor ||= Puppet::Pops::Visitor.new(nil,"infer_set",0,0)
146
+ @@instance_of_visitor ||= Puppet::Pops::Visitor.new(nil,"instance_of",1,1)
147
+ @@string_visitor ||= Puppet::Pops::Visitor.new(nil,"string",0,0)
148
+ @@inspect_visitor ||= Puppet::Pops::Visitor.new(nil,"debug_string",0,0)
149
+ @@enumerable_visitor ||= Puppet::Pops::Visitor.new(nil,"enumerable",0,0)
150
+ @@extract_visitor ||= Puppet::Pops::Visitor.new(nil,"extract",0,0)
151
+ @@generalize_visitor ||= Puppet::Pops::Visitor.new(nil,"generalize",0,0)
152
+
153
+ da = Types::PArrayType.new()
154
+ da.element_type = Types::PDataType.new()
155
+ @data_array = da
156
+
157
+ h = Types::PHashType.new()
158
+ h.element_type = Types::PDataType.new()
159
+ h.key_type = Types::PScalarType.new()
160
+ @data_hash = h
161
+
162
+ @data_t = Types::PDataType.new()
163
+ @scalar_t = Types::PScalarType.new()
164
+ @numeric_t = Types::PNumericType.new()
165
+ @t = Types::PObjectType.new()
166
+
167
+ # Data accepts a Tuple that has 0-infinity Data compatible entries (e.g. a Tuple equivalent to Array).
168
+ data_tuple = Types::PTupleType.new()
169
+ data_tuple.addTypes(Types::PDataType.new())
170
+ data_tuple.size_type = Types::PIntegerType.new()
171
+ data_tuple.size_type.from = 0
172
+ data_tuple.size_type.to = nil # infinity
173
+ @data_tuple_t = data_tuple
174
+
175
+ # Variant type compatible with Data
176
+ data_variant = Types::PVariantType.new()
177
+ data_variant.addTypes(@data_hash.copy)
178
+ data_variant.addTypes(@data_array.copy)
179
+ data_variant.addTypes(Types::PScalarType.new)
180
+ data_variant.addTypes(Types::PNilType.new)
181
+ data_variant.addTypes(@data_tuple_t.copy)
182
+ @data_variant_t = data_variant
183
+
184
+ collection_default_size = Types::PIntegerType.new()
185
+ collection_default_size.from = 0
186
+ collection_default_size.to = nil # infinity
187
+ @collection_default_size_t = collection_default_size
188
+
189
+ non_empty_string = Types::PStringType.new
190
+ non_empty_string.size_type = Types::PIntegerType.new()
191
+ non_empty_string.size_type.from = 1
192
+ non_empty_string.size_type.to = nil # infinity
193
+ @non_empty_string_t = non_empty_string
194
+ end
195
+
196
+ # Convenience method to get a data type for comparisons
197
+ # @api private the returned value may not be contained in another element
198
+ #
199
+ def data
200
+ @data_t
201
+ end
202
+
203
+ # Convenience method to get a variant compatible with the Data type.
204
+ # @api private the returned value may not be contained in another element
205
+ #
206
+ def data_variant
207
+ @data_variant_t
208
+ end
209
+
210
+ def self.data_variant
211
+ singleton.data_variant
212
+ end
213
+
214
+ # Answers the question 'is it possible to inject an instance of the given class'
215
+ # A class is injectable if it has a special *assisted inject* class method called `inject` taking
216
+ # an injector and a scope as argument, or if it has a zero args `initialize` method.
217
+ #
218
+ # @param klazz [Class, PRubyType] the class/type to check if it is injectable
219
+ # @return [Class, nil] the injectable Class, or nil if not injectable
220
+ # @api public
221
+ #
222
+ def injectable_class(klazz)
223
+ # Handle case when we get a PType instead of a class
224
+ if klazz.is_a?(Types::PRubyType)
225
+ klazz = Puppet::Pops::Types::ClassLoader.provide(klazz)
226
+ end
227
+
228
+ # data types can not be injected (check again, it is not safe to assume that given RubyType klazz arg was ok)
229
+ return false unless type(klazz).is_a?(Types::PRubyType)
230
+ if (klazz.respond_to?(:inject) && klazz.method(:inject).arity() == -4) || klazz.instance_method(:initialize).arity() == 0
231
+ klazz
232
+ else
233
+ nil
234
+ end
235
+ end
236
+
237
+ # Answers 'can an instance of type t2 be assigned to a variable of type t'
238
+ # @api public
239
+ #
240
+ def assignable?(t, t2)
241
+ # nil is assignable to anything except to required types
242
+ return true if is_pnil?(t2)
243
+
244
+ if t.is_a?(Class)
245
+ t = type(t)
246
+ end
247
+
248
+ if t2.is_a?(Class)
249
+ t2 = type(t2)
250
+ end
251
+
252
+ @@assignable_visitor.visit_this_1(self, t, t2)
253
+ end
254
+
255
+ # Returns an enumerable if the t represents something that can be iterated
256
+ def enumerable(t)
257
+ @@enumerable_visitor.visit_this_0(self, t)
258
+ end
259
+
260
+ # Answers if the two given types describe the same type
261
+ def equals(left, right)
262
+ return false unless left.is_a?(Types::PAbstractType) && right.is_a?(Types::PAbstractType)
263
+ # Types compare per class only - an extra test must be made if the are mutually assignable
264
+ # to find all types that represent the same type of instance
265
+ #
266
+ left == right || (assignable?(right, left) && assignable?(left, right))
267
+ end
268
+
269
+ # Answers 'what is the Puppet Type corresponding to the given Ruby class'
270
+ # @param c [Class] the class for which a puppet type is wanted
271
+ # @api public
272
+ #
273
+ def type(c)
274
+ raise ArgumentError, "Argument must be a Class" unless c.is_a? Class
275
+
276
+ # Can't use a visitor here since we don't have an instance of the class
277
+ case
278
+ when c <= Integer
279
+ type = Types::PIntegerType.new()
280
+ when c == Float
281
+ type = Types::PFloatType.new()
282
+ when c == Numeric
283
+ type = Types::PNumericType.new()
284
+ when c == String
285
+ type = Types::PStringType.new()
286
+ when c == Regexp
287
+ type = Types::PRegexpType.new()
288
+ when c == NilClass
289
+ type = Types::PNilType.new()
290
+ when c == FalseClass, c == TrueClass
291
+ type = Types::PBooleanType.new()
292
+ when c == Class
293
+ type = Types::PType.new()
294
+ when c == Array
295
+ # Assume array of data values
296
+ type = Types::PArrayType.new()
297
+ type.element_type = Types::PDataType.new()
298
+ when c == Hash
299
+ # Assume hash with scalar keys and data values
300
+ type = Types::PHashType.new()
301
+ type.key_type = Types::PScalarType.new()
302
+ type.element_type = Types::PDataType.new()
303
+ else
304
+ type = Types::PRubyType.new()
305
+ type.ruby_class = c.name
306
+ end
307
+ type
308
+ end
309
+
310
+ # Generalizes value specific types. The given type is mutated and returned.
311
+ # @api public
312
+ def generalize!(o)
313
+ @@generalize_visitor.visit_this_0(self, o)
314
+ o.eAllContents.each { |x| @@generalize_visitor.visit_this_0(self, x) }
315
+ o
316
+ end
317
+
318
+ def generalize_Object(o)
319
+ # do nothing, there is nothing to change for most types
320
+ end
321
+
322
+ def generalize_PStringType(o)
323
+ o.values = []
324
+ o.size_type = nil
325
+ []
326
+ end
327
+
328
+ def generalize_PCollectionType(o)
329
+ # erase the size constraint from Array and Hash (if one exists, it is transformed to -Infinity - + Infinity, which is
330
+ # not desirable.
331
+ o.size_type = nil
332
+ end
333
+
334
+ def generalize_PFloatType(o)
335
+ o.to = nil
336
+ o.from = nil
337
+ end
338
+
339
+ def generalize_PIntegerType(o)
340
+ o.to = nil
341
+ o.from = nil
342
+ end
343
+
344
+ # Answers 'what is the single common Puppet Type describing o', or if o is an Array or Hash, what is the
345
+ # single common type of the elements (or keys and elements for a Hash).
346
+ # @api public
347
+ #
348
+ def infer(o)
349
+ @@infer_visitor.visit_this_0(self, o)
350
+ end
351
+
352
+ def infer_generic(o)
353
+ result = generalize!(infer(o))
354
+ result
355
+ end
356
+
357
+ # Answers 'what is the set of Puppet Types of o'
358
+ # @api public
359
+ #
360
+ def infer_set(o)
361
+ @@infer_set_visitor.visit_this_0(self, o)
362
+ end
363
+
364
+ def instance_of(t, o)
365
+ # return true if o.nil? && !t.is_a?(Types::PRequiredType)
366
+ @@instance_of_visitor.visit_this_1(self, t, o)
367
+ end
368
+
369
+ def instance_of_Object(t, o)
370
+ # Undef is Undef and Object, but nothing else when checking instance?
371
+ return false if (o.nil? || o == :undef) && t.class != Types::PObjectType
372
+ assignable?(t, infer(o))
373
+ end
374
+
375
+ def instance_of_PArrayType(t, o)
376
+ return false unless o.is_a?(Array)
377
+ return false unless o.all? {|element| instance_of(t.element_type, element) }
378
+ size_t = t.size_type || @collection_default_size_t
379
+ size_t2 = size_as_type(o)
380
+ assignable?(size_t, size_t2)
381
+ end
382
+
383
+ def instance_of_PTupleType(t, o)
384
+ return false unless o.is_a?(Array)
385
+ # compute the tuple's min/max size, and check if that size matches
386
+ from, to = size_range(t.size_type)
387
+ size_t = Types::PIntegerType.new()
388
+ size_t.from = t.types.size - 1 + from
389
+ size_t.to = t.types.size - 1 + to
390
+ # compute the array's size as type
391
+ size_t2 = size_as_type(o)
392
+ return false unless assignable?(size_t, size_t2)
393
+ o.each_with_index do |element, index|
394
+ return false unless instance_of(t.types[index] || t.types[-1], element)
395
+ end
396
+ true
397
+ end
398
+
399
+ def instance_of_PStructType(t, o)
400
+ return false unless o.is_a?(Hash)
401
+ h = t.hashed_elements
402
+ # all keys must be present and have a value (even if nil/undef)
403
+ (o.keys - h.keys).empty? && h.all? { |k,v| instance_of(v, o[k]) }
404
+ end
405
+
406
+ def instance_of_PHashType(t, o)
407
+ return false unless o.is_a?(Hash)
408
+ key_t = t.key_type
409
+ element_t = t.element_type
410
+ return false unless o.keys.all? {|key| instance_of(key_t, key) } && o.values.all? {|value| instance_of(element_t, value) }
411
+ size_t = t.size_type || @collection_default_size_t
412
+ size_t2 = size_as_type(o)
413
+ assignable?(size_t, size_t2)
414
+ end
415
+
416
+ def instance_of_PDataType(t, o)
417
+ instance_of(@data_variant_t, o)
418
+ end
419
+
420
+ def instance_of_PNilType(t, o)
421
+ return o.nil? || o == :undef
422
+ end
423
+
424
+ def instance_of_POptionalType(t, o)
425
+ return true if (o.nil? || o == :undef)
426
+ instance_of(t.optional_type, o)
427
+ end
428
+
429
+ def instance_of_PVariantType(t, o)
430
+ # instance of variant if o is instance? of any of variant's types
431
+ t.types.any? { |option_t| instance_of(option_t, o) }
432
+ end
433
+
434
+ # Answers 'is o an instance of type t'
435
+ # @api public
436
+ #
437
+ def self.instance?(t, o)
438
+ singleton.instance_of(t,o)
439
+ end
440
+
441
+ # Answers 'is o an instance of type t'
442
+ # @api public
443
+ #
444
+ def instance?(t, o)
445
+ instance_of(t,o)
446
+ end
447
+
448
+ # Answers if t is a puppet type
449
+ # @api public
450
+ #
451
+ def is_ptype?(t)
452
+ return t.is_a?(Types::PAbstractType)
453
+ end
454
+
455
+ # Answers if t represents the puppet type PNilType
456
+ # @api public
457
+ #
458
+ def is_pnil?(t)
459
+ return t.nil? || t.is_a?(Types::PNilType)
460
+ end
461
+
462
+ # Answers, 'What is the common type of t1 and t2?'
463
+ #
464
+ # TODO: The current implementation should be optimized for performance
465
+ #
466
+ # @api public
467
+ #
468
+ def common_type(t1, t2)
469
+ raise ArgumentError, 'two types expected' unless (is_ptype?(t1) || is_pnil?(t1)) && (is_ptype?(t2) || is_pnil?(t2))
470
+
471
+ # if either is nil, the common type is the other
472
+ if is_pnil?(t1)
473
+ return t2
474
+ elsif is_pnil?(t2)
475
+ return t1
476
+ end
477
+
478
+ # Simple case, one is assignable to the other
479
+ if assignable?(t1, t2)
480
+ return t1
481
+ elsif assignable?(t2, t1)
482
+ return t2
483
+ end
484
+
485
+ # when both are arrays, return an array with common element type
486
+ if t1.is_a?(Types::PArrayType) && t2.is_a?(Types::PArrayType)
487
+ type = Types::PArrayType.new()
488
+ type.element_type = common_type(t1.element_type, t2.element_type)
489
+ return type
490
+ end
491
+
492
+ # when both are hashes, return a hash with common key- and element type
493
+ if t1.is_a?(Types::PHashType) && t2.is_a?(Types::PHashType)
494
+ type = Types::PHashType.new()
495
+ type.key_type = common_type(t1.key_type, t2.key_type)
496
+ type.element_type = common_type(t1.element_type, t2.element_type)
497
+ return type
498
+ end
499
+
500
+ # when both are host-classes, reduce to PHostClass[] (since one was not assignable to the other)
501
+ if t1.is_a?(Types::PHostClassType) && t2.is_a?(Types::PHostClassType)
502
+ return Types::PHostClassType.new()
503
+ end
504
+
505
+ # when both are resources, reduce to Resource[T] or Resource[] (since one was not assignable to the other)
506
+ if t1.is_a?(Types::PResourceType) && t2.is_a?(Types::PResourceType)
507
+ result = Types::PResourceType.new()
508
+ # only Resource[] unless the type name is the same
509
+ if t1.type_name == t2.type_name then result.type_name = t1.type_name end
510
+ # the cross assignability test above has already determined that they do not have the same type and title
511
+ return result
512
+ end
513
+
514
+ # Integers have range, expand the range to the common range
515
+ if t1.is_a?(Types::PIntegerType) && t2.is_a?(Types::PIntegerType)
516
+ t1range = from_to_ordered(t1.from, t1.to)
517
+ t2range = from_to_ordered(t2.from, t2.to)
518
+ t = Types::PIntegerType.new()
519
+ from = [t1range[0], t2range[0]].min
520
+ to = [t1range[1], t2range[1]].max
521
+ t.from = from unless from == TheInfinity
522
+ t.to = to unless to == TheInfinity
523
+ return t
524
+ end
525
+
526
+ # Floats have range, expand the range to the common range
527
+ if t1.is_a?(Types::PFloatType) && t2.is_a?(Types::PFloatType)
528
+ t1range = from_to_ordered(t1.from, t1.to)
529
+ t2range = from_to_ordered(t2.from, t2.to)
530
+ t = Types::PFloatType.new()
531
+ from = [t1range[0], t2range[0]].min
532
+ to = [t1range[1], t2range[1]].max
533
+ t.from = from unless from == TheInfinity
534
+ t.to = to unless to == TheInfinity
535
+ return t
536
+ end
537
+
538
+ if t1.is_a?(Types::PStringType) && t2.is_a?(Types::PStringType)
539
+ t = Types::PStringType.new()
540
+ t.values = t1.values | t2.values
541
+ return t
542
+ end
543
+
544
+ if t1.is_a?(Types::PPatternType) && t2.is_a?(Types::PPatternType)
545
+ t = Types::PPatternType.new()
546
+ # must make copies since patterns are contained types, not data-types
547
+ t.patterns = (t1.patterns | t2.patterns).map {|p| p.copy }
548
+ return t
549
+ end
550
+
551
+ if t1.is_a?(Types::PEnumType) && t2.is_a?(Types::PEnumType)
552
+ # The common type is one that complies with either set
553
+ t = Types::PEnumType.new
554
+ t.values = t1.values | t2.values
555
+ return t
556
+ end
557
+
558
+ if t1.is_a?(Types::PVariantType) && t2.is_a?(Types::PVariantType)
559
+ # The common type is one that complies with either set
560
+ t = Types::PVariantType.new
561
+ t.types = (t1.types | t2.types).map {|opt_t| opt_t.copy }
562
+ return t
563
+ end
564
+
565
+ if t1.is_a?(Types::PRegexpType) && t2.is_a?(Types::PRegexpType)
566
+ # if they were identical, the general rule would return a parameterized regexp
567
+ # since they were not, the result is a generic regexp type
568
+ return Types::PPatternType.new()
569
+ end
570
+
571
+ # Common abstract types, from most specific to most general
572
+ if common_numeric?(t1, t2)
573
+ return Types::PNumericType.new()
574
+ end
575
+
576
+ if common_scalar?(t1, t2)
577
+ return Types::PScalarType.new()
578
+ end
579
+
580
+ if common_data?(t1,t2)
581
+ return Types::PDataType.new()
582
+ end
583
+
584
+ # Meta types Type[Integer] + Type[String] => Type[Data]
585
+ if t1.is_a?(Types::PType) && t2.is_a?(Types::PType)
586
+ type = Types::PType.new()
587
+ type.type = common_type(t1.type, t2.type)
588
+ return type
589
+ end
590
+
591
+ if t1.is_a?(Types::PRubyType) && t2.is_a?(Types::PRubyType)
592
+ if t1.ruby_class == t2.ruby_class
593
+ return t1
594
+ end
595
+ # finding the common super class requires that names are resolved to class
596
+ c1 = Types::ClassLoader.provide_from_type(t1)
597
+ c2 = Types::ClassLoader.provide_from_type(t2)
598
+ if c1 && c2
599
+ c2_superclasses = superclasses(c2)
600
+ superclasses(c1).each do|c1_super|
601
+ c2_superclasses.each do |c2_super|
602
+ if c1_super == c2_super
603
+ result = Types::PRubyType.new()
604
+ result.ruby_class = c1_super.name
605
+ return result
606
+ end
607
+ end
608
+ end
609
+ end
610
+ end
611
+ # If both are RubyObjects
612
+
613
+ if common_pobject?(t1, t2)
614
+ return Types::PObjectType.new()
615
+ end
616
+ end
617
+
618
+ # Produces the superclasses of the given class, including the class
619
+ def superclasses(c)
620
+ result = [c]
621
+ while s = c.superclass
622
+ result << s
623
+ c = s
624
+ end
625
+ result
626
+ end
627
+
628
+ # Produces a string representing the type
629
+ # @api public
630
+ #
631
+ def string(t)
632
+ @@string_visitor.visit_this_0(self, t)
633
+ end
634
+
635
+ # Produces a debug string representing the type (possibly with more information that the regular string format)
636
+ # @api public
637
+ #
638
+ def debug_string(t)
639
+ @@inspect_visitor.visit_this_0(self, t)
640
+ end
641
+
642
+
643
+ # Reduces an enumerable of types to a single common type.
644
+ # @api public
645
+ #
646
+ def reduce_type(enumerable)
647
+ enumerable.reduce(nil) {|memo, t| common_type(memo, t) }
648
+ end
649
+
650
+ # Reduce an enumerable of objects to a single common type
651
+ # @api public
652
+ #
653
+ def infer_and_reduce_type(enumerable)
654
+ reduce_type(enumerable.collect() {|o| infer(o) })
655
+ end
656
+
657
+ # The type of all classes is PType
658
+ # @api private
659
+ #
660
+ def infer_Class(o)
661
+ Types::PType.new()
662
+ end
663
+
664
+ # @api private
665
+ def infer_Object(o)
666
+ type = Types::PRubyType.new()
667
+ type.ruby_class = o.class.name
668
+ type
669
+ end
670
+
671
+ # The type of all types is PType
672
+ # @api private
673
+ #
674
+ def infer_PObjectType(o)
675
+ type = Types::PType.new()
676
+ type.type = o.copy
677
+ type
678
+ end
679
+
680
+ # The type of all types is PType
681
+ # This is the metatype short circuit.
682
+ # @api private
683
+ #
684
+ def infer_PType(o)
685
+ type = Types::PType.new()
686
+ type.type = o.copy
687
+ type
688
+ end
689
+
690
+ # @api private
691
+ def infer_String(o)
692
+ t = Types::PStringType.new()
693
+ t.addValues(o)
694
+ t.size_type = size_as_type(o)
695
+ t
696
+ end
697
+
698
+ # @api private
699
+ def infer_Float(o)
700
+ t = Types::PFloatType.new()
701
+ t.from = o
702
+ t.to = o
703
+ t
704
+ end
705
+
706
+ # @api private
707
+ def infer_Integer(o)
708
+ t = Types::PIntegerType.new()
709
+ t.from = o
710
+ t.to = o
711
+ t
712
+ end
713
+
714
+ # @api private
715
+ def infer_Regexp(o)
716
+ t = Types::PRegexpType.new()
717
+ t.pattern = o.source
718
+ t
719
+ end
720
+
721
+ # @api private
722
+ def infer_NilClass(o)
723
+ Types::PNilType.new()
724
+ end
725
+
726
+ # Inference of :undef as PNilType, all other are Ruby[Symbol]
727
+ # @api private
728
+ def infer_Symbol(o)
729
+ o == :undef ? infer_NilClass(o) : infer_Object(o)
730
+ end
731
+
732
+ # @api private
733
+ def infer_TrueClass(o)
734
+ Types::PBooleanType.new()
735
+ end
736
+
737
+ # @api private
738
+ def infer_FalseClass(o)
739
+ Types::PBooleanType.new()
740
+ end
741
+
742
+ # @api private
743
+ # A Puppet::Parser::Resource, or Puppet::Resource
744
+ #
745
+ def infer_Resource(o)
746
+ t = Types::PResourceType.new()
747
+ t.type_name = o.type.to_s
748
+ t.title = o.title
749
+ t
750
+ end
751
+
752
+ # @api private
753
+ def infer_Array(o)
754
+ type = Types::PArrayType.new()
755
+ type.element_type =
756
+ if o.empty?
757
+ Types::PNilType.new()
758
+ else
759
+ infer_and_reduce_type(o)
760
+ end
761
+ type.size_type = size_as_type(o)
762
+ type
763
+ end
764
+
765
+ # @api private
766
+ def infer_Hash(o)
767
+ type = Types::PHashType.new()
768
+ if o.empty?
769
+ ktype = Types::PNilType.new()
770
+ etype = Types::PNilType.new()
771
+ else
772
+ ktype = infer_and_reduce_type(o.keys())
773
+ etype = infer_and_reduce_type(o.values())
774
+ end
775
+ type.key_type = ktype
776
+ type.element_type = etype
777
+ type.size_type = size_as_type(o)
778
+ type
779
+ end
780
+
781
+ def size_as_type(collection)
782
+ size = collection.size
783
+ t = Types::PIntegerType.new()
784
+ t.from = size
785
+ t.to = size
786
+ t
787
+ end
788
+
789
+ # Common case for everything that intrinsically only has a single type
790
+ def infer_set_Object(o)
791
+ infer(o)
792
+ end
793
+
794
+ def infer_set_Array(o)
795
+ type = Types::PArrayType.new()
796
+ type.element_type = if o.empty?
797
+ Types::PNilType.new()
798
+ else
799
+ t = Types::PVariantType.new()
800
+ t.types = o.map() {|x| infer_set(x) }
801
+ t.types.size == 1 ? t.types[0] : t
802
+ end
803
+ type.size_type = size_as_type(o)
804
+ type
805
+ end
806
+
807
+ def infer_set_Hash(o)
808
+ type = Types::PHashType.new()
809
+ if o.empty?
810
+ ktype = Types::PNilType.new()
811
+ etype = Types::PNilType.new()
812
+ else
813
+ ktype = Types::PVariantType.new()
814
+ ktype.types = o.keys.map() {|k| infer_set(k) }
815
+ etype = Types::PVariantType.new()
816
+ etype.types = o.values.map() {|e| infer_set(e) }
817
+ end
818
+ type.key_type = unwrap_single_variant(ktype)
819
+ type.element_type = unwrap_single_variant(vtype)
820
+ type.size_type = size_as_type(o)
821
+ type
822
+ end
823
+
824
+ def unwrap_single_variant(possible_variant)
825
+ if possible_variant.is_a?(Types::PVariantType) && possible_variant.types.size == 1
826
+ possible_variant.types[0]
827
+ else
828
+ possible_variant
829
+ end
830
+ end
831
+ # False in general type calculator
832
+ # @api private
833
+ def assignable_Object(t, t2)
834
+ false
835
+ end
836
+
837
+ # @api private
838
+ def assignable_PObjectType(t, t2)
839
+ t2.is_a?(Types::PObjectType)
840
+ end
841
+
842
+ # @api private
843
+ def assignable_PNilType(t, t2)
844
+ # Only undef/nil is assignable to nil type
845
+ t2.is_a?(Types::PNilType)
846
+ end
847
+
848
+ # @api private
849
+ def assignable_PScalarType(t, t2)
850
+ t2.is_a?(Types::PScalarType)
851
+ end
852
+
853
+ # @api private
854
+ def assignable_PNumericType(t, t2)
855
+ t2.is_a?(Types::PNumericType)
856
+ end
857
+
858
+ # @api private
859
+ def assignable_PIntegerType(t, t2)
860
+ return false unless t2.is_a?(Types::PIntegerType)
861
+ trange = from_to_ordered(t.from, t.to)
862
+ t2range = from_to_ordered(t2.from, t2.to)
863
+ # If t2 min and max are within the range of t
864
+ trange[0] <= t2range[0] && trange[1] >= t2range[1]
865
+ end
866
+
867
+ # Transform int range to a size constraint
868
+ # if range == nil the constraint is 1,1
869
+ # if range.from == nil min size = 1
870
+ # if range.to == nil max size == Infinity
871
+ #
872
+ def size_range(range)
873
+ return [1,1] if range.nil?
874
+ from = range.from
875
+ to = range.to
876
+ x = from.nil? ? 1 : from
877
+ y = to.nil? ? TheInfinity : to
878
+ if x < y
879
+ [x, y]
880
+ else
881
+ [y, x]
882
+ end
883
+ end
884
+
885
+ # @api private
886
+ def from_to_ordered(from, to)
887
+ x = (from.nil? || from == :default) ? -TheInfinity : from
888
+ y = (to.nil? || to == :default) ? TheInfinity : to
889
+ if x < y
890
+ [x, y]
891
+ else
892
+ [y, x]
893
+ end
894
+ end
895
+
896
+ # @api private
897
+ def assignable_PVariantType(t, t2)
898
+ # Data is a specific variant
899
+ t2 = @data_variant_t if t2.is_a?(Types::PDataType)
900
+ if t2.is_a?(Types::PVariantType)
901
+ # A variant is assignable if all of its options are assignable to one of this type's options
902
+ return true if t == t2
903
+ t2.types.all? do |other|
904
+ # if the other is a Variant, all if its options, but be assignable to one of this type's options
905
+ other = other.is_a?(Types::PDataType) ? @data_variant_t : other
906
+ if other.is_a?(Types::PVariantType)
907
+ assignable?(t, other)
908
+ else
909
+ t.types.any? {|option_t| assignable?(option_t, other) }
910
+ end
911
+ end
912
+ else
913
+ # A variant is assignable if t2 is assignable to any of its types
914
+ t.types.any? { |option_t| assignable?(option_t, t2) }
915
+ end
916
+ end
917
+
918
+ def assignable_PTupleType(t, t2)
919
+ return true if t == t2 || t.types.empty? && (t2.is_a?(Types::PArrayType))
920
+ t_regular = t.types[0..-2]
921
+ t_ranged = t.types[-1]
922
+ t_from, t_to = size_range(t.size_type)
923
+ t_required = t_regular.size + t_from
924
+
925
+ if t2.is_a?(Types::PTupleType)
926
+ t2_regular = t2.types[0..-2]
927
+ t2_ranged = t2.types[-1]
928
+ t2_from, t2_to = size_range(t2.size_type)
929
+ t2_required = t2_regular.size + t2_from
930
+
931
+ # tuples with fewer required entries can not be assigned
932
+ return false if t_required > t2_required
933
+ # tuples with more optionally available entries can not be assigned
934
+ return false if t_regular.size + t_to < t2_regular.size + t2_to
935
+
936
+ t_required.times do |index|
937
+ t_entry = tuple_entry_at(t, t_from, t_to, index)
938
+ t2_entry = tuple_entry_at(t2, t2_from, t2_to, index)
939
+ return false if t2_entry.nil? || !assignable?(t_entry, t2_entry)
940
+ end
941
+ # Handle remainder in t2's required
942
+ (t2_required - t_required).times do |index|
943
+ t_entry = tuple_entry_at(t, t_from, t_to, t_required + index)
944
+ t2_entry = tuple_entry_at(t2, t2_from, t2_to, t_required + index)
945
+ return false if t2_entry.nil? || !assignable?(t_entry, t2_entry)
946
+ end
947
+ # Now only a trailing optional type remains - the last type must always be compatible
948
+ # irrespective of optionality and count
949
+ #
950
+ return assignable?(t_ranged, t2_ranged)
951
+
952
+ elsif t2.is_a?(Types::PArrayType)
953
+ t2_entry = t2.element_type
954
+
955
+ # Array of anything can not be assigned (unless tuple is tuple of anything) - this case
956
+ # was handled at the top of this method.
957
+ #
958
+ return false if t2_entry.nil?
959
+
960
+ # array type may be size constrained
961
+ size_t = t2.size_type || @collection_default_size_t
962
+ min, max = size_t.range
963
+ # Array with fewer min entries can not be assigned
964
+ return false if t_required > min
965
+ # Array with more optionally available entries can not be assigned
966
+ return false if t_regular.size + t_to < max
967
+ # each tuple type must be assignable to the element type
968
+ t_required.times do |index|
969
+ t_entry = tuple_entry_at(t, t_from, t_to, index)
970
+ return false unless assignable?(t_entry, t2_entry)
971
+ end
972
+ # ... and so must the last, possibly optional (ranged) type
973
+ return assignable?(t_ranged, t2_entry)
974
+ end
975
+ end
976
+
977
+ # Produces the tuple entry at the given index given a tuple type, its from/to constraints on the last
978
+ # type, and an index.
979
+ # Produces nil if the index is out of bounds
980
+ # from must be less than to, and from may not be less than 0
981
+ #
982
+ # @api private
983
+ #
984
+ def tuple_entry_at(tuple_t, from, to, index)
985
+ regular = (tuple_t.types.size - 1)
986
+ if index < regular
987
+ tuple_t.types[index]
988
+ elsif index < regular + to
989
+ # in the varargs part
990
+ tuple_t.types[-1]
991
+ else
992
+ nil
993
+ end
994
+ end
995
+
996
+ # @api private
997
+ #
998
+ def assignable_PStructType(t, t2)
999
+ return true if t == t2 || t.elements.empty? && (t2.is_a?(Types::PHashType))
1000
+ h = t.hashed_elements
1001
+ if t2.is_a?(Types::PStructType)
1002
+ h2 = t2.hashed_elements
1003
+ h.size == h2.size && h.all? {|k, v| assignable?(v, h2[k]) }
1004
+ elsif t2.is_a?(Types::PHashType)
1005
+ size_t2 = t2.size_type || @collection_default_size_t
1006
+ size_t = Types::PIntegerType.new
1007
+ size_t.from = size_t.to = h.size
1008
+ # compatible size
1009
+ # hash key type must be string of min 1 size
1010
+ # hash value t must be assignable to each key
1011
+ element_type = t2.element_type
1012
+ assignable?(size_t, size_t2) &&
1013
+ assignable?(@non_empty_string_t, t2.key_type) &&
1014
+ h.all? {|k,v| assignable?(v, element_type) }
1015
+ else
1016
+ false
1017
+ end
1018
+ end
1019
+
1020
+ # @api private
1021
+ def assignable_POptionalType(t, t2)
1022
+ return true if t2.is_a?(Types::PNilType)
1023
+ if t2.is_a?(Types::POptionalType)
1024
+ assignable?(t.optional_type, t2.optional_type)
1025
+ else
1026
+ assignable?(t.optional_type, t2)
1027
+ end
1028
+ end
1029
+
1030
+ # @api private
1031
+ def assignable_PEnumType(t, t2)
1032
+ return true if t == t2 || (t.values.empty? && (t2.is_a?(Types::PStringType) || t2.is_a?(Types::PEnumType)))
1033
+ if t2.is_a?(Types::PStringType)
1034
+ # if the set of strings are all found in the set of enums
1035
+ t2.values.all? { |s| t.values.any? { |e| e == s }}
1036
+ else
1037
+ false
1038
+ end
1039
+ end
1040
+
1041
+ # @api private
1042
+ def assignable_PStringType(t, t2)
1043
+ if t.values.empty?
1044
+ # A general string is assignable by any other string or pattern restricted string
1045
+ # if the string has a size constraint it does not match since there is no reasonable way
1046
+ # to compute the min/max length a pattern will match. For enum, it is possible to test that
1047
+ # each enumerator value is within range
1048
+ size_t = t.size_type || @collection_default_size_t
1049
+ case t2
1050
+ when Types::PStringType
1051
+ # true if size compliant
1052
+ size_t2 = t2.size_type || @collection_default_size_t
1053
+ assignable?(size_t, size_t2)
1054
+
1055
+ when Types::PPatternType
1056
+ # true if size constraint is at least 0 to +Infinity (which is the same as the default)
1057
+ assignable?(size_t, @collection_default_size_t)
1058
+
1059
+ when Types::PEnumType
1060
+ if t2.values
1061
+ # true if all enum values are within range
1062
+ min, max = t2.values.map(&:size).minmax
1063
+ trange = from_to_ordered(size_t.from, size_t.to)
1064
+ t2range = [min, max]
1065
+ # If t2 min and max are within the range of t
1066
+ trange[0] <= t2range[0] && trange[1] >= t2range[1]
1067
+ else
1068
+ # no string can match this enum anyway since it does not accept anything
1069
+ false
1070
+ end
1071
+ end
1072
+ elsif t2.is_a?(Types::PStringType)
1073
+ # A specific string acts as a set of strings - must have exactly the same strings
1074
+ # In this case, size does not matter since the definition is very precise anyway
1075
+ Set.new(t.values) == Set.new(t2.values)
1076
+ else
1077
+ # All others are false, since no other type describes the same set of specific strings
1078
+ false
1079
+ end
1080
+ end
1081
+
1082
+ # @api private
1083
+ def assignable_PPatternType(t, t2)
1084
+ return true if t == t2
1085
+ return false unless t2.is_a?(Types::PStringType) || t2.is_a?(Types::PEnumType)
1086
+
1087
+ if t2.values.empty?
1088
+ # Strings / Enums (unknown which ones) cannot all match a pattern, but if there is no pattern it is ok
1089
+ # (There should really always be a pattern, but better safe than sorry).
1090
+ return t.patterns.empty? ? true : false
1091
+ end
1092
+ # all strings in String/Enum type must match one of the patterns in Pattern type
1093
+ regexps = t.patterns.map {|p| p.regexp }
1094
+ t2.values.all? { |v| regexps.any? {|re| re.match(v) } }
1095
+ end
1096
+
1097
+ # @api private
1098
+ def assignable_PFloatType(t, t2)
1099
+ return false unless t2.is_a?(Types::PFloatType)
1100
+ trange = from_to_ordered(t.from, t.to)
1101
+ t2range = from_to_ordered(t2.from, t2.to)
1102
+ # If t2 min and max are within the range of t
1103
+ trange[0] <= t2range[0] && trange[1] >= t2range[1]
1104
+ end
1105
+
1106
+ # @api private
1107
+ def assignable_PBooleanType(t, t2)
1108
+ t2.is_a?(Types::PBooleanType)
1109
+ end
1110
+
1111
+ # @api private
1112
+ def assignable_PRegexpType(t, t2)
1113
+ t2.is_a?(Types::PRegexpType) && (t.pattern.nil? || t.pattern == t2.pattern)
1114
+ end
1115
+
1116
+ # @api private
1117
+ def assignable_PCollectionType(t, t2)
1118
+ size_t = t.size_type || @collection_default_size_t
1119
+ case t2
1120
+ when Types::PCollectionType
1121
+ size_t2 = t2.size_type || @collection_default_size_t
1122
+ assignable?(size_t, size_t2)
1123
+ when Types::PTupleType
1124
+ # compute the tuple's min/max size, and check if that size matches
1125
+ from, to = size_range(t2.size_type)
1126
+ t2s = Types::PIntegerType.new()
1127
+ t2s.from = t2.types.size - 1 + from
1128
+ t2s.to = t2.types.size - 1 + to
1129
+ assignable?(size_t, t2s)
1130
+ when Types::PStructType
1131
+ from = to = t2.elements.size
1132
+ t2s = Types::PIntegerType.new()
1133
+ t2s.from = from
1134
+ t2s.to = to
1135
+ assignable?(size_t, t2s)
1136
+ else
1137
+ false
1138
+ end
1139
+ end
1140
+
1141
+ # @api private
1142
+ def assignable_PType(t, t2)
1143
+ return false unless t2.is_a?(Types::PType)
1144
+ return true if t.type.nil? # wide enough to handle all types
1145
+ return false if t2.type.nil? # wider than t
1146
+ assignable?(t.type, t2.type)
1147
+ end
1148
+
1149
+ # Array is assignable if t2 is an Array and t2's element type is assignable, or if t2 is a Tuple
1150
+ # where
1151
+ # @api private
1152
+ def assignable_PArrayType(t, t2)
1153
+ if t2.is_a?(Types::PArrayType)
1154
+ return false unless assignable?(t.element_type, t2.element_type)
1155
+ assignable_PCollectionType(t, t2)
1156
+
1157
+ elsif t2.is_a?(Types::PTupleType)
1158
+ return false unless t2.types.all? {|t2_element| assignable?(t.element_type, t2_element) }
1159
+ t2_regular = t2.types[0..-2]
1160
+ t2_ranged = t2.types[-1]
1161
+ t2_from, t2_to = size_range(t2.size_type)
1162
+ t2_required = t2_regular.size + t2_from
1163
+
1164
+ t_entry = t.element_type
1165
+
1166
+ # Tuple of anything can not be assigned (unless array is tuple of anything) - this case
1167
+ # was handled at the top of this method.
1168
+ #
1169
+ return false if t_entry.nil?
1170
+
1171
+ # array type may be size constrained
1172
+ size_t = t.size_type || @collection_default_size_t
1173
+ min, max = size_t.range
1174
+ # Tuple with fewer min entries can not be assigned
1175
+ return false if t2_required < min
1176
+ # Tuple with more optionally available entries can not be assigned
1177
+ return false if t2_regular.size + t2_to > max
1178
+ # each tuple type must be assignable to the element type
1179
+ t2_required.times do |index|
1180
+ t2_entry = tuple_entry_at(t2, t2_from, t2_to, index)
1181
+ return false unless assignable?(t_entry, t2_entry)
1182
+ end
1183
+ # ... and so must the last, possibly optional (ranged) type
1184
+ return assignable?(t_entry, t2_ranged)
1185
+ else
1186
+ false
1187
+ end
1188
+ end
1189
+
1190
+ # Hash is assignable if t2 is a Hash and t2's key and element types are assignable
1191
+ # @api private
1192
+ def assignable_PHashType(t, t2)
1193
+ case t2
1194
+ when Types::PHashType
1195
+ return false unless assignable?(t.key_type, t2.key_type) && assignable?(t.element_type, t2.element_type)
1196
+ assignable_PCollectionType(t, t2)
1197
+ when Types::PStructType
1198
+ # hash must accept String as key type
1199
+ # hash must accept all value types
1200
+ # hash must accept the size of the struct
1201
+ size_t = t.size_type || @collection_default_size_t
1202
+ min, max = size_t.range
1203
+ struct_size = t2.elements.size
1204
+ element_type = t.element_type
1205
+ ( struct_size >= min && struct_size <= max &&
1206
+ assignable?(t.key_type, @non_emptry_string_t) &&
1207
+ t2.hashed_elements.all? {|k,v| assignable?(element_type, v) })
1208
+ else
1209
+ false
1210
+ end
1211
+ end
1212
+
1213
+ # @api private
1214
+ def assignable_PCatalogEntryType(t1, t2)
1215
+ t2.is_a?(Types::PCatalogEntryType)
1216
+ end
1217
+
1218
+ # @api private
1219
+ def assignable_PHostClassType(t1, t2)
1220
+ return false unless t2.is_a?(Types::PHostClassType)
1221
+ # Class = Class[name}, Class[name] != Class
1222
+ return true if t1.class_name.nil?
1223
+ # Class[name] = Class[name]
1224
+ return t1.class_name == t2.class_name
1225
+ end
1226
+
1227
+ # @api private
1228
+ def assignable_PResourceType(t1, t2)
1229
+ return false unless t2.is_a?(Types::PResourceType)
1230
+ return true if t1.type_name.nil?
1231
+ return false if t1.type_name != t2.type_name
1232
+ return true if t1.title.nil?
1233
+ return t1.title == t2.title
1234
+ end
1235
+
1236
+ # Data is assignable by other Data and by Array[Data] and Hash[Scalar, Data]
1237
+ # @api private
1238
+ def assignable_PDataType(t, t2)
1239
+ t2.is_a?(Types::PDataType) || assignable?(@data_variant_t, t2)
1240
+ end
1241
+
1242
+ # Assignable if t2's ruby class is same or subclass of t1's ruby class
1243
+ # @api private
1244
+ def assignable_PRubyType(t1, t2)
1245
+ return false unless t2.is_a?(Types::PRubyType)
1246
+ return true if t1.ruby_class.nil? # t1 is wider
1247
+ return false if t2.ruby_class.nil? # t1 not nil, so t2 can not be wider
1248
+ c1 = class_from_string(t1.ruby_class)
1249
+ c2 = class_from_string(t2.ruby_class)
1250
+ return false unless c1.is_a?(Class) && c2.is_a?(Class)
1251
+ !!(c2 <= c1)
1252
+ end
1253
+
1254
+ # @api private
1255
+ def debug_string_Object(t)
1256
+ string(t)
1257
+ end
1258
+
1259
+ # @api private
1260
+ def string_PType(t)
1261
+ if t.type.nil?
1262
+ "Type"
1263
+ else
1264
+ "Type[#{string(t.type)}]"
1265
+ end
1266
+ end
1267
+
1268
+ # @api private
1269
+ def string_NilClass(t) ; '?' ; end
1270
+
1271
+ # @api private
1272
+ def string_String(t) ; t ; end
1273
+
1274
+ # @api private
1275
+ def string_PObjectType(t) ; "Object" ; end
1276
+
1277
+ # @api private
1278
+ def string_PNilType(t) ; 'Undef' ; end
1279
+
1280
+ # @api private
1281
+ def string_PBooleanType(t) ; "Boolean" ; end
1282
+
1283
+ # @api private
1284
+ def string_PScalarType(t) ; "Scalar" ; end
1285
+
1286
+ # @api private
1287
+ def string_PDataType(t) ; "Data" ; end
1288
+
1289
+ # @api private
1290
+ def string_PNumericType(t) ; "Numeric" ; end
1291
+
1292
+ # @api private
1293
+ def string_PIntegerType(t)
1294
+ range = range_array_part(t)
1295
+ unless range.empty?
1296
+ "Integer[#{range.join(', ')}]"
1297
+ else
1298
+ "Integer"
1299
+ end
1300
+ end
1301
+
1302
+ # Produces a string from an Integer range type that is used inside other type strings
1303
+ # @api private
1304
+ def range_array_part(t)
1305
+ return [] if t.nil? || (t.from.nil? && t.to.nil?)
1306
+ [t.from.nil? ? 'default' : t.from , t.to.nil? ? 'default' : t.to ]
1307
+ end
1308
+
1309
+ # @api private
1310
+ def string_PFloatType(t)
1311
+ range = range_array_part(t)
1312
+ unless range.empty?
1313
+ "Float[#{range.join(', ')}]"
1314
+ else
1315
+ "Float"
1316
+ end
1317
+ end
1318
+
1319
+ # @api private
1320
+ def string_PRegexpType(t)
1321
+ t.pattern.nil? ? "Regexp" : "Regexp[#{t.regexp.inspect}]"
1322
+ end
1323
+
1324
+ # @api private
1325
+ def string_PStringType(t)
1326
+ # skip values in regular output - see debug_string
1327
+ range = range_array_part(t.size_type)
1328
+ unless range.empty?
1329
+ "String[#{range.join(', ')}]"
1330
+ else
1331
+ "String"
1332
+ end
1333
+ end
1334
+
1335
+ # @api private
1336
+ def debug_string_PStringType(t)
1337
+ range = range_array_part(t.size_type)
1338
+ range_part = range.empty? ? '' : '[' << range.join(' ,') << '], '
1339
+ "String[" << range_part << (t.values.map {|s| "'#{s}'" }).join(', ') << ']'
1340
+ end
1341
+
1342
+ # @api private
1343
+ def string_PEnumType(t)
1344
+ return "Enum" if t.values.empty?
1345
+ "Enum[" << t.values.map {|s| "'#{s}'" }.join(', ') << ']'
1346
+ end
1347
+
1348
+ # @api private
1349
+ def string_PVariantType(t)
1350
+ return "Variant" if t.types.empty?
1351
+ "Variant[" << t.types.map {|t2| string(t2) }.join(', ') << ']'
1352
+ end
1353
+
1354
+ # @api private
1355
+ def string_PTupleType(t)
1356
+ range = range_array_part(t.size_type)
1357
+ return "Tuple" if t.types.empty?
1358
+ s = "Tuple[" << t.types.map {|t2| string(t2) }.join(', ')
1359
+ unless range.empty?
1360
+ s << ", " << range.join(', ')
1361
+ end
1362
+ s << "]"
1363
+ s
1364
+ end
1365
+
1366
+ # @api private
1367
+ def string_PStructType(t)
1368
+ return "Struct" if t.elements.empty?
1369
+ "Struct[{" << t.elements.map {|element| string(element) }.join(', ') << "}]"
1370
+ end
1371
+
1372
+ def string_PStructElement(t)
1373
+ "'#{t.name}'=>#{string(t.type)}"
1374
+ end
1375
+
1376
+ # @api private
1377
+ def string_PPatternType(t)
1378
+ return "Pattern" if t.patterns.empty?
1379
+ "Pattern[" << t.patterns.map {|s| "#{s.regexp.inspect}" }.join(', ') << ']'
1380
+ end
1381
+
1382
+ # @api private
1383
+ def string_PCollectionType(t)
1384
+ range = range_array_part(t.size_type)
1385
+ unless range.empty?
1386
+ "Collection[#{range.join(', ')}]"
1387
+ else
1388
+ "Collection"
1389
+ end
1390
+ end
1391
+
1392
+ # @api private
1393
+ def string_PRubyType(t) ; "Ruby[#{string(t.ruby_class)}]" ; end
1394
+
1395
+ # @api private
1396
+ def string_PArrayType(t)
1397
+ parts = [string(t.element_type)] + range_array_part(t.size_type)
1398
+ "Array[#{parts.join(', ')}]"
1399
+ end
1400
+
1401
+ # @api private
1402
+ def string_PHashType(t)
1403
+ parts = [string(t.key_type), string(t.element_type)] + range_array_part(t.size_type)
1404
+ "Hash[#{parts.join(', ')}]"
1405
+ end
1406
+
1407
+ # @api private
1408
+ def string_PCatalogEntryType(t)
1409
+ "CatalogEntry"
1410
+ end
1411
+
1412
+ # @api private
1413
+ def string_PHostClassType(t)
1414
+ if t.class_name
1415
+ "Class[#{t.class_name}]"
1416
+ else
1417
+ "Class"
1418
+ end
1419
+ end
1420
+
1421
+ # @api private
1422
+ def string_PResourceType(t)
1423
+ if t.type_name
1424
+ if t.title
1425
+ "#{t.type_name.capitalize}['#{t.title}']"
1426
+ else
1427
+ "#{t.type_name.capitalize}"
1428
+ end
1429
+ else
1430
+ "Resource"
1431
+ end
1432
+ end
1433
+
1434
+ def string_POptionalType(t)
1435
+ if t.optional_type.nil?
1436
+ "Optional"
1437
+ else
1438
+ "Optional[#{string(t.optional_type)}]"
1439
+ end
1440
+ end
1441
+
1442
+ # Catches all non enumerable types
1443
+ # @api private
1444
+ def enumerable_Object(o)
1445
+ nil
1446
+ end
1447
+
1448
+ # @api private
1449
+ def enumerable_PIntegerType(t)
1450
+ # Not enumerable if representing an infinite range
1451
+ return nil if t.size == TheInfinity
1452
+ t
1453
+ end
1454
+
1455
+ private
1456
+
1457
+ def class_from_string(str)
1458
+ begin
1459
+ str.split('::').inject(Object) do |memo, name_segment|
1460
+ memo.const_get(name_segment)
1461
+ end
1462
+ rescue NameError
1463
+ return nil
1464
+ end
1465
+ end
1466
+
1467
+ def common_data?(t1, t2)
1468
+ assignable?(@data_t, t1) && assignable?(@data_t, t2)
1469
+ end
1470
+
1471
+ def common_scalar?(t1, t2)
1472
+ assignable?(@scalar_t, t1) && assignable?(@scalar_t, t2)
1473
+ end
1474
+
1475
+ def common_numeric?(t1, t2)
1476
+ assignable?(@numeric_t, t1) && assignable?(@numeric_t, t2)
1477
+ end
1478
+
1479
+ def common_pobject?(t1, t2)
1480
+ assignable?(@t, t1) && assignable?(@t, t2)
1481
+ end
1482
+ end