puppet 3.6.2 → 3.7.0

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 (751) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -3
  3. data/Gemfile +14 -10
  4. data/README.md +1 -1
  5. data/ext/build_defaults.yaml +16 -1
  6. data/ext/debian/control +3 -2
  7. data/ext/debian/puppet-common.dirs +1 -0
  8. data/ext/debian/puppet-common.postinst +8 -8
  9. data/ext/debian/puppet-common.postrm +2 -1
  10. data/ext/project_data.yaml +16 -12
  11. data/ext/rack/example-passenger-vhost.conf +2 -2
  12. data/ext/redhat/puppet.spec.erb +6 -3
  13. data/ext/windows/service/daemon.rb +47 -41
  14. data/install.rb +1 -1
  15. data/lib/puppet.rb +34 -24
  16. data/lib/puppet/application.rb +34 -1
  17. data/lib/puppet/application/agent.rb +9 -8
  18. data/lib/puppet/application/apply.rb +14 -5
  19. data/lib/puppet/application/doc.rb +4 -11
  20. data/lib/puppet/application/master.rb +19 -17
  21. data/lib/puppet/application/queue.rb +1 -1
  22. data/lib/puppet/application/resource.rb +0 -1
  23. data/lib/puppet/configurer.rb +39 -2
  24. data/lib/puppet/configurer/downloader.rb +5 -10
  25. data/lib/puppet/configurer/downloader_factory.rb +34 -0
  26. data/lib/puppet/configurer/plugin_handler.rb +11 -17
  27. data/lib/puppet/defaults.rb +244 -119
  28. data/lib/puppet/environments.rb +8 -0
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/external/pson/pure/generator.rb +1 -8
  31. data/lib/puppet/face/ca.rb +7 -0
  32. data/lib/puppet/face/file/download.rb +5 -2
  33. data/lib/puppet/face/file/store.rb +1 -1
  34. data/lib/puppet/face/instrumentation_data.rb +2 -1
  35. data/lib/puppet/face/instrumentation_listener.rb +2 -1
  36. data/lib/puppet/face/instrumentation_probe.rb +2 -1
  37. data/lib/puppet/face/module/build.rb +2 -2
  38. data/lib/puppet/face/module/generate.rb +20 -12
  39. data/lib/puppet/face/module/install.rb +4 -3
  40. data/lib/puppet/face/module/uninstall.rb +7 -0
  41. data/lib/puppet/face/module/upgrade.rb +11 -3
  42. data/lib/puppet/face/node/clean.rb +1 -1
  43. data/lib/puppet/face/parser.rb +99 -7
  44. data/lib/puppet/feature/base.rb +18 -12
  45. data/lib/puppet/feature/cfacter.rb +14 -0
  46. data/lib/puppet/feature/pe_license.rb +4 -0
  47. data/lib/puppet/file_bucket/dipper.rb +19 -12
  48. data/lib/puppet/file_bucket/file.rb +73 -10
  49. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  50. data/lib/puppet/file_system.rb +1 -1
  51. data/lib/puppet/file_system/file19.rb +41 -0
  52. data/lib/puppet/file_system/file19windows.rb +0 -1
  53. data/lib/puppet/file_system/uniquefile.rb +190 -0
  54. data/lib/puppet/forge.rb +34 -7
  55. data/lib/puppet/forge/errors.rb +5 -6
  56. data/lib/puppet/forge/repository.rb +14 -2
  57. data/lib/puppet/functions.rb +19 -12
  58. data/lib/puppet/functions/assert_type.rb +27 -10
  59. data/lib/puppet/functions/each.rb +111 -0
  60. data/lib/puppet/functions/epp.rb +54 -0
  61. data/lib/puppet/functions/filter.rb +113 -0
  62. data/lib/puppet/functions/inline_epp.rb +88 -0
  63. data/lib/puppet/functions/map.rb +97 -0
  64. data/lib/puppet/functions/match.rb +102 -0
  65. data/lib/puppet/functions/reduce.rb +94 -0
  66. data/lib/puppet/functions/slice.rb +126 -0
  67. data/lib/puppet/functions/with.rb +23 -0
  68. data/lib/puppet/indirector/catalog/compiler.rb +4 -4
  69. data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
  70. data/lib/puppet/indirector/facts/couch.rb +3 -1
  71. data/lib/puppet/indirector/facts/facter.rb +52 -65
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
  73. data/lib/puppet/indirector/hiera.rb +48 -0
  74. data/lib/puppet/indirector/indirection.rb +1 -1
  75. data/lib/puppet/indirector/request.rb +9 -3
  76. data/lib/puppet/indirector/resource/ral.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +7 -3
  78. data/lib/puppet/loaders.rb +0 -1
  79. data/lib/puppet/module.rb +2 -1
  80. data/lib/puppet/module_tool.rb +2 -0
  81. data/lib/puppet/module_tool/applications/application.rb +4 -5
  82. data/lib/puppet/module_tool/applications/builder.rb +64 -5
  83. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
  84. data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
  85. data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
  86. data/lib/puppet/module_tool/dependency.rb +12 -0
  87. data/lib/puppet/module_tool/errors/shared.rb +1 -1
  88. data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +6 -1
  90. data/lib/puppet/module_tool/metadata.rb +53 -3
  91. data/lib/puppet/module_tool/modulefile.rb +1 -1
  92. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
  93. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  94. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
  95. data/lib/puppet/module_tool/tar/mini.rb +20 -2
  96. data/lib/puppet/network/http.rb +5 -0
  97. data/lib/puppet/network/http/api/v1.rb +2 -2
  98. data/lib/puppet/network/http/api/v2/environments.rb +15 -1
  99. data/lib/puppet/network/http/connection.rb +54 -68
  100. data/lib/puppet/network/http/factory.rb +44 -0
  101. data/lib/puppet/network/http/handler.rb +12 -6
  102. data/lib/puppet/network/http/nocache_pool.rb +21 -0
  103. data/lib/puppet/network/http/pool.rb +120 -0
  104. data/lib/puppet/network/http/rack/rest.rb +3 -1
  105. data/lib/puppet/network/http/session.rb +17 -0
  106. data/lib/puppet/network/http/site.rb +39 -0
  107. data/lib/puppet/network/http/webrick/rest.rb +3 -1
  108. data/lib/puppet/network/http_pool.rb +3 -4
  109. data/lib/puppet/node.rb +19 -6
  110. data/lib/puppet/node/environment.rb +34 -8
  111. data/lib/puppet/parser/ast/collection.rb +4 -0
  112. data/lib/puppet/parser/ast/collexpr.rb +1 -1
  113. data/lib/puppet/parser/ast/node.rb +5 -0
  114. data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
  115. data/lib/puppet/parser/compiler.rb +66 -38
  116. data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
  117. data/lib/puppet/parser/files.rb +76 -33
  118. data/lib/puppet/parser/functions.rb +1 -7
  119. data/lib/puppet/parser/functions/assert_type.rb +31 -0
  120. data/lib/puppet/parser/functions/contain.rb +15 -5
  121. data/lib/puppet/parser/functions/create_resources.rb +5 -1
  122. data/lib/puppet/parser/functions/digest.rb +5 -0
  123. data/lib/puppet/parser/functions/each.rb +46 -107
  124. data/lib/puppet/parser/functions/epp.rb +13 -9
  125. data/lib/puppet/parser/functions/file.rb +20 -12
  126. data/lib/puppet/parser/functions/filter.rb +32 -88
  127. data/lib/puppet/parser/functions/include.rb +12 -24
  128. data/lib/puppet/parser/functions/inline_epp.rb +9 -12
  129. data/lib/puppet/parser/functions/lookup.rb +1 -1
  130. data/lib/puppet/parser/functions/map.rb +30 -83
  131. data/lib/puppet/parser/functions/match.rb +28 -0
  132. data/lib/puppet/parser/functions/reduce.rb +69 -98
  133. data/lib/puppet/parser/functions/require.rb +13 -5
  134. data/lib/puppet/parser/functions/search.rb +6 -1
  135. data/lib/puppet/parser/functions/slice.rb +35 -103
  136. data/lib/puppet/parser/functions/template.rb +12 -5
  137. data/lib/puppet/parser/functions/with.rb +21 -0
  138. data/lib/puppet/parser/lexer.rb +1 -1
  139. data/lib/puppet/parser/parser_factory.rb +21 -33
  140. data/lib/puppet/parser/resource.rb +2 -3
  141. data/lib/puppet/parser/scope.rb +85 -15
  142. data/lib/puppet/pops.rb +9 -11
  143. data/lib/puppet/pops/adapters.rb +2 -1
  144. data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
  145. data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
  146. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
  148. data/lib/puppet/pops/binder/bindings_model.rb +58 -191
  149. data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
  150. data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
  151. data/lib/puppet/pops/binder/injector.rb +9 -9
  152. data/lib/puppet/pops/binder/key_factory.rb +2 -2
  153. data/lib/puppet/pops/binder/lookup.rb +14 -6
  154. data/lib/puppet/pops/binder/producers.rb +9 -12
  155. data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
  156. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
  157. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
  158. data/lib/puppet/pops/evaluator/closure.rb +151 -35
  159. data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
  160. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
  161. data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
  162. data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
  163. data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
  164. data/lib/puppet/pops/functions/dispatch.rb +9 -4
  165. data/lib/puppet/pops/functions/dispatcher.rb +2 -169
  166. data/lib/puppet/pops/issue_reporter.rb +14 -6
  167. data/lib/puppet/pops/issues.rb +96 -21
  168. data/lib/puppet/pops/loader/base_loader.rb +3 -3
  169. data/lib/puppet/pops/loader/loader.rb +1 -1
  170. data/lib/puppet/pops/loader/loader_paths.rb +2 -21
  171. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
  172. data/lib/puppet/pops/loader/static_loader.rb +12 -2
  173. data/lib/puppet/pops/model/ast_transformer.rb +4 -24
  174. data/lib/puppet/pops/model/factory.rb +72 -10
  175. data/lib/puppet/pops/model/model.rb +82 -574
  176. data/lib/puppet/pops/model/model_label_provider.rb +4 -2
  177. data/lib/puppet/pops/model/model_meta.rb +576 -0
  178. data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
  179. data/lib/puppet/pops/parser/egrammar.ra +209 -221
  180. data/lib/puppet/pops/parser/eparser.rb +1459 -1431
  181. data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
  182. data/lib/puppet/pops/parser/lexer2.rb +14 -10
  183. data/lib/puppet/pops/parser/lexer_support.rb +6 -0
  184. data/lib/puppet/pops/parser/locator.rb +1 -1
  185. data/lib/puppet/pops/parser/parser_support.rb +31 -49
  186. data/lib/puppet/pops/patterns.rb +10 -10
  187. data/lib/puppet/pops/semantic_error.rb +1 -1
  188. data/lib/puppet/pops/types/class_loader.rb +24 -13
  189. data/lib/puppet/pops/types/type_calculator.rb +188 -87
  190. data/lib/puppet/pops/types/type_factory.rb +79 -53
  191. data/lib/puppet/pops/types/type_parser.rb +22 -16
  192. data/lib/puppet/pops/types/types.rb +283 -392
  193. data/lib/puppet/pops/types/types_meta.rb +223 -0
  194. data/lib/puppet/pops/utils.rb +16 -14
  195. data/lib/puppet/pops/validation/checker4_0.rb +264 -18
  196. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  197. data/lib/puppet/pops/visitor.rb +0 -103
  198. data/lib/puppet/provider/exec.rb +10 -1
  199. data/lib/puppet/provider/file/windows.rb +3 -4
  200. data/lib/puppet/provider/group/windows_adsi.rb +10 -10
  201. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
  202. data/lib/puppet/provider/package/apt.rb +5 -1
  203. data/lib/puppet/provider/package/gem.rb +7 -3
  204. data/lib/puppet/provider/package/openbsd.rb +84 -7
  205. data/lib/puppet/provider/package/pacman.rb +29 -4
  206. data/lib/puppet/provider/package/rpm.rb +5 -7
  207. data/lib/puppet/provider/package/sun.rb +5 -1
  208. data/lib/puppet/provider/package/windows.rb +6 -1
  209. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  210. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  211. data/lib/puppet/provider/package/windows/package.rb +13 -1
  212. data/lib/puppet/provider/package/yum.rb +7 -3
  213. data/lib/puppet/provider/package/zypper.rb +5 -1
  214. data/lib/puppet/provider/parsedfile.rb +17 -1
  215. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
  216. data/lib/puppet/provider/service/freebsd.rb +12 -12
  217. data/lib/puppet/provider/service/init.rb +5 -0
  218. data/lib/puppet/provider/service/launchd.rb +0 -3
  219. data/lib/puppet/provider/service/openbsd.rb +8 -7
  220. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  221. data/lib/puppet/provider/sshkey/parsed.rb +5 -0
  222. data/lib/puppet/provider/user/user_role_add.rb +5 -4
  223. data/lib/puppet/provider/user/windows_adsi.rb +8 -8
  224. data/lib/puppet/provider/zone/solaris.rb +1 -1
  225. data/lib/puppet/reference/metaparameter.rb +8 -6
  226. data/lib/puppet/reports/store.rb +4 -9
  227. data/lib/puppet/resource.rb +75 -11
  228. data/lib/puppet/resource/catalog.rb +9 -7
  229. data/lib/puppet/resource/type.rb +27 -0
  230. data/lib/puppet/settings.rb +61 -41
  231. data/lib/puppet/settings/base_setting.rb +9 -3
  232. data/lib/puppet/settings/environment_conf.rb +32 -4
  233. data/lib/puppet/settings/file_setting.rb +9 -1
  234. data/lib/puppet/settings/priority_setting.rb +5 -5
  235. data/lib/puppet/ssl.rb +1 -0
  236. data/lib/puppet/ssl/certificate_authority.rb +15 -6
  237. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
  238. data/lib/puppet/ssl/host.rb +3 -2
  239. data/lib/puppet/ssl/inventory.rb +11 -6
  240. data/lib/puppet/ssl/validator/default_validator.rb +1 -0
  241. data/lib/puppet/ssl/validator/no_validator.rb +3 -0
  242. data/lib/puppet/transaction.rb +29 -0
  243. data/lib/puppet/transaction/resource_harness.rb +16 -3
  244. data/lib/puppet/type.rb +71 -49
  245. data/lib/puppet/type/exec.rb +36 -8
  246. data/lib/puppet/type/file.rb +56 -16
  247. data/lib/puppet/type/file/content.rb +3 -3
  248. data/lib/puppet/type/file/mode.rb +12 -3
  249. data/lib/puppet/type/file/source.rb +4 -1
  250. data/lib/puppet/type/group.rb +1 -1
  251. data/lib/puppet/type/mount.rb +1 -3
  252. data/lib/puppet/type/resources.rb +59 -35
  253. data/lib/puppet/type/ssh_authorized_key.rb +54 -16
  254. data/lib/puppet/type/sshkey.rb +1 -1
  255. data/lib/puppet/type/user.rb +17 -11
  256. data/lib/puppet/type/yumrepo.rb +59 -8
  257. data/lib/puppet/type/zone.rb +3 -6
  258. data/lib/puppet/util.rb +64 -55
  259. data/lib/puppet/util/autoload.rb +2 -2
  260. data/lib/puppet/util/colors.rb +61 -19
  261. data/lib/puppet/util/command_line.rb +21 -4
  262. data/lib/puppet/util/execution.rb +41 -29
  263. data/lib/puppet/util/feature.rb +15 -4
  264. data/lib/puppet/util/filetype.rb +6 -2
  265. data/lib/puppet/util/http_proxy.rb +29 -2
  266. data/lib/puppet/util/lockfile.rb +1 -1
  267. data/lib/puppet/util/log/destinations.rb +7 -3
  268. data/lib/puppet/util/logging.rb +44 -14
  269. data/lib/puppet/util/pidlock.rb +11 -5
  270. data/lib/puppet/util/posix.rb +21 -31
  271. data/lib/puppet/util/profiler.rb +17 -9
  272. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  273. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  274. data/lib/puppet/util/profiler/logging.rb +12 -11
  275. data/lib/puppet/util/profiler/wall_clock.rb +7 -6
  276. data/lib/puppet/util/rdoc.rb +8 -1
  277. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  278. data/lib/puppet/util/suidmanager.rb +1 -8
  279. data/lib/puppet/util/windows.rb +14 -3
  280. data/lib/puppet/util/windows/access_control_list.rb +4 -4
  281. data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
  282. data/lib/puppet/util/windows/api_types.rb +255 -0
  283. data/lib/puppet/util/windows/com.rb +224 -0
  284. data/lib/puppet/util/windows/error.rb +72 -5
  285. data/lib/puppet/util/windows/file.rb +254 -132
  286. data/lib/puppet/util/windows/process.rb +293 -177
  287. data/lib/puppet/util/windows/registry.rb +12 -2
  288. data/lib/puppet/util/windows/root_certs.rb +16 -9
  289. data/lib/puppet/util/windows/security.rb +501 -232
  290. data/lib/puppet/util/windows/sid.rb +80 -36
  291. data/lib/puppet/util/windows/string.rb +2 -0
  292. data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
  293. data/lib/puppet/util/windows/user.rb +241 -57
  294. data/lib/puppet/vendor.rb +3 -1
  295. data/lib/puppet/vendor/load_pathspec.rb +1 -0
  296. data/lib/puppet/vendor/load_rgen.rb +1 -0
  297. data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  298. data/lib/puppet/vendor/pathspec/LICENSE +201 -0
  299. data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  300. data/lib/puppet/vendor/pathspec/README.md +53 -0
  301. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
  302. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  303. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  304. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  305. data/lib/puppet/vendor/require_vendored.rb +2 -0
  306. data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
  307. data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
  308. data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
  309. data/lib/puppet/vendor/rgen/README.rdoc +78 -0
  310. data/lib/puppet/vendor/rgen/Rakefile +41 -0
  311. data/lib/puppet/vendor/rgen/TODO +41 -0
  312. data/lib/puppet/vendor/rgen/anounce.txt +61 -0
  313. data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
  314. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
  315. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
  316. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
  317. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
  318. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
  319. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
  320. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
  321. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
  322. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  323. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
  324. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
  325. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
  326. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
  327. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
  328. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
  329. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
  330. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
  331. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
  332. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
  333. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
  334. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
  335. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
  336. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
  337. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
  338. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
  339. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
  340. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
  341. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  342. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
  343. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
  344. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
  345. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
  346. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
  347. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
  348. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
  349. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
  350. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
  351. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
  352. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
  353. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
  354. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
  355. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
  356. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  357. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
  358. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  359. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
  360. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
  361. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
  362. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
  363. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
  364. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
  365. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
  366. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
  367. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
  368. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
  369. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
  370. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
  371. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
  372. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
  373. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
  374. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
  375. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
  376. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
  377. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
  378. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
  379. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
  380. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
  381. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
  382. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
  383. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
  384. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
  385. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
  386. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
  387. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
  388. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
  389. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
  390. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
  391. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
  392. data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
  393. data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
  394. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
  395. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
  396. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
  397. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
  398. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
  399. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
  400. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
  401. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
  402. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
  403. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
  404. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
  405. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
  406. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
  407. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
  408. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
  409. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
  410. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
  411. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
  412. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
  413. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
  414. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
  415. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
  416. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
  417. data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
  418. data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
  419. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
  420. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
  421. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
  422. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
  423. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
  424. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
  425. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
  426. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
  427. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
  428. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
  429. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
  430. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
  431. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
  432. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
  433. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
  434. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
  435. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
  436. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
  437. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
  438. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
  439. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
  440. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
  441. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
  442. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
  443. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
  444. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
  445. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
  446. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
  447. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
  448. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  449. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
  450. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
  451. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
  452. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
  453. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
  454. data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
  455. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
  456. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
  457. data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
  458. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
  459. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  460. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  461. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  462. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  463. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
  464. data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
  465. data/lib/puppet/version.rb +1 -1
  466. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  467. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  468. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  469. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  470. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
  471. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  472. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  473. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  474. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  475. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
  476. data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
  477. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
  478. data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
  479. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
  480. data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
  481. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
  482. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
  483. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
  484. data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
  485. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
  486. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
  487. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
  488. data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
  489. data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
  490. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
  491. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
  492. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
  493. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
  494. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
  495. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
  496. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
  497. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
  498. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
  499. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
  500. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
  501. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
  502. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
  503. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
  504. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
  505. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
  506. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
  507. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  508. data/spec/fixtures/unit/type/user/authorized_keys +1 -1
  509. data/spec/integration/agent/logging_spec.rb +4 -0
  510. data/spec/integration/application/doc_spec.rb +4 -3
  511. data/spec/integration/configurer_spec.rb +0 -14
  512. data/spec/integration/defaults_spec.rb +26 -0
  513. data/spec/integration/environments/default_manifest_spec.rb +274 -0
  514. data/spec/integration/faces/documentation_spec.rb +0 -4
  515. data/spec/integration/file_bucket/file_spec.rb +21 -0
  516. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
  517. data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
  518. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  519. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  520. data/spec/integration/node/environment_spec.rb +24 -8
  521. data/spec/integration/parser/catalog_spec.rb +10 -10
  522. data/spec/integration/parser/class_spec.rb +37 -0
  523. data/spec/integration/parser/collector_spec.rb +234 -75
  524. data/spec/integration/parser/compiler_spec.rb +385 -401
  525. data/spec/integration/parser/conditionals_spec.rb +117 -0
  526. data/spec/integration/parser/future_compiler_spec.rb +359 -8
  527. data/spec/integration/parser/node_spec.rb +185 -0
  528. data/spec/integration/parser/resource_expressions_spec.rb +286 -0
  529. data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
  530. data/spec/integration/parser/scope_spec.rb +94 -151
  531. data/spec/integration/provider/cron/crontab_spec.rb +137 -148
  532. data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
  533. data/spec/integration/ssl/certificate_request_spec.rb +0 -6
  534. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
  535. data/spec/integration/ssl/host_spec.rb +0 -2
  536. data/spec/integration/transaction_spec.rb +16 -0
  537. data/spec/integration/type/file_spec.rb +14 -13
  538. data/spec/integration/type/nagios_spec.rb +6 -15
  539. data/spec/integration/type/sshkey_spec.rb +22 -0
  540. data/spec/integration/type/tidy_spec.rb +3 -0
  541. data/spec/integration/type/user_spec.rb +8 -3
  542. data/spec/integration/util/autoload_spec.rb +6 -6
  543. data/spec/integration/util/rdoc/parser_spec.rb +7 -0
  544. data/spec/integration/util/windows/process_spec.rb +12 -0
  545. data/spec/integration/util/windows/security_spec.rb +36 -35
  546. data/spec/integration/util/windows/user_spec.rb +75 -9
  547. data/spec/integration/util_spec.rb +2 -2
  548. data/spec/lib/matchers/resource.rb +1 -0
  549. data/spec/lib/puppet_spec/compiler.rb +15 -2
  550. data/spec/lib/puppet_spec/files.rb +10 -0
  551. data/spec/lib/puppet_spec/language.rb +74 -0
  552. data/spec/lib/puppet_spec/matchers.rb +59 -32
  553. data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
  554. data/spec/shared_behaviours/hiera_indirections.rb +99 -0
  555. data/spec/shared_behaviours/iterative_functions.rb +69 -0
  556. data/spec/unit/application/apply_spec.rb +4 -2
  557. data/spec/unit/application/doc_spec.rb +17 -13
  558. data/spec/unit/application/master_spec.rb +35 -27
  559. data/spec/unit/application/resource_spec.rb +0 -5
  560. data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
  561. data/spec/unit/configurer/downloader_spec.rb +3 -24
  562. data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
  563. data/spec/unit/configurer_spec.rb +0 -4
  564. data/spec/unit/defaults_spec.rb +30 -0
  565. data/spec/unit/face/config_spec.rb +2 -1
  566. data/spec/unit/face/module/build_spec.rb +2 -2
  567. data/spec/unit/face/module/install_spec.rb +8 -8
  568. data/spec/unit/face/parser_spec.rb +71 -33
  569. data/spec/unit/file_bucket/file_spec.rb +2 -2
  570. data/spec/unit/file_system/uniquefile_spec.rb +184 -0
  571. data/spec/unit/forge/errors_spec.rb +4 -6
  572. data/spec/unit/forge/module_release_spec.rb +178 -89
  573. data/spec/unit/forge/repository_spec.rb +110 -2
  574. data/spec/unit/forge_spec.rb +39 -3
  575. data/spec/unit/functions/assert_type_spec.rb +22 -3
  576. data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
  577. data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
  578. data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
  579. data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
  580. data/spec/unit/functions/map_spec.rb +169 -0
  581. data/spec/unit/functions/match_spec.rb +57 -0
  582. data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
  583. data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
  584. data/spec/unit/functions/with_spec.rb +35 -0
  585. data/spec/unit/functions4_spec.rb +7 -8
  586. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
  587. data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
  588. data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
  589. data/spec/unit/indirector/facts/facter_spec.rb +69 -102
  590. data/spec/unit/indirector/hiera_spec.rb +17 -0
  591. data/spec/unit/indirector/request_spec.rb +2 -4
  592. data/spec/unit/indirector/resource/ral_spec.rb +5 -0
  593. data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
  594. data/spec/unit/indirector/rest_spec.rb +36 -6
  595. data/spec/unit/interface/face_collection_spec.rb +2 -2
  596. data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
  597. data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
  598. data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
  599. data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
  600. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  601. data/spec/unit/module_tool/metadata_spec.rb +72 -4
  602. data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
  603. data/spec/unit/network/authentication_spec.rb +4 -0
  604. data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
  605. data/spec/unit/network/http/connection_spec.rb +127 -92
  606. data/spec/unit/network/http/factory_spec.rb +82 -0
  607. data/spec/unit/network/http/handler_spec.rb +23 -13
  608. data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
  609. data/spec/unit/network/http/pool_spec.rb +269 -0
  610. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  611. data/spec/unit/network/http/session_spec.rb +43 -0
  612. data/spec/unit/network/http/site_spec.rb +90 -0
  613. data/spec/unit/network/http/webrick_spec.rb +1 -1
  614. data/spec/unit/network/http_pool_spec.rb +9 -6
  615. data/spec/unit/network/http_spec.rb +10 -0
  616. data/spec/unit/node/environment_spec.rb +54 -0
  617. data/spec/unit/node_spec.rb +3 -5
  618. data/spec/unit/parser/compiler_spec.rb +9 -2
  619. data/spec/unit/parser/files_spec.rb +19 -0
  620. data/spec/unit/parser/functions/contain_spec.rb +51 -0
  621. data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
  622. data/spec/unit/parser/functions/digest_spec.rb +31 -0
  623. data/spec/unit/parser/functions/file_spec.rb +48 -5
  624. data/spec/unit/parser/functions/include_spec.rb +15 -1
  625. data/spec/unit/parser/functions/realize_spec.rb +43 -35
  626. data/spec/unit/parser/functions/require_spec.rb +19 -5
  627. data/spec/unit/parser/functions/search_spec.rb +5 -0
  628. data/spec/unit/parser/functions/shared.rb +82 -0
  629. data/spec/unit/parser/functions_spec.rb +1 -1
  630. data/spec/unit/parser/lexer_spec.rb +10 -1
  631. data/spec/unit/parser/type_loader_spec.rb +0 -1
  632. data/spec/unit/pops/benchmark_spec.rb +1 -1
  633. data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
  634. data/spec/unit/pops/binder/injector_spec.rb +8 -6
  635. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  636. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
  637. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
  638. data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
  639. data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
  640. data/spec/unit/pops/issues_spec.rb +170 -0
  641. data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
  642. data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
  643. data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
  644. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
  645. data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
  646. data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
  647. data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
  648. data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
  649. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
  650. data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
  651. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
  652. data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
  653. data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
  654. data/spec/unit/pops/parser/parser_spec.rb +16 -0
  655. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
  656. data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
  657. data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
  658. data/spec/unit/pops/types/type_factory_spec.rb +8 -3
  659. data/spec/unit/pops/types/type_parser_spec.rb +26 -5
  660. data/spec/unit/pops/validator/validator_spec.rb +143 -27
  661. data/spec/unit/provider/exec/posix_spec.rb +22 -14
  662. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  663. data/spec/unit/provider/file/windows_spec.rb +7 -7
  664. data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
  665. data/spec/unit/provider/package/gem_spec.rb +10 -0
  666. data/spec/unit/provider/package/openbsd_spec.rb +66 -9
  667. data/spec/unit/provider/package/pacman_spec.rb +90 -71
  668. data/spec/unit/provider/package/windows/package_spec.rb +21 -6
  669. data/spec/unit/provider/package/yum_spec.rb +1 -0
  670. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  671. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
  672. data/spec/unit/provider/service/openbsd_spec.rb +26 -2
  673. data/spec/unit/provider/service/upstart_spec.rb +12 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
  675. data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
  676. data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
  677. data/spec/unit/reports/store_spec.rb +0 -16
  678. data/spec/unit/resource/catalog_spec.rb +0 -5
  679. data/spec/unit/resource_spec.rb +2 -2
  680. data/spec/unit/settings/autosign_setting_spec.rb +2 -2
  681. data/spec/unit/settings/environment_conf_spec.rb +77 -10
  682. data/spec/unit/settings/file_setting_spec.rb +5 -4
  683. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  684. data/spec/unit/settings_spec.rb +41 -3
  685. data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
  686. data/spec/unit/ssl/inventory_spec.rb +13 -0
  687. data/spec/unit/ssl/validator_spec.rb +0 -1
  688. data/spec/unit/transaction/resource_harness_spec.rb +64 -0
  689. data/spec/unit/transaction_spec.rb +98 -47
  690. data/spec/unit/type/cron_spec.rb +3 -3
  691. data/spec/unit/type/exec_spec.rb +9 -0
  692. data/spec/unit/type/file/content_spec.rb +54 -71
  693. data/spec/unit/type/file/mode_spec.rb +26 -1
  694. data/spec/unit/type/file/source_spec.rb +26 -4
  695. data/spec/unit/type/file_spec.rb +3 -3
  696. data/spec/unit/type/nagios_spec.rb +12 -3
  697. data/spec/unit/type/resources_spec.rb +64 -30
  698. data/spec/unit/type/user_spec.rb +1 -1
  699. data/spec/unit/type/yumrepo_spec.rb +136 -0
  700. data/spec/unit/type/zone_spec.rb +44 -1
  701. data/spec/unit/type_spec.rb +20 -0
  702. data/spec/unit/util/colors_spec.rb +14 -8
  703. data/spec/unit/util/command_line_spec.rb +11 -7
  704. data/spec/unit/util/execution_spec.rb +35 -42
  705. data/spec/unit/util/feature_spec.rb +12 -0
  706. data/spec/unit/util/http_proxy_spec.rb +43 -1
  707. data/spec/unit/util/log/destinations_spec.rb +45 -1
  708. data/spec/unit/util/logging_spec.rb +38 -0
  709. data/spec/unit/util/pidlock_spec.rb +37 -1
  710. data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
  711. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  712. data/spec/unit/util/profiler/logging_spec.rb +18 -29
  713. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  714. data/spec/unit/util/profiler_spec.rb +55 -0
  715. data/spec/unit/util/queue_spec.rb +0 -1
  716. data/spec/unit/util/rdoc/parser_spec.rb +14 -6
  717. data/spec/unit/util/tagging_spec.rb +1 -1
  718. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
  719. data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
  720. data/spec/unit/util/windows/api_types_spec.rb +28 -0
  721. data/spec/unit/util/windows/registry_spec.rb +7 -6
  722. data/spec/unit/util/windows/sid_spec.rb +3 -6
  723. data/spec/unit/util/windows/string_spec.rb +4 -0
  724. data/spec/unit/util/zaml_spec.rb +5 -1
  725. data/tasks/benchmark.rake +40 -5
  726. data/tasks/parser.rake +16 -2
  727. data/tasks/yard.rake +1 -1
  728. metadata +296 -68
  729. data/lib/puppet/file_system/tempfile.rb +0 -20
  730. data/lib/puppet/parser/e_parser_adapter.rb +0 -119
  731. data/lib/puppet/parser/functions/collect.rb +0 -15
  732. data/lib/puppet/parser/functions/select.rb +0 -15
  733. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
  734. data/lib/puppet/pops/parser/lexer.rb +0 -753
  735. data/lib/puppet/pops/parser/makefile +0 -6
  736. data/lib/puppet/pops/validation/checker3_1.rb +0 -558
  737. data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
  738. data/lib/puppet/util/profiler/none.rb +0 -8
  739. data/spec/unit/face/certificate_request_spec.rb +0 -7
  740. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
  741. data/spec/unit/face/key_spec.rb +0 -7
  742. data/spec/unit/face/report_spec.rb +0 -7
  743. data/spec/unit/face/resource_spec.rb +0 -7
  744. data/spec/unit/face/resource_type_spec.rb +0 -7
  745. data/spec/unit/file_system/tempfile_spec.rb +0 -48
  746. data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
  747. data/spec/unit/parser/methods/map_spec.rb +0 -184
  748. data/spec/unit/parser/methods/shared.rb +0 -45
  749. data/spec/unit/pops/parser/lexer_spec.rb +0 -840
  750. data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
  751. data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -67,16 +67,20 @@
