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
@@ -18,8 +18,9 @@ module Puppet::Pops::Types::TypeFactory
18
18
  #
19
19
  def self.range(from, to)
20
20
  t = Types::PIntegerType.new()
21
- t.from = from unless (from == :default || from == 'default')
22
- t.to = to unless (to == :default || to == 'default')
21
+ # optimize eq with symbol (faster when it is left)
22
+ t.from = from unless (:default == from || from == 'default')
23
+ t.to = to unless (:default == to || to == 'default')
23
24
  t
24
25
  end
25
26
 
@@ -28,8 +29,9 @@ module Puppet::Pops::Types::TypeFactory
28
29
  #
29
30
  def self.float_range(from, to)
30
31
  t = Types::PFloatType.new()
31
- t.from = Float(from) unless from == :default || from.nil?
32
- t.to = Float(to) unless to == :default || to.nil?
32
+ # optimize eq with symbol (faster when it is left)
33
+ t.from = Float(from) unless :default == from || from.nil?
34
+ t.to = Float(to) unless :default == to || to.nil?
33
35
  t
34
36
  end
35
37
 
@@ -70,11 +72,6 @@ module Puppet::Pops::Types::TypeFactory
70
72
  t
71
73
  end
72
74
 
73
- # Convenience method to produce an Optional[Object] type
74
- def self.optional_object()
75
- optional(object())
76
- end
77
-
78
75
  # Produces the Enum type, optionally with specific string values
79
76
  # @api public
80
77
  #
@@ -93,9 +90,10 @@ module Puppet::Pops::Types::TypeFactory
93
90
  t
94
91
  end
95
92
 
96
- # Produces the Struct type, either a non parameterized instance representing all structs (i.e. all hashes)
97
- # or a hash with a given set of keys of String type (names), bound to a value of a given type. Type may be
98
- # a Ruby Class, a Puppet Type, or an instance from which the type is inferred.
93
+ # Produces the Struct type, either a non parameterized instance representing
94
+ # all structs (i.e. all hashes) or a hash with a given set of keys of String
95
+ # type (names), bound to a value of a given type. Type may be a Ruby Class, a
96
+ # Puppet Type, or an instance from which the type is inferred.
99
97
  #
100
98
  def self.struct(name_type_hash = {})
101
99
  t = Types::PStructType.new
@@ -124,15 +122,16 @@ module Puppet::Pops::Types::TypeFactory
124
122
  Types::PBooleanType.new()
125
123
  end
126
124
 
127
- # Produces the Object type
125
+ # Produces the Any type
128
126
  # @api public
129
127
  #
130
- def self.object()
131
- Types::PObjectType.new()
128
+ def self.any()
129
+ Types::PAnyType.new()
132
130
  end
133
131
 
134
132
  # Produces the Regexp type
135
- # @param pattern [Regexp, String, nil] (nil) The regular expression object or a regexp source string, or nil for bare type
133
+ # @param pattern [Regexp, String, nil] (nil) The regular expression object or
134
+ # a regexp source string, or nil for bare type
136
135
  # @api public
137
136
  #
138
137
  def self.regexp(pattern = nil)
@@ -198,20 +197,18 @@ module Puppet::Pops::Types::TypeFactory
198
197
  # use {#all_callables}.
199
198
  #
200
199
  # The params is a list of types, where the three last entries may be
201
- # optionally followed by min, max count, and a Callable which is taken as the block_type.
200
+ # optionally followed by min, max count, and a Callable which is taken as the
201
+ # block_type.
202
202
  # If neither min or max are specified the parameters must match exactly.
203
203
  # A min < params.size means that the difference are optional.
204
204
  # If max > params.size means that the last type repeats.
205
205
  # if max is :default, the max value is unbound (infinity).
206
- #
206
+ #
207
207
  # Params are given as a sequence of arguments to {#type_of}.
208
208
  #
209
209
  def self.callable(*params)
210
- case params.last
211
- when Types::PCallableType
210
+ if Puppet::Pops::Types::TypeCalculator.is_kind_of_callable?(params.last)
212
211
  last_callable = true
213
- when Types::POptionalType
214
- last_callable = true if params.last.optional_type.is_a?(Types::PCallableType)
215
212
  end
216
213
  block_t = last_callable ? params.pop : nil
217
214
 
@@ -226,6 +223,10 @@ module Puppet::Pops::Types::TypeFactory
226
223
 
227
224
  types = params.map {|p| type_of(p) }
228
225
 
226
+ # If the specification requires types, and none were given, a Unit type is used
227
+ if types.empty? && !size_type.nil? && size_type.range[1] > 0
228
+ types << Types::PUnitType.new
229
+ end
229
230
  # create a signature
230
231
  callable_t = Types::PCallableType.new()
231
232
  tuple_t = tuple(*types)
@@ -266,27 +267,41 @@ module Puppet::Pops::Types::TypeFactory
266
267
  Types::PNilType.new()
267
268
  end
268
269
 
270
+ # Creates an instance of the Default type
271
+ # @api public
272
+ def self.default()
273
+ Types::PDefaultType.new()
274
+ end
275
+
269
276
  # Produces an instance of the abstract type PCatalogEntryType
270
277
  def self.catalog_entry()
271
278
  Types::PCatalogEntryType.new()
272
279
  end
273
280
 
