puppet 4.10.12-x86-mingw32 → 5.0.0-x86-mingw32

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

Potentially problematic release.


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

Files changed (1112) hide show
  1. data/CONTRIBUTING.md +32 -15
  2. data/Gemfile +31 -14
  3. data/MAINTAINERS +0 -5
  4. data/README.md +11 -11
  5. data/Rakefile +2 -1
  6. data/conf/auth.conf +21 -0
  7. data/conf/fileserver.conf +7 -12
  8. data/conf/hiera.yaml +11 -0
  9. data/ext/debian/puppet-common.install +0 -1
  10. data/ext/debian/puppet-common.manpages +0 -2
  11. data/ext/hiera/hiera.yaml +15 -0
  12. data/ext/logcheck/puppet +1 -1
  13. data/ext/project_data.yaml +4 -9
  14. data/ext/puppet-test +0 -24
  15. data/ext/rack/config.ru +2 -2
  16. data/ext/redhat/puppet.spec.erb +0 -3
  17. data/ext/windows/service/daemon.rb +8 -14
  18. data/install.rb +1 -1
  19. data/lib/hiera/puppet_function.rb +1 -1
  20. data/lib/puppet.rb +7 -5
  21. data/lib/puppet/agent.rb +29 -38
  22. data/lib/puppet/agent/disabler.rb +3 -3
  23. data/lib/puppet/agent/locker.rb +3 -3
  24. data/lib/puppet/application.rb +12 -29
  25. data/lib/puppet/application/agent.rb +20 -18
  26. data/lib/puppet/application/apply.rb +22 -18
  27. data/lib/puppet/application/cert.rb +2 -7
  28. data/lib/puppet/application/config.rb +0 -1
  29. data/lib/puppet/application/describe.rb +1 -1
  30. data/lib/puppet/application/device.rb +94 -76
  31. data/lib/puppet/application/doc.rb +6 -6
  32. data/lib/puppet/application/face_base.rb +8 -13
  33. data/lib/puppet/application/filebucket.rb +12 -29
  34. data/lib/puppet/application/help.rb +0 -1
  35. data/lib/puppet/application/lookup.rb +106 -101
  36. data/lib/puppet/application/master.rb +14 -22
  37. data/lib/puppet/application/resource.rb +13 -10
  38. data/lib/puppet/application_support.rb +1 -6
  39. data/lib/puppet/configurer.rb +33 -45
  40. data/lib/puppet/configurer/downloader.rb +2 -2
  41. data/lib/puppet/configurer/fact_handler.rb +13 -4
  42. data/lib/puppet/context.rb +5 -5
  43. data/lib/puppet/context/trusted_information.rb +1 -1
  44. data/lib/puppet/defaults.rb +18 -131
  45. data/lib/puppet/environments.rb +1 -1
  46. data/lib/puppet/error.rb +1 -1
  47. data/lib/puppet/external/nagios/grammar.ry +1 -1
  48. data/lib/puppet/external/nagios/parser.rb +1 -1
  49. data/lib/puppet/external/pson/common.rb +4 -0
  50. data/lib/puppet/face/ca.rb +49 -42
  51. data/lib/puppet/face/catalog.rb +1 -1
  52. data/lib/puppet/face/catalog/select.rb +4 -4
  53. data/lib/puppet/face/certificate.rb +20 -20
  54. data/lib/puppet/face/config.rb +9 -22
  55. data/lib/puppet/face/epp.rb +59 -61
  56. data/lib/puppet/face/facts.rb +4 -4
  57. data/lib/puppet/face/generate.rb +8 -8
  58. data/lib/puppet/face/help.rb +7 -7
  59. data/lib/puppet/face/key.rb +2 -2
  60. data/lib/puppet/face/man.rb +5 -5
  61. data/lib/puppet/face/module.rb +2 -2
  62. data/lib/puppet/face/module/build.rb +7 -7
  63. data/lib/puppet/face/module/changes.rb +6 -6
  64. data/lib/puppet/face/module/generate.rb +24 -24
  65. data/lib/puppet/face/module/install.rb +13 -9
  66. data/lib/puppet/face/module/list.rb +16 -12
  67. data/lib/puppet/face/module/search.rb +4 -4
  68. data/lib/puppet/face/module/uninstall.rb +13 -10
  69. data/lib/puppet/face/module/upgrade.rb +11 -7
  70. data/lib/puppet/face/node.rb +5 -5
  71. data/lib/puppet/face/node/clean.rb +8 -8
  72. data/lib/puppet/face/parser.rb +16 -16
  73. data/lib/puppet/face/plugin.rb +6 -6
  74. data/lib/puppet/face/report.rb +9 -9
  75. data/lib/puppet/face/resource.rb +12 -12
  76. data/lib/puppet/face/status.rb +4 -4
  77. data/lib/puppet/feature/base.rb +3 -2
  78. data/lib/puppet/feature/eventlog.rb +1 -1
  79. data/lib/puppet/file_bucket/dipper.rb +9 -9
  80. data/lib/puppet/file_bucket/file.rb +4 -17
  81. data/lib/puppet/file_serving/base.rb +3 -3
  82. data/lib/puppet/file_serving/configuration.rb +3 -3
  83. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  84. data/lib/puppet/file_serving/content.rb +1 -1
  85. data/lib/puppet/file_serving/fileset.rb +7 -5
  86. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  87. data/lib/puppet/file_serving/metadata.rb +7 -7
  88. data/lib/puppet/file_serving/mount.rb +1 -1
  89. data/lib/puppet/file_serving/mount/file.rb +6 -6
  90. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  91. data/lib/puppet/file_serving/terminus_selector.rb +1 -1
  92. data/lib/puppet/file_system/file_impl.rb +2 -2
  93. data/lib/puppet/file_system/memory_impl.rb +1 -1
  94. data/lib/puppet/file_system/path_pattern.rb +6 -6
  95. data/lib/puppet/file_system/uniquefile.rb +2 -2
  96. data/lib/puppet/file_system/windows.rb +3 -3
  97. data/lib/puppet/forge.rb +8 -14
  98. data/lib/puppet/forge/errors.rb +12 -12
  99. data/lib/puppet/forge/repository.rb +1 -1
  100. data/lib/puppet/functions.rb +17 -45
  101. data/lib/puppet/functions/annotate.rb +108 -0
  102. data/lib/puppet/functions/binary_file.rb +1 -1
  103. data/lib/puppet/functions/call.rb +42 -0
  104. data/lib/puppet/functions/defined.rb +4 -4
  105. data/lib/puppet/functions/dig.rb +1 -1
  106. data/lib/puppet/functions/each.rb +4 -10
  107. data/lib/puppet/functions/epp.rb +0 -3
  108. data/lib/puppet/functions/hiera_include.rb +1 -1
  109. data/lib/puppet/functions/hocon_data.rb +2 -2
  110. data/lib/puppet/functions/json_data.rb +1 -1
  111. data/lib/puppet/functions/lookup.rb +2 -2
  112. data/lib/puppet/functions/map.rb +3 -13
  113. data/lib/puppet/functions/match.rb +2 -2
  114. data/lib/puppet/functions/reduce.rb +0 -31
  115. data/lib/puppet/functions/require.rb +1 -1
  116. data/lib/puppet/functions/slice.rb +3 -3
  117. data/lib/puppet/functions/strftime.rb +10 -2
  118. data/lib/puppet/functions/unique.rb +132 -0
  119. data/lib/puppet/generate/models/type/property.rb +1 -1
  120. data/lib/puppet/generate/type.rb +12 -12
  121. data/lib/puppet/graph/relationship_graph.rb +4 -7
  122. data/lib/puppet/graph/simple_graph.rb +45 -66
  123. data/lib/puppet/indirector.rb +2 -2
  124. data/lib/puppet/indirector/catalog/compiler.rb +58 -44
  125. data/lib/puppet/indirector/catalog/json.rb +18 -0
  126. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  127. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  128. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  129. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  130. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  131. data/lib/puppet/indirector/exec.rb +2 -2
  132. data/lib/puppet/indirector/face.rb +18 -18
  133. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -9
  134. data/lib/puppet/indirector/file_metadata/http.rb +1 -1
  135. data/lib/puppet/indirector/file_server.rb +10 -2
  136. data/lib/puppet/indirector/hiera.rb +5 -3
  137. data/lib/puppet/indirector/indirection.rb +16 -18
  138. data/lib/puppet/indirector/json.rb +11 -12
  139. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  140. data/lib/puppet/indirector/key/file.rb +2 -2
  141. data/lib/puppet/indirector/ldap.rb +6 -5
  142. data/lib/puppet/indirector/memory.rb +1 -1
  143. data/lib/puppet/indirector/msgpack.rb +8 -7
  144. data/lib/puppet/indirector/node/exec.rb +8 -6
  145. data/lib/puppet/indirector/node/ldap.rb +9 -7
  146. data/lib/puppet/indirector/node/plain.rb +2 -1
  147. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  148. data/lib/puppet/indirector/node/yaml.rb +0 -9
  149. data/lib/puppet/indirector/report/processor.rb +2 -2
  150. data/lib/puppet/indirector/report/rest.rb +13 -0
  151. data/lib/puppet/indirector/request.rb +11 -23
  152. data/lib/puppet/indirector/resource/ral.rb +1 -1
  153. data/lib/puppet/indirector/resource/validator.rb +1 -1
  154. data/lib/puppet/indirector/rest.rb +28 -10
  155. data/lib/puppet/indirector/ssl_file.rb +9 -9
  156. data/lib/puppet/indirector/terminus.rb +3 -3
  157. data/lib/puppet/indirector/yaml.rb +5 -5
  158. data/lib/puppet/info_service/class_information_service.rb +4 -5
  159. data/lib/puppet/interface.rb +2 -7
  160. data/lib/puppet/interface/face_collection.rb +6 -1
  161. data/lib/puppet/module.rb +10 -35
  162. data/lib/puppet/module_tool.rb +7 -3
  163. data/lib/puppet/module_tool/applications/application.rb +8 -9
  164. data/lib/puppet/module_tool/applications/builder.rb +5 -6
  165. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  166. data/lib/puppet/module_tool/applications/installer.rb +11 -10
  167. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  168. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  169. data/lib/puppet/module_tool/applications/unpacker.rb +3 -3
  170. data/lib/puppet/module_tool/applications/upgrader.rb +10 -9
  171. data/lib/puppet/module_tool/contents_description.rb +1 -1
  172. data/lib/puppet/module_tool/dependency.rb +0 -1
  173. data/lib/puppet/module_tool/errors/installer.rb +22 -22
  174. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  175. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  176. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  177. data/lib/puppet/module_tool/install_directory.rb +1 -1
  178. data/lib/puppet/module_tool/installed_modules.rb +3 -3
  179. data/lib/puppet/module_tool/local_tarball.rb +4 -4
  180. data/lib/puppet/module_tool/metadata.rb +16 -13
  181. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  182. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +1 -1
  183. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +10 -4
  184. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +2 -2
  185. data/lib/puppet/module_tool/tar.rb +2 -1
  186. data/lib/puppet/module_tool/tar/mini.rb +4 -57
  187. data/lib/puppet/network/auth_config_parser.rb +12 -11
  188. data/lib/puppet/network/authconfig.rb +2 -2
  189. data/lib/puppet/network/authstore.rb +2 -2
  190. data/lib/puppet/network/format.rb +7 -7
  191. data/lib/puppet/network/format_handler.rb +12 -9
  192. data/lib/puppet/network/format_support.rb +11 -5
  193. data/lib/puppet/network/formats.rb +38 -27
  194. data/lib/puppet/network/http/api/indirected_routes.rb +72 -33
  195. data/lib/puppet/network/http/api/master/v3/environment.rb +33 -14
  196. data/lib/puppet/network/http/compression.rb +10 -7
  197. data/lib/puppet/network/http/connection.rb +19 -23
  198. data/lib/puppet/network/http/error.rb +14 -10
  199. data/lib/puppet/network/http/factory.rb +0 -12
  200. data/lib/puppet/network/http/handler.rb +8 -4
  201. data/lib/puppet/network/http/issues.rb +1 -0
  202. data/lib/puppet/network/http/pool.rb +1 -1
  203. data/lib/puppet/network/http/rack.rb +2 -2
  204. data/lib/puppet/network/http/rack/rest.rb +1 -1
  205. data/lib/puppet/network/http/request.rb +34 -20
  206. data/lib/puppet/network/http/response.rb +13 -1
  207. data/lib/puppet/network/http/webrick.rb +8 -6
  208. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  209. data/lib/puppet/network/rights.rb +6 -6
  210. data/lib/puppet/network/server.rb +2 -2
  211. data/lib/puppet/node.rb +25 -23
  212. data/lib/puppet/node/environment.rb +21 -4
  213. data/lib/puppet/node/facts.rb +0 -14
  214. data/lib/puppet/parameter.rb +3 -28
  215. data/lib/puppet/parameter/package_options.rb +1 -1
  216. data/lib/puppet/parameter/path.rb +3 -3
  217. data/lib/puppet/parameter/value_collection.rb +4 -4
  218. data/lib/puppet/parser/ast/leaf.rb +1 -1
  219. data/lib/puppet/parser/ast/node.rb +1 -1
  220. data/lib/puppet/parser/ast/pops_bridge.rb +3 -3
  221. data/lib/puppet/parser/ast/resource.rb +1 -1
  222. data/lib/puppet/parser/ast/resource_instance.rb +1 -1
  223. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  224. data/lib/puppet/parser/compiler.rb +44 -117
  225. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -2
  226. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +6 -9
  227. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +1 -1
  228. data/lib/puppet/parser/e4_parser_adapter.rb +1 -2
  229. data/lib/puppet/parser/environment_compiler.rb +13 -15
  230. data/lib/puppet/parser/functions.rb +6 -6
  231. data/lib/puppet/parser/functions/assert_type.rb +1 -1
  232. data/lib/puppet/parser/functions/binary_file.rb +1 -1
  233. data/lib/puppet/parser/functions/break.rb +1 -1
  234. data/lib/puppet/parser/functions/contain.rb +1 -1
  235. data/lib/puppet/parser/functions/create_resources.rb +3 -3
  236. data/lib/puppet/parser/functions/defined.rb +1 -1
  237. data/lib/puppet/parser/functions/dig.rb +1 -1
  238. data/lib/puppet/parser/functions/each.rb +1 -1
  239. data/lib/puppet/parser/functions/epp.rb +1 -4
  240. data/lib/puppet/parser/functions/file.rb +1 -1
  241. data/lib/puppet/parser/functions/filter.rb +1 -1
  242. data/lib/puppet/parser/functions/find_file.rb +1 -1
  243. data/lib/puppet/parser/functions/generate.rb +5 -4
  244. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  245. data/lib/puppet/parser/functions/include.rb +2 -1
  246. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  247. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  248. data/lib/puppet/parser/functions/lest.rb +1 -1
  249. data/lib/puppet/parser/functions/map.rb +1 -1
  250. data/lib/puppet/parser/functions/match.rb +1 -1
  251. data/lib/puppet/parser/functions/new.rb +45 -30
  252. data/lib/puppet/parser/functions/next.rb +1 -1
  253. data/lib/puppet/parser/functions/reduce.rb +1 -1
  254. data/lib/puppet/parser/functions/require.rb +1 -1
  255. data/lib/puppet/parser/functions/return.rb +2 -23
  256. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  257. data/lib/puppet/parser/functions/slice.rb +1 -1
  258. data/lib/puppet/parser/functions/sprintf.rb +3 -17
  259. data/lib/puppet/parser/functions/step.rb +1 -1
  260. data/lib/puppet/parser/functions/strftime.rb +1 -1
  261. data/lib/puppet/parser/functions/then.rb +1 -1
  262. data/lib/puppet/parser/functions/type.rb +1 -1
  263. data/lib/puppet/parser/functions/with.rb +1 -1
  264. data/lib/puppet/parser/parser_factory.rb +0 -30
  265. data/lib/puppet/parser/relationship.rb +49 -20
  266. data/lib/puppet/parser/resource.rb +31 -30
  267. data/lib/puppet/parser/resource/param.rb +0 -3
  268. data/lib/puppet/parser/scope.rb +122 -168
  269. data/lib/puppet/parser/templatewrapper.rb +2 -2
  270. data/lib/puppet/parser/type_loader.rb +1 -1
  271. data/lib/puppet/plugins/configuration.rb +15 -67
  272. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  273. data/lib/puppet/pops.rb +7 -37
  274. data/lib/puppet/pops/adaptable.rb +8 -3
  275. data/lib/puppet/pops/adapters.rb +23 -83
  276. data/lib/puppet/pops/evaluator/access_operator.rb +10 -39
  277. data/lib/puppet/pops/evaluator/collector_transformer.rb +7 -12
  278. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  279. data/lib/puppet/pops/evaluator/compare_operator.rb +7 -7
  280. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
  281. data/lib/puppet/pops/evaluator/evaluator_impl.rb +46 -38
  282. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  283. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +0 -2
  284. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  285. data/lib/puppet/pops/evaluator/relationship_operator.rb +26 -9
  286. data/lib/puppet/pops/evaluator/runtime3_converter.rb +17 -1
  287. data/lib/puppet/pops/evaluator/runtime3_support.rb +13 -30
  288. data/lib/puppet/pops/functions/dispatch.rb +1 -6
  289. data/lib/puppet/pops/issues.rb +182 -162
  290. data/lib/puppet/pops/loader/base_loader.rb +2 -2
  291. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  292. data/lib/puppet/pops/loader/module_loaders.rb +59 -8
  293. data/lib/puppet/pops/loader/predefined_loader.rb +1 -6
  294. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +8 -8
  295. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -10
  296. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +3 -3
  297. data/lib/puppet/pops/loader/static_loader.rb +33 -64
  298. data/lib/puppet/pops/loader/type_definition_instantiator.rb +7 -7
  299. data/lib/puppet/pops/loader/typed_name.rb +5 -0
  300. data/lib/puppet/pops/loaders.rb +15 -5
  301. data/lib/puppet/pops/lookup.rb +4 -2
  302. data/lib/puppet/pops/lookup/context.rb +1 -1
  303. data/lib/puppet/pops/lookup/data_provider.rb +3 -18
  304. data/lib/puppet/pops/lookup/global_data_provider.rb +1 -1
  305. data/lib/puppet/pops/lookup/hiera_config.rb +12 -35
  306. data/lib/puppet/pops/lookup/interpolation.rb +1 -0
  307. data/lib/puppet/pops/lookup/invocation.rb +1 -1
  308. data/lib/puppet/pops/lookup/lookup_adapter.rb +20 -64
  309. data/lib/puppet/pops/lookup/lookup_key.rb +1 -1
  310. data/lib/puppet/pops/lookup/module_data_provider.rb +1 -1
  311. data/lib/puppet/pops/lookup/sub_lookup.rb +2 -1
  312. data/lib/puppet/pops/merge_strategy.rb +1 -1
  313. data/lib/puppet/pops/model/ast.pp +692 -0
  314. data/lib/puppet/pops/model/ast.rb +4833 -0
  315. data/lib/puppet/pops/model/ast_transformer.rb +9 -10
  316. data/lib/puppet/pops/model/factory.rb +454 -527
  317. data/lib/puppet/pops/model/model_label_provider.rb +3 -2
  318. data/lib/puppet/pops/model/model_tree_dumper.rb +9 -8
  319. data/lib/puppet/pops/parser/egrammar.ra +66 -60
  320. data/lib/puppet/pops/parser/eparser.rb +1483 -1578
  321. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -5
  322. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  323. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  324. data/lib/puppet/pops/parser/lexer2.rb +7 -33
  325. data/lib/puppet/pops/parser/locator.rb +39 -16
  326. data/lib/puppet/pops/parser/parser_support.rb +25 -29
  327. data/lib/puppet/pops/patterns.rb +1 -2
  328. data/lib/puppet/pops/pcore.rb +26 -19
  329. data/lib/puppet/pops/resource/param.rb +1 -1
  330. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -2
  331. data/lib/puppet/pops/serialization.rb +25 -1
  332. data/lib/puppet/pops/serialization/abstract_writer.rb +9 -1
  333. data/lib/puppet/pops/serialization/deserializer.rb +1 -1
  334. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  335. data/lib/puppet/pops/serialization/json.rb +4 -4
  336. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  337. data/lib/puppet/pops/serialization/object.rb +5 -5
  338. data/lib/puppet/pops/serialization/serializer.rb +23 -9
  339. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  340. data/lib/puppet/pops/time/timespan.rb +11 -11
  341. data/lib/puppet/pops/time/timestamp.rb +8 -8
  342. data/lib/puppet/pops/types/annotatable.rb +7 -7
  343. data/lib/puppet/pops/types/annotation.rb +71 -0
  344. data/lib/puppet/pops/types/class_loader.rb +4 -6
  345. data/lib/puppet/pops/types/enumeration.rb +2 -2
  346. data/lib/puppet/pops/types/iterable.rb +2 -4
  347. data/lib/puppet/pops/types/p_binary_type.rb +7 -1
  348. data/lib/puppet/pops/types/p_meta_type.rb +16 -12
  349. data/lib/puppet/pops/types/p_object_type.rb +135 -96
  350. data/lib/puppet/pops/types/p_runtime_type.rb +1 -1
  351. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +6 -2
  352. data/lib/puppet/pops/types/p_timespan_type.rb +55 -4
  353. data/lib/puppet/pops/types/p_type_set_type.rb +42 -34
  354. data/lib/puppet/pops/types/puppet_object.rb +13 -3
  355. data/lib/puppet/pops/types/ruby_generator.rb +291 -127
  356. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  357. data/lib/puppet/pops/types/string_converter.rb +107 -30
  358. data/lib/puppet/pops/types/type_calculator.rb +56 -94
  359. data/lib/puppet/pops/types/type_factory.rb +34 -6
  360. data/lib/puppet/pops/types/type_formatter.rb +64 -16
  361. data/lib/puppet/pops/types/type_mismatch_describer.rb +13 -22
  362. data/lib/puppet/pops/types/type_parser.rb +28 -13
  363. data/lib/puppet/pops/types/type_set_reference.rb +6 -6
  364. data/lib/puppet/pops/types/types.rb +169 -245
  365. data/lib/puppet/pops/utils.rb +0 -24
  366. data/lib/puppet/pops/validation.rb +3 -9
  367. data/lib/puppet/pops/validation/checker4_0.rb +86 -76
  368. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  369. data/lib/puppet/pops/visitor.rb +21 -0
  370. data/lib/puppet/property.rb +17 -14
  371. data/lib/puppet/property/ensure.rb +3 -3
  372. data/lib/puppet/property/list.rb +1 -10
  373. data/lib/puppet/provider.rb +2 -0
  374. data/lib/puppet/provider/aixobject.rb +7 -7
  375. data/lib/puppet/provider/augeas/augeas.rb +37 -37
  376. data/lib/puppet/provider/command.rb +1 -1
  377. data/lib/puppet/provider/cron/crontab.rb +2 -2
  378. data/lib/puppet/provider/exec.rb +4 -4
  379. data/lib/puppet/provider/exec/posix.rb +4 -4
  380. data/lib/puppet/provider/exec/windows.rb +3 -3
  381. data/lib/puppet/provider/file/posix.rb +5 -5
  382. data/lib/puppet/provider/file/windows.rb +4 -4
  383. data/lib/puppet/provider/group/aix.rb +2 -2
  384. data/lib/puppet/provider/group/groupadd.rb +2 -2
  385. data/lib/puppet/provider/group/pw.rb +1 -1
  386. data/lib/puppet/provider/group/windows_adsi.rb +7 -4
  387. data/lib/puppet/provider/host/parsed.rb +1 -1
  388. data/lib/puppet/provider/macauthorization/macauthorization.rb +9 -9
  389. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  390. data/lib/puppet/provider/mcx/mcxcontent.rb +3 -3
  391. data/lib/puppet/provider/mount.rb +2 -1
  392. data/lib/puppet/provider/mount/parsed.rb +10 -8
  393. data/lib/puppet/provider/naginator.rb +1 -1
  394. data/lib/puppet/provider/nameservice.rb +8 -10
  395. data/lib/puppet/provider/nameservice/directoryservice.rb +11 -11
  396. data/lib/puppet/provider/network_device.rb +2 -1
  397. data/lib/puppet/provider/package/aix.rb +6 -6
  398. data/lib/puppet/provider/package/appdmg.rb +2 -2
  399. data/lib/puppet/provider/package/apple.rb +1 -1
  400. data/lib/puppet/provider/package/apt.rb +4 -4
  401. data/lib/puppet/provider/package/aptitude.rb +1 -1
  402. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  403. data/lib/puppet/provider/package/blastwave.rb +4 -4
  404. data/lib/puppet/provider/package/dnf.rb +1 -1
  405. data/lib/puppet/provider/package/dpkg.rb +3 -3
  406. data/lib/puppet/provider/package/fink.rb +3 -3
  407. data/lib/puppet/provider/package/freebsd.rb +1 -1
  408. data/lib/puppet/provider/package/gem.rb +6 -6
  409. data/lib/puppet/provider/package/hpux.rb +1 -1
  410. data/lib/puppet/provider/package/nim.rb +15 -12
  411. data/lib/puppet/provider/package/openbsd.rb +4 -4
  412. data/lib/puppet/provider/package/opkg.rb +1 -1
  413. data/lib/puppet/provider/package/pacman.rb +9 -9
  414. data/lib/puppet/provider/package/pkg.rb +9 -9
  415. data/lib/puppet/provider/package/pkgdmg.rb +4 -4
  416. data/lib/puppet/provider/package/pkgin.rb +3 -3
  417. data/lib/puppet/provider/package/pkgng.rb +1 -1
  418. data/lib/puppet/provider/package/pkgutil.rb +6 -6
  419. data/lib/puppet/provider/package/portage.rb +167 -59
  420. data/lib/puppet/provider/package/ports.rb +3 -3
  421. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  422. data/lib/puppet/provider/package/rpm.rb +7 -4
  423. data/lib/puppet/provider/package/rug.rb +1 -1
  424. data/lib/puppet/provider/package/sun.rb +3 -2
  425. data/lib/puppet/provider/package/up2date.rb +1 -1
  426. data/lib/puppet/provider/package/urpmi.rb +1 -1
  427. data/lib/puppet/provider/package/windows.rb +4 -4
  428. data/lib/puppet/provider/package/windows/package.rb +3 -3
  429. data/lib/puppet/provider/package/yum.rb +5 -6
  430. data/lib/puppet/provider/package/zypper.rb +1 -1
  431. data/lib/puppet/provider/parsedfile.rb +1 -1
  432. data/lib/puppet/provider/service/base.rb +8 -21
  433. data/lib/puppet/provider/service/smf.rb +2 -2
  434. data/lib/puppet/provider/service/systemd.rb +1 -2
  435. data/lib/puppet/provider/service/upstart.rb +1 -3
  436. data/lib/puppet/provider/user/aix.rb +2 -2
  437. data/lib/puppet/provider/user/ldap.rb +1 -1
  438. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  439. data/lib/puppet/provider/yumrepo/inifile.rb +3 -3
  440. data/lib/puppet/provider/zfs/zfs.rb +1 -5
  441. data/lib/puppet/reference/configuration.rb +0 -2
  442. data/lib/puppet/reference/indirection.rb +1 -1
  443. data/lib/puppet/reference/metaparameter.rb +1 -1
  444. data/lib/puppet/reference/providers.rb +6 -6
  445. data/lib/puppet/reference/type.rb +2 -2
  446. data/lib/puppet/relationship.rb +7 -9
  447. data/lib/puppet/reports/http.rb +8 -6
  448. data/lib/puppet/resource.rb +75 -134
  449. data/lib/puppet/resource/capability_finder.rb +1 -1
  450. data/lib/puppet/resource/catalog.rb +26 -34
  451. data/lib/puppet/resource/status.rb +13 -24
  452. data/lib/puppet/resource/type.rb +13 -61
  453. data/lib/puppet/resource/type_collection.rb +29 -23
  454. data/lib/puppet/settings.rb +1 -1
  455. data/lib/puppet/settings/array_setting.rb +1 -1
  456. data/lib/puppet/settings/autosign_setting.rb +1 -1
  457. data/lib/puppet/settings/boolean_setting.rb +1 -1
  458. data/lib/puppet/settings/config_file.rb +2 -2
  459. data/lib/puppet/settings/duration_setting.rb +1 -1
  460. data/lib/puppet/settings/enum_setting.rb +1 -1
  461. data/lib/puppet/settings/environment_conf.rb +2 -10
  462. data/lib/puppet/settings/file_setting.rb +2 -2
  463. data/lib/puppet/settings/priority_setting.rb +1 -1
  464. data/lib/puppet/settings/server_list_setting.rb +1 -1
  465. data/lib/puppet/settings/symbolic_enum_setting.rb +1 -1
  466. data/lib/puppet/settings/terminus_setting.rb +1 -1
  467. data/lib/puppet/settings/ttl_setting.rb +2 -2
  468. data/lib/puppet/ssl/base.rb +2 -2
  469. data/lib/puppet/ssl/certificate_authority.rb +21 -21
  470. data/lib/puppet/ssl/certificate_authority/interface.rb +13 -13
  471. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  472. data/lib/puppet/ssl/certificate_request.rb +14 -14
  473. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  474. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  475. data/lib/puppet/ssl/host.rb +29 -29
  476. data/lib/puppet/ssl/inventory.rb +1 -1
  477. data/lib/puppet/ssl/key.rb +1 -1
  478. data/lib/puppet/ssl/oids.rb +5 -5
  479. data/lib/puppet/ssl/validator/default_validator.rb +3 -4
  480. data/lib/puppet/syntax_checkers/base64.rb +7 -7
  481. data/lib/puppet/syntax_checkers/json.rb +5 -5
  482. data/lib/puppet/test/test_helper.rb +0 -4
  483. data/lib/puppet/transaction.rb +38 -23
  484. data/lib/puppet/transaction/additional_resource_generator.rb +4 -3
  485. data/lib/puppet/transaction/event.rb +19 -8
  486. data/lib/puppet/transaction/event_manager.rb +6 -6
  487. data/lib/puppet/transaction/persistence.rb +6 -6
  488. data/lib/puppet/transaction/report.rb +34 -47
  489. data/lib/puppet/transaction/resource_harness.rb +14 -12
  490. data/lib/puppet/type.rb +9 -7
  491. data/lib/puppet/type/augeas.rb +2 -2
  492. data/lib/puppet/type/cron.rb +14 -31
  493. data/lib/puppet/type/exec.rb +16 -16
  494. data/lib/puppet/type/file.rb +21 -22
  495. data/lib/puppet/type/file/content.rb +1 -1
  496. data/lib/puppet/type/file/group.rb +3 -3
  497. data/lib/puppet/type/file/mode.rb +6 -6
  498. data/lib/puppet/type/file/owner.rb +3 -3
  499. data/lib/puppet/type/file/selcontext.rb +18 -1
  500. data/lib/puppet/type/file/source.rb +5 -1
  501. data/lib/puppet/type/filebucket.rb +3 -8
  502. data/lib/puppet/type/group.rb +2 -2
  503. data/lib/puppet/type/host.rb +6 -6
  504. data/lib/puppet/type/interface.rb +1 -1
  505. data/lib/puppet/type/k5login.rb +1 -1
  506. data/lib/puppet/type/macauthorization.rb +1 -1
  507. data/lib/puppet/type/mailalias.rb +2 -18
  508. data/lib/puppet/type/maillist.rb +1 -1
  509. data/lib/puppet/type/mount.rb +8 -8
  510. data/lib/puppet/type/notify.rb +2 -0
  511. data/lib/puppet/type/package.rb +5 -5
  512. data/lib/puppet/type/resources.rb +6 -6
  513. data/lib/puppet/type/schedule.rb +9 -9
  514. data/lib/puppet/type/scheduled_task.rb +9 -8
  515. data/lib/puppet/type/service.rb +1 -1
  516. data/lib/puppet/type/ssh_authorized_key.rb +3 -19
  517. data/lib/puppet/type/sshkey.rb +4 -4
  518. data/lib/puppet/type/tidy.rb +16 -19
  519. data/lib/puppet/type/user.rb +35 -70
  520. data/lib/puppet/type/yumrepo.rb +8 -8
  521. data/lib/puppet/type/zone.rb +7 -7
  522. data/lib/puppet/type/zpool.rb +3 -3
  523. data/lib/puppet/util.rb +16 -12
  524. data/lib/puppet/util/at_fork.rb +35 -0
  525. data/lib/puppet/util/at_fork/noop.rb +18 -0
  526. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  527. data/lib/puppet/util/autoload.rb +2 -2
  528. data/lib/puppet/util/backups.rb +6 -6
  529. data/lib/puppet/util/classgen.rb +4 -4
  530. data/lib/puppet/util/command_line.rb +4 -4
  531. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  532. data/lib/puppet/util/command_line/trollop.rb +31 -31
  533. data/lib/puppet/util/diff.rb +1 -1
  534. data/lib/puppet/util/errors.rb +4 -4
  535. data/lib/puppet/util/execution.rb +9 -9
  536. data/lib/puppet/util/feature.rb +5 -5
  537. data/lib/puppet/util/fileparsing.rb +8 -8
  538. data/lib/puppet/util/filetype.rb +15 -15
  539. data/lib/puppet/util/http_proxy.rb +7 -15
  540. data/lib/puppet/util/inifile.rb +4 -4
  541. data/lib/puppet/util/instance_loader.rb +1 -1
  542. data/lib/puppet/util/json_lockfile.rb +4 -4
  543. data/lib/puppet/util/ldap/connection.rb +2 -2
  544. data/lib/puppet/util/ldap/manager.rb +2 -2
  545. data/lib/puppet/util/limits.rb +1 -1
  546. data/lib/puppet/util/log.rb +23 -16
  547. data/lib/puppet/util/log/destinations.rb +10 -16
  548. data/lib/puppet/util/logging.rb +11 -8
  549. data/lib/puppet/util/metric.rb +9 -6
  550. data/lib/puppet/util/monkey_patches.rb +27 -66
  551. data/lib/puppet/util/network_device.rb +1 -1
  552. data/lib/puppet/util/network_device/cisco/device.rb +7 -7
  553. data/lib/puppet/util/network_device/cisco/interface.rb +1 -1
  554. data/lib/puppet/util/network_device/config.rb +6 -6
  555. data/lib/puppet/util/network_device/transport/ssh.rb +6 -6
  556. data/lib/puppet/util/plist.rb +4 -2
  557. data/lib/puppet/util/posix.rb +5 -5
  558. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  559. data/lib/puppet/util/provider_features.rb +1 -1
  560. data/lib/puppet/util/psych_support.rb +3 -11
  561. data/lib/puppet/util/rdoc.rb +4 -4
  562. data/lib/puppet/util/reference.rb +14 -7
  563. data/lib/puppet/util/resource_template.rb +1 -1
  564. data/lib/puppet/util/retry_action.rb +2 -2
  565. data/lib/puppet/util/selinux.rb +54 -12
  566. data/lib/puppet/util/splayer.rb +1 -1
  567. data/lib/puppet/util/storage.rb +5 -5
  568. data/lib/puppet/util/suidmanager.rb +4 -4
  569. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  570. data/lib/puppet/util/tag_set.rb +1 -4
  571. data/lib/puppet/util/tagging.rb +2 -2
  572. data/lib/puppet/util/windows.rb +2 -0
  573. data/lib/puppet/util/windows/adsi.rb +19 -16
  574. data/lib/puppet/util/windows/api_types.rb +7 -11
  575. data/lib/puppet/util/windows/com.rb +4 -4
  576. data/lib/puppet/util/windows/error.rb +2 -2
  577. data/lib/puppet/util/windows/eventlog.rb +192 -0
  578. data/lib/puppet/util/windows/file.rb +13 -96
  579. data/lib/puppet/util/windows/principal.rb +6 -7
  580. data/lib/puppet/util/windows/process.rb +6 -14
  581. data/lib/puppet/util/windows/registry.rb +11 -11
  582. data/lib/puppet/util/windows/root_certs.rb +1 -1
  583. data/lib/puppet/util/windows/security.rb +14 -14
  584. data/lib/puppet/util/windows/sid.rb +13 -66
  585. data/lib/puppet/util/windows/taskscheduler.rb +62 -62
  586. data/lib/puppet/util/windows/user.rb +6 -6
  587. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +2 -10
  588. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +1 -1
  589. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +122 -114
  590. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +678 -342
  591. data/lib/puppet/vendor/semantic_puppet/{lib/semantic_puppet/locales → locales}/config.yaml +0 -0
  592. data/lib/puppet/version.rb +1 -1
  593. data/locales/config.yaml +1 -1
  594. data/locales/puppet.pot +7847 -112
  595. data/man/man5/puppet.conf.5 +55 -296
  596. data/man/man8/puppet-agent.8 +10 -32
  597. data/man/man8/puppet-apply.8 +6 -21
  598. data/man/man8/puppet-ca.8 +34 -48
  599. data/man/man8/puppet-catalog.8 +4 -4
  600. data/man/man8/puppet-cert.8 +6 -23
  601. data/man/man8/puppet-certificate.8 +28 -44
  602. data/man/man8/puppet-certificate_request.8 +4 -4
  603. data/man/man8/puppet-certificate_revocation_list.8 +4 -4
  604. data/man/man8/puppet-config.8 +5 -5
  605. data/man/man8/puppet-describe.8 +3 -3
  606. data/man/man8/puppet-device.8 +13 -23
  607. data/man/man8/puppet-doc.8 +5 -5
  608. data/man/man8/puppet-epp.8 +10 -16
  609. data/man/man8/puppet-facts.8 +4 -4
  610. data/man/man8/puppet-filebucket.8 +6 -63
  611. data/man/man8/puppet-help.8 +4 -4
  612. data/man/man8/puppet-inspect.8 +5 -8
  613. data/man/man8/puppet-key.8 +4 -4
  614. data/man/man8/puppet-man.8 +5 -5
  615. data/man/man8/puppet-master.8 +5 -5
  616. data/man/man8/puppet-module.8 +13 -22
  617. data/man/man8/puppet-node.8 +4 -4
  618. data/man/man8/puppet-parser.8 +4 -4
  619. data/man/man8/puppet-plugin.8 +4 -4
  620. data/man/man8/puppet-report.8 +4 -4
  621. data/man/man8/puppet-resource.8 +8 -4
  622. data/man/man8/puppet-status.8 +5 -5
  623. data/man/man8/puppet.8 +3 -12
  624. data/spec/fixtures/unit/application/environments/production/data/common.yaml +0 -2
  625. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  626. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  627. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  628. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  629. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  630. data/spec/integration/agent/logging_spec.rb +0 -2
  631. data/spec/integration/application/apply_spec.rb +19 -23
  632. data/spec/integration/application/lookup_spec.rb +0 -21
  633. data/spec/integration/configurer_spec.rb +1 -1
  634. data/spec/integration/defaults_spec.rb +2 -2
  635. data/spec/integration/file_bucket/file_spec.rb +5 -20
  636. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  637. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  638. data/spec/integration/parser/catalog_spec.rb +1 -1
  639. data/spec/integration/parser/class_spec.rb +6 -6
  640. data/spec/integration/parser/compiler_spec.rb +184 -142
  641. data/spec/integration/parser/dynamic_scoping_spec.rb +0 -1
  642. data/spec/integration/parser/pcore_resource_spec.rb +1 -1
  643. data/spec/integration/parser/scope_spec.rb +53 -4
  644. data/spec/integration/provider/cron/crontab_spec.rb +0 -1
  645. data/spec/integration/resource/catalog_spec.rb +0 -4
  646. data/spec/integration/transaction/report_spec.rb +2 -2
  647. data/spec/integration/transaction_spec.rb +4 -37
  648. data/spec/integration/type/package_spec.rb +7 -1
  649. data/spec/integration/util/execution_spec.rb +0 -8
  650. data/spec/integration/util/windows/adsi_spec.rb +1 -86
  651. data/spec/integration/util/windows/principal_spec.rb +1 -10
  652. data/spec/integration/util/windows/process_spec.rb +0 -45
  653. data/spec/lib/matchers/json.rb +3 -3
  654. data/spec/lib/puppet/indirector_testing.rb +4 -0
  655. data/spec/lib/puppet_spec/compiler.rb +1 -1
  656. data/spec/lib/puppet_spec/modules.rb +2 -2
  657. data/spec/lib/puppet_spec/network.rb +10 -6
  658. data/spec/shared_contexts/types_setup.rb +28 -9
  659. data/spec/spec_helper.rb +0 -11
  660. data/spec/unit/agent_spec.rb +12 -34
  661. data/spec/unit/application/agent_spec.rb +16 -0
  662. data/spec/unit/application/apply_spec.rb +37 -13
  663. data/spec/unit/application/cert_spec.rb +1 -40
  664. data/spec/unit/application/config_spec.rb +0 -4
  665. data/spec/unit/application/describe_spec.rb +19 -0
  666. data/spec/unit/application/device_spec.rb +41 -2
  667. data/spec/unit/application/face_base_spec.rb +6 -6
  668. data/spec/unit/application/lookup_spec.rb +1 -31
  669. data/spec/unit/application/master_spec.rb +22 -6
  670. data/spec/unit/application/resource_spec.rb +17 -0
  671. data/spec/unit/application_spec.rb +0 -24
  672. data/spec/unit/capability_spec.rb +2 -6
  673. data/spec/unit/configurer/fact_handler_spec.rb +74 -41
  674. data/spec/unit/configurer/plugin_handler_spec.rb +13 -19
  675. data/spec/unit/configurer_spec.rb +36 -33
  676. data/spec/unit/defaults_spec.rb +0 -44
  677. data/spec/unit/environments_spec.rb +0 -15
  678. data/spec/unit/face/config_spec.rb +2 -1
  679. data/spec/unit/face/epp_face_spec.rb +0 -9
  680. data/spec/unit/face/module/list_spec.rb +60 -0
  681. data/spec/unit/file_bucket/file_spec.rb +3 -3
  682. data/spec/unit/file_serving/http_metadata_spec.rb +1 -1
  683. data/spec/unit/file_serving/metadata_spec.rb +14 -9
  684. data/spec/unit/forge/forge_spec.rb +2 -2
  685. data/spec/unit/forge_spec.rb +0 -105
  686. data/spec/unit/functions/annotate_spec.rb +175 -0
  687. data/spec/unit/functions/break_spec.rb +52 -83
  688. data/spec/unit/functions/call_spec.rb +77 -0
  689. data/spec/unit/functions/contain_spec.rb +1 -1
  690. data/spec/unit/functions/defined_spec.rb +2 -2
  691. data/spec/unit/functions/epp_spec.rb +0 -10
  692. data/spec/unit/functions/hiera_spec.rb +0 -5
  693. data/spec/unit/functions/lookup_fixture_spec.rb +1 -6
  694. data/spec/unit/functions/lookup_spec.rb +4 -97
  695. data/spec/unit/functions/new_spec.rb +1 -1
  696. data/spec/unit/functions/unique_spec.rb +111 -0
  697. data/spec/unit/functions4_spec.rb +2 -43
  698. data/spec/unit/graph/relationship_graph_spec.rb +0 -15
  699. data/spec/unit/graph/simple_graph_spec.rb +58 -55
  700. data/spec/unit/indirector/catalog/compiler_spec.rb +206 -174
  701. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  702. data/spec/unit/indirector/facts/facter_spec.rb +1 -2
  703. data/spec/unit/indirector/file_bucket_file/file_spec.rb +4 -4
  704. data/spec/unit/indirector/file_server_spec.rb +17 -2
  705. data/spec/unit/indirector/indirection_spec.rb +3 -60
  706. data/spec/unit/indirector/json_spec.rb +27 -6
  707. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  708. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  709. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  710. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  711. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  712. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  713. data/spec/unit/indirector/request_spec.rb +0 -45
  714. data/spec/unit/indirector/rest_spec.rb +57 -15
  715. data/spec/unit/interface/face_collection_spec.rb +7 -7
  716. data/spec/unit/interface_spec.rb +0 -12
  717. data/spec/unit/module_spec.rb +10 -31
  718. data/spec/unit/module_tool/applications/installer_spec.rb +0 -1
  719. data/spec/unit/module_tool/applications/upgrader_spec.rb +0 -1
  720. data/spec/unit/module_tool/tar/mini_spec.rb +5 -34
  721. data/spec/unit/network/format_handler_spec.rb +11 -11
  722. data/spec/unit/network/format_spec.rb +9 -0
  723. data/spec/unit/network/formats_spec.rb +322 -138
  724. data/spec/unit/network/http/api/indirected_routes_spec.rb +62 -52
  725. data/spec/unit/network/http/api/master/v3/environment_spec.rb +128 -2
  726. data/spec/unit/network/http/api/master/v3_spec.rb +1 -1
  727. data/spec/unit/network/http/api_spec.rb +1 -1
  728. data/spec/unit/network/http/compression_spec.rb +105 -88
  729. data/spec/unit/network/http/error_spec.rb +1 -2
  730. data/spec/unit/network/http/factory_spec.rb +9 -38
  731. data/spec/unit/network/http/handler_spec.rb +8 -12
  732. data/spec/unit/network/http/request_spec.rb +110 -0
  733. data/spec/unit/network/http/response_spec.rb +108 -0
  734. data/spec/unit/network/http/webrick_spec.rb +29 -30
  735. data/spec/unit/node/facts_spec.rb +13 -13
  736. data/spec/unit/node_spec.rb +33 -10
  737. data/spec/unit/parameter_spec.rb +73 -5
  738. data/spec/unit/parser/ast/leaf_spec.rb +4 -3
  739. data/spec/unit/parser/compiler_spec.rb +1 -1
  740. data/spec/unit/parser/environment_compiler_spec.rb +0 -2
  741. data/spec/unit/parser/functions/sprintf_spec.rb +0 -26
  742. data/spec/unit/parser/resource_spec.rb +86 -24
  743. data/spec/unit/parser/scope_spec.rb +4 -81
  744. data/spec/unit/pops/benchmark_spec.rb +8 -26
  745. data/spec/unit/pops/containment_spec.rb +0 -26
  746. data/spec/unit/pops/evaluator/access_ops_spec.rb +103 -103
  747. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +59 -6
  748. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -5
  749. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +26 -26
  750. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -7
  751. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +7 -7
  752. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +36 -1
  753. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  754. data/spec/unit/pops/evaluator/variables_spec.rb +1 -1
  755. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  756. data/spec/unit/pops/factory_spec.rb +83 -83
  757. data/spec/unit/pops/loaders/loaders_spec.rb +69 -1
  758. data/spec/unit/pops/loaders/static_loader_spec.rb +3 -7
  759. data/spec/unit/pops/model/model_spec.rb +10 -10
  760. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  761. data/spec/unit/pops/parser/lexer2_spec.rb +4 -59
  762. data/spec/unit/pops/parser/{source_pos_adapter_spec.rb → locator_spec.rb} +9 -11
  763. data/spec/unit/pops/parser/parse_application_spec.rb +0 -3
  764. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -4
  765. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -3
  766. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  767. data/spec/unit/pops/parser/parse_site_spec.rb +0 -3
  768. data/spec/unit/pops/parser/parser_spec.rb +8 -10
  769. data/spec/unit/pops/resource/resource_type_impl_spec.rb +1 -3
  770. data/spec/unit/pops/serialization/serialization_spec.rb +87 -1
  771. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  772. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  773. data/spec/unit/pops/types/iterable_spec.rb +1 -1
  774. data/spec/unit/pops/types/p_object_type_spec.rb +99 -13
  775. data/spec/unit/pops/types/p_timestamp_type_spec.rb +8 -8
  776. data/spec/unit/pops/types/p_type_set_type_spec.rb +1 -9
  777. data/spec/unit/pops/types/ruby_generator_spec.rb +57 -20
  778. data/spec/unit/pops/types/string_converter_spec.rb +78 -30
  779. data/spec/unit/pops/types/type_acceptor_spec.rb +2 -2
  780. data/spec/unit/pops/types/type_calculator_spec.rb +207 -123
  781. data/spec/unit/pops/types/type_factory_spec.rb +9 -9
  782. data/spec/unit/pops/types/type_formatter_spec.rb +32 -19
  783. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +0 -9
  784. data/spec/unit/pops/types/type_parser_spec.rb +6 -6
  785. data/spec/unit/pops/types/types_spec.rb +42 -2
  786. data/spec/unit/pops/validator/validator_spec.rb +25 -86
  787. data/spec/unit/pops/visitor_spec.rb +1 -1
  788. data/spec/unit/property/list_spec.rb +2 -2
  789. data/spec/unit/provider/augeas/augeas_spec.rb +1 -1
  790. data/spec/unit/provider/group/windows_adsi_spec.rb +22 -79
  791. data/spec/unit/provider/package/aix_spec.rb +0 -8
  792. data/spec/unit/provider/package/portage_spec.rb +103 -17
  793. data/spec/unit/provider/package/rpm_spec.rb +14 -1
  794. data/spec/unit/provider/package/yum_spec.rb +0 -10
  795. data/spec/unit/provider/service/base_spec.rb +0 -20
  796. data/spec/unit/provider/service/smf_spec.rb +4 -2
  797. data/spec/unit/provider/service/systemd_spec.rb +1 -15
  798. data/spec/unit/provider/user/directoryservice_spec.rb +7 -7
  799. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  800. data/spec/unit/provider/zfs/zfs_spec.rb +1 -7
  801. data/spec/unit/puppet_spec.rb +2 -3
  802. data/spec/unit/relationship_spec.rb +15 -36
  803. data/spec/unit/reports/http_spec.rb +11 -8
  804. data/spec/unit/resource/catalog_spec.rb +47 -49
  805. data/spec/unit/resource/status_spec.rb +114 -103
  806. data/spec/unit/resource/type_collection_spec.rb +5 -5
  807. data/spec/unit/resource/type_spec.rb +4 -71
  808. data/spec/unit/resource_spec.rb +30 -34
  809. data/spec/unit/settings_spec.rb +4 -2
  810. data/spec/unit/ssl/host_spec.rb +34 -34
  811. data/spec/unit/status_spec.rb +7 -7
  812. data/spec/unit/transaction/event_spec.rb +18 -15
  813. data/spec/unit/transaction/report_spec.rb +100 -81
  814. data/spec/unit/transaction/resource_harness_spec.rb +3 -3
  815. data/spec/unit/transaction_spec.rb +53 -8
  816. data/spec/unit/type/file/group_spec.rb +2 -2
  817. data/spec/unit/type/file/mode_spec.rb +9 -9
  818. data/spec/unit/type/file/owner_spec.rb +2 -2
  819. data/spec/unit/type/file/selinux_spec.rb +2 -0
  820. data/spec/unit/type/file/source_spec.rb +13 -0
  821. data/spec/unit/type/nagios_spec.rb +1 -21
  822. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  823. data/spec/unit/type/tidy_spec.rb +0 -14
  824. data/spec/unit/type/user_spec.rb +2 -4
  825. data/spec/unit/util/at_fork_spec.rb +150 -0
  826. data/spec/unit/util/execution_spec.rb +31 -2
  827. data/spec/unit/util/http_proxy_spec.rb +0 -37
  828. data/spec/unit/util/log/destinations_spec.rb +5 -6
  829. data/spec/unit/util/log_spec.rb +62 -17
  830. data/spec/unit/util/metric_spec.rb +9 -2
  831. data/spec/unit/util/monkey_patches_spec.rb +6 -188
  832. data/spec/unit/util/run_mode_spec.rb +17 -10
  833. data/spec/unit/util/tag_set_spec.rb +2 -2
  834. data/spec/unit/util/tagging_spec.rb +55 -0
  835. data/spec/unit/util/windows/adsi_spec.rb +27 -31
  836. data/spec/unit/util/windows/api_types_spec.rb +0 -51
  837. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  838. data/spec/unit/util/windows/sid_spec.rb +15 -86
  839. data/spec/unit/util_spec.rb +7 -1
  840. data/tasks/benchmark.rake +3 -3
  841. data/tasks/cfpropertylist.rake +1 -1
  842. data/tasks/generate_ast_model.rake +78 -0
  843. data/tasks/manpages.rake +1 -1
  844. data/tasks/parallel.rake +7 -12
  845. metadata +3456 -3717
  846. checksums.yaml +0 -7
  847. data/bin/extlookup2hiera +0 -56
  848. data/ext/emacs/puppet-mode-init.el +0 -6
  849. data/ext/emacs/puppet-mode.el +0 -433
  850. data/ext/vim/README +0 -3
  851. data/ext/vim/ftdetect/puppet.vim +0 -2
  852. data/ext/vim/ftplugin/puppet.vim +0 -94
  853. data/ext/vim/indent/puppet.vim +0 -76
  854. data/ext/vim/syntax/puppet.vim +0 -115
  855. data/lib/puppet/application/file.rb +0 -4
  856. data/lib/puppet/application/inspect.rb +0 -184
  857. data/lib/puppet/application/resource_type.rb +0 -7
  858. data/lib/puppet/data_providers.rb +0 -34
  859. data/lib/puppet/data_providers/data_adapter.rb +0 -37
  860. data/lib/puppet/data_providers/data_function_support.rb +0 -32
  861. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -26
  862. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -24
  863. data/lib/puppet/data_providers/hiera_config.rb +0 -151
  864. data/lib/puppet/data_providers/hiera_env_data_provider.rb +0 -25
  865. data/lib/puppet/data_providers/hiera_interpolate.rb +0 -21
  866. data/lib/puppet/data_providers/hiera_module_data_provider.rb +0 -30
  867. data/lib/puppet/data_providers/hiera_support.rb +0 -42
  868. data/lib/puppet/data_providers/json_data_provider_factory.rb +0 -38
  869. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +0 -40
  870. data/lib/puppet/face/file.rb +0 -50
  871. data/lib/puppet/face/file/download.rb +0 -56
  872. data/lib/puppet/face/file/store.rb +0 -21
  873. data/lib/puppet/face/resource_type.rb +0 -84
  874. data/lib/puppet/feature/cfacter.rb +0 -15
  875. data/lib/puppet/feature/external_facts.rb +0 -5
  876. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -232
  877. data/lib/puppet/indirector/resource_type.rb +0 -5
  878. data/lib/puppet/indirector/resource_type/parser.rb +0 -108
  879. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  880. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  881. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  882. data/lib/puppet/plugins/data_providers.rb +0 -45
  883. data/lib/puppet/plugins/data_providers/data_provider.rb +0 -406
  884. data/lib/puppet/plugins/data_providers/registry.rb +0 -51
  885. data/lib/puppet/pops/binder/binder.rb +0 -398
  886. data/lib/puppet/pops/binder/binder_issues.rb +0 -124
  887. data/lib/puppet/pops/binder/bindings_checker.rb +0 -201
  888. data/lib/puppet/pops/binder/bindings_composer.rb +0 -181
  889. data/lib/puppet/pops/binder/bindings_factory.rb +0 -813
  890. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -45
  891. data/lib/puppet/pops/binder/bindings_loader.rb +0 -87
  892. data/lib/puppet/pops/binder/bindings_model.rb +0 -70
  893. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  894. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  895. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  896. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  897. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  898. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -36
  899. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  900. data/lib/puppet/pops/binder/injector.rb +0 -771
  901. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  902. data/lib/puppet/pops/binder/key_factory.rb +0 -65
  903. data/lib/puppet/pops/binder/producers.rb +0 -831
  904. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  905. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -143
  906. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  907. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  908. data/lib/puppet/pops/containment.rb +0 -104
  909. data/lib/puppet/pops/model/model.rb +0 -131
  910. data/lib/puppet/pops/model/model_meta.rb +0 -629
  911. data/lib/puppet/pops/serialization/rgen.rb +0 -152
  912. data/lib/puppet/vendor/load_rgen.rb +0 -2
  913. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  914. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  915. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  916. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  917. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  918. data/lib/puppet/vendor/rgen/TODO +0 -41
  919. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  920. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  921. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  922. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  923. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  924. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  925. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  926. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  927. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  928. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  929. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  930. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  931. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  932. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  933. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  934. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  935. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  936. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  937. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  938. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  939. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  940. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  941. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  942. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  943. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  944. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  945. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  946. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  947. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  948. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  949. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  950. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  951. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  952. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  953. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  954. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  955. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  956. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  957. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  958. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  959. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  960. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  961. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  962. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  963. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  964. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  965. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  966. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  967. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  968. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  969. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  970. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  971. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  972. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  973. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  974. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  975. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  976. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  977. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  978. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  979. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  980. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  981. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  982. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  983. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  984. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  985. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  986. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  987. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  988. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  989. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  990. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  991. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  992. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  993. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  994. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  995. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  996. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  997. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  998. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  999. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  1000. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  1001. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  1002. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  1003. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  1004. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  1005. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  1006. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  1007. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  1008. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  1009. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  1010. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  1011. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  1012. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  1013. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  1014. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  1015. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  1016. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  1017. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  1018. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  1019. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  1020. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  1021. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  1022. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  1023. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  1024. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  1025. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  1026. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  1027. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  1028. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  1029. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  1030. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  1031. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  1032. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  1033. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  1034. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  1035. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  1036. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  1037. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  1038. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  1039. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  1040. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  1041. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  1042. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  1043. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  1044. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  1045. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  1046. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  1047. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  1048. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  1049. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  1050. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  1051. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  1052. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  1053. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  1054. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  1055. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  1056. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  1057. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  1058. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  1059. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  1060. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  1061. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  1062. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  1063. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  1064. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  1065. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  1066. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  1067. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  1068. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  1069. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  1070. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  1071. data/lib/semver.rb +0 -146
  1072. data/man/man8/extlookup2hiera.8 +0 -10
  1073. data/man/man8/puppet-file.8 +0 -189
  1074. data/man/man8/puppet-generate.8 +0 -84
  1075. data/man/man8/puppet-lookup.8 +0 -87
  1076. data/man/man8/puppet-resource_type.8 +0 -188
  1077. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1078. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +0 -9
  1079. data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +0 -2
  1080. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +0 -5
  1081. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +0 -9
  1082. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +0 -23
  1083. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +0 -5
  1084. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +0 -9
  1085. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  1086. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -33
  1087. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -33
  1088. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  1089. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  1090. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  1091. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  1092. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -10
  1093. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -23
  1094. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +0 -3
  1095. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +0 -9
  1096. data/spec/fixtures/unit/provider/package/yum/yum-check-update-plugin-output.txt +0 -36
  1097. data/spec/fixtures/unit/provider/service/base/ps_ef.mixed_encoding +0 -3
  1098. data/spec/unit/application/inspect_spec.rb +0 -316
  1099. data/spec/unit/data_providers/custom_data_provider_spec.rb +0 -50
  1100. data/spec/unit/face/file_spec.rb +0 -14
  1101. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -255
  1102. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -259
  1103. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  1104. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  1105. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  1106. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  1107. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  1108. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  1109. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  1110. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  1111. data/spec/unit/pops/serialization/rgen_spec.rb +0 -88
  1112. data/spec/unit/semver_spec.rb +0 -546