67
67
  # type by looking at the Ruby class of the types this is considered an implementation detail, and such checks should in general
68
68
  # be performed by the type_calculator which implements the type system semantics.
69
69
  #
70
- # The PRubyType
70
+ # The PRuntimeType
71
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.
72
+ # The PRuntimeType corresponds to a type in the runtime system (currently only supported runtime is 'ruby'). The
73
+ # type has a runtime_type_name that corresponds to a Ruby Class name.
74
+ # A Runtime[ruby] type can be used to describe any ruby class except for the puppet types that are specialized
75
+ # (i.e. PRuntimeType should not be used for Integer, String, etc. since there are specialized types for those).
76
+ # When the type calculator deals with PRuntimeTypes and checks for assignability, it determines the
77
+ # "common ancestor class" of two classes.
78
+ # This check is made based on the superclasses of the two classes being compared. In order to perform this, the
79
+ # classes must be present (i.e. they are resolved from the string form in the PRuntimeType to a
80
+ # loaded, instantiated Ruby Class). In general this is not a problem, since the question to produce the common
81
+ # super type for two objects means that the classes must be present or there would have been
82
+ # no instances present in the first place. If however the classes are not present, the type
83
+ # calculator will fall back and state that the two types at least have Any in common.
80
84
  #
81
85
  # @see Puppet::Pops::Types::TypeFactory TypeFactory for how to create instances of types