274
- # Produces a PResourceType with a String type_name
275
- # A PResourceType with a nil or empty name is compatible with any other PResourceType.
276
- # A PResourceType with a given name is only compatible with a PResourceType with the same name.
277
- # (There is no resource-type subtyping in Puppet (yet)).
281
+ # Produces a PResourceType with a String type_name A PResourceType with a nil
282
+ # or empty name is compatible with any other PResourceType. A PResourceType
283
+ # with a given name is only compatible with a PResourceType with the same
284
+ # name. (There is no resource-type subtyping in Puppet (yet)).
278
285
  #
279
286
  def self.resource(type_name = nil, title = nil)
280
287
  type = Types::PResourceType.new()
281
288
  type_name = type_name.type_name if type_name.is_a?(Types::PResourceType)
282
- type.type_name = type_name.downcase unless type_name.nil?
289
+ type_name = type_name.downcase unless type_name.nil?
290
+ type.type_name = type_name
291
+ unless type_name.nil? || type_name =~ Puppet::Pops::Patterns::CLASSREF
292
+ raise ArgumentError, "Illegal type name '#{type.type_name}'"
293
+ end
294
+ if type_name.nil? && !title.nil?
295
+ raise ArgumentError, "The type name cannot be nil, if title is given"
296
+ end
283
297
  type.title = title
284
298
  type
285
299
  end
286
300
 
287
- # Produces PHostClassType with a string class_name.
288
- # A PHostClassType with nil or empty name is compatible with any other PHostClassType.
289
- # A PHostClassType with a given name is only compatible with a PHostClassType with the same name.
301
+ # Produces PHostClassType with a string class_name. A PHostClassType with
302
+ # nil or empty name is compatible with any other PHostClassType. A
303
+ # PHostClassType with a given name is only compatible with a PHostClassType
304
+ # with the same name.
290
305
  #
291
306
  def self.host_class(class_name = nil)
292
307
  type = Types::PHostClassType.new()
@@ -296,7 +311,8 @@ module Puppet::Pops::Types::TypeFactory
296
311
  type
297
312
  end
298
313
 
299
- # Produces a type for Array[o] where o is either a type, or an instance for which a type is inferred.
314
+ # Produces a type for Array[o] where o is either a type, or an instance for
315
+ # which a type is inferred.
300
316
  # @api public
301
317
  #
302
318
  def self.array_of(o)
@@ -305,7 +321,8 @@ module Puppet::Pops::Types::TypeFactory
305
321
  type
306
322
  end
307
323
 
308
- # Produces a type for Hash[Scalar, o] where o is either a type, or an instance for which a type is inferred.
324
+ # Produces a type for Hash[Scalar, o] where o is either a type, or an
325
+ # instance for which a type is inferred.
309
326
  # @api public
310
327
  #
311
328
  def self.hash_of(value, key = scalar())
@@ -343,31 +360,33 @@ module Puppet::Pops::Types::TypeFactory
343
360
  type
344
361
  end
345
362
 
346
- # Produce a type corresponding to the class of given unless given is a String, Class or a PAbstractType.
347
- # When a String is given this is taken as a classname.
363
+ # Produce a type corresponding to the class of given unless given is a
364
+ # String, Class or a PAnyType. When a String is given this is taken as
365
+ # a classname.
348
366
  #
349
367
  def self.type_of(o)
350
368
  if o.is_a?(Class)
351
369
  @type_calculator.type(o)
352
- elsif o.is_a?(Types::PAbstractType)
370
+ elsif o.is_a?(Types::PAnyType)
353
371
  o
354
372
  elsif o.is_a?(String)
355
- type = Types::PRubyType.new()
356
- type.ruby_class = o
357
- type
373
+ Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => o)
358
374
  else
359
375
  @type_calculator.infer_generic(o)
360
376
  end
361
377
  end
362
378
 
363
- # Produces a type for a class or infers a type for something that is not a class
379
+ # Produces a type for a class or infers a type for something that is not a
380
+ # class
364
381
  # @note
365
382
  # To get the type for the class' class use `TypeCalculator.infer(c)`
366
383
  #
367
384
  # @overload ruby(o)
368
- # @param o [Class] produces the type corresponding to the class (e.g. Integer becomes PIntegerType)
385
+ # @param o [Class] produces the type corresponding to the class (e.g.
386
+ # Integer becomes PIntegerType)
369
387
  # @overload ruby(o)
370
- # @param o [Object] produces the type corresponding to the instance class (e.g. 3 becomes PIntegerType)
388
+ # @param o [Object] produces the type corresponding to the instance class
389
+ # (e.g. 3 becomes PIntegerType)
371
390
  #
372
391
  # @api public
373
392
  #
@@ -375,32 +394,39 @@ module Puppet::Pops::Types::TypeFactory
375
394
  if o.is_a?(Class)
376
395
  @type_calculator.type(o)
377
396
  else
378
- type = Types::PRubyType.new()
379
- type.ruby_class = o.class.name
380
- type
397
+ Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => o.class.name)
381
398
  end
382
399
  end
383
400
 
384
- # Generic creator of a RubyType - allows creating the Ruby type with nil name, or String name.
385
- # Also see ruby(o) which performs inference, or mapps a Ruby Class to its name.
401
+ # Generic creator of a RuntimeType["ruby"] - allows creating the Ruby type
402
+ # with nil name, or String name. Also see ruby(o) which performs inference,
403
+ # or mapps a Ruby Class to its name.
386
404
  #
387
405
  def self.ruby_type(class_name = nil)