@@ -43,12 +43,11 @@ class Puppet::Pops::Model::AstTransformer
43
43
  def merge_location(hash, o)
44
44
  if o
45
45
  pos = {}
46
- source_pos = Puppet::Pops::Utils.find_closest_positioned(o)
47
- if source_pos
48
- pos[:line] = source_pos.line
49
- pos[:pos] = source_pos.pos
50
- pos[:file] = source_pos.locator.file
51
- end
46
+ locator = o.locator
47
+ offset = o.is_a?(Model::Program) ? 0 : o.offset
48
+ pos[:line] = locator.line_for_offset(offset)
49
+ pos[:pos] = locator.pos_on_line(offset)
50
+ pos[:file] = locator.file
52
51
  if nil_or_empty?(pos[:file]) && !nil_or_empty?(@source_file)
53
52
  pos[:file] = @source_file
54
53
  end
@@ -64,7 +63,7 @@ class Puppet::Pops::Model::AstTransformer
64
63
  rescue StandardError => e
65
64
  loc_data = {}
66
65
  merge_location(loc_data, o)
67
- raise Puppet::ParseError.new("Error while transforming to Puppet 3 AST: #{e.message}",
66
+ raise Puppet::ParseError.new(_("Error while transforming to Puppet 3 AST: %{message}") % { message: e.message },
68
67
  loc_data[:file], loc_data[:line], loc_data[:pos], e)
69
68
  end
70
69
  end
@@ -83,7 +82,7 @@ class Puppet::Pops::Model::AstTransformer
83
82
  # Ensures transformation fails if a 3.1 non supported object is encountered in a query expression
84
83
  #
85
84
  def query_Object(o)
86
- raise "Not a valid expression in a collection query: "+o.class.name
85
+ raise _("Not a valid expression in a collection query: ")+o.class.name
87
86
  end
88
87
 
89
88
  # Transforms Array of host matching expressions into a (Ruby) array of AST::HostName
@@ -112,11 +111,11 @@ class Puppet::Pops::Model::AstTransformer
112
111
  end
113
112
 
114
113
  def hostname_Object(o)
115
- raise "Illegal expression - unacceptable as a node name"
114
+ raise _("Illegal expression - unacceptable as a node name")
116
115
  end
117
116
 
118
117
  def transform_Object(o)
119
- raise "Unacceptable transform - found an Object without a rule: #{o.class}"
118
+ raise _("Unacceptable transform - found an Object without a rule: %{klass}") % { klass: o.class }
120
119
  end
121
120
 
122
121
  # Nil, nop
@@ -9,127 +9,182 @@
9
9
  module Puppet::Pops
10
10
  module Model
11
11
  class Factory
12
- attr_accessor :current
12
+ # Shared build_visitor, since there are many instances of Factory being used
13
13
 
14
- alias_method :model, :current
14
+ KEY_LENGTH = 'length'.freeze
15
+ KEY_OFFSET = 'offset'.freeze
16
+ KEY_LOCATOR = 'locator'.freeze
17
+ KEY_OPERATOR = 'operator'.freeze
18
+
19
+ KEY_VALUE = 'value'.freeze
20
+ KEY_KEYS = 'keys'.freeze
21
+ KEY_NAME = 'name'.freeze
22
+ KEY_BODY = 'body'.freeze
23
+ KEY_EXPR = 'expr'.freeze
24
+ KEY_LEFT_EXPR = 'left_expr'.freeze
25
+ KEY_RIGHT_EXPR = 'right_expr'.freeze
26
+ KEY_PARAMETERS = 'parameters'.freeze
27
+
28
+ BUILD_VISITOR = Visitor.new(self, 'build')
29
+ INFER_VISITOR = Visitor.new(self, 'infer')
30
+ INTERPOLATION_VISITOR = Visitor.new(self, 'interpolate')
31
+
32
+ def self.infer(o)
33
+ if o.instance_of?(Factory)
34
+ o
35
+ else
36
+ new(o)
37
+ end
38
+ end
15
39
 
16
- # Shared build_visitor, since there are many instances of Factory being used
17
- @@build_visitor = Visitor.new(self, "build")
18
- @@interpolation_visitor = Visitor.new(self, "interpolate")
40
+ attr_reader :model_class
41
+
42
+ def [](key)
43
+ @i12n[key]
44
+ end
45
+
46
+ def []=(key, value)
47
+ @i12n[key] = value
48
+ end
49
+
50
+ def all_factories(&block)
51
+ block.call(self)
52
+ @i12n.each_value { |value| value.all_factories(&block) if value.instance_of?(Factory) }
53
+ end
54
+
55
+ def model
56
+ if @current.nil?
57
+ # Assign a default Locator if it's missing. Should only happen when the factory is used by other
58
+ # means than from a parser (e.g. unit tests)
59
+ unless @i12n.include?(KEY_LOCATOR)
60
+ @i12n[KEY_LOCATOR] = Parser::Locator.locator('<no source>', 'no file')
61
+ unless @model_class <= Program
62
+ @i12n[KEY_OFFSET] = 0
63
+ @i12n[KEY_LENGTH] = 0
64
+ end
65
+ end
66
+ @current = create_model
67
+ end
68
+ @current
69
+ end
70
+
71
+ # Backward API compatibility
72
+ alias current model
73
+
74
+ def create_model
75
+ @i12n.each_pair { |key, elem| @i12n[key] = factory_to_model(elem) }
76
+ model_class.from_asserted_hash(@i12n)
77
+ end
19
78
 
20
79
  # Initialize a factory with a single object, or a class with arguments applied to build of
21
80
  # created instance
22
81
  #
23
82
  def initialize(o, *args)
24
- @current = if o.instance_of?(Class)
25
- @@build_visitor.visit_this(self, o.new, args)
26
- elsif o.is_a?(PopsObject)
27
- o
28
- elsif o.instance_of?(Factory)
29
- o.current
83
+ @i12n = {}
84
+ if o.instance_of?(Class)
85
+ @model_class = o
86
+ BUILD_VISITOR.visit_this_class(self, o, args)
30
87
  else
31
- @@build_visitor.visit_this(self, o, args)
88
+ INFER_VISITOR.visit_this(self, o, EMPTY_ARRAY)
32
89
  end
33
90
  end
34
91
 
35
- # Polymorphic build
36
- def build(o, *args)
37
- @@build_visitor.visit_this(self, o, args)
38
- end
39
-
40
92
  # Polymorphic interpolate
41
93
  def interpolate()
42
- @@interpolation_visitor.visit_this_0(self, current)
94
+ INTERPOLATION_VISITOR.visit_this_class(self, @model_class, EMPTY_ARRAY)
43
95
  end
44
96
 
45
97
  # Building of Model classes
46
98
 
47
99
  def build_Application(o, n, ps, body)
48
- o.name = n
49
- ps.each { |p| o.addParameters(build(p)) }
100
+ @i12n[KEY_NAME] = n
101
+ @i12n[KEY_PARAMETERS] = ps
50
102
  b = f_build_body(body)
51
- o.body = b.current if b
52
- o
103
+ @i12n[KEY_BODY] = b unless b.nil?
53
104
  end
54
105
 
55
106
  def build_ArithmeticExpression(o, op, a, b)
56
- o.operator = op
107
+ @i12n[KEY_OPERATOR] = op
57
108
  build_BinaryExpression(o, a, b)
58
109
  end
59
110
 
60
111
  def build_AssignmentExpression(o, op, a, b)
61
- o.operator = op
112
+ @i12n[KEY_OPERATOR] = op
62
113
  build_BinaryExpression(o, a, b)
63
114
  end
64
115
 
65
116
  def build_AttributeOperation(o, name, op, value)
66
- o.operator = op
67
- o.attribute_name = name.to_s # BOOLEAN is allowed in the grammar
68
- o.value_expr = build(value)
69
- o
117
+ @i12n[KEY_OPERATOR] = op
118
+ @i12n['attribute_name'] = name.to_s # BOOLEAN is allowed in the grammar
119
+ @i12n['value_expr'] = value
70
120
  end
71
121
 
72
122
  def build_AttributesOperation(o, value)
73
- o.expr = build(value)
74
- o
123
+ @i12n[KEY_EXPR] = value
75
124
  end
76
125
 
77
- def build_AccessExpression(o, left, *keys)
78
- o.left_expr = to_ops(left)
79
- o.keys = keys.map {|expr| to_ops(expr) }
80
- o
126
+ def build_AccessExpression(o, left, keys)
127
+ @i12n[KEY_LEFT_EXPR] = left
128
+ @i12n[KEY_KEYS] = keys
81
129
  end
82
130
 
83
131
  def build_BinaryExpression(o, left, right)
84
- o.left_expr = to_ops(left)
85
- o.right_expr = to_ops(right)
86
- o
132
+ @i12n[KEY_LEFT_EXPR] = left
133
+ @i12n[KEY_RIGHT_EXPR] = right
87
134
  end
88
135
 
89
- def build_BlockExpression(o, *args)
90
- o.statements = args.map {|expr| to_ops(expr) }
91
- o
136
+ def build_BlockExpression(o, args)
137
+ @i12n['statements'] = args
92
138
  end
93
139
 
94
- def build_CollectExpression(o, type_expr, query_expr, attribute_operations)
95
- o.type_expr = to_ops(type_expr)
96
- o.query = build(query_expr)
97
- o.operations = attribute_operations.map {|op| build(op) }
98
- o
140
+ def build_EppExpression(o, parameters_specified, body)
141
+ @i12n['parameters_specified'] = parameters_specified
142
+ b = f_build_body(body)
143
+ @i12n[KEY_BODY] = b unless b.nil?
99
144
  end
100
145
 
101
- def build_ComparisonExpression(o, op, a, b)
102
- o.operator = op
103
- build_BinaryExpression(o, a, b)
146
+ # @param rval_required [Boolean] if the call must produce a value
147
+ def build_CallExpression(o, functor, rval_required, args)
148
+ @i12n['functor_expr'] = functor
149
+ @i12n['rval_required'] = rval_required
150
+ @i12n['arguments'] = args
151
+ end
152
+
153
+ def build_CallMethodExpression(o, functor, rval_required, lambda, args)
154
+ build_CallExpression(o, functor, rval_required, args)
155
+ @i12n['lambda'] = lambda
104
156
  end
105
157
 
106
- def build_ConcatenatedString(o, *args)
107
- o.segments = args.map {|expr| build(expr) }
108
- o
158
+ def build_CaseExpression(o, test, args)
159
+ @i12n['test'] = test
160
+ @i12n['options'] = args
109
161
  end
110
162
 
111
- def build_CreateTypeExpression(o, name, super_name = nil)
112
- o.name = name
113
- o.super_name = super_name
114
- o
163
+ def build_CaseOption(o, value_list, then_expr)
164
+ value_list = [value_list] unless value_list.is_a?(Array)
165
+ @i12n['values'] = value_list
166
+ b = f_build_body(then_expr)
167
+ @i12n['then_expr'] = b unless b.nil?
168
+ end
169
+
170
+ def build_CollectExpression(o, type_expr, query_expr, attribute_operations)
171
+ @i12n['type_expr'] = type_expr
172
+ @i12n['query'] = query_expr
173
+ @i12n['operations'] = attribute_operations
115
174
  end
116
175
 
117
- def build_CreateEnumExpression(o, *args)
118
- o.name = args.slice(0) if args.size == 2
119
- o.values = build(args.last)
120
- o
176
+ def build_ComparisonExpression(o, op, a, b)
177
+ @i12n[KEY_OPERATOR] = op
178
+ build_BinaryExpression(o, a, b)
121
179
  end
122
180
 
123
- def build_CreateAttributeExpression(o, name, datatype_expr)
124
- o.name = name
125
- o.type = to_ops(datatype_expr)
126
- o
181
+ def build_ConcatenatedString(o, args)
182
+ @i12n['segments'] = args
127
183
  end
128
184
 
129
185
  def build_HeredocExpression(o, name, expr)
130
- o.syntax = name
131
- o.text_expr = build(expr)
132
- o
186
+ @i12n['syntax'] = name
187
+ @i12n['text_expr'] = expr
133
188
  end
134
189
 
135
190
  # @param name [String] a valid classname
@@ -140,191 +195,213 @@ class Factory
140
195
  #
141
196
  def build_HostClassDefinition(o, name, parameters, parent_class_name, body)
142
197
  build_NamedDefinition(o, name, parameters, body)
143
- o.parent_class = parent_class_name if parent_class_name
144
- o
198
+ @i12n['parent_class'] = parent_class_name unless parent_class_name.nil?
145
199
  end
146
200
 
147
201
  def build_ResourceOverrideExpression(o, resources, attribute_operations)
148
- o.resources = build(resources)
149
- o.operations = attribute_operations.map {|ao| build(ao) }
150
- o
202
+ @i12n['resources'] = resources
203
+ @i12n['operations'] = attribute_operations
151
204
  end
152
205
 
153
206
  def build_ReservedWord(o, name, future)
154
- o.word = name
155
- o.future = future
156
- o
207
+ @i12n['word'] = name
208
+ @i12n['future'] = future
157
209
  end
158
210
 
159
211
  def build_KeyedEntry(o, k, v)
160
- o.key = to_collection_entry(to_ops(k))
161
- o.value = to_collection_entry(to_ops(v))
162
- o
163
- end
164
-
165
- def build_LiteralHash(o, *keyed_entries)
166
- o.entries = keyed_entries.map {|entry| build(entry) }
167
- o
212
+ @i12n['key'] = k
213
+ @i12n[KEY_VALUE] = v
168
214
  end
169
215
 
170
- def to_collection_entry(o)
171
- if o.is_a?(Model::ReservedWord)
172
- case o.word
173
- when 'application', 'site', 'produces', 'consumes'
174
- build(o.word)
175
- else
176
- o
177
- end
178
- else
179
- o
180
- end
216
+ def build_LiteralHash(o, keyed_entries)
217
+ @i12n['entries'] = keyed_entries
181
218
  end
182
219
 
183
- def build_LiteralList(o, *values)
184
- o.values = values.map {|v| to_collection_entry(build(v)) }
185
- o
220
+ def build_LiteralList(o, values)
221
+ @i12n['values'] = values
186
222
  end
187
223
 
188
224
  def build_LiteralFloat(o, val)
189
- o.value = val
190
- o
225
+ @i12n[KEY_VALUE] = val
191
226
  end
192
227
 
193
228
  def build_LiteralInteger(o, val, radix)
194
- o.value = val
195
- o.radix = radix
196
- o
229
+ @i12n[KEY_VALUE] = val
230
+ @i12n['radix'] = radix
231
+ end
232
+
233
+ def build_LiteralString(o, value)
234
+ @i12n[KEY_VALUE] = val
197
235
  end
198
236
 
199
237
  def build_IfExpression(o, t, ift, els)
200
- o.test = build(t)
201
- o.then_expr = build(ift)
202
- o.else_expr= build(els)
203
- o
238
+ @i12n['test'] = t
239
+ @i12n['then_expr'] = ift
240
+ @i12n['else_expr'] = els
204
241
  end
205
242
 
206
243
  def build_MatchExpression(o, op, a, b)
207
- o.operator = op
244
+ @i12n[KEY_OPERATOR] = op
208
245
  build_BinaryExpression(o, a, b)
209
246
  end
210
247
 
211
- # Builds body :) from different kinds of input
212
- # @overload f_build_body(nothing)
213
- # @param nothing [nil] unchanged, produces nil
214
- # @overload f_build_body(array)
215
- # @param array [Array<Expression>] turns into a BlockExpression
216
- # @overload f_build_body(expr)
217
- # @param expr [Expression] produces the given expression
218
- # @overload f_build_body(obj)
219
- # @param obj [Object] produces the result of calling #build with body as argument
248
+ # Building model equivalences of Ruby objects
249
+ # Allows passing regular ruby objects to the factory to produce instructions
250
+ # that when evaluated produce the same thing.
251
+
252
+ def infer_String(o)
253
+ @model_class = LiteralString
254
+ @i12n[KEY_VALUE] = o
255
+ end
256
+
257
+ def infer_NilClass(o)
258
+ @model_class = Nop
259
+ end
260
+
261
+ def infer_TrueClass(o)
262
+ @model_class = LiteralBoolean
263
+ @i12n[KEY_VALUE] = o
264
+ end
265
+
266
+ def infer_FalseClass(o)
267
+ @model_class = LiteralBoolean
268
+ @i12n[KEY_VALUE] = o
269
+ end
270
+
271
+ def infer_Integer(o)
272
+ @model_class = LiteralInteger
273
+ @i12n[KEY_VALUE] = o
274
+ end
275
+
276
+ def infer_Float(o)
277
+ @model_class = LiteralFloat
278
+ @i12n[KEY_VALUE] = o
279
+ end
280
+
281
+ def infer_Regexp(o)
282
+ @model_class = LiteralRegularExpression
283
+ @i12n['pattern'] = o.inspect
284
+ @i12n[KEY_VALUE] = o
285
+ end
286
+
287
+ # Creates a String literal, unless the symbol is one of the special :undef, or :default
288
+ # which instead creates a LiterlUndef, or a LiteralDefault.
289
+ # Supports :undef because nil creates a no-op instruction.
290
+ def infer_Symbol(o)
291
+ case o
292
+ when :undef
293
+ @model_class = LiteralUndef
294
+ when :default
295
+ @model_class = LiteralDefault
296
+ else
297
+ infer_String(o.to_s)
298
+ end
299
+ end
300
+
301
+ # Creates a LiteralList instruction from an Array, where the entries are built.
302
+ def infer_Array(o)
303
+ @model_class = LiteralList
304
+ @i12n['values'] = o.map { |e| Factory.infer(e) }
305
+ end
306
+
307
+ # Create a LiteralHash instruction from a hash, where keys and values are built
308
+ # The hash entries are added in sorted order based on key.to_s
309
+ #
310
+ def infer_Hash(o)
311
+ @model_class = LiteralHash
312
+ @i12n['entries'] = o.sort_by { |k,_| k.to_s }.map { |k, v| Factory.new(KeyedEntry, Factory.infer(k), Factory.infer(v)) }
313
+ end
314
+
220
315
  def f_build_body(body)
221
316
  case body
222
317
  when NilClass
223
318
  nil
224
319
  when Array
225
- Factory.new(BlockExpression, *body)
320
+ Factory.new(BlockExpression, body)
321
+ when Factory
322
+ body
226
323
  else
227
- build(body)
324
+ Factory.infer(body)
228
325
  end
229
326
  end
230
327
 
231
328
  def build_LambdaExpression(o, parameters, body, return_type)
232
- o.parameters = parameters.map {|p| build(p) }
329
+ @i12n[KEY_PARAMETERS] = parameters
233
330
  b = f_build_body(body)
234
- o.body = to_ops(b) if b
235
- o.return_type = to_ops(return_type) unless return_type.nil?
236
- o
331
+ @i12n[KEY_BODY] = b unless b.nil?
332
+ @i12n['return_type'] = return_type unless return_type.nil?
237
333
  end
238
334
 
239
335
  def build_NamedDefinition(o, name, parameters, body)
240
- o.parameters = parameters.map {|p| build(p) }
336
+ @i12n[KEY_PARAMETERS] = parameters
241
337
  b = f_build_body(body)
242
- o.body = b.current if b
243
- o.name = name
244
- o
338
+ @i12n[KEY_BODY] = b unless b.nil?
339
+ @i12n[KEY_NAME] = name
245
340
  end
246
341
 
247
342
  def build_FunctionDefinition(o, name, parameters, body, return_type)
248
- o.parameters = parameters.map {|p| build(p) }
343
+ @i12n[KEY_PARAMETERS] = parameters
249
344
  b = f_build_body(body)
250
- o.body = b.current if b
251
- o.name = name
252
- o.return_type = to_ops(return_type) unless return_type.nil?
253
- o
345
+ @i12n[KEY_BODY] = b unless b.nil?
346
+ @i12n[KEY_NAME] = name
347
+ @i12n['return_type'] = return_type unless return_type.nil?
254
348
  end
255
349
 
256
350
  def build_CapabilityMapping(o, kind, component, capability, mappings)
257
- o.kind = kind
258
- component = component.current if component.instance_of?(Factory)
259
- o.component = component
260
- o.capability = capability
261
- o.mappings = mappings.map { |m| build(m) }
262
- o
263
- end
264
-
265
- # @param o [NodeDefinition]
266
- # @param hosts [Array<Expression>] host matches
267
- # @param parent [Expression] parent node matcher
268
- # @param body [Object] see {#f_build_body}
351
+ @i12n['kind'] = kind
352
+ @i12n['component'] = component
353
+ @i12n['capability'] = capability
354
+ @i12n['mappings'] = mappings
355
+ end
356
+
269
357
  def build_NodeDefinition(o, hosts, parent, body)
270
- o.host_matches = hosts.map {|h| build(h) }
271
- o.parent = build(parent) if parent # no nop here
358
+ @i12n['host_matches'] = hosts
359
+ @i12n['parent'] = parent unless parent.nil? # no nop here
272
360
  b = f_build_body(body)
273
- o.body = b.current if b
274
- o
361
+ @i12n[KEY_BODY] = b unless b.nil?
275
362
  end
276
363
 
277
- # @param o [SiteDefinition]
278
- # @param body [Object] see {#f_build_body}
279
364
  def build_SiteDefinition(o, body)
280
365
  b = f_build_body(body)
281
- o.body = b.current if b
282
- o
366
+ @i12n[KEY_BODY] = b unless b.nil?
283
367
  end
284
368
 
285
369
  def build_Parameter(o, name, expr)
286
- o.name = name
287
- o.value = build(expr) if expr # don't build a nil/nop
288
- o
370
+ @i12n[KEY_NAME] = name
371
+ @i12n[KEY_VALUE] = expr
289
372
  end
290
373
 
291
374
  def build_QualifiedReference(o, name)
292
- o.cased_value = name.to_s
293
- o
375
+ @i12n['cased_value'] = name.to_s
294
376
  end
295
377
 
296
378
  def build_RelationshipExpression(o, op, a, b)
297
- o.operator = op
379
+ @i12n[KEY_OPERATOR] = op
298
380
  build_BinaryExpression(o, a, b)
299
381
  end
300
382
 
301
383
  def build_ResourceExpression(o, type_name, bodies)
302
- o.type_name = build(type_name)
303
- o.bodies = bodies.map {|b| build(b) }
304
- o
384
+ @i12n['type_name'] = type_name
385
+ @i12n['bodies'] = bodies
305
386
  end
306
387
 
307
388
  def build_RenderStringExpression(o, string)
308
- o.value = string;
309
- o
389
+ @i12n[KEY_VALUE] = string;
310
390
  end
311
391
 
312
392
  def build_ResourceBody(o, title_expression, attribute_operations)
313
- o.title = build(title_expression)
314
- o.operations = attribute_operations.map {|ao| build(ao) }
315
- o
393
+ @i12n['title'] = title_expression
394
+ @i12n['operations'] = attribute_operations
316
395
  end
317
396
 
318
397
  def build_ResourceDefaultsExpression(o, type_ref, attribute_operations)
319
- o.type_ref = build(type_ref)
320
- o.operations = attribute_operations.map {|ao| build(ao) }
321
- o
398
+ @i12n['type_ref'] = type_ref
399
+ @i12n['operations'] = attribute_operations
322
400
  end
323
401
 
324
402
  def build_SelectorExpression(o, left, *selectors)
325
- o.left_expr = to_ops(left)
326
- o.selectors = selectors.map {|s| build(s) }
327
- o
403
+ @i12n[KEY_LEFT_EXPR] = left
404
+ @i12n['selectors'] = selectors
328
405
  end
329
406
 
330
407
  # Builds a SubLocatedExpression - this wraps the expression in a sublocation configured
@@ -333,70 +410,56 @@ class Factory
333
410
  # to what it describes.
334
411
  #
335
412
  def build_SubLocatedExpression(o, token, expression)
336
- o.expr = build(expression)
337
- o.offset = token.offset
338
- o.length = token.length
413
+ @i12n[KEY_EXPR] = expression
414
+ @i12n[KEY_OFFSET] = token.offset
415
+ @i12n[KEY_LENGTH] = token.length
339
416
  locator = token.locator
340
- o.locator = locator
341
- o.leading_line_count = locator.leading_line_count
342
- o.leading_line_offset = locator.leading_line_offset
417
+ @i12n[KEY_LOCATOR] = locator
418
+ @i12n['leading_line_count'] = locator.leading_line_count
419
+ @i12n['leading_line_offset'] = locator.leading_line_offset
343
420
  # Index is held in sublocator's parent locator - needed to be able to reconstruct
344
- o.line_offsets = locator.locator.line_index
345
- o
421
+ @i12n['line_offsets'] = locator.locator.line_index
346
422
  end
347
423
 
348
424
  def build_SelectorEntry(o, matching, value)
349
- o.matching_expr = build(matching)
350
- o.value_expr = build(value)
351
- o
425
+ @i12n['matching_expr'] = matching
426
+ @i12n['value_expr'] = value
352
427
  end
353
428
 
354
429
  def build_QueryExpression(o, expr)
355
- ops = to_ops(expr)
356
- o.expr = ops unless Factory.nop? ops
357
- o
430
+ @i12n[KEY_EXPR] = expr unless Factory.nop?(expr)
358
431
  end
359
432
 
360
433
  def build_TypeAlias(o, name, type_expr)
361
- o.type_expr = to_ops(type_expr)
362
- o.name = to_ops(name).cased_value
363
- o
434
+ @i12n['type_expr'] = type_expr
435
+ @i12n[KEY_NAME] = name
364
436
  end
365
437
 
366
438
  def build_TypeMapping(o, lhs, rhs)
367
- o.type_expr = to_ops(lhs)
368
- o.mapping_expr = to_ops(rhs)
369
- o
439
+ @i12n['type_expr'] = lhs
440
+ @i12n['mapping_expr'] = rhs
370
441
  end
371
442
 
372
443
  def build_TypeDefinition(o, name, parent, body)
373
444
  b = f_build_body(body)
374
- o.body = b.current if b
375
- o.parent = parent
376
- o.name = name
377
- o
445
+ @i12n[KEY_BODY] = b unless b.nil?
446
+ @i12n['parent'] = parent
447
+ @i12n[KEY_NAME] = name
378
448
  end
379
449
 
380
450
  def build_UnaryExpression(o, expr)
381
- ops = to_ops(expr)
382
- o.expr = ops unless Factory.nop? ops
383
- o
451
+ @i12n[KEY_EXPR] = expr unless Factory.nop?(expr)
384
452
  end
385
453
 
386
454
  def build_Program(o, body, definitions, locator)
387
- o.body = to_ops(body)
455
+ @i12n[KEY_BODY] = body
388
456
  # non containment
389
- o.definitions = definitions
390
- o.source_ref = locator.file
391
- o.source_text = locator.string
392
- o.line_offsets = locator.line_index
393
- o.locator = locator
394
- o
457
+ @i12n['definitions'] = definitions
458
+ @i12n[KEY_LOCATOR] = locator
395
459
  end
396
460
 
397
461
  def build_QualifiedName(o, name)
398
- o.value = name.to_s
399
- o
462
+ @i12n[KEY_VALUE] = name
400
463
  end
401
464
 
402
465
  def build_TokenValue(o)
@@ -405,172 +468,152 @@ class Factory
405
468
 
406
469
  # Factory helpers
407
470
  def f_build_unary(klazz, expr)
408
- Factory.new(build(klazz, expr))
471
+ Factory.new(klazz, expr)
409
472
  end
410
473
 
411
474
  def f_build_binary_op(klazz, op, left, right)
412
- Factory.new(build(klazz, op, left, right))
475
+ Factory.new(klazz, op, left, right)
413
476
  end
414
477
 
415
478
  def f_build_binary(klazz, left, right)
416
- Factory.new(build(klazz, left, right))
417
- end
418
-
419
- def f_build_vararg(klazz, left, *arg)
420
- Factory.new(build(klazz, left, *arg))
479
+ Factory.new(klazz, left, right)
421
480
  end
422
481
 
423
482
  def f_arithmetic(op, r)
424
- f_build_binary_op(ArithmeticExpression, op, current, r)
483
+ f_build_binary_op(ArithmeticExpression, op, self, r)
425
484
  end
426
485
 
427
486
  def f_comparison(op, r)
428
- f_build_binary_op(ComparisonExpression, op, current, r)
487
+ f_build_binary_op(ComparisonExpression, op, self, r)
429
488
  end
430
489
 
431
490
  def f_match(op, r)
432
- f_build_binary_op(MatchExpression, op, current, r)
491
+ f_build_binary_op(MatchExpression, op, self, r)
433
492
  end
434
493
 
435
494
  # Operator helpers
436
- def in(r) f_build_binary(InExpression, current, r); end
495
+ def in(r) f_build_binary(InExpression, self, r); end
437
496
 
438
- def or(r) f_build_binary(OrExpression, current, r); end
497
+ def or(r) f_build_binary(OrExpression, self, r); end
439
498
 
440
- def and(r) f_build_binary(AndExpression, current, r); end
499
+ def and(r) f_build_binary(AndExpression, self, r); end
441
500
 
442
- def not(); f_build_unary(NotExpression, self); end
501
+ def not(); f_build_unary(NotExpression, self); end
443
502
 
444
- def minus(); f_build_unary(UnaryMinusExpression, self); end
503
+ def minus(); f_build_unary(UnaryMinusExpression, self); end
445
504
 
446
- def unfold(); f_build_unary(UnfoldExpression, self); end
505
+ def unfold(); f_build_unary(UnfoldExpression, self); end
447
506
 
448
- def text(); f_build_unary(TextExpression, self); end
507
+ def text(); f_build_unary(TextExpression, self); end
449
508
 
450
- def var(); f_build_unary(VariableExpression, self); end
509
+ def var(); f_build_unary(VariableExpression, self); end
451
510
 
452
- def [](*r); f_build_vararg(AccessExpression, current, *r); end
511
+ def access(r); f_build_binary(AccessExpression, self, r); end
453
512
 
454
- def dot r; f_build_binary(NamedAccessExpression, current, r); end
513
+ def dot r; f_build_binary(NamedAccessExpression, self, r); end
455
514
 
456
- def + r; f_arithmetic(:+, r); end
515
+ def + r; f_arithmetic('+', r); end
457
516
 
458
- def - r; f_arithmetic(:-, r); end
517
+ def - r; f_arithmetic('-', r); end
459
518
 
460
- def / r; f_arithmetic(:/, r); end
519
+ def / r; f_arithmetic('/', r); end
461
520
 
462
- def * r; f_arithmetic(:*, r); end
521
+ def * r; f_arithmetic('*', r); end
463
522
 
464
- def % r; f_arithmetic(:%, r); end
523
+ def % r; f_arithmetic('%', r); end
465
524
 
466
- def << r; f_arithmetic(:<<, r); end
525
+ def << r; f_arithmetic('<<', r); end
467
526
 
468
- def >> r; f_arithmetic(:>>, r); end
527
+ def >> r; f_arithmetic('>>', r); end
469
528
 
470
- def < r; f_comparison(:<, r); end
529
+ def < r; f_comparison('<', r); end
471
530
 
472
- def <= r; f_comparison(:<=, r); end
531
+ def <= r; f_comparison('<=', r); end
473
532
 
474
- def > r; f_comparison(:>, r); end
533
+ def > r; f_comparison('>', r); end
475
534
 
476
- def >= r; f_comparison(:>=, r); end
535
+ def >= r; f_comparison('>=', r); end
477
536
 
478
- def == r; f_comparison(:==, r); end
537
+ def eq r; f_comparison('==', r); end
479
538
 
480
- def ne r; f_comparison(:'!=', r); end
539
+ def ne r; f_comparison('!=', r); end
481
540
 
482
- def =~ r; f_match(:'=~', r); end
541
+ def =~ r; f_match('=~', r); end
483
542
 
484
- def mne r; f_match(:'!~', r); end
543
+ def mne r; f_match('!~', r); end
485
544
 
486
- def paren(); f_build_unary(ParenthesizedExpression, current); end
545
+ def paren; f_build_unary(ParenthesizedExpression, self); end
487
546
 
488
- def relop op, r
489
- f_build_binary_op(RelationshipExpression, op.to_sym, current, r)
547
+ def relop(op, r)
548
+ f_build_binary_op(RelationshipExpression, op, self, r)
490
549
  end
491
550
 
492
- def select *args
493
- Factory.new(build(SelectorExpression, current, *args))
551
+ def select(*args)
552
+ Factory.new(SelectorExpression, self, *args)
553
+ end
554
+
555
+ # Same as access, but with varargs and arguments that must be inferred. For testing purposes
556
+ def access_at(*r)
557
+ f_build_binary(AccessExpression, self, r.map { |arg| Factory.infer(arg) })
494
558
  end
495
559
 
496
560
  # For CaseExpression, setting the default for an already build CaseExpression
497
- def default r
498
- current.addOptions(Factory.WHEN(:default, r).current)
561
+ def default(r)
562
+ @i12n['options'] << Factory.WHEN(Factory.infer(:default), r)
499
563
  self
500
564
  end
501
565
 
502
566
  def lambda=(lambda)
503
- current.lambda = lambda.current
567
+ @i12n['lambda'] = lambda
504
568
  self
505
569
  end
506
570
 
507
571
  # Assignment =
508
572
  def set(r)
509
- f_build_binary_op(AssignmentExpression, :'=', current, r)
573
+ f_build_binary_op(AssignmentExpression, '=', self, r)
510
574
  end
511
575
 
512
576
  # Assignment +=
513
577
  def plus_set(r)
514
- f_build_binary_op(AssignmentExpression, :'+=', current, r)
578
+ f_build_binary_op(AssignmentExpression, '+=', self, r)
515
579
  end
516
580
 
517
581
  # Assignment -=
518
582
  def minus_set(r)
519
- f_build_binary_op(AssignmentExpression, :'-=', current, r)
583
+ f_build_binary_op(AssignmentExpression, '-=', self, r)
520
584
  end
521
585
 
522
586
  def attributes(*args)
523
- args.each {|a| current.addAttributes(build(a)) }
587
+ @i12n['attributes'] = args
524
588
  self
525
589
  end
526
590
 
527
- # Catch all delegation to current
528
- def method_missing(meth, *args, &block)
529
- if current.respond_to?(meth)
530
- current.send(meth, *args, &block)
531
- else
532
- super
533
- end
534
- end
535
-
536
- def respond_to?(meth, include_all=false)
537
- current.respond_to?(meth, include_all) || super
538
- end
539
-
540
- def self.record_position(o, start_locatable, end_locateable)
541
- new(o).record_position(start_locatable, end_locateable)
542
- end
543
-
544
591
  def offset
545
- @current.offset
592
+ @i12n[KEY_OFFSET]
546
593
  end
547
594
 
548
595
  def length
549
- @current.length
596
+ @i12n[KEY_LENGTH]
550
597
  end
551
598
 
552
599
  # Records the position (start -> end) and computes the resulting length.
553
600
  #
554
- def record_position(start_locatable, end_locatable)
601
+ def record_position(locator, start_locatable, end_locatable)
555
602
  # record information directly in the Positioned object
556
603
  start_offset = start_locatable.offset
557
- @current.set_loc(start_offset, end_locatable ? end_locatable.offset - start_offset + end_locatable.length : start_locatable.length)
604
+ @i12n[KEY_LOCATOR] = locator
605
+ @i12n[KEY_OFFSET] = start_offset
606
+ @i12n[KEY_LENGTH] = end_locatable.nil? ? start_locatable.length : end_locatable.offset + end_locatable.length - start_offset
558
607
  self
559
608
  end
560
609
 
561
- # @return [Puppet::Pops::Adapters::SourcePosAdapter] with location information
562
- def loc()
563
- Adapters::SourcePosAdapter.adapt(current)
564
- end
565
-
566
610
  # Sets the form of the resource expression (:regular (the default), :virtual, or :exported).
567
611
  # Produces true if the expression was a resource expression, false otherwise.
568
612
  #
569
613
  def self.set_resource_form(expr, form)
570
- expr = expr.current if expr.instance_of?(Factory)
571
614
  # Note: Validation handles illegal combinations
572
- return false unless expr.is_a?(AbstractResource)
573
- expr.form = form
615
+ return false unless expr.instance_of?(self) && expr.model_class <= AbstractResource
616
+ expr['form'] = form
574
617
  return true
575
618
  end
576
619
 
@@ -582,105 +625,102 @@ class Factory
582
625
  # * _any other_ => ':error', all other are considered illegal
583
626
  #
584
627
  def self.resource_shape(expr)
585
- expr = expr.current if expr.instance_of?(Factory)
586
- case expr
587
- when QualifiedName
588
- :resource
589
- when QualifiedReference
590
- :defaults
591
- when AccessExpression
592
- # if Resource[e], then it is not resource specific
593
- if expr.left_expr.is_a?(QualifiedReference) && expr.left_expr.value == 'resource' && expr.keys.size == 1
628
+ if expr == 'class'
629
+ :class
630
+ elsif expr.instance_of?(self)
631
+ mc = expr.model_class
632
+ if mc <= QualifiedName
633
+ :resource
634
+ elsif mc <= QualifiedReference
594
635
  :defaults
636
+ elsif mc <= AccessExpression
637
+ # if Resource[e], then it is not resource specific
638
+ lhs = expr[KEY_LEFT_EXPR]
639
+ if lhs.model_class <= QualifiedReference && lhs[KEY_VALUE] == 'resource' && expr[KEY_KEYS].size == 1
640
+ :defaults
641
+ else
642
+ :override
643
+ end
595
644
  else
596
- :override
645
+ :error
597
646
  end
598
- when 'class'
599
- :class
600
647
  else
601
648
  :error
602
649
  end
603
650
  end
604
- # Factory starting points
605
-
606
- def self.literal(o); new(o); end
607
651
 
608
- def self.minus(o); new(o).minus; end
652
+ # Factory starting points
609
653
 
610
- def self.unfold(o); new(o).unfold; end
654
+ def self.literal(o); infer(o); end
611
655
 
612
- def self.var(o); new(o).var; end
656
+ def self.minus(o); infer(o).minus; end
613
657
 
614
- def self.block(*args); new(BlockExpression, *args); end
658
+ def self.unfold(o); infer(o).unfold; end
615
659
 
616
- def self.string(*args); new(ConcatenatedString, *args); end
660
+ def self.var(o); infer(o).var; end
617
661
 
618
- def self.text(o); new(o).text; end
662
+ def self.block(*args); new(BlockExpression, args.map { |arg| infer(arg) }); end
619
663
 
620
- def self.IF(test_e,then_e,else_e); new(IfExpression, test_e, then_e, else_e); end
664
+ def self.string(*args); new(ConcatenatedString, args.map { |arg| infer(arg) }); end
621
665
 
622
- def self.UNLESS(test_e,then_e,else_e); new(UnlessExpression, test_e, then_e, else_e); end
666
+ def self.text(o); infer(o).text; end
623
667
 
624
- def self.CASE(test_e,*options); new(CaseExpression, test_e, *options); end
668
+ def self.IF(test_e,then_e,else_e); new(IfExpression, test_e, then_e, else_e); end
625
669
 
626
- def self.WHEN(values_list, block); new(CaseOption, values_list, block); end
670
+ def self.UNLESS(test_e,then_e,else_e); new(UnlessExpression, test_e, then_e, else_e); end
627
671
 
628
- def self.MAP(match, value); new(SelectorEntry, match, value); end
672
+ def self.CASE(test_e,*options); new(CaseExpression, test_e, options); end
629
673
 
630
- def self.TYPE(name, super_name=nil); new(CreateTypeExpression, name, super_name); end
674
+ def self.WHEN(values_list, block); new(CaseOption, values_list, block); end
631
675
 
632
- def self.ATTR(name, type_expr=nil); new(CreateAttributeExpression, name, type_expr); end
676
+ def self.MAP(match, value); new(SelectorEntry, match, value); end
633
677
 
634
- def self.ENUM(*args); new(CreateEnumExpression, *args); end
678
+ def self.KEY_ENTRY(key, val); new(KeyedEntry, key, val); end
635
679
 
636
- def self.KEY_ENTRY(key, val); new(KeyedEntry, key, val); end
680
+ def self.HASH(entries); new(LiteralHash, entries); end
637
681
 
638
- def self.HASH(entries); new(LiteralHash, *entries); end
682
+ def self.HEREDOC(name, expr); new(HeredocExpression, name, expr); end
639
683
 
640
- def self.HEREDOC(name, expr); new(HeredocExpression, name, expr); end
684
+ def self.STRING(*args); new(ConcatenatedString, args); end
641
685
 
642
- def self.SUBLOCATE(token, expr) new(SubLocatedExpression, token, expr); end
686
+ def self.SUBLOCATE(token, expr) new(SubLocatedExpression, token, expr); end
643
687
 
644
- def self.LIST(entries); new(LiteralList, *entries); end
688
+ def self.LIST(entries); new(LiteralList, entries); end
645
689
 
646
- def self.PARAM(name, expr=nil); new(Parameter, name, expr); end
690
+ def self.PARAM(name, expr=nil); new(Parameter, name, expr); end
647
691
 
648
- def self.NODE(hosts, parent, body); new(NodeDefinition, hosts, parent, body); end
692
+ def self.NODE(hosts, parent, body); new(NodeDefinition, hosts, parent, body); end
649
693
 
650
- def self.SITE(body); new(SiteDefinition, body); end
694
+ def self.SITE(body); new(SiteDefinition, body); end
651
695
 
652
696
  # Parameters
653
697
 
654
698
  # Mark parameter as capturing the rest of arguments
655
- def captures_rest()
656
- current.captures_rest = true
699
+ def captures_rest
700
+ @i12n['captures_rest'] = true
657
701
  end
658
702
 
659
703
  # Set Expression that should evaluate to the parameter's type
660
704
  def type_expr(o)
661
- current.type_expr = to_ops(o)
705
+ @i12n['type_expr'] = o
662
706
  end
663
707
 
664
708
  # Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which
665
709
  # case it is returned.
666
710
  #
667
711
  def self.fqn(o)
668
- o = o.current if o.instance_of?(Factory)
669
- o = new(QualifiedName, o) unless o.is_a? QualifiedName
670
- o
712
+ o.instance_of?(Factory) && o.model_class <= QualifiedName ? self : new(QualifiedName, o)
671
713
  end
672
714
 
673
715
  # Creates a QualifiedName representation of o, unless o already represents a QualifiedName in which
674
716
  # case it is returned.
675
717
  #
676
718
  def self.fqr(o)
677
- o = o.current if o.instance_of?(Factory)
678
- o = new(QualifiedReference, o) unless o.is_a? QualifiedReference
679
- o
719
+ o.instance_of?(Factory) && o.model_class <= QualifiedReference ? self : new(QualifiedReference, o)
680
720
  end
681
721
 
682
722
  def self.TEXT(expr)
683
- new(TextExpression, new(expr).interpolate)
723
+ new(TextExpression, infer(expr).interpolate)
684
724
  end
685
725
 
686
726
  # TODO_EPP
@@ -763,15 +803,17 @@ class Factory
763
803
  new(AttributesOperation, expr)
764
804
  end
765
805
 
806
+ # Same as CALL_NAMED but with inference and varargs (for testing purposes)
807
+ def self.call_named(name, rval_required, *argument_list)
808
+ new(CallNamedFunctionExpression, fqn(name), rval_required, argument_list.map { |arg| infer(arg) })
809
+ end
810
+
766
811
  def self.CALL_NAMED(name, rval_required, argument_list)
767
- unless name.kind_of?(PopsObject)
768
- name = Factory.fqn(name) unless name.instance_of?(Factory)
769
- end
770
- new(CallNamedFunctionExpression, name, rval_required, *argument_list)
812
+ new(CallNamedFunctionExpression, name, rval_required, argument_list)
771
813
  end
772
814
 
773
815
  def self.CALL_METHOD(functor, argument_list)
774
- new(CallMethodExpression, functor, true, nil, *argument_list)
816
+ new(CallMethodExpression, functor, true, nil, argument_list)
775
817
  end
776
818
 
777
819
  def self.COLLECT(type_expr, query_expr, attribute_operations)
@@ -803,12 +845,8 @@ class Factory
803
845
  end
804
846
 
805
847
  # Builds a BlockExpression if args size > 1, else the single expression/value in args
806
- def self.block_or_expression(*args)
807
- if args.size > 1
808
- new(BlockExpression, *args)
809
- else
810
- new(args[0])
811
- end
848
+ def self.block_or_expression(args)
849
+ args.size > 1 ? new(BlockExpression, args) : args[0]
812
850
  end
813
851
 
814
852
  def self.HOSTCLASS(name, parameters, parent, body)
@@ -836,10 +874,10 @@ class Factory
836
874
  end
837
875
 
838
876
  def self.TYPE_ASSIGNMENT(lhs, rhs)
839
- if lhs.current.is_a?(AccessExpression)
877
+ if lhs.model_class <= AccessExpression
840
878
  new(TypeMapping, lhs, rhs)
841
879
  else
842
- new(TypeAlias, lhs, rhs)
880
+ new(TypeAlias, lhs['cased_value'], rhs)
843
881
  end
844
882
  end
845
883
 
@@ -848,7 +886,7 @@ class Factory
848
886
  end
849
887
 
850
888
  def self.nop? o
851
- o.nil? || o.is_a?(Nop)
889
+ o.nil? || o.instance_of?(Factory) && o.model_class <= Nop
852
890
  end
853
891
 
854
892
  STATEMENT_CALLS = {
@@ -869,12 +907,13 @@ class Factory
869
907
  'break' => true,
870
908
  'next' => true,
871
909
  'return' => true
872
- }
910
+ }.freeze
911
+
873
912
  # Returns true if the given name is a "statement keyword" (require, include, contain,