82
86
  # @see Puppet::Pops::Types::TypeParser TypeParser how to construct a type instance from a String
@@ -86,7 +90,7 @@
86
90
  # -----
87
91
  # The type calculator can be directly used via its class methods. If doing time critical work and doing many
88
92
  # 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
93
+ # instance methods. Note that inference is an expensive operation, rather than inferring the same thing
90
94
  # several times, it is in general better to infer once and then copy the result if mutation to a more generic form is
91
95
  # required.
92
96
  #
@@ -113,7 +117,7 @@ class Puppet::Pops::Types::TypeCalculator
113
117
  end
114
118
 
115
119
  # Produces a String representation of the given type.
116
- # @param t [Puppet::Pops::Types::PAbstractType] the type to produce a string form
120
+ # @param t [Puppet::Pops::Types::PAnyType] the type to produce a string form
117
121
  # @return [String] the type in string form
118
122
  #
119
123
  # @api public
@@ -178,7 +182,7 @@ class Puppet::Pops::Types::TypeCalculator
178
182
  @data_t = Types::PDataType.new()
179
183
  @scalar_t = Types::PScalarType.new()
180
184
  @numeric_t = Types::PNumericType.new()
181
- @t = Types::PObjectType.new()
185
+ @t = Types::PAnyType.new()
182
186
 