388
- type = Types::PRubyType.new()
389
- type.ruby_class = class_name
390
- type
406
+ Types::PRuntimeType.new(:runtime => :ruby, :runtime_type_name => class_name)
407
+ end
408
+
409
+ # Generic creator of a RuntimeType - allows creating the type with nil or
410
+ # String runtime_type_name. Also see ruby_type(o) and ruby(o).
411
+ #
412
+ def self.runtime(runtime=nil, runtime_type_name = nil)
413
+ runtime = runtime.to_sym if runtime.is_a?(String)
414
+ Types::PRuntimeType.new(:runtime => runtime, :runtime_type_name => runtime_type_name)
391
415
  end
392
416
 
393
- # Sets the accepted size range of a collection if something other than the default 0 to Infinity
394
- # is wanted. The semantics for from/to are the same as for #range
417
+ # Sets the accepted size range of a collection if something other than the
418
+ # default 0 to Infinity is wanted. The semantics for from/to are the same as
419
+ # for #range
395
420
  #
396
421
  def self.constrain_size(collection_t, from, to)
397
422
  collection_t.size_type = range(from, to)
398
423
  collection_t
399
424
  end
400
425
 
401
- # Returns true if the given type t is of valid range parameter type (integer or literal default).
426
+ # Returns true if the given type t is of valid range parameter type (integer
427
+ # or literal default).
402
428
  def self.is_range_parameter?(t)
403
- t.is_a?(Integer) || t == 'default' || t == :default
429
+ t.is_a?(Integer) || t == 'default' || :default == t
404
430
  end
405
431
 
406
432
  end
@@ -24,7 +24,7 @@ class Puppet::Pops::Types::TypeParser
24
24
  #
25
25
  # @param string [String] a string with the type expressed in stringified form as produced by the
26
26
  # {Puppet::Pops::Types::TypeCalculator#string TypeCalculator#string} method.
27
- # @return [Puppet::Pops::Types::PObjectType] a specialization of the PObjectType representing the type.
27
+ # @return [Puppet::Pops::Types::PAnyType] a specialization of the PAnyType representing the type.
28
28
  #
29
29
  # @api public
30
30
  #
@@ -47,7 +47,7 @@ class Puppet::Pops::Types::TypeParser
47
47
  def interpret(ast)
48
48
  result = @type_transformer.visit_this_0(self, ast)
49
49
  result = result.body if result.is_a?(Puppet::Pops::Model::Program)
50
- raise_invalid_type_specification_error unless result.is_a?(Puppet::Pops::Types::PAbstractType)
50
+ raise_invalid_type_specification_error unless result.is_a?(Puppet::Pops::Types::PAnyType)
51
51
  result
52
52
  end
53
53
 
@@ -76,6 +76,10 @@ class Puppet::Pops::Types::TypeParser
76
76
  o.value
77
77
  end
78
78
 
79
+ def interpret_LiteralRegularExpression(o)
80
+ o.value
81
+ end
82
+
79
83
  # @api private
80
84
  def interpret_String(o)
81
85
  o
@@ -157,11 +161,13 @@ class Puppet::Pops::Types::TypeParser
157
161
  TYPES.catalog_entry()
158
162
 
159
163
  when "undef"
160
- # Should not be interpreted as Resource type
161
164
  TYPES.undef()
162
165
 
163
- when "object"
164
- TYPES.object()
166
+ when "default"
167
+ TYPES.default()
168
+
169
+ when "any"
170
+ TYPES.any()
165
171
 
166
172
  when "variant"
167
173
  TYPES.variant()
@@ -169,8 +175,8 @@ class Puppet::Pops::Types::TypeParser
169
175
  when "optional"
170
176
  TYPES.optional()
171
177
 
172
- when "ruby"
173
- TYPES.ruby_type()
178
+ when "runtime"
179
+ TYPES.runtime()
174
180
 
175
181
  when "type"
176
182
  TYPES.type_type()
@@ -297,22 +303,22 @@ class Puppet::Pops::Types::TypeParser
297
303
 
298
304
  when "enum"
299
305
  # 1..m parameters being strings
300
- raise_invalid_parameters_error("Enum", "1 or more", parameters.size) unless parameters.size > 1
306
+ raise_invalid_parameters_error("Enum", "1 or more", parameters.size) unless parameters.size >= 1
301
307
  TYPES.enum(*parameters)
302
308
 
303
309
  when "pattern"
304
310
  # 1..m parameters being strings or regular expressions
305
- raise_invalid_parameters_error("Pattern", "1 or more", parameters.size) unless parameters.size > 1
311
+ raise_invalid_parameters_error("Pattern", "1 or more", parameters.size) unless parameters.size >= 1
306
312
  TYPES.pattern(*parameters)
307
313
 
308
314
  when "variant"
309
315
  # 1..m parameters being strings or regular expressions
310
- raise_invalid_parameters_error("Variant", "1 or more", parameters.size) unless parameters.size > 1
316
+ raise_invalid_parameters_error("Variant", "1 or more", parameters.size) unless parameters.size >= 1
311
317
  TYPES.variant(*parameters)
312
318
 
313
319
  when "tuple"
314
320
  # 1..m parameters being types (last two optionally integer or literal default
315
- raise_invalid_parameters_error("Tuple", "1 or more", parameters.size) unless parameters.size > 1
321
+ raise_invalid_parameters_error("Tuple", "1 or more", parameters.size) unless parameters.size >= 1
316
322
  length = parameters.size