874
913
  # error, notice, info, debug
875
914
  #
876
- def name_is_statement(name)
877
- STATEMENT_CALLS[name]
915
+ def self.name_is_statement?(name)
916
+ STATEMENT_CALLS.include?(name)
878
917
  end
879
918
 
880
919
  class ArgsToNonCallError < RuntimeError
@@ -890,17 +929,16 @@ class Factory
890
929
  #
891
930
  def self.transform_calls(expressions)
892
931
  expressions.reduce([]) do |memo, expr|
893
- expr = expr.current if expr.instance_of?(Factory)
894
932
  name = memo[-1]
895
- if name.is_a?(QualifiedName) && STATEMENT_CALLS[name.value]
933
+ if name.instance_of?(Factory) && name.model_class <= QualifiedName && name_is_statement?(name[KEY_VALUE])
896
934
  if expr.is_a?(Array)
897
- expr = expr.reject {|e| e.is_a?(Parser::LexerSupport::TokenValue) }
935
+ expr = expr.reject { |e| e.is_a?(Parser::LexerSupport::TokenValue) }
898
936
  else
899
937
  expr = [expr]
900
938
  end
901
- the_call = Factory.CALL_NAMED(name, false, expr)
939
+ the_call = self.CALL_NAMED(name, false, expr)
902
940
  # last positioned is last arg if there are several