183
187
  # Data accepts a Tuple that has 0-infinity Data compatible entries (e.g. a Tuple equivalent to Array).
184
188
  data_tuple = Types::PTupleType.new()
@@ -233,18 +237,18 @@ class Puppet::Pops::Types::TypeCalculator
233
237
  # A class is injectable if it has a special *assisted inject* class method called `inject` taking
234
238
  # an injector and a scope as argument, or if it has a zero args `initialize` method.
235
239
  #
236
- # @param klazz [Class, PRubyType] the class/type to check if it is injectable
240
+ # @param klazz [Class, PRuntimeType] the class/type to check if it is injectable
237
241
  # @return [Class, nil] the injectable Class, or nil if not injectable
238
242
  # @api public
239
243
  #
240
244
  def injectable_class(klazz)
241
245
  # Handle case when we get a PType instead of a class
242
- if klazz.is_a?(Types::PRubyType)
246
+ if klazz.is_a?(Types::PRuntimeType)
243
247
  klazz = Puppet::Pops::Types::ClassLoader.provide(klazz)
244
248
  end
245
249
 
246
- # data types can not be injected (check again, it is not safe to assume that given RubyType klazz arg was ok)
247
- return false unless type(klazz).is_a?(Types::PRubyType)
250
+ # data types can not be injected (check again, it is not safe to assume that given RubyRuntime klazz arg was ok)
251
+ return false unless type(klazz).is_a?(Types::PRuntimeType)
248
252
  if (klazz.respond_to?(:inject) && klazz.method(:inject).arity() == -4) || klazz.instance_method(:initialize).arity() == 0