317
323
  if TYPES.is_range_parameter?(parameters[-2])
318
324
  # min, max specification
@@ -400,7 +406,7 @@ class Puppet::Pops::Types::TypeParser
400
406
  assert_type(parameters[0])
401
407
  TYPES.optional(parameters[0])
402
408
 
403
- when "object", "data", "catalogentry", "boolean", "scalar", "undef", "numeric"
409
+ when "any", "data", "catalogentry", "boolean", "scalar", "undef", "numeric", "default"
404
410
  raise_unparameterized_type_error(parameterized_ast.left_expr)
405
411
 
406
412
  when "type"
@@ -410,9 +416,9 @@ class Puppet::Pops::Types::TypeParser
410
416
  assert_type(parameters[0])
411
417
  TYPES.type_type(parameters[0])
412
418
 
413
- when "ruby"
414
- raise_invalid_parameters_error("Ruby", "1", parameters.size) unless parameters.size == 1
415
- TYPES.ruby_type(parameters[0])
419
+ when "runtime"
420
+ raise_invalid_parameters_error("Runtime", "2", parameters.size) unless parameters.size == 2
421
+ TYPES.runtime(*parameters)
416
422
 
417
423
  else
418
424
  # It is a resource such a File['/tmp/foo']
@@ -427,7 +433,7 @@ class Puppet::Pops::Types::TypeParser
427
433
  private
428
434
 
429
435
  def assert_type(t)
430
- raise_invalid_type_specification_error unless t.is_a?(Puppet::Pops::Types::PObjectType)
436
+ raise_invalid_type_specification_error unless t.is_a?(Puppet::Pops::Types::PAnyType)
431
437
  true
432
438
  end
433
439
 
@@ -1,506 +1,397 @@
1
1
  require 'rgen/metamodel_builder'
2
2
 
3
3
  # The Types model is a model of Puppet Language types.
4
- #
5
- # The exact relationship between types is not visible in this model wrt. the PDataType which is an abstraction
6
- # of Scalar, Array[Data], and Hash[Scalar, Data] nested to any depth. This means it is not possible to
7
- # infer the type by simply looking at the inheritance hierarchy. The {Puppet::Pops::Types::TypeCalculator} should
8
- # be used to answer questions about types. The {Puppet::Pops::Types::TypeFactory} should be used to create an instance
9
- # of a type whenever one is needed.
10
- #
11
- # The implementation of the Types model contains methods that are required for the type objects to behave as
12
- # expected when comparing them and using them as keys in hashes. (No other logic is, or should be included directly in
13
- # the model's classes).
4
+ # It consists of two parts; the meta-model expressed using RGen (in types_meta.rb) and this file which
5
+ # mixes in the implementation.
14
6
  #
15
7
  # @api public
16
8
  #
17
- module Puppet::Pops::Types
18
- # Used as end in a range
19
- INFINITY = 1.0 / 0.0
20
- NEGATIVE_INFINITY = -INFINITY
21
-
22
- class PAbstractType < Puppet::Pops::Model::PopsObject
23
- abstract
24
- module ClassModule
25
- # Produce a deep copy of the type
26
- def copy
27
- Marshal.load(Marshal.dump(self))
28
- end
9
+ module Puppet::Pops
10
+ require 'puppet/pops/types/types_meta'
29
11
 
30
- def hash
31
- self.class.hash
32
- end
12
+ # TODO: See PUP-2978 for possible performance optimization
33
13
 
34
- def ==(o)
35
- self.class == o.class
36
- end
14
+ # Mix in implementation part of the Bindings Module
15
+ module Types
16
+ # Used as end in a range
17
+ INFINITY = 1.0 / 0.0
18
+ NEGATIVE_INFINITY = -INFINITY
37
19
 
38
- alias eql? ==
39
-
40
- def to_s
41
- Puppet::Pops::Types::TypeCalculator.string(self)
42
- end
20
+ class TypeModelObject < RGen::MetamodelBuilder::MMBase
21
+ include Puppet::Pops::Visitable
22
+ include Puppet::Pops::Adaptable
23
+ include Puppet::Pops::Containment
43
24
  end
44
- end
45
25
 
46
- # The type of types.
47
- # @api public
48
- class PType < PAbstractType
49
- contains_one_uni 'type', PAbstractType
50
- module ClassModule
51
- def hash
52
- [self.class, type].hash
53
- end
54
-
55
- def ==(o)
56
- self.class == o.class && type == o.type
57
- end
58
- end
59
- end
60
-
61
- # Base type for all types except {Puppet::Pops::Types::PType PType}, the type of types.
62
- # @api public
63
- class PObjectType < PAbstractType
26
+ class PAnyType < TypeModelObject
27
+ module ClassModule
28
+ # Produce a deep copy of the type
29
+ def copy
30
+ Marshal.load(Marshal.dump(self))
31
+ end
64
32
 
65
- module ClassModule
66
- end
33
+ def hash
34
+ self.class.hash
35
+ end
67
36
 
68
- end
37
+ def ==(o)
38
+ self.class == o.class
39
+ end
69
40
 
70
- # @api public
71
- class PNilType < PObjectType
72
- end
41
+ alias eql? ==
73
42
 
74
- # A flexible data type, being assignable to its subtypes as well as PArrayType and PHashType with element type assignable to PDataType.
75
- #
76
- # @api public
77
- class PDataType < PObjectType
78
- module ClassModule
79
- def ==(o)
80
- self.class == o.class ||
81
- o.class == PVariantType && o == Puppet::Pops::Types::TypeCalculator.data_variant()
43
+ def to_s
44
+ Puppet::Pops::Types::TypeCalculator.string(self)
45
+ end
82
46
  end