903
- record_position(the_call, name, expr.is_a?(Array) ? expr[-1] : expr)
941
+ the_call.record_position(name[KEY_LOCATOR], name, expr[-1])
904
942
  memo[-1] = the_call
905
943
  if expr.is_a?(CallNamedFunctionExpression)
906
944
  # Patch statement function call to expression style
@@ -912,15 +950,14 @@ class Factory
912
950
  raise ArgsToNonCallError.new(expr, name)
913
951
  else
914
952
  memo << expr
915
- if expr.is_a?(CallNamedFunctionExpression)
953
+ if expr.model_class <= CallNamedFunctionExpression
916
954
  # Patch rvalue expression function call to statement style.
917
955
  # This is not really required but done to be AST model compliant
918
- expr.rval_required = false
956
+ expr['rval_required'] = false
919
957
  end
920
958
  end
921
959
  memo
922
960
  end
923
-
924
961
  end
925
962
 
926
963
  # Transforms a left expression followed by an untitled resource (in the form of attribute_operations)
@@ -928,223 +965,113 @@ class Factory
928
965
  def self.transform_resource_wo_title(left, attribute_ops, lbrace_token, rbrace_token)
929
966
  # Returning nil means accepting the given as a potential resource expression
930
967
  return nil unless attribute_ops.is_a? Array