249
253
  klazz
250
254
  else
@@ -265,6 +269,8 @@ class Puppet::Pops::Types::TypeCalculator
265
269
  if t2.is_a?(Class)
266
270
  t2 = type(t2)
267
271
  end
272
+ # Unit can be assigned to anything
273
+ return true if t2.class == Types::PUnitType
268
274
 
269
275
  @@assignable_visitor.visit_this_1(self, t, t2)
270
276
  end
@@ -277,18 +283,18 @@ class Puppet::Pops::Types::TypeCalculator
277
283
  # Answers, does the given callable accept the arguments given in args (an array or a tuple)
278
284
  #
279
285
  def callable?(callable, args)
280
- return false if !callable.is_a?(Types::PCallableType)
286
+ return false if !self.class.is_kind_of_callable?(callable)
281
287
  # Note that polymorphism is for the args type, the callable is always a callable
282
288
  @@callable_visitor.visit_this_1(self, args, callable)
283
289
  end
284
290
 
285
291
  # Answers if the two given types describe the same type
286
292
  def equals(left, right)
287
- return false unless left.is_a?(Types::PAbstractType) && right.is_a?(Types::PAbstractType)
293
+ return false unless left.is_a?(Types::PAnyType) && right.is_a?(Types::PAnyType)
288
294
  # Types compare per class only - an extra test must be made if the are mutually assignable
289
295
  # to find all types that represent the same type of instance
290
296
  #
291
- left == right || (assignable?(right, left) && assignable?(left, right))
297
+ left == right || (assignable?(right, left) && assignable?(left, right))
292
298
  end
293
299
 
294
300
  # Answers 'what is the Puppet Type corresponding to the given Ruby class'
@@ -326,8 +332,7 @@ class Puppet::Pops::Types::TypeCalculator
326
332
  type.key_type = Types::PScalarType.new()
327
333
  type.element_type = Types::PDataType.new()
328
334
  else
329
- type = Types::PRubyType.new()
330
- type.ruby_class = c.name
335
+ type = Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => c.name)
331
336
  end
332
337
  type
333
338
  end
@@ -391,17 +396,24 @@ class Puppet::Pops::Types::TypeCalculator
391
396
  end
392
397
 
393
398
  def instance_of_Object(t, o)
394
- # Undef is Undef and Object, but nothing else when checking instance?
395
- return false if (o.nil? || o == :undef) && t.class != Types::PObjectType
399
+ # Undef is Undef and Any, but nothing else when checking instance?
400
+ return false if (o.nil?) && t.class != Types::PAnyType
396
401
  assignable?(t, infer(o))
397
402
  end
398
403
 
404
+ # Anything is an instance of Unit
405
+ # @api private
406
+ def instance_of_PUnitType(t, o)
407
+ true
408
+ end
409
+
399
410
  def instance_of_PArrayType(t, o)
400
411
  return false unless o.is_a?(Array)
401
412
  return false unless o.all? {|element| instance_of(t.element_type, element) }