83
47
  end
84
- end
85
48
 
86
- # A flexible type describing an any? of other types
87
- # @api public
88
- class PVariantType < PObjectType
89
- contains_many_uni 'types', PAbstractType, :lowerBound => 1
90
-
91
- module ClassModule
49
+ class PType < PAnyType
50
+ module ClassModule
51
+ def hash
52
+ [self.class, type].hash
53
+ end
92
54
 
93
- def hash
94
- [self.class, Set.new(self.types)].hash
55
+ def ==(o)
56
+ self.class == o.class && type == o.type
57
+ end
95
58
  end
59
+ end
96
60
 
97
- def ==(o)
98
- (self.class == o.class && Set.new(types) == Set.new(o.types)) ||
99
- (o.class == PDataType && self == Puppet::Pops::Types::TypeCalculator.data_variant())
61
+ class PDataType < PAnyType
62
+ module ClassModule
63
+ def ==(o)
64
+ self.class == o.class ||
65
+ o.class == PVariantType && o == Puppet::Pops::Types::TypeCalculator.data_variant()
66
+ end
100
67
  end
101
68
  end
102
- end
103
-
104
- # Type that is PDataType compatible, but is not a PCollectionType.
105
- # @api public
106
- class PScalarType < PObjectType
107
- end
108
69
 
109
- # A string type describing the set of strings having one of the given values
110
- #
111
- class PEnumType < PScalarType
112
- has_many_attr 'values', String, :lowerBound => 1
70
+ class PVariantType < PAnyType
71
+ module ClassModule
113
72
 
114
- module ClassModule
115
- def hash
116
- [self.class, Set.new(self.values)].hash
117
- end
73
+ def hash
74
+ [self.class, Set.new(self.types)].hash
75
+ end
118
76
 
119
- def ==(o)
120
- self.class == o.class && Set.new(values) == Set.new(o.values)
77
+ def ==(o)
78
+ (self.class == o.class && Set.new(types) == Set.new(o.types)) ||
79
+ (o.class == PDataType && self == Puppet::Pops::Types::TypeCalculator.data_variant())
80
+ end
121
81
  end
122
82
  end
123
- end
124
83
 
125
- # @api public
126
- class PNumericType < PScalarType
127
- end
84
+ class PEnumType < PScalarType
85
+ module ClassModule
86
+ def hash
87
+ [self.class, Set.new(self.values)].hash
88
+ end
128
89
 
129
- # @api public
130
- class PIntegerType < PNumericType
131
- has_attr 'from', Integer, :lowerBound => 0
132
- has_attr 'to', Integer, :lowerBound => 0
90
+ def ==(o)
91
+ self.class == o.class && Set.new(values) == Set.new(o.values)
92
+ end
93
+ end
94
+ end
133
95
 
134
- module ClassModule
135
- # The integer type is enumerable when it defines a range
136
- include Enumerable
96
+ class PIntegerType < PNumericType
97
+ module ClassModule
98
+ # The integer type is enumerable when it defines a range
99
+ include Enumerable
137
100
 
138
- # Returns Float.Infinity if one end of the range is unbound
139
- def size
140
- return INFINITY if from.nil? || to.nil?
141
- 1+(to-from).abs
142
- end
101
+ # Returns Float.Infinity if one end of the range is unbound
102
+ def size
103
+ return INFINITY if from.nil? || to.nil?
104
+ 1+(to-from).abs
105
+ end
143
106
 
144
- # Returns the range as an array ordered so the smaller number is always first.
145
- # The number may be Infinity or -Infinity.
146
- def range
147
- f = from || NEGATIVE_INFINITY
148
- t = to || INFINITY
149
- if f < t
150
- [f, t]
151
- else
152
- [t,f]
107
+ # Returns the range as an array ordered so the smaller number is always first.
108
+ # The number may be Infinity or -Infinity.
109
+ def range
110
+ f = from || NEGATIVE_INFINITY
111
+ t = to || INFINITY
112
+ if f < t
113
+ [f, t]
114
+ else
115
+ [t,f]
116
+ end
153
117
  end
154
- end
155
118
 
156
- # Returns Enumerator if no block is given
157
- # Returns self if size is infinity (does not yield)
158
- def each
159
- return self.to_enum unless block_given?
160
- return nil if from.nil? || to.nil?
161
- if to < from
162
- from.downto(to) {|x| yield x }
163
- else
164
- from.upto(to) {|x| yield x }
119
+ # Returns Enumerator if no block is given
120
+ # Returns self if size is infinity (does not yield)
121
+ def each
122
+ return self.to_enum unless block_given?
123
+ return nil if from.nil? || to.nil?
124
+ if to < from
125
+ from.downto(to) {|x| yield x }
126
+ else
127
+ from.upto(to) {|x| yield x }
128
+ end
165
129
  end
166
- end
167
130
 
168
- def hash
169
- [self.class, from, to].hash
170
- end
131
+ def hash
132
+ [self.class, from, to].hash
133
+ end
171
134
 
172
- def ==(o)
173
- self.class == o.class && from == o.from && to == o.to
135
+ def ==(o)
136
+ self.class == o.class && from == o.from && to == o.to
137
+ end
174
138
  end
175
139
  end
176
- end
177
140
 