931
- return nil unless left.current.is_a?(QualifiedName)
968
+ return nil unless left.model_class <= QualifiedName
932
969
  keyed_entries = attribute_ops.map do |ao|
933
- return nil if ao.operator == :'+>'
934
- KEY_ENTRY(ao.attribute_name, ao.value_expr)
970
+ return nil if ao[KEY_OPERATOR] == '+>'
971
+ KEY_ENTRY(infer(ao['attribute_name']), ao['value_expr'])
935
972
  end
936
973
  a_hash = HASH(keyed_entries)
937
- a_hash.record_position(lbrace_token, rbrace_token)
938
- result = block_or_expression(*transform_calls([left, a_hash]))
974
+ a_hash.record_position(left[KEY_LOCATOR], lbrace_token, rbrace_token)
975
+ result = block_or_expression(transform_calls([left, a_hash]))
939
976
  result
940
977
  end
941
978
 
942
-
943
- # Building model equivalences of Ruby objects
944
- # Allows passing regular ruby objects to the factory to produce instructions
945
- # that when evaluated produce the same thing.
946
-
947
- def build_String(o)
948
- x = LiteralString.new
949
- x.value = o;
950
- x
951
- end
952
-
953
- def build_NilClass(o)
954
- x = Nop.new
955
- x
956
- end
957
-
958
- def build_TrueClass(o)
959
- x = LiteralBoolean.new
960
- x.value = o
961
- x
962
- end
963
-
964
- def build_FalseClass(o)
965
- x = LiteralBoolean.new
966
- x.value = o
967
- x
968
- end
969
-
970
- def build_Fixnum(o)
971
- x = LiteralInteger.new
972
- x.value = o;
973
- x
974
- end
975
-
976
- def build_Float(o)
977
- x = LiteralFloat.new
978
- x.value = o;
979
- x
980
- end
981
-
982
- def build_Regexp(o)
983
- x = LiteralRegularExpression.new
984
- x.value = o;
985
- x
986
- end
987
-
988
- def build_EppExpression(o, parameters_specified, body)
989
- o.parameters_specified = parameters_specified
990
- b = f_build_body(body)
991
- o.body = b.current if b
992
- o
993
- end
994
-
995
- # If building a factory, simply unwrap the model oject contained in the factory.
996
- def build_Factory(o)
997
- o.current
998
- end
999
-
1000
- # Creates a String literal, unless the symbol is one of the special :undef, or :default
1001
- # which instead creates a LiterlUndef, or a LiteralDefault.
1002
- # Supports :undef because nil creates a no-op instruction.
1003
- def build_Symbol(o)
1004
- case o
1005
- when :undef
1006
- LiteralUndef.new
1007
- when :default
1008
- LiteralDefault.new
1009
- else
1010
- build_String(o.to_s)
1011
- end
1012
- end
1013
-
1014
- # Creates a LiteralList instruction from an Array, where the entries are built.
1015
- def build_Array(o)
1016
- x = LiteralList.new
1017
- o.each { |v| x.addValues(build(v)) }
1018
- x
1019
- end
1020
-
1021
- # Create a LiteralHash instruction from a hash, where keys and values are built
1022
- # The hash entries are added in sorted order based on key.to_s
1023
- #
1024
- def build_Hash(o)
1025
- x = LiteralHash.new
1026
- (o.sort_by {|k,v| k.to_s}).each {|k,v| x.addEntries(build(KeyedEntry.new, k, v)) }
1027
- x
1028
- end
1029
-
1030
- # @param rval_required [Boolean] if the call must produce a value
1031
- def build_CallExpression(o, functor, rval_required, *args)
1032
- o.functor_expr = to_ops(functor)
1033
- o.rval_required = rval_required
1034
- args.each {|x| o.addArguments(to_ops(x)) }
1035
- o
1036
- end
1037
-
1038
- def build_CallMethodExpression(o, functor, rval_required, lambda, *args)
1039
- build_CallExpression(o, functor, rval_required, *args)
1040
- o.lambda = lambda
1041
- o
1042
- end
1043
-
1044
- def build_CaseExpression(o, test, *args)
1045
- o.test = build(test)
1046
- args.each {|opt| o.addOptions(build(opt)) }
1047
- o
1048
- end
1049
-
1050
- def build_CaseOption(o, value_list, then_expr)
1051
- value_list = [value_list] unless value_list.is_a? Array
1052
- value_list.each { |v| o.addValues(build(v)) }
1053
- b = f_build_body(then_expr)
1054
- o.then_expr = to_ops(b) if b
1055
- o
1056
- end
1057
-
1058
- # Build a Class by creating an instance of it, and then calling build on the created instance
1059
- # with the given arguments
1060
- def build_Class(o, *args)
1061
- build(o.new(), *args)
1062
- end
1063
-
1064
- def interpolate_Factory(o)
1065
- interpolate(o.current)
979
+ def interpolate_Factory(c)
980
+ self
1066
981
  end