402
413
  size_t = t.size_type || @collection_default_size_t
403
414
  size_t2 = size_as_type(o)
404
- assignable?(size_t, size_t2)
415
+ # optimize by calling directly
416
+ assignable_PIntegerType(size_t, size_t2)
405
417
  end
406
418
 
407
419
  def instance_of_PTupleType(t, o)
@@ -432,7 +444,8 @@ class Puppet::Pops::Types::TypeCalculator
432
444
  return false unless o.keys.all? {|key| instance_of(key_t, key) } && o.values.all? {|value| instance_of(element_t, value) }
433
445
  size_t = t.size_type || @collection_default_size_t
434
446
  size_t2 = size_as_type(o)
435
- assignable?(size_t, size_t2)
447
+ # optimize by calling directly
448
+ assignable_PIntegerType(size_t, size_t2)
436
449
  end
437
450
 
438
451
  def instance_of_PDataType(t, o)
@@ -440,11 +453,11 @@ class Puppet::Pops::Types::TypeCalculator
440
453
  end
441
454
 
442
455
  def instance_of_PNilType(t, o)
443
- return o.nil? || o == :undef
456
+ return o.nil?
444
457
  end
445
458
 
446
459
  def instance_of_POptionalType(t, o)
447
- return true if (o.nil? || o == :undef)
460
+ return true if (o.nil?)
448
461
  instance_of(t.optional_type, o)
449
462
  end
450
463
 
@@ -471,7 +484,7 @@ class Puppet::Pops::Types::TypeCalculator
471
484
  # @api public
472
485
  #
473
486
  def is_ptype?(t)
474
- return t.is_a?(Types::PAbstractType)
487
+ return t.is_a?(Types::PAnyType)
475
488
  end
476
489
 
477
490
  # Answers if t represents the puppet type PNilType
@@ -490,6 +503,7 @@ class Puppet::Pops::Types::TypeCalculator
490
503
  def common_type(t1, t2)
491
504
  raise ArgumentError, 'two types expected' unless (is_ptype?(t1) || is_pnil?(t1)) && (is_ptype?(t2) || is_pnil?(t2))
492
505
 
506
+ # TODO: This is not right since Scalar U Undef is Any
493
507
  # if either is nil, the common type is the other
494
508
  if is_pnil?(t1)
495
509
  return t2
@@ -497,6 +511,13 @@ class Puppet::Pops::Types::TypeCalculator
497
511
  return t1
498
512
  end
499
513
 
514
+ # If either side is Unit, it is the other type
515
+ if t1.is_a?(Types::PUnitType)
516
+ return t2
517
+ elsif t2.is_a?(Types::PUnitType)
518
+ return t1
519
+ end
520
+
500
521
  # Simple case, one is assignable to the other
501
522
  if assignable?(t1, t2)
502
523
  return t1
@@ -566,7 +587,7 @@ class Puppet::Pops::Types::TypeCalculator
566
587
  if t1.is_a?(Types::PPatternType) && t2.is_a?(Types::PPatternType)
567
588
  t = Types::PPatternType.new()
568
589
  # must make copies since patterns are contained types, not data-types
569
- t.patterns = (t1.patterns | t2.patterns).map {|p| p.copy }
590
+ t.patterns = (t1.patterns | t2.patterns).map(&:copy)
570
591
  return t
571
592
  end
572
593
 
@@ -580,7 +601,7 @@ class Puppet::Pops::Types::TypeCalculator
580
601
  if t1.is_a?(Types::PVariantType) && t2.is_a?(Types::PVariantType)
581
602
  # The common type is one that complies with either set
582
603
  t = Types::PVariantType.new
583
- t.types = (t1.types | t2.types).map {|opt_t| opt_t.copy }
604
+ t.types = (t1.types | t2.types).map(&:copy)
584
605
  return t
585
606
  end
586
607
 
@@ -616,11 +637,13 @@ class Puppet::Pops::Types::TypeCalculator
616
637
  return type
617
638
  end
618
639
 
619
- if t1.is_a?(Types::PRubyType) && t2.is_a?(Types::PRubyType)
620
- if t1.ruby_class == t2.ruby_class
640
+ # If both are Runtime types
641
+ if t1.is_a?(Types::PRuntimeType) && t2.is_a?(Types::PRuntimeType)
642
+ if t1.runtime == t2.runtime && t1.runtime_type_name == t2.runtime_type_name
621
643
  return t1
622
644
  end
623
645
  # finding the common super class requires that names are resolved to class
646
+ # NOTE: This only supports runtime type of :ruby
624
647
  c1 = Types::ClassLoader.provide_from_type(t1)
625
648
  c2 = Types::ClassLoader.provide_from_type(t2)
626
649
  if c1 && c2
@@ -628,18 +651,16 @@ class Puppet::Pops::Types::TypeCalculator
628
651
  superclasses(c1).each do|c1_super|
629
652
  c2_superclasses.each do |c2_super|
630
653
  if c1_super == c2_super
631
- result = Types::PRubyType.new()
632
- result.ruby_class = c1_super.name
633
- return result
654
+ return Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => c1_super.name)
634
655
  end
635
656
  end
636
657
  end
637
658
  end
638
659
  end
639
- # If both are RubyObjects
640
660
 
641
- if common_pobject?(t1, t2)
642
- return Types::PObjectType.new()
661
+ # They better both be Any type, or the wrong thing was asked and nil is returned
662
+ if t1.is_a?(Types::PAnyType) && t2.is_a?(Types::PAnyType)
663
+ return Types::PAnyType.new()
643
664
  end
644
665
  end
645
666
 
@@ -701,15 +722,13 @@ class Puppet::Pops::Types::TypeCalculator
701
722
 
702
723
  # @api private
703
724
  def infer_Object(o)
704
- type = Types::PRubyType.new()
705
- type.ruby_class = o.class.name
706
- type
725
+ Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => o.class.name)
707
726
  end
708
727
 
709
728
  # The type of all types is PType
710
729
  # @api private
711
730
  #
712
- def infer_PAbstractType(o)
731
+ def infer_PAnyType(o)
713
732
  type = Types::PType.new()
714
733
  type.type = o.copy
715
734
  type
@@ -761,10 +780,16 @@ class Puppet::Pops::Types::TypeCalculator
761
780
  Types::PNilType.new()
762
781
  end
763
782
 
764
- # Inference of :undef as PNilType, all other are Ruby[Symbol]
783
+ # Inference of :default as PDefaultType, and all other are Ruby[Symbol]
765
784
  # @api private
766
785
  def infer_Symbol(o)
767
- o == :undef ? infer_NilClass(o) : infer_Object(o)
786
+ case o
787
+ when :default
788
+ Types::PDefaultType.new()
789
+
790
+ else
791
+ infer_Object(o)
792
+ end
768
793
  end
769
794
 
770
795
  # @api private
@@ -782,12 +807,14 @@ class Puppet::Pops::Types::TypeCalculator
782
807
  #
783
808
  def infer_Resource(o)
784
809
  t = Types::PResourceType.new()
785
- t.type_name = o.type.to_s
810
+ t.type_name = o.type.to_s.downcase
786
811
  # Only Puppet::Resource can have a title that is a symbol :undef, a PResource cannot.
787
812
  # A mapping must be made to empty string. A nil value will result in an error later
788
813
  title = o.title
789
- t.title = (title == :undef ? '' : title)
790
- t
814
+ t.title = (:undef == title ? '' : title)
815
+ type = Types::PType.new()
816
+ type.type = t
817
+ type
791
818
  end
792
819
 
793
820
  # @api private
@@ -848,7 +875,7 @@ class Puppet::Pops::Types::TypeCalculator
848
875
  type = Types::PHashType.new()
849
876
  if o.empty?
850
877
  ktype = Types::PNilType.new()
851
- etype = Types::PNilType.new()
878
+ vtype = Types::PNilType.new()
852
879
  else
853
880
  ktype = Types::PVariantType.new()
854
881
  ktype.types = o.keys.map() {|k| infer_set(k) }
@@ -856,7 +883,7 @@ class Puppet::Pops::Types::TypeCalculator
856
883
  etype.types = o.values.map() {|e| infer_set(e) }
857
884
  end
858
885
  type.key_type = unwrap_single_variant(ktype)