178
- # @api public
179
- class PFloatType < PNumericType
180
- has_attr 'from', Float, :lowerBound => 0
181
- has_attr 'to', Float, :lowerBound => 0
182
-
183
- module ClassModule
184
- def hash
185
- [self.class, from, to].hash
186
- end
141
+ class PFloatType < PNumericType
142
+ module ClassModule
143
+ def hash
144
+ [self.class, from, to].hash
145
+ end
187
146
 
188
- def ==(o)
189
- self.class == o.class && from == o.from && to == o.to
147
+ def ==(o)
148
+ self.class == o.class && from == o.from && to == o.to
149
+ end
190
150
  end
191
151
  end
192
- end
193
-
194
- # @api public
195
- class PStringType < PScalarType
196
- has_many_attr 'values', String, :lowerBound => 0, :upperBound => -1, :unique => true
197
- contains_one_uni 'size_type', PIntegerType
198
152
 
199
- module ClassModule
153
+ class PStringType < PScalarType
154
+ module ClassModule
200
155
 
201
- def hash
202
- [self.class, self.size_type, Set.new(self.values)].hash
203
- end
156
+ def hash
157
+ [self.class, self.size_type, Set.new(self.values)].hash
158
+ end
204
159
 
205
- def ==(o)
206
- self.class == o.class && self.size_type == o.size_type && Set.new(values) == Set.new(o.values)
160
+ def ==(o)
161
+ self.class == o.class && self.size_type == o.size_type && Set.new(values) == Set.new(o.values)
162
+ end
207
163
  end
208
164
  end
209
- end
210
-
211
- # @api public
212
- class PRegexpType < PScalarType
213
- has_attr 'pattern', String, :lowerBound => 1
214
- has_attr 'regexp', Object, :derived => true
215
165
 
216
- module ClassModule
217
- def regexp_derived
218
- @_regexp = Regexp.new(pattern) unless @_regexp && @_regexp.source == pattern
219
- @_regexp
220
- end
166
+ class PRegexpType < PScalarType
167
+ module ClassModule
168
+ def regexp_derived
169
+ @_regexp = Regexp.new(pattern) unless @_regexp && @_regexp.source == pattern
170
+ @_regexp
171
+ end
221
172
 
222
- def hash
223
- [self.class, pattern].hash
224
- end
173
+ def hash
174
+ [self.class, pattern].hash
175
+ end
225
176
 
226
- def ==(o)
227
- self.class == o.class && pattern == o.pattern
177
+ def ==(o)
178
+ self.class == o.class && pattern == o.pattern
179
+ end
228
180
  end
229
181
  end
230
- end
231
182
 
232
- # Represents a subtype of String that narrows the string to those matching the patterns
233
- # If specified without a pattern it is basically the same as the String type.
234
- #
235
- # @api public
236
- class PPatternType < PScalarType
237
- contains_many_uni 'patterns', PRegexpType
183
+ class PPatternType < PScalarType
184
+ module ClassModule
238
185
 
239
- module ClassModule
240
-
241
- def hash
242
- [self.class, Set.new(patterns)].hash
243
- end
186
+ def hash
187
+ [self.class, Set.new(patterns)].hash
188
+ end
244
189
 
245
- def ==(o)
246
- self.class == o.class && Set.new(patterns) == Set.new(o.patterns)
190
+ def ==(o)
191
+ self.class == o.class && Set.new(patterns) == Set.new(o.patterns)
192
+ end
247
193
  end
248
194
  end
249
- end
250
-
251
- # @api public
252
- class PBooleanType < PScalarType
253
- end
254
195
 
255
- # @api public
256
- class PCollectionType < PObjectType
257
- contains_one_uni 'element_type', PAbstractType
258
- contains_one_uni 'size_type', PIntegerType
259
-
260
- module ClassModule
261
- # Returns an array with from (min) size to (max) size
262
- # A negative range value in from is
263
- def size_range
264
- return [0, INFINITY] if size_type.nil?
265
- f = size_type.from || 0
266
- t = size_type.to || INFINITY
267
- if f < t
268
- [f, t]
269
- else
270
- [t,f]
196
+ class PCollectionType < PAnyType
197
+ module ClassModule
198
+ # Returns an array with from (min) size to (max) size
199
+ def size_range
200
+ return [0, INFINITY] if size_type.nil?
201
+ f = size_type.from || 0
202
+ t = size_type.to || INFINITY
203
+ if f < t
204
+ [f, t]
205
+ else
206
+ [t,f]
207
+ end
271
208
  end
272
- end
273
209
 
274
- def hash
275
- [self.class, element_type, size_type].hash
276
- end
210
+ def hash
211
+ [self.class, element_type, size_type].hash
212
+ end
277
213
 
278
- def ==(o)
279
- self.class == o.class && element_type == o.element_type && size_type == o.size_type
214
+ def ==(o)
215
+ self.class == o.class && element_type == o.element_type && size_type == o.size_type
216
+ end
280
217
  end
281
218
  end
282
- end
283
-
284
- class PStructElement < Puppet::Pops::Model::PopsObject
285
- has_attr 'name', String, :lowerBound => 1
286
- contains_one_uni 'type', PAbstractType
287
219
 
288
- module ClassModule
289
- def hash
290
- [self.class, type, name].hash
291
- end
220
+ class PStructElement < TypeModelObject
221
+ module ClassModule
222
+ def hash
223
+ [self.class, type, name].hash
224
+ end
292
225
 