1067
982
 
1068
- def interpolate_LiteralInteger(o)
983
+ def interpolate_LiteralInteger(c)
1069
984
  # convert number to a variable
1070
- self.class.new(o).var
985
+ self.var
1071
986
  end
1072
987
 
1073
- def interpolate_Object(o)
1074
- o
988
+ def interpolate_Object(c)
989
+ self
1075
990
  end
1076
991
 
1077
- def interpolate_QualifiedName(o)
1078
- self.class.new(o).var
992
+ def interpolate_QualifiedName(c)
993
+ self.var
1079
994
  end
1080
995
 
1081
996
  # rewrite left expression to variable if it is name, number, and recurse if it is an access expression
1082
997
  # this is for interpolation support in new lexer (${NAME}, ${NAME[}}, ${NUMBER}, ${NUMBER[]} - all
1083
998
  # other expressions requires variables to be preceded with $
1084
999
  #
1085
- def interpolate_AccessExpression(o)
1086
- if is_interop_rewriteable?(o.left_expr)
1087
- o.left_expr = to_ops(self.class.new(o.left_expr).interpolate)
1000
+ def interpolate_AccessExpression(c)
1001
+ lhs = @i12n[KEY_LEFT_EXPR]
1002
+ if is_interop_rewriteable?(lhs)
1003
+ @i12n[KEY_LEFT_EXPR] = lhs.interpolate
1088
1004
  end