859
- type.element_type = unwrap_single_variant(vtype)
886
+ type.element_type = unwrap_single_variant(etype)
860
887
  type.size_type = size_as_type(o)
861
888
  type
862
889
  end
@@ -868,6 +895,7 @@ class Puppet::Pops::Types::TypeCalculator
868
895
  possible_variant
869
896
  end
870
897
  end
898
+
871
899
  # False in general type calculator
872
900
  # @api private
873
901
  def assignable_Object(t, t2)
@@ -875,8 +903,8 @@ class Puppet::Pops::Types::TypeCalculator
875
903
  end
876
904
 
877
905
  # @api private
878
- def assignable_PObjectType(t, t2)
879
- t2.is_a?(Types::PObjectType)
906
+ def assignable_PAnyType(t, t2)
907
+ t2.is_a?(Types::PAnyType)
880
908
  end
881
909
 
882
910
  # @api private
@@ -885,6 +913,18 @@ class Puppet::Pops::Types::TypeCalculator
885
913
  t2.is_a?(Types::PNilType)
886
914
  end
887
915
 
916
+ # Anything is assignable to a Unit type
917
+ # @api private
918
+ def assignable_PUnitType(t, t2)
919
+ true
920
+ end
921
+
922
+ # @api private
923
+ def assignable_PDefaultType(t, t2)
924
+ # Only default is assignable to default type
925
+ t2.is_a?(Types::PDefaultType)
926
+ end
927
+
888
928
  # @api private
889
929
  def assignable_PScalarType(t, t2)
890
930
  t2.is_a?(Types::PScalarType)
@@ -941,7 +981,7 @@ class Puppet::Pops::Types::TypeCalculator
941
981
  # A variant is assignable if all of its options are assignable to one of this type's options
942
982
  return true if t == t2
943
983
  t2.types.all? do |other|
944
- # if the other is a Variant, all if its options, but be assignable to one of this type's options
984
+ # if the other is a Variant, all of its options, but be assignable to one of this type's options
945
985
  other = other.is_a?(Types::PDataType) ? @data_variant_t : other
946
986
  if other.is_a?(Types::PVariantType)
947
987
  assignable?(t, other)
@@ -966,7 +1006,7 @@ class Puppet::Pops::Types::TypeCalculator
966
1006
  end
967
1007
  # Assume no block was given - i.e. it is nil, and its type is PNilType
968
1008
  block_t = @nil_t
969
- if args_tuple.types.last.is_a?(Types::PCallableType)
1009
+ if self.class.is_kind_of_callable?(args_tuple.types.last)
970
1010
  # a split is needed to make it possible to use required, optional, and varargs semantics
971
1011
  # of the tuple type.
972
1012
  #
@@ -978,16 +1018,41 @@ class Puppet::Pops::Types::TypeCalculator
978
1018
  end
979
1019
  # unless argument types match parameter types
980
1020
  return false unless assignable?(callable_t.param_types, args_tuple)
981
- # unless given block (or no block) matches expected block (or no block)
1021
+ # can the given block be *called* with a signature requirement specified by callable_t?
982
1022
  assignable?(callable_t.block_type || @nil_t, block_t)
983
1023
  end
984
1024
 
1025
+ # @api private
1026
+ def self.is_kind_of_callable?(t, optional = true)
1027
+ case t
1028
+ when Types::PCallableType
1029
+ true
1030
+ when Types::POptionalType
1031
+ optional && is_kind_of_callable?(t.optional_type, optional)
1032
+ when Types::PVariantType
1033
+ t.types.all? {|t2| is_kind_of_callable?(t2, optional) }
1034
+ else
1035
+ false
1036
+ end
1037
+ end
1038
+
1039
+
985
1040
  def callable_PArrayType(args_array, callable_t)
986
1041
  return false unless assignable?(callable_t.param_types, args_array)
987
- # does not support calling with a block, but have to check that callable expects it
1042
+ # does not support calling with a block, but have to check that callable is ok with missing block
988
1043
  assignable?(callable_t.block_type || @nil_t, @nil_t)
989
1044
  end
990
1045
 
1046
+ def callable_PNilType(nil_t, callable_t)
1047
+ # if callable_t is Optional (or indeed PNilType), this means that 'missing callable' is accepted
1048
+ assignable?(callable_t, nil_t)
1049
+ end
1050
+
1051
+ def callable_PCallableType(given_callable_t, required_callable_t)
1052
+ # If the required callable is euqal or more specific than the given, the given is callable
1053
+ assignable?(required_callable_t, given_callable_t)
1054
+ end
1055
+
991
1056
  def max(a,b)
992
1057
  a >=b ? a : b
993
1058
  end
@@ -1004,12 +1069,14 @@ class Puppet::Pops::Types::TypeCalculator
1004
1069
  size_t2 = t2.size_type || Puppet::Pops::Types::TypeFactory.range(*t2.size_range)
1005
1070
 
1006
1071
  # not assignable if the number of types in t2 is outside number of types in t1
1007
- return false unless assignable?(size_t, size_t2)
1008
- max(t.types.size, t2.types.size).times do |index|
1009
- return false unless assignable?((t.types[index] || t.types[-1]), (t2.types[index] || t2.types[-1]))
1072
+ if assignable?(size_t, size_t2)
1073
+ t2.types.size.times do |index|
1074
+ return false unless assignable?((t.types[index] || t.types[-1]), t2.types[index])
1075
+ end
1076
+ return true
1077
+ else
1078
+ return false
1010
1079
  end
1011
- true
1012
-
1013
1080
  elsif t2.is_a?(Types::PArrayType)
1014
1081
  t2_entry = t2.element_type
1015
1082
 
@@ -1064,7 +1131,7 @@ class Puppet::Pops::Types::TypeCalculator
1064
1131
  # hash key type must be string of min 1 size
1065
1132
  # hash value t must be assignable to each key
1066
1133
  element_type = t2.element_type
1067
- assignable?(size_t, size_t2) &&
1134
+ assignable_PIntegerType(size_t, size_t2) &&
1068
1135
  assignable?(@non_empty_string_t, t2.key_type) &&
1069
1136
  h.all? {|k,v| assignable?(v, element_type) }
1070
1137
  else
@@ -1085,9 +1152,14 @@ class Puppet::Pops::Types::TypeCalculator
1085
1152
  # @api private
1086
1153
  def assignable_PEnumType(t, t2)
1087
1154
  return true if t == t2 || (t.values.empty? && (t2.is_a?(Types::PStringType) || t2.is_a?(Types::PEnumType)))
1088
- if t2.is_a?(Types::PStringType)
1155
+ case t2
1156
+ when Types::PStringType
1089
1157
  # if the set of strings are all found in the set of enums
1090
1158
  t2.values.all? { |s| t.values.any? { |e| e == s }}
1159
+ when Types::PVariantType
1160
+ t2.types.all? {|variant_t| assignable_PEnumType(t, variant_t) }
1161
+ when Types::PEnumType
1162
+ t2.values.all? { |s| t.values.any? {|e| e == s }}
1091
1163
  else
1092
1164
  false
1093
1165
  end
@@ -1105,11 +1177,11 @@ class Puppet::Pops::Types::TypeCalculator
1105
1177
  when Types::PStringType
1106
1178
  # true if size compliant
1107
1179
  size_t2 = t2.size_type || @collection_default_size_t
1108
- assignable?(size_t, size_t2)
1180
+ assignable_PIntegerType(size_t, size_t2)
1109
1181
 
1110
1182
  when Types::PPatternType
1111
1183
  # true if size constraint is at least 0 to +Infinity (which is the same as the default)
1112
- assignable?(size_t, @collection_default_size_t)
1184
+ assignable_PIntegerType(size_t, @collection_default_size_t)
1113
1185
 
1114
1186
  when Types::PEnumType
1115
1187
  if t2.values
@@ -1140,7 +1212,14 @@ class Puppet::Pops::Types::TypeCalculator
1140
1212
  # @api private
1141
1213
  def assignable_PPatternType(t, t2)
1142
1214
  return true if t == t2