293
- def ==(o)
294
- self.class == o.class && type == o.type && name == o.name
226
+ def ==(o)
227
+ self.class == o.class && type == o.type && name == o.name
228
+ end
295
229
  end
296
230
  end
297
- end
298
231
 
299
- # @api public
300
- class PStructType < PObjectType
301
- contains_many_uni 'elements', PStructElement, :lowerBound => 1
302
- has_attr 'hashed_elements', Object, :derived => true
303
232
 
304
- module ClassModule
305
- def hashed_elements_derived
306
- @_hashed ||= elements.reduce({}) {|memo, e| memo[e.name] = e.type; memo }
307
- @_hashed
308
- end
233
+ class PStructType < PAnyType
234
+ module ClassModule
235
+ def hashed_elements_derived
236
+ @_hashed ||= elements.reduce({}) {|memo, e| memo[e.name] = e.type; memo }
237
+ @_hashed
238
+ end
309
239
 
310
- def clear_hashed_elements
311
- @_hashed = nil
312
- end
240
+ def clear_hashed_elements
241
+ @_hashed = nil
242
+ end
313
243
 
314
- def hash
315
- [self.class, Set.new(elements)].hash
316
- end
244
+ def hash
245
+ [self.class, Set.new(elements)].hash
246
+ end
317
247
 
318
- def ==(o)
319
- self.class == o.class && hashed_elements == o.hashed_elements
248
+ def ==(o)
249
+ self.class == o.class && hashed_elements == o.hashed_elements
250
+ end
320
251
  end
321
252
  end
322
- end
323
253
 
324
- # @api public
325
- class PTupleType < PObjectType
326
- contains_many_uni 'types', PAbstractType, :lowerBound => 1
327
- # If set, describes min and max required of the given types - if max > size of
328
- # types, the last type entry repeats
329
- #
330
- contains_one_uni 'size_type', PIntegerType, :lowerBound => 0
331
-
332
- module ClassModule
333
- # Returns the number of elements accepted [min, max] in the tuple
334
- def size_range
335
- types_size = types.size
336
- size_type.nil? ? [types_size, types_size] : size_type.range
337
- end
254
+ class PTupleType < PAnyType
255
+ module ClassModule
256
+ # Returns the number of elements accepted [min, max] in the tuple
257
+ def size_range
258
+ types_size = types.size
259
+ size_type.nil? ? [types_size, types_size] : size_type.range
260
+ end
338
261
 
339
- # Returns the number of accepted occurrences [min, max] of the last type in the tuple
340
- # The defaults is [1,1]
341
- #
342
- def repeat_last_range
343
- types_size = types.size
344
- if size_type.nil?
345
- return [1, 1]
346
- end
347
- from, to = size_type.range()
348
- min = from - (types_size-1)
349
- min = min <= 0 ? 0 : min
350
- max = to - (types_size-1)
351
- [min, max]
352
- end
262
+ # Returns the number of accepted occurrences [min, max] of the last type in the tuple
263
+ # The defaults is [1,1]
264
+ #
265
+ def repeat_last_range
266
+ types_size = types.size
267
+ if size_type.nil?
268
+ return [1, 1]
269
+ end
270
+ from, to = size_type.range()
271
+ min = from - (types_size-1)
272
+ min = min <= 0 ? 0 : min
273
+ max = to - (types_size-1)
274
+ [min, max]
275
+ end
353
276
 
354
- def hash
355
- [self.class, size_type, Set.new(types)].hash
356
- end
277
+ def hash
278
+ [self.class, size_type, Set.new(types)].hash
279
+ end
357
280
 
358
- def ==(o)
359
- self.class == o.class && types == o.types && size_type == o.size_type
281
+ def ==(o)
282
+ self.class == o.class && types == o.types && size_type == o.size_type
283
+ end
360
284
  end
361
285
  end
362
- end
363
-
364
- class PCallableType < PObjectType
365
- # Types of parameters and required/optional count
366
- contains_one_uni 'param_types', PTupleType, :lowerBound => 1
367
286
 
368
- # Although being an abstract type reference, only PAbstractCallable, and Optional[Callable] are supported
369
- # If not set, the meaning is that block is not supported.
370
- #
371
- contains_one_uni 'block_type', PAbstractType, :lowerBound => 0
372
-
373
- module ClassModule
374
- # Returns the number of accepted arguments [min, max]
375
- def size_range
376
- param_types.size_range
377
- end
287
+ class PCallableType < PAnyType
288
+ module ClassModule
289
+ # Returns the number of accepted arguments [min, max]
290
+ def size_range
291
+ param_types.size_range
292
+ end
378
293
 
379
- # Returns the number of accepted arguments for the last parameter type [min, max]
380
- #
381
- def last_range
382
- param_types.repeat_last_range
383
- end
294
+ # Returns the number of accepted arguments for the last parameter type [min, max]
295
+ #
296
+ def last_range
297
+ param_types.repeat_last_range
298
+ end
384
299
 
385
- # Range [0,0], [0,1], or [1,1] for the block
386
- #
387
- def block_range
388
- case block_type
389
- when Puppet::Pops::Types::POptionalType
390
- [0,1]
391
- when Puppet::Pops::Types::PVariantType, Puppet::Pops::Types::PCallableType
392
- [1,1]
393
- else
394
- [0,0]
300
+ # Range [0,0], [0,1], or [1,1] for the block
301
+ #
302
+ def block_range
303
+ case block_type
304
+ when Puppet::Pops::Types::POptionalType
305
+ [0,1]
306
+ when Puppet::Pops::Types::PVariantType, Puppet::Pops::Types::PCallableType
307
+ [1,1]
308
+ else
309
+ [0,0]
310
+ end
395
311
  end