1089
- o
1005
+ self
1090
1006
  end
1091
1007
 
1092
- def interpolate_NamedAccessExpression(o)
1093
- if is_interop_rewriteable?(o.left_expr)
1094
- o.left_expr = to_ops(self.class.new(o.left_expr).interpolate)
1008
+ def interpolate_NamedAccessExpression(c)
1009
+ lhs = @i12n[KEY_LEFT_EXPR]
1010
+ if is_interop_rewriteable?(lhs)
1011
+ @i12n[KEY_LEFT_EXPR] = lhs.interpolate
1095
1012
  end
1096
- o
1013
+ self
1097
1014
  end
1098
1015
 
1099
1016
  # Rewrite method calls on the form ${x.each ...} to ${$x.each}
1100
- def interpolate_CallMethodExpression(o)
1101
- if is_interop_rewriteable?(o.functor_expr)
1102
- o.functor_expr = to_ops(self.class.new(o.functor_expr).interpolate)
1017
+ def interpolate_CallMethodExpression(c)
1018
+ functor_expr = @i12n['functor_expr']
1019
+ if is_interop_rewriteable?(functor_expr)
1020
+ @i12n['functor_expr'] = functor_expr.interpolate
1103
1021
  end
1104
- o
1022
+ self
1105
1023
  end