1143
- return false unless t2.is_a?(Types::PStringType) || t2.is_a?(Types::PEnumType)
1215
+ case t2
1216
+ when Types::PStringType, Types::PEnumType
1217
+ values = t2.values
1218
+ when Types::PVariantType
1219
+ return t2.types.all? {|variant_t| assignable_PPatternType(t, variant_t) }
1220
+ else
1221
+ return false
1222
+ end
1144
1223
 
1145
1224
  if t2.values.empty?
1146
1225
  # Strings / Enums (unknown which ones) cannot all match a pattern, but if there is no pattern it is ok
@@ -1176,12 +1255,16 @@ class Puppet::Pops::Types::TypeCalculator
1176
1255
  return false unless t2.is_a?(Types::PCallableType)
1177
1256
  # nil param_types means, any other Callable is assignable
1178
1257
  return true if t.param_types.nil?
1179
- return false unless assignable?(t.param_types, t2.param_types)
1258
+
1259
+ # NOTE: these tests are made in reverse as it is calling the callable that is constrained
1260
+ # (it's lower bound), not its upper bound
1261
+ return false unless assignable?(t2.param_types, t.param_types)
1180
1262
  # names are ignored, they are just information
1181
1263
  # Blocks must be compatible
1182
1264
  this_block_t = t.block_type || @nil_t
1183
1265
  that_block_t = t2.block_type || @nil_t
1184
- assignable?(this_block_t, that_block_t)
1266
+ assignable?(that_block_t, this_block_t)
1267
+
1185
1268
  end
1186
1269
 
1187
1270
  # @api private
@@ -1190,20 +1273,20 @@ class Puppet::Pops::Types::TypeCalculator
1190
1273
  case t2
1191
1274
  when Types::PCollectionType
1192
1275
  size_t2 = t2.size_type || @collection_default_size_t
1193
- assignable?(size_t, size_t2)
1276
+ assignable_PIntegerType(size_t, size_t2)
1194
1277
  when Types::PTupleType
1195
1278
  # compute the tuple's min/max size, and check if that size matches
1196
1279
  from, to = size_range(t2.size_type)
1197
1280
  t2s = Types::PIntegerType.new()
1198
1281
  t2s.from = t2.types.size - 1 + from
1199
1282
  t2s.to = t2.types.size - 1 + to
1200
- assignable?(size_t, t2s)
1283
+ assignable_PIntegerType(size_t, t2s)
1201
1284
  when Types::PStructType
1202
1285
  from = to = t2.elements.size
1203
1286
  t2s = Types::PIntegerType.new()
1204
1287
  t2s.from = from
1205
1288
  t2s.to = to
1206
- assignable?(size_t, t2s)
1289
+ assignable_PIntegerType(size_t, t2s)
1207
1290
  else
1208
1291
  false
1209
1292
  end
@@ -1310,14 +1393,18 @@ class Puppet::Pops::Types::TypeCalculator
1310
1393
  t2.is_a?(Types::PDataType) || assignable?(@data_variant_t, t2)
1311
1394
  end
1312
1395
 
1313
- # Assignable if t2's ruby class is same or subclass of t1's ruby class
1396
+ # Assignable if t2's has the same runtime and the runtime name resolves to
1397
+ # a class that is the same or subclass of t1's resolved runtime type name
1314
1398
  # @api private
1315
- def assignable_PRubyType(t1, t2)
1316
- return false unless t2.is_a?(Types::PRubyType)
1317
- return true if t1.ruby_class.nil? # t1 is wider
1318
- return false if t2.ruby_class.nil? # t1 not nil, so t2 can not be wider
1319
- c1 = class_from_string(t1.ruby_class)
1320
- c2 = class_from_string(t2.ruby_class)
1399
+ def assignable_PRuntimeType(t1, t2)
1400
+ return false unless t2.is_a?(Types::PRuntimeType)
1401
+ return false unless t1.runtime == t2.runtime
1402
+ return true if t1.runtime_type_name.nil? # t1 is wider
1403
+ return false if t2.runtime_type_name.nil? # t1 not nil, so t2 can not be wider
1404
+
1405
+ # NOTE: This only supports Ruby, must change when/if the set of runtimes is expanded
1406
+ c1 = class_from_string(t1.runtime_type_name)
1407
+ c2 = class_from_string(t2.runtime_type_name)
1321
1408
  return false unless c1.is_a?(Class) && c2.is_a?(Class)
1322
1409
  !!(c2 <= c1)
1323
1410
  end
@@ -1343,16 +1430,21 @@ class Puppet::Pops::Types::TypeCalculator
1343
1430
  def string_String(t) ; t ; end
1344
1431
 
1345
1432
  # @api private
1346
- def string_PObjectType(t) ; "Object" ; end
1433
+ def string_Symbol(t) ; t.to_s ; end
1434
+
1435
+ def string_PAnyType(t) ; "Any" ; end
1347
1436
 
1348
1437
  # @api private
1349
1438
  def string_PNilType(t) ; 'Undef' ; end
1350
1439
 
1440
+ # @api private
1441
+ def string_PDefaultType(t) ; 'Default' ; end
1442
+
1351
1443
  # @api private
1352
1444
  def string_PBooleanType(t) ; "Boolean" ; end
1353
1445
 
1354
1446
  # @api private
1355
- def string_PScalarType(t) ; "Scalar" ; end
1447
+ def string_PScalarType(t) ; "Scalar" ; end
1356
1448
 
1357
1449
  # @api private
1358
1450
  def string_PDataType(t) ; "Data" ; end
@@ -1444,7 +1536,8 @@ class Puppet::Pops::Types::TypeCalculator
1444
1536
  else
1445
1537
  range = range_array_part(t.param_types.size_type)
1446
1538
  end
1447
- types = t.param_types.types.map {|t2| string(t2) }
1539
+ # translate to string, and skip Unit types
1540
+ types = t.param_types.types.map {|t2| string(t2) unless t2.class == Types::PUnitType }.compact
1448
1541
 
1449
1542
  params_part= types.join(', ')
1450
1543
 
@@ -1490,7 +1583,12 @@ class Puppet::Pops::Types::TypeCalculator
1490
1583
  end
1491
1584
 
1492
1585
  # @api private
1493
- def string_PRubyType(t) ; "Ruby[#{string(t.ruby_class)}]" ; end
1586
+ def string_PUnitType(t)
1587
+ "Unit"
1588
+ end
1589
+
1590
+ # @api private
1591
+ def string_PRuntimeType(t) ; "Runtime[#{string(t.runtime)}, #{string(t.runtime_type_name)}]" ; end
1494
1592
 
1495
1593
  # @api private
1496
1594
  def string_PArrayType(t)
@@ -1522,9 +1620,9 @@ class Puppet::Pops::Types::TypeCalculator
1522
1620
  def string_PResourceType(t)
1523
1621
  if t.type_name
1524
1622
  if t.title
1525
- "#{t.type_name.capitalize}['#{t.title}']"
1623
+ "#{capitalize_segments(t.type_name)}['#{t.title}']"
1526
1624
  else
1527
- "#{t.type_name.capitalize}"
1625
+ capitalize_segments(t.type_name)
1528
1626
  end
1529
1627
  else
1530
1628
  "Resource"
@@ -1569,9 +1667,15 @@ class Puppet::Pops::Types::TypeCalculator
1569
1667
 
1570
1668
  private
1571
1669
 
1670
+ NAME_SEGMENT_SEPARATOR = '::'.freeze
1671
+
1672
+ def capitalize_segments(s)
1673
+ s.split(NAME_SEGMENT_SEPARATOR).map(&:capitalize).join(NAME_SEGMENT_SEPARATOR)
1674
+ end
1675
+
1572
1676
  def class_from_string(str)
1573
1677
  begin
1574
- str.split('::').inject(Object) do |memo, name_segment|
1678
+ str.split(NAME_SEGMENT_SEPARATOR).inject(Object) do |memo, name_segment|
1575
1679
  memo.const_get(name_segment)
1576
1680
  end
1577
1681
  rescue NameError
@@ -1591,7 +1695,4 @@ class Puppet::Pops::Types::TypeCalculator
1591
1695
  assignable?(@numeric_t, t1) && assignable?(@numeric_t, t2)
1592
1696
  end
1593
1697
 
1594
- def common_pobject?(t1, t2)
1595
- assignable?(@t, t1) && assignable?(@t, t2)
1596
- end
1597
1698
  end