396
- end
397
312
 
398
- def hash
399
- [self.class, Set.new(param_types), block_type].hash
400
- end
313
+ def hash
314
+ [self.class, Set.new(param_types), block_type].hash
315
+ end
401
316
 
402
- def ==(o)
403
- self.class == o.class && args_type == o.args_type && block_type == o.block_type
317
+ def ==(o)
318
+ self.class == o.class && args_type == o.args_type && block_type == o.block_type
319
+ end
404
320
  end
405
321
  end
406
- end
407
322
 
408
- # @api public
409
- class PArrayType < PCollectionType
410
- module ClassModule
411
- def hash
412
- [self.class, self.element_type, self.size_type].hash
413
- end
323
+ class PArrayType < PCollectionType
324
+ module ClassModule
325
+ def hash
326
+ [self.class, self.element_type, self.size_type].hash
327
+ end
414
328
 
415
- def ==(o)
416
- self.class == o.class && self.element_type == o.element_type && self.size_type == o.size_type
329
+ def ==(o)
330
+ self.class == o.class && self.element_type == o.element_type && self.size_type == o.size_type
331
+ end
417
332
  end
418
333
  end
419
- end
420
334
 
421
- # @api public
422
- class PHashType < PCollectionType
423
- contains_one_uni 'key_type', PAbstractType
424
- module ClassModule
425
- def hash
426
- [self.class, key_type, self.element_type, self.size_type].hash
427
- end
335
+ class PHashType < PCollectionType
336
+ module ClassModule
337
+ def hash
338
+ [self.class, key_type, self.element_type, self.size_type].hash
339
+ end
428
340
 
429
- def ==(o)
430
- self.class == o.class &&
431
- key_type == o.key_type &&
432
- self.element_type == o.element_type &&
433
- self.size_type == o.size_type
341
+ def ==(o)
342
+ self.class == o.class &&
343
+ key_type == o.key_type &&
344
+ self.element_type == o.element_type &&
345
+ self.size_type == o.size_type
346
+ end
434
347
  end
435
348
  end
436
- end
437
349
 
438
- # @api public
439
- class PRubyType < PObjectType
440
- has_attr 'ruby_class', String
441
- module ClassModule
442
- def hash
443
- [self.class, ruby_class].hash
444
- end
445
350
 
446
- def ==(o)
447
- self.class == o.class && ruby_class == o.ruby_class
351
+ class PRuntimeType < PAnyType
352
+ module ClassModule
353
+ def hash
354
+ [self.class, runtime, runtime_type_name].hash
355
+ end
356
+
357
+ def ==(o)
358
+ self.class == o.class && runtime == o.runtime && runtime_type_name == o.runtime_type_name
359
+ end
448
360
  end
449
361
  end
450
- end
451
-
452
- # Abstract representation of a type that can be placed in a Catalog.
453
- # @api public
454
- #
455
- class PCatalogEntryType < PObjectType
456
- end
457
362
 
458
- # Represents a (host-) class in the Puppet Language.
459
- # @api public
460
- #
461
- class PHostClassType < PCatalogEntryType
462
- has_attr 'class_name', String
463
- # contains_one_uni 'super_type', PHostClassType
464
- module ClassModule
465
- def hash
466
- [self.class, class_name].hash
467
- end
468
- def ==(o)
469
- self.class == o.class && class_name == o.class_name
363
+ class PHostClassType < PCatalogEntryType
364
+ module ClassModule
365
+ def hash
366
+ [self.class, class_name].hash
367
+ end
368
+ def ==(o)
369
+ self.class == o.class && class_name == o.class_name
370
+ end
470
371
  end
471
372
  end
472
- end
473
373
 
474
- # Represents a Resource Type in the Puppet Language
475
- # @api public
476
- #
477
- class PResourceType < PCatalogEntryType
478
- has_attr 'type_name', String
479
- has_attr 'title', String
480
- module ClassModule
481
- def hash
482
- [self.class, type_name, title].hash
483
- end
484
- def ==(o)
485
- self.class == o.class && type_name == o.type_name && title == o.title
374
+ class PResourceType < PCatalogEntryType
375
+ module ClassModule
376
+ def hash
377
+ [self.class, type_name, title].hash
378
+ end
379
+ def ==(o)
380
+ self.class == o.class && type_name == o.type_name && title == o.title
381
+ end
486
382
  end
487
383
  end
488
- end
489
384
 
490
- # Represents a type that accept PNilType instead of the type parameter
491
- # required_type - is a short hand for Variant[T, Undef]
492
- #
493
- class POptionalType < PAbstractType
494
- contains_one_uni 'optional_type', PAbstractType
495
- module ClassModule
496
- def hash
497
- [self.class, optional_type].hash
498
- end
385
+ class POptionalType < PAnyType
386
+ module ClassModule
387
+ def hash
388
+ [self.class, optional_type].hash
389
+ end
499
390
 
500
- def ==(o)
501
- self.class == o.class && optional_type == o.optional_type
391
+ def ==(o)
392
+ self.class == o.class && optional_type == o.optional_type
393
+ end
502
394
  end
503
395
  end
504
396
  end
505
-
506
397
  end