1106
1024
 
1107
1025
  def is_interop_rewriteable?(o)
1108
- case o
1109
- when AccessExpression, QualifiedName,
1110
- NamedAccessExpression, CallMethodExpression
1026
+ mc = o.model_class
1027
+ if mc <= AccessExpression || mc <= QualifiedName || mc <= NamedAccessExpression || mc <= CallMethodExpression
1111
1028
  true
1112
- when LiteralInteger
1029
+ elsif mc <= LiteralInteger
1113
1030
  # Only decimal integers can represent variables, else it is a number
1114
- o.radix == 10
1031
+ o['radix'] == 10
1115
1032
  else
1116
1033
  false
1117
1034
  end
1118
1035
  end
1119
1036
 
1120
- # Checks if the object is already a model object, or build it
1121
- def to_ops(o, *args)
1122
- case o
1123
- when PopsObject
1124
- o
1125
- when Factory
1126
- o.current
1127
- else
1128
- build(o, *args)
1129
- end
1130
- end
1131
-
1132
1037
  def self.concat(*args)
1133
- new(args.map do |e|
1134
- e = e.current if e.is_a?(self)
1135
- case e
1136
- when LiteralString
1137
- e.value
1138
- when String
1139
- e
1038
+ result = ''
1039
+ args.each do |e|
1040
+ if e.instance_of?(Factory) && e.model_class <= LiteralString
1041
+ result << e[KEY_VALUE]
1042
+ elsif e.is_a?(String)
1043
+ result << e
1140
1044
  else
1141
1045
  raise ArgumentError, "can only concatenate strings, got #{e.class}"
1142
1046
  end
1143
- end.join(''))
1047
+ end
1048
+ infer(result)
1144
1049
  end
1145
1050
 
1146
1051
  def to_s
1147
- ModelTreeDumper.new.dump(self)
1052
+ "Factory for #{@model_class}"
1053
+ end
1054
+
1055
+ def factory_to_model(value)
1056
+ if value.instance_of?(Factory)
1057
+ value.contained_current(self)
1058
+ elsif value.instance_of?(Array)
1059
+ value.each_with_index { |el, idx| value[idx] = el.contained_current(self) if el.instance_of?(Factory) }
1060
+ else
1061
+ value
1062
+ end
1063
+ end
1064
+
1065
+ def contained_current(container)
1066
+ if @current.nil?
1067
+ unless @i12n.include?(KEY_LOCATOR)
1068
+ @i12n[KEY_LOCATOR] = container[KEY_LOCATOR]
1069
+ @i12n[KEY_OFFSET] = container[KEY_OFFSET] || 0
1070
+ @i12n[KEY_LENGTH] = 0
1071
+ end
1072
+ @current = create_model
1073
+ end
1074
+ @current
1148
1075
  end
1149
1076
  end
1150
1077
  end