puppet 5.3.7-universal-darwin → 5.4.0-universal-darwin

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 (454) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +42 -29
  3. data/README.md +8 -6
  4. data/ext/cert_inspector +2 -2
  5. data/ext/envpuppet +1 -1
  6. data/ext/gentoo/init.d/puppetmaster +4 -4
  7. data/ext/ips/puppet-agent +11 -11
  8. data/ext/ips/puppet-master +11 -11
  9. data/ext/puppet-test +1 -2
  10. data/ext/redhat/client.init +2 -2
  11. data/ext/redhat/logrotate +1 -1
  12. data/ext/solaris/smf/puppet +11 -11
  13. data/ext/solaris/smf/svc-puppetd +5 -5
  14. data/ext/solaris/smf/svc-puppetmasterd +5 -5
  15. data/ext/windows/service/daemon.rb +1 -1
  16. data/install.rb +2 -3
  17. data/lib/puppet/agent.rb +1 -1
  18. data/lib/puppet/application/cert.rb +1 -3
  19. data/lib/puppet/application/describe.rb +0 -1
  20. data/lib/puppet/application/device.rb +12 -99
  21. data/lib/puppet/application/filebucket.rb +32 -11
  22. data/lib/puppet/application/lookup.rb +1 -11
  23. data/lib/puppet/application/script.rb +261 -0
  24. data/lib/puppet/configurer.rb +3 -4
  25. data/lib/puppet/configurer/plugin_handler.rb +26 -9
  26. data/lib/puppet/context.rb +1 -1
  27. data/lib/puppet/datatypes.rb +213 -0
  28. data/lib/puppet/datatypes/error.rb +21 -0
  29. data/lib/puppet/datatypes/impl/error.rb +40 -0
  30. data/lib/puppet/defaults.rb +51 -20
  31. data/lib/puppet/environments.rb +17 -0
  32. data/lib/puppet/error.rb +17 -0
  33. data/lib/puppet/etc.rb +2 -2
  34. data/lib/puppet/external/pson/pure/generator.rb +1 -1
  35. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  36. data/lib/puppet/face/config.rb +45 -0
  37. data/lib/puppet/face/epp.rb +3 -3
  38. data/lib/puppet/face/help/action.erb +3 -0
  39. data/lib/puppet/face/module/build.rb +1 -0
  40. data/lib/puppet/face/module/generate.rb +5 -0
  41. data/lib/puppet/face/module/install.rb +1 -0
  42. data/lib/puppet/face/module/search.rb +6 -2
  43. data/lib/puppet/face/module/uninstall.rb +1 -0
  44. data/lib/puppet/face/module/upgrade.rb +1 -0
  45. data/lib/puppet/face/parser.rb +0 -1
  46. data/lib/puppet/face/plugin.rb +1 -3
  47. data/lib/puppet/feature/base.rb +1 -1
  48. data/lib/puppet/feature/bolt.rb +3 -0
  49. data/lib/puppet/file_bucket/dipper.rb +1 -2
  50. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  51. data/lib/puppet/file_system/uniquefile.rb +2 -2
  52. data/lib/puppet/forge.rb +6 -0
  53. data/lib/puppet/functions.rb +70 -88
  54. data/lib/puppet/functions/all.rb +6 -2
  55. data/lib/puppet/functions/annotate.rb +1 -1
  56. data/lib/puppet/functions/any.rb +7 -3
  57. data/lib/puppet/functions/contain.rb +6 -0
  58. data/lib/puppet/functions/convert_to.rb +32 -0
  59. data/lib/puppet/functions/defined.rb +0 -3
  60. data/lib/puppet/functions/each.rb +10 -6
  61. data/lib/puppet/functions/filter.rb +16 -10
  62. data/lib/puppet/functions/find_file.rb +0 -1
  63. data/lib/puppet/functions/include.rb +6 -0
  64. data/lib/puppet/functions/map.rb +12 -9
  65. data/lib/puppet/functions/module_directory.rb +41 -0
  66. data/lib/puppet/functions/new.rb +1 -4
  67. data/lib/puppet/functions/regsubst.rb +1 -1
  68. data/lib/puppet/functions/require.rb +6 -0
  69. data/lib/puppet/generate/type.rb +1 -1
  70. data/lib/puppet/gettext/config.rb +2 -2
  71. data/lib/puppet/gettext/stubs.rb +1 -1
  72. data/lib/puppet/indirector/catalog/compiler.rb +0 -1
  73. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -2
  74. data/lib/puppet/indirector/file_server.rb +1 -1
  75. data/lib/puppet/indirector/node/ldap.rb +19 -3
  76. data/lib/puppet/indirector/request.rb +10 -6
  77. data/lib/puppet/indirector/rest.rb +11 -12
  78. data/lib/puppet/info_service/class_information_service.rb +1 -1
  79. data/lib/puppet/interface/action.rb +11 -0
  80. data/lib/puppet/interface/action_builder.rb +8 -0
  81. data/lib/puppet/interface/option_manager.rb +1 -1
  82. data/lib/puppet/loaders.rb +2 -0
  83. data/lib/puppet/module.rb +6 -2
  84. data/lib/puppet/module_tool/applications/builder.rb +4 -0
  85. data/lib/puppet/module_tool/applications/installer.rb +3 -0
  86. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -0
  87. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  88. data/lib/puppet/module_tool/applications/upgrader.rb +3 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +1 -1
  90. data/lib/puppet/module_tool/metadata.rb +0 -1
  91. data/lib/puppet/network/authstore.rb +1 -1
  92. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  93. data/lib/puppet/network/http/connection.rb +1 -9
  94. data/lib/puppet/network/http/factory.rb +0 -3
  95. data/lib/puppet/network/http/webrick.rb +1 -0
  96. data/lib/puppet/network/rights.rb +1 -1
  97. data/lib/puppet/node.rb +53 -0
  98. data/lib/puppet/node/environment.rb +1 -1
  99. data/lib/puppet/parameter/boolean.rb +1 -1
  100. data/lib/puppet/parser.rb +1 -0
  101. data/lib/puppet/parser/abstract_compiler.rb +36 -0
  102. data/lib/puppet/parser/ast/branch.rb +1 -1
  103. data/lib/puppet/parser/ast/pops_bridge.rb +8 -52
  104. data/lib/puppet/parser/compiler.rb +4 -54
  105. data/lib/puppet/parser/functions.rb +0 -1
  106. data/lib/puppet/parser/functions/create_resources.rb +6 -0
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +6 -2
  108. data/lib/puppet/parser/functions/inline_template.rb +6 -0
  109. data/lib/puppet/parser/functions/new.rb +47 -32
  110. data/lib/puppet/parser/functions/realize.rb +6 -0
  111. data/lib/puppet/parser/functions/return.rb +1 -22
  112. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  113. data/lib/puppet/parser/functions/scanf.rb +1 -1
  114. data/lib/puppet/parser/functions/sha256.rb +5 -0
  115. data/lib/puppet/parser/functions/tag.rb +6 -0
  116. data/lib/puppet/parser/functions/tagged.rb +6 -0
  117. data/lib/puppet/parser/functions/template.rb +5 -0
  118. data/lib/puppet/parser/scope.rb +28 -4
  119. data/lib/puppet/parser/script_compiler.rb +118 -0
  120. data/lib/puppet/parser/type_loader.rb +1 -1
  121. data/lib/puppet/pops.rb +1 -1
  122. data/lib/puppet/pops/evaluator/access_operator.rb +38 -4
  123. data/lib/puppet/pops/evaluator/closure.rb +12 -4
  124. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  125. data/lib/puppet/pops/evaluator/epp_evaluator.rb +13 -0
  126. data/lib/puppet/pops/evaluator/evaluator_impl.rb +38 -10
  127. data/lib/puppet/pops/evaluator/literal_evaluator.rb +1 -1
  128. data/lib/puppet/pops/evaluator/runtime3_converter.rb +1 -1
  129. data/lib/puppet/pops/evaluator/runtime3_support.rb +2 -3
  130. data/lib/puppet/pops/functions/dispatch.rb +6 -5
  131. data/lib/puppet/pops/functions/function.rb +2 -2
  132. data/lib/puppet/pops/issues.rb +34 -2
  133. data/lib/puppet/pops/loader/base_loader.rb +10 -0
  134. data/lib/puppet/pops/loader/dependency_loader.rb +7 -0
  135. data/lib/puppet/pops/loader/loader.rb +21 -2
  136. data/lib/puppet/pops/loader/loader_paths.rb +180 -30
  137. data/lib/puppet/pops/loader/module_loaders.rb +202 -33
  138. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +84 -0
  139. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +9 -9
  140. data/lib/puppet/pops/loader/ruby_data_type_instantiator.rb +40 -0
  141. data/lib/puppet/pops/loader/runtime3_type_loader.rb +6 -1
  142. data/lib/puppet/pops/loader/static_loader.rb +23 -8
  143. data/lib/puppet/pops/loader/task_instantiator.rb +69 -0
  144. data/lib/puppet/pops/loader/type_definition_instantiator.rb +4 -0
  145. data/lib/puppet/pops/loaders.rb +122 -11
  146. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +1 -1
  147. data/lib/puppet/pops/lookup/interpolation.rb +1 -1
  148. data/lib/puppet/pops/lookup/lookup_adapter.rb +0 -1
  149. data/lib/puppet/pops/model/ast.pp +3 -0
  150. data/lib/puppet/pops/model/ast.rb +34 -1
  151. data/lib/puppet/pops/model/factory.rb +30 -3
  152. data/lib/puppet/pops/model/model_label_provider.rb +1 -0
  153. data/lib/puppet/pops/model/model_tree_dumper.rb +12 -1
  154. data/lib/puppet/pops/model/tree_dumper.rb +1 -1
  155. data/lib/puppet/pops/parser/code_merger.rb +2 -2
  156. data/lib/puppet/pops/parser/egrammar.ra +44 -15
  157. data/lib/puppet/pops/parser/eparser.rb +1687 -1571
  158. data/lib/puppet/pops/parser/epp_support.rb +1 -3
  159. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  160. data/lib/puppet/pops/parser/interpolation_support.rb +2 -2
  161. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  162. data/lib/puppet/pops/parser/lexer_support.rb +2 -2
  163. data/lib/puppet/pops/parser/locatable.rb +1 -1
  164. data/lib/puppet/pops/parser/locator.rb +7 -13
  165. data/lib/puppet/pops/parser/parser_support.rb +3 -3
  166. data/lib/puppet/pops/parser/slurp_support.rb +0 -3
  167. data/lib/puppet/pops/pcore.rb +45 -0
  168. data/lib/puppet/pops/resource/param.rb +1 -1
  169. data/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
  170. data/lib/puppet/pops/serialization/abstract_reader.rb +4 -0
  171. data/lib/puppet/pops/serialization/abstract_writer.rb +6 -0
  172. data/lib/puppet/pops/serialization/extension.rb +1 -0
  173. data/lib/puppet/pops/serialization/from_data_converter.rb +64 -10
  174. data/lib/puppet/pops/serialization/json_path.rb +2 -1
  175. data/lib/puppet/pops/serialization/object.rb +3 -4
  176. data/lib/puppet/pops/serialization/serializer.rb +2 -1
  177. data/lib/puppet/pops/serialization/to_data_converter.rb +7 -3
  178. data/lib/puppet/pops/time/timespan.rb +1 -1
  179. data/lib/puppet/pops/types/iterable.rb +38 -9
  180. data/lib/puppet/pops/types/p_init_type.rb +1 -1
  181. data/lib/puppet/pops/types/p_meta_type.rb +4 -0
  182. data/lib/puppet/pops/types/p_object_type.rb +146 -14
  183. data/lib/puppet/pops/types/p_object_type_extension.rb +218 -0
  184. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +0 -1
  185. data/lib/puppet/pops/types/p_sem_ver_type.rb +10 -2
  186. data/lib/puppet/pops/types/p_type_set_type.rb +0 -1
  187. data/lib/puppet/pops/types/p_uri_type.rb +190 -0
  188. data/lib/puppet/pops/types/puppet_object.rb +15 -1
  189. data/lib/puppet/pops/types/ruby_generator.rb +46 -54
  190. data/lib/puppet/pops/types/string_converter.rb +22 -1
  191. data/lib/puppet/pops/types/type_acceptor.rb +1 -1
  192. data/lib/puppet/pops/types/type_calculator.rb +13 -4
  193. data/lib/puppet/pops/types/type_factory.rb +29 -5
  194. data/lib/puppet/pops/types/type_formatter.rb +67 -4
  195. data/lib/puppet/pops/types/type_parser.rb +92 -4
  196. data/lib/puppet/pops/types/type_with_members.rb +43 -0
  197. data/lib/puppet/pops/types/types.rb +212 -80
  198. data/lib/puppet/pops/validation/checker4_0.rb +10 -6
  199. data/lib/puppet/pops/validation/tasks_checker.rb +60 -0
  200. data/lib/puppet/pops/validation/validator_factory_4_0.rb +6 -1
  201. data/lib/puppet/property.rb +1 -1
  202. data/lib/puppet/provider.rb +18 -8
  203. data/lib/puppet/provider/augeas/augeas.rb +3 -4
  204. data/lib/puppet/provider/exec.rb +0 -2
  205. data/lib/puppet/provider/group/groupadd.rb +25 -1
  206. data/lib/puppet/provider/group/windows_adsi.rb +7 -4
  207. data/lib/puppet/provider/mount.rb +25 -8
  208. data/lib/puppet/provider/nameservice.rb +9 -4
  209. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -3
  210. data/lib/puppet/provider/nameservice/objectadd.rb +13 -24
  211. data/lib/puppet/provider/nameservice/pw.rb +14 -14
  212. data/lib/puppet/provider/package/appdmg.rb +0 -1
  213. data/lib/puppet/provider/package/apple.rb +0 -1
  214. data/lib/puppet/provider/package/gem.rb +2 -2
  215. data/lib/puppet/provider/package/macports.rb +2 -2
  216. data/lib/puppet/provider/package/pkg.rb +3 -0
  217. data/lib/puppet/provider/package/pkgdmg.rb +0 -1
  218. data/lib/puppet/provider/package/portage.rb +0 -1
  219. data/lib/puppet/provider/package/yum.rb +23 -8
  220. data/lib/puppet/provider/package/zypper.rb +2 -2
  221. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +2 -2
  222. data/lib/puppet/provider/service/init.rb +1 -0
  223. data/lib/puppet/provider/service/launchd.rb +6 -7
  224. data/lib/puppet/provider/service/redhat.rb +3 -2
  225. data/lib/puppet/provider/service/systemd.rb +2 -2
  226. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  227. data/lib/puppet/provider/user/aix.rb +3 -2
  228. data/lib/puppet/provider/user/openbsd.rb +1 -1
  229. data/lib/puppet/provider/user/pw.rb +1 -1
  230. data/lib/puppet/provider/user/user_role_add.rb +7 -1
  231. data/lib/puppet/provider/user/useradd.rb +36 -6
  232. data/lib/puppet/provider/user/windows_adsi.rb +1 -1
  233. data/lib/puppet/provider/yumrepo/inifile.rb +2 -4
  234. data/lib/puppet/provider/zfs/zfs.rb +23 -3
  235. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  236. data/lib/puppet/reference/configuration.rb +0 -2
  237. data/lib/puppet/reference/type.rb +0 -1
  238. data/lib/puppet/resource.rb +1 -2
  239. data/lib/puppet/resource/catalog.rb +1 -1
  240. data/lib/puppet/resource/status.rb +0 -1
  241. data/lib/puppet/resource/type.rb +4 -4
  242. data/lib/puppet/resource/type_collection.rb +1 -1
  243. data/lib/puppet/settings/base_setting.rb +1 -1
  244. data/lib/puppet/settings/environment_conf.rb +0 -1
  245. data/lib/puppet/settings/ini_file.rb +66 -12
  246. data/lib/puppet/ssl/certificate_authority.rb +1 -1
  247. data/lib/puppet/ssl/certificate_request.rb +2 -2
  248. data/lib/puppet/ssl/certificate_revocation_list.rb +2 -1
  249. data/lib/puppet/ssl/certificate_signer.rb +11 -0
  250. data/lib/puppet/ssl/host.rb +2 -2
  251. data/lib/puppet/syntax_checkers/base64.rb +1 -1
  252. data/lib/puppet/transaction.rb +37 -14
  253. data/lib/puppet/transaction/report.rb +3 -1
  254. data/lib/puppet/type.rb +17 -4
  255. data/lib/puppet/type/cron.rb +1 -1
  256. data/lib/puppet/type/exec.rb +5 -4
  257. data/lib/puppet/type/file.rb +3 -3
  258. data/lib/puppet/type/file/checksum.rb +7 -1
  259. data/lib/puppet/type/file/checksum_value.rb +4 -3
  260. data/lib/puppet/type/group.rb +3 -0
  261. data/lib/puppet/type/k5login.rb +101 -0
  262. data/lib/puppet/type/macauthorization.rb +1 -1
  263. data/lib/puppet/type/mount.rb +6 -2
  264. data/lib/puppet/type/tidy.rb +6 -4
  265. data/lib/puppet/type/user.rb +26 -39
  266. data/lib/puppet/type/yumrepo.rb +9 -0
  267. data/lib/puppet/type/zfs.rb +4 -0
  268. data/lib/puppet/util.rb +8 -15
  269. data/lib/puppet/util/character_encoding.rb +2 -2
  270. data/lib/puppet/util/checksums.rb +82 -1
  271. data/lib/puppet/util/errors.rb +0 -2
  272. data/lib/puppet/util/filetype.rb +2 -2
  273. data/lib/puppet/util/json_lockfile.rb +1 -1
  274. data/lib/puppet/util/log.rb +1 -1
  275. data/lib/puppet/util/log/destinations.rb +10 -1
  276. data/lib/puppet/util/monkey_patches.rb +1 -1
  277. data/lib/puppet/util/network_device/cisco/device.rb +5 -5
  278. data/lib/puppet/util/network_device/config.rb +2 -3
  279. data/lib/puppet/util/platform.rb +13 -0
  280. data/lib/puppet/util/plist.rb +4 -4
  281. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  282. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc2.rb +1 -1
  283. data/lib/puppet/util/reference.rb +8 -1
  284. data/lib/puppet/util/windows/adsi.rb +18 -15
  285. data/lib/puppet/util/windows/principal.rb +6 -7
  286. data/lib/puppet/util/windows/process.rb +1 -1
  287. data/lib/puppet/util/windows/registry.rb +2 -2
  288. data/lib/puppet/util/windows/sid.rb +7 -62
  289. data/lib/puppet/vendor/deep_merge/README.md +2 -2
  290. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +18 -18
  291. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +2 -2
  292. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +5 -5
  293. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +1 -1
  294. data/lib/puppet/version.rb +1 -1
  295. data/lib/puppet_pal.rb +874 -0
  296. data/locales/ja/puppet.po +140 -163
  297. data/locales/puppet.pot +940 -597
  298. data/man/man5/puppet.conf.5 +16 -91
  299. data/man/man8/puppet-agent.8 +2 -6
  300. data/man/man8/puppet-apply.8 +2 -2
  301. data/man/man8/puppet-ca.8 +1 -1
  302. data/man/man8/puppet-catalog.8 +1 -1
  303. data/man/man8/puppet-cert.8 +1 -1
  304. data/man/man8/puppet-certificate.8 +1 -1
  305. data/man/man8/puppet-certificate_request.8 +1 -1
  306. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  307. data/man/man8/puppet-config.8 +1 -1
  308. data/man/man8/puppet-describe.8 +1 -1
  309. data/man/man8/puppet-device.8 +11 -33
  310. data/man/man8/puppet-doc.8 +1 -1
  311. data/man/man8/puppet-epp.8 +1 -1
  312. data/man/man8/puppet-facts.8 +1 -1
  313. data/man/man8/puppet-filebucket.8 +4 -22
  314. data/man/man8/puppet-generate.8 +1 -1
  315. data/man/man8/puppet-help.8 +1 -1
  316. data/man/man8/puppet-key.8 +1 -1
  317. data/man/man8/puppet-lookup.8 +1 -1
  318. data/man/man8/puppet-man.8 +1 -1
  319. data/man/man8/puppet-master.8 +1 -1
  320. data/man/man8/puppet-module.8 +2 -11
  321. data/man/man8/puppet-node.8 +1 -1
  322. data/man/man8/puppet-parser.8 +1 -1
  323. data/man/man8/puppet-plugin.8 +1 -1
  324. data/man/man8/puppet-report.8 +1 -1
  325. data/man/man8/puppet-resource.8 +1 -1
  326. data/man/man8/puppet-status.8 +1 -1
  327. data/man/man8/puppet.8 +2 -2
  328. data/spec/integration/application/lookup_spec.rb +0 -21
  329. data/spec/integration/parser/compiler_spec.rb +18 -0
  330. data/spec/integration/parser/script_compiler_spec.rb +113 -0
  331. data/spec/integration/provider/mount_spec.rb +2 -0
  332. data/spec/integration/type/file_spec.rb +11 -3
  333. data/spec/integration/util/windows/adsi_spec.rb +1 -86
  334. data/spec/integration/util/windows/principal_spec.rb +1 -10
  335. data/spec/shared_contexts/checksum.rb +4 -1
  336. data/spec/shared_contexts/digests.rb +46 -1
  337. data/spec/shared_contexts/types_setup.rb +8 -3
  338. data/spec/unit/agent_spec.rb +2 -2
  339. data/spec/unit/application/cert_spec.rb +5 -17
  340. data/spec/unit/application/device_spec.rb +2 -96
  341. data/spec/unit/application/filebucket_spec.rb +18 -4
  342. data/spec/unit/configurer/plugin_handler_spec.rb +5 -32
  343. data/spec/unit/configurer_spec.rb +3 -3
  344. data/spec/unit/datatypes_spec.rb +304 -0
  345. data/spec/unit/defaults_spec.rb +41 -20
  346. data/spec/unit/face/config_spec.rb +46 -1
  347. data/spec/unit/face/epp_face_spec.rb +7 -3
  348. data/spec/unit/face/module/search_spec.rb +11 -0
  349. data/spec/unit/face/parser_spec.rb +2 -2
  350. data/spec/unit/file_bucket/dipper_spec.rb +12 -1
  351. data/spec/unit/forge/module_release_spec.rb +70 -0
  352. data/spec/unit/functions/break_spec.rb +34 -2
  353. data/spec/unit/functions/contain_spec.rb +1 -0
  354. data/spec/unit/functions/convert_to_spec.rb +22 -0
  355. data/spec/unit/functions/epp_spec.rb +5 -0
  356. data/spec/unit/functions/include_spec.rb +15 -0
  357. data/spec/unit/functions/module_directory_spec.rb +43 -0
  358. data/spec/unit/functions/new_spec.rb +14 -14
  359. data/spec/unit/functions/require_spec.rb +2 -0
  360. data/spec/unit/functions/shared.rb +12 -0
  361. data/spec/unit/functions/step_spec.rb +1 -1
  362. data/spec/unit/functions4_spec.rb +49 -4
  363. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -3
  364. data/spec/unit/indirector/file_bucket_file/file_spec.rb +148 -94
  365. data/spec/unit/indirector/node/ldap_spec.rb +15 -12
  366. data/spec/unit/indirector/rest_spec.rb +0 -43
  367. data/spec/unit/interface/action_spec.rb +33 -0
  368. data/spec/unit/module_tool/applications/builder_spec.rb +7 -0
  369. data/spec/unit/module_tool/applications/installer_spec.rb +8 -0
  370. data/spec/unit/module_tool/applications/uninstaller_spec.rb +8 -0
  371. data/spec/unit/module_tool/applications/upgrader_spec.rb +6 -0
  372. data/spec/unit/network/http/connection_spec.rb +1 -1
  373. data/spec/unit/network/http/factory_spec.rb +28 -35
  374. data/spec/unit/parser/compiler_spec.rb +0 -8
  375. data/spec/unit/parser/environment_compiler_spec.rb +36 -0
  376. data/spec/unit/parser/functions/create_resources_spec.rb +9 -0
  377. data/spec/unit/parser/functions/inline_template_spec.rb +7 -0
  378. data/spec/unit/parser/functions/realize_spec.rb +9 -0
  379. data/spec/unit/parser/functions/tag_spec.rb +7 -0
  380. data/spec/unit/parser/functions/tagged_spec.rb +25 -0
  381. data/spec/unit/parser/functions/template_spec.rb +8 -0
  382. data/spec/unit/parser/scope_spec.rb +19 -0
  383. data/spec/unit/pops/evaluator/conditionals_spec.rb +1 -1
  384. data/spec/unit/pops/loaders/loader_spec.rb +516 -0
  385. data/spec/unit/pops/loaders/loaders_spec.rb +11 -0
  386. data/spec/unit/pops/loaders/module_loaders_spec.rb +43 -0
  387. data/spec/unit/pops/loaders/static_loader_spec.rb +15 -7
  388. data/spec/unit/pops/model/model_spec.rb +5 -0
  389. data/spec/unit/pops/parser/lexer2_spec.rb +15 -0
  390. data/spec/unit/pops/parser/locator_spec.rb +20 -0
  391. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +33 -0
  392. data/spec/unit/pops/parser/parse_calls_spec.rb +28 -0
  393. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -0
  394. data/spec/unit/pops/parser/parse_plan_spec.rb +48 -0
  395. data/spec/unit/pops/serialization/packer_spec.rb +8 -0
  396. data/spec/unit/pops/serialization/serialization_spec.rb +30 -0
  397. data/spec/unit/pops/serialization/to_from_hr_spec.rb +31 -0
  398. data/spec/unit/pops/types/error_spec.rb +207 -0
  399. data/spec/unit/pops/types/p_init_type_spec.rb +98 -0
  400. data/spec/unit/pops/types/p_object_type_spec.rb +275 -10
  401. data/spec/unit/pops/types/p_uri_type_spec.rb +191 -0
  402. data/spec/unit/pops/types/ruby_generator_spec.rb +82 -44
  403. data/spec/unit/pops/types/task_spec.rb +353 -0
  404. data/spec/unit/pops/types/type_calculator_spec.rb +76 -5
  405. data/spec/unit/pops/types/type_formatter_spec.rb +31 -13
  406. data/spec/unit/pops/types/type_parser_spec.rb +13 -1
  407. data/spec/unit/pops/types/types_spec.rb +60 -0
  408. data/spec/unit/pops/validator/validator_spec.rb +76 -0
  409. data/spec/unit/provider/group/groupadd_spec.rb +77 -1
  410. data/spec/unit/provider/group/pw_spec.rb +4 -4
  411. data/spec/unit/provider/group/windows_adsi_spec.rb +22 -79
  412. data/spec/unit/provider/mount_spec.rb +18 -5
  413. data/spec/unit/provider/nameservice_spec.rb +5 -5
  414. data/spec/unit/provider/package/dnf_spec.rb +2 -2
  415. data/spec/unit/provider/package/gem_spec.rb +1 -1
  416. data/spec/unit/provider/package/pkg_spec.rb +3 -0
  417. data/spec/unit/provider/package/yum_spec.rb +40 -0
  418. data/spec/unit/provider/service/launchd_spec.rb +2 -1
  419. data/spec/unit/provider/service/redhat_spec.rb +5 -0
  420. data/spec/unit/provider/service/systemd_spec.rb +1 -1
  421. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  422. data/spec/unit/provider/user/openbsd_spec.rb +2 -2
  423. data/spec/unit/provider/user/pw_spec.rb +14 -14
  424. data/spec/unit/provider/user/user_role_add_spec.rb +19 -2
  425. data/spec/unit/provider/user/useradd_spec.rb +188 -22
  426. data/spec/unit/provider/user/windows_adsi_spec.rb +4 -4
  427. data/spec/unit/provider/zfs/zfs_spec.rb +55 -1
  428. data/spec/unit/provider_spec.rb +48 -0
  429. data/spec/unit/puppet_pal_2pec.rb +1005 -0
  430. data/spec/unit/puppet_pal_spec.rb +11 -0
  431. data/spec/unit/settings/ini_file_spec.rb +313 -2
  432. data/spec/unit/ssl/certificate_request_spec.rb +42 -1
  433. data/spec/unit/ssl/certificate_revocation_list_spec.rb +2 -1
  434. data/spec/unit/transaction/report_spec.rb +1 -0
  435. data/spec/unit/transaction_spec.rb +112 -21
  436. data/spec/unit/type/file/checksum_spec.rb +20 -0
  437. data/spec/unit/type/file_spec.rb +8 -0
  438. data/spec/unit/type/group_spec.rb +8 -0
  439. data/spec/unit/type/k5login_spec.rb +22 -1
  440. data/spec/unit/type/scheduled_task_spec.rb +15 -0
  441. data/spec/unit/type/user_spec.rb +11 -1
  442. data/spec/unit/type/yumrepo_spec.rb +5 -0
  443. data/spec/unit/util/checksums_spec.rb +3 -3
  444. data/spec/unit/util/log/destinations_spec.rb +14 -0
  445. data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
  446. data/spec/unit/util/plist_spec.rb +3 -3
  447. data/spec/unit/util/windows/adsi_spec.rb +27 -31
  448. data/spec/unit/util/windows/sid_spec.rb +15 -86
  449. data/spec/unit/util_spec.rb +17 -3
  450. data/tasks/manpages.rake +1 -1
  451. metadata +218 -180
  452. data/lib/puppet/bindings.rb +0 -148
  453. data/lib/puppet/configurer/downloader_factory.rb +0 -44
  454. data/spec/unit/configurer/downloader_factory_spec.rb +0 -129
@@ -123,7 +123,7 @@ module EppSupport
123
123
  # The scanner supports
124
124
  # * scanning text until <%, <%-, <%=
125
125
  # * while scanning text:
126
- # * tokens <%% and %%> are translated to <% and %> respetively and is returned as text.
126
+ # * tokens <%% and %%> are translated to <% and %>, respectively, and is returned as text.
127
127
  # * tokens <%# and %> (or ending with -%>) and the enclosed text is a comment and is not included in the returned text
128
128
  # * text following a comment that ends with -%> gets trailing whitespace (up to and including a line break) trimmed
129
129
  # and this whitespace is not included in the returned text.
@@ -201,8 +201,6 @@ module EppSupport
201
201
  if s.end_with? "<%"
202
202
  @mode = :error
203
203
  @issue = Issues::EPP_UNBALANCED_EXPRESSION
204
- else
205
- mode = :epp
206
204
  end
207
205
  return s
208
206
 
@@ -80,7 +80,7 @@ class EvaluatingParser
80
80
  end
81
81
 
82
82
  def convert_to_3x(object, scope)
83
- val = evaluator.convert(object, scope, nil)
83
+ evaluator.convert(object, scope, nil)
84
84
  end
85
85
 
86
86
  def validate(parse_result)
@@ -10,7 +10,7 @@ module Puppet::Pops::Parser::InterpolationSupport
10
10
 
11
11
  # This is the starting point for a double quoted string with possible interpolation
12
12
  # The structure mimics that of the grammar.
13
- # The logic is explicit (where the former implementation used parameters/strucures) given to a
13
+ # The logic is explicit (where the former implementation used parameters/structures) given to a
14
14
  # generic handler.
15
15
  # (This is both easier to understand and faster).
16
16
  #
@@ -221,7 +221,7 @@ module Puppet::Pops::Parser::InterpolationSupport
221
221
 
222
222
  def transform_to_variable(token)
223
223
  token_name = token[0]
224
- if [:NUMBER, :NAME, :WORD].include?(token_name) || self.class::KEYWORD_NAMES[token_name]
224
+ if [:NUMBER, :NAME, :WORD].include?(token_name) || self.class::KEYWORD_NAMES[token_name] || @taskm_keywords[token_name]
225
225
  t = token[1]
226
226
  ta = t.token_array
227
227
  [:VARIABLE, self.class::TokenValue.new([:VARIABLE, ta[1], ta[2]], t.offset, t.locator)]
@@ -1,4 +1,4 @@
1
- # The Lexer is responsbile for turning source text into tokens.
1
+ # The Lexer is responsible for turning source text into tokens.
2
2
  # This version is a performance enhanced lexer (in comparison to the 3.x and earlier "future parser" lexer.
3
3
  #
4
4
  # Old returns tokens [:KEY, value, { locator = }
@@ -513,7 +513,6 @@ class Lexer2
513
513
  scn.pos = before
514
514
  invalid_number = scn.peek(after - before) unless invalid_number
515
515
  end
516
- length = scn.pos - before
517
516
  assert_numeric(invalid_number, before)
518
517
  scn.pos = before + 1
519
518
  lex_error(Issues::ILLEGAL_NUMBER, {:value => invalid_number})
@@ -523,12 +522,11 @@ class Lexer2
523
522
  ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
524
523
  'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '_'].each do |c|
525
524
  @selector[c] = lambda do
526
-
527
525
  scn = @scanner
528
526
  before = scn.pos
529
527
  value = scn.scan(PATTERN_BARE_WORD)
530
528
  if value && value =~ PATTERN_NAME
531
- emit_completed(KEYWORDS[value] || [:NAME, value.freeze, scn.pos - before], before)
529
+ emit_completed(KEYWORDS[value] || @taskm_keywords[value] || [:NAME, value.freeze, scn.pos - before], before)
532
530
  elsif value
533
531
  emit_completed([:WORD, value.freeze, scn.pos - before], before)
534
532
  else
@@ -663,6 +661,8 @@ class Lexer2
663
661
  :after => nil,
664
662
  :line_lexical_start => 0
665
663
  }
664
+ # Use of --tasks introduces the new keyword 'plan'
665
+ @taskm_keywords = Puppet[:tasks] ? { 'plan' => [:PLAN, 'plan', 4] }.freeze : EMPTY_HASH
666
666
  end
667
667
 
668
668
  # Scans all of the content and returns it in an array
@@ -135,7 +135,7 @@ module LexerSupport
135
135
  end
136
136
 
137
137
  def to_s
138
- # This format is very compact and is intended for debugging output from racc parsser in
138
+ # This format is very compact and is intended for debugging output from racc parser in
139
139
  # debug mode. If this is made more elaborate the output from a debug run becomes very hard to read.
140
140
  #
141
141
  "'#{self[:value]} #{@token_array[0]}'"
@@ -204,7 +204,7 @@ module LexerSupport
204
204
 
205
205
  def get_bom(content)
206
206
  # get 5 bytes as efficiently as possible (none of the string methods works since a bom consists of
207
- # illegal characters on most platforms, and there is no get_bytes(n). xplicit calls are faster than
207
+ # illegal characters on most platforms, and there is no get_bytes(n). Explicit calls are faster than
208
208
  # looping with a lambda. The get_byte returns nil if there are too few characters, and they
209
209
  # are changed to spaces
210
210
  MM.new(
@@ -1,4 +1,4 @@
1
- # Interface for something that is "locateable" (holds offset and length).
1
+ # Interface for something that is "locatable" (holds offset and length).
2
2
  class Puppet::Pops::Parser::Locatable
3
3
 
4
4
  # The offset in the locator's content
@@ -43,11 +43,7 @@ class Locator
43
43
  def char_offset(byte_offset)
44
44
  end
45
45
 
46
- # Returns the length measured in number of characters from the given start and end reported offset
47
- def char_length(offset, end_offset)
48
- end
49
-
50
- # Returns the length measured in number of characters from the given start and end byte offseta
46
+ # Returns the length measured in number of characters from the given start and end byte offset
51
47
  def char_length(offset, end_offset)
52
48
  end
53
49
 
@@ -164,8 +160,6 @@ class Locator
164
160
  class AbstractLocator < Locator
165
161
  attr_accessor :line_index
166
162
  attr_accessor :string
167
- attr_accessor :prev_offset
168
- attr_accessor :prev_line
169
163
  attr_reader :string
170
164
  attr_reader :file
171
165
 
@@ -255,19 +249,19 @@ class Locator
255
249
 
256
250
  # Returns the line number (first line is 1) for the given offset
257
251
  def line_for_offset(offset)
258
- if prev_offset == offset
252
+ if @prev_offset == offset
259
253
  # use cache
260
- return prev_line
254
+ return @prev_line
261
255
  end
262
256
  if line_nbr = ary_bsearch_i(line_index, offset)
263
257
  # cache
264
- prev_offset = offset
265
- prev_line = line_nbr
258
+ @prev_offset = offset
259
+ @prev_line = line_nbr
266
260
  return line_nbr
267
261
  end
268
262
  # If not found it is after last
269
263
  # clear cache
270
- prev_offset = prev_line = nil
264
+ @prev_offset = @prev_line = nil
271
265
  return line_index.size
272
266
  end
273
267
  end
@@ -328,7 +322,7 @@ class Locator
328
322
  string.byteslice(0, byte_offset).length
329
323
  end
330
324
 
331
- # Returns the length measured in number of characters from the given start and end byte offseta
325
+ # Returns the length measured in number of characters from the given start and end byte offset
332
326
  def char_length(offset, end_offset)
333
327
  string.byteslice(offset, end_offset - offset).length
334
328
  end
@@ -91,7 +91,7 @@ class Parser
91
91
  #
92
92
  def on_error(token,value,stack)
93
93
  if token == 0 # denotes end of file
94
- value_at = 'end of file'
94
+ value_at = 'end of input'
95
95
  else
96
96
  value_at = "'#{value[:value]}'"
97
97
  end
@@ -121,7 +121,7 @@ class Parser
121
121
  file = lexer.file
122
122
  end
123
123
  file = nil unless file.is_a?(String) && !file.empty?
124
- raise Puppet::ParseErrorWithIssue.new(error, file, line, pos, nil, issue_code = Issues::SYNTAX_ERROR.issue_code)
124
+ raise Puppet::ParseErrorWithIssue.new(error, file, line, pos, nil, Issues::SYNTAX_ERROR.issue_code)
125
125
  end
126
126
 
127
127
  # Parses a String of pp DSL code.
@@ -219,7 +219,7 @@ class Parser
219
219
  # Create a synthetic NOOP token at EOF offset with 0 size. The lexer does not produce an EOF token that is
220
220
  # visible to the grammar rules. Creating this token is mainly to reuse the positioning logic as it
221
221
  # expects a token decorated with location information.
222
- token_sym, token = @lexer.emit_completed([:NOOP,'',0], locator.string.bytesize)
222
+ _, token = @lexer.emit_completed([:NOOP,'',0], locator.string.bytesize)
223
223
  loc(no_op, token)
224
224
  # Program with a Noop
225
225
  program = Factory.PROGRAM(no_op, [], locator)
@@ -45,9 +45,6 @@ module SlurpSupport
45
45
  # Copy from old lexer - can do much better
46
46
  def slurp_uqstring
47
47
  scn = @scanner
48
- last = scn.matched
49
- ignore = true
50
-
51
48
  str = slurp(scn, @lexing_context[:uq_slurp_pattern], @lexing_context[:escapes], :ignore_invalid_escapes)
52
49
 
53
50
  # Terminator may be a single char '$', two characters '${', or empty string '' at the end of intput.
@@ -38,6 +38,51 @@ module Pcore
38
38
  add_alias('Pcore::MemberName', TYPE_MEMBER_NAME, loader)
39
39
  add_alias('Pcore::TypeName', TYPE_QUALIFIED_REFERENCE, loader)
40
40
  add_alias('Pcore::QRef', TYPE_QUALIFIED_REFERENCE, loader)
41
+
42
+ if Puppet[:tasks]
43
+ add_object_type('Task', <<-PUPPET, loader)
44
+ {
45
+ attributes => {
46
+ # Fully qualified name of the task
47
+ name => { type => Pattern[/\\A[a-z][a-z0-9_]*(?:::[a-z][a-z0-9_]*)*\\z/] },
48
+
49
+ # Full path to executable
50
+ executable => { type => String },
51
+
52
+ # Task description
53
+ description => { type => Optional[String], value => undef },
54
+
55
+ # Puppet Task version
56
+ puppet_task_version => { type => Integer, value => 1 },
57
+
58
+ # Type, description, and sensitive property of each parameter
59
+ parameters => {
60
+ type => Optional[Hash[
61
+ Pattern[/\\A[a-z][a-z0-9_]*\\z/],
62
+ Struct[
63
+ Optional[description] => String,
64
+ Optional[sensitive] => Boolean,
65
+ type => Type]]],
66
+ value => undef
67
+ },
68
+
69
+ # Type, description, and sensitive property of each output
70
+ output => {
71
+ type => Optional[Hash[
72
+ Pattern[/\\A[a-z][a-z0-9_]*\\z/],
73
+ Struct[
74
+ Optional[description] => String,
75
+ Optional[sensitive] => Boolean,
76
+ type => Type]]],
77
+ value => undef
78
+ },
79
+
80
+ supports_noop => { type => Boolean, value => false },
81
+ input_method => { type => String, value => 'both' },
82
+ }
83
+ }
84
+ PUPPET
85
+ end
41
86
  Types::TypedModelObject.register_ptypes(loader, ir)
42
87
 
43
88
  @type = create_object_type(loader, ir, Pcore, 'Pcore', nil)
@@ -15,7 +15,7 @@
15
15
  module Puppet::Pops
16
16
  module Resource
17
17
  class Param
18
- # This make this class instantiateable from Puppet
18
+ # This make this class instantiable from Puppet
19
19
  include Puppet::Pops::Types::PuppetObject
20
20
 
21
21
  def self.register_ptype(loader, ir)
@@ -11,7 +11,7 @@ def self.register_ptypes(loader, ir)
11
11
  end
12
12
 
13
13
  class ResourceTypeImpl
14
- # Make instances of this class directly createable from the Puppet Language
14
+ # Make instances of this class directly creatable from the Puppet Language
15
15
  # as object.
16
16
  #
17
17
  include Puppet::Pops::Types::PuppetObject
@@ -170,6 +170,10 @@ class AbstractReader
170
170
  # are written as binary data.
171
171
  read_payload(data) { |ep| Types::PBinaryType::Binary.new(ep.read) }
172
172
  end
173
+
174
+ register_type(Extension::URI) do |data|
175
+ read_payload(data) { |ep| URI(ep.read) }
176
+ end
173
177
  end
174
178
  end
175
179
  end
@@ -202,6 +202,12 @@ class AbstractWriter
202
202
  build_payload { |ep| ep.write(o.to_s) }
203
203
  end
204
204
  end
205
+
206
+ URI.scheme_list.values.each do |uri_class|
207
+ register_type(Extension::URI, uri_class) do |o|
208
+ build_payload { |ep| ep.write(o.to_s) }
209
+ end
210
+ end
205
211
  end
206
212
 
207
213
  def to_s
@@ -30,6 +30,7 @@ module Extension
30
30
  VERSION_RANGE = 0x36
31
31
  BINARY = 0x37
32
32
  BASE64 = 0x38
33
+ URI = 0x39
33
34
 
34
35
  # Marker module indicating whether or not an instance is tabulated or not
35
36
  module NotTabulated; end
@@ -1,5 +1,57 @@
1
1
  module Puppet::Pops
2
2
  module Serialization
3
+ class Builder
4
+ def initialize(values)
5
+ @values = values
6
+ @resolved = true
7
+ end
8
+
9
+ def [](key)
10
+ @values[key]
11
+ end
12
+
13
+ def []=(key, value)
14
+ @values[key] = value
15
+ @resolved = false if value.is_a?(Builder)
16
+ end
17
+
18
+ def resolve
19
+ unless @resolved
20
+ @resolved = true
21
+ if @values.is_a?(Array)
22
+ @values.each_with_index { |v, idx| @values[idx] = v.resolve if v.is_a?(Builder) }
23
+ elsif @values.is_a?(Hash)
24
+ @values.each_pair { |k, v| @values[k] = v.resolve if v.is_a?(Builder) }
25
+ end
26
+ end
27
+ @values
28
+ end
29
+ end
30
+
31
+ class ObjectHashBuilder < Builder
32
+ def initialize(instance)
33
+ super({})
34
+ @instance = instance
35
+ end
36
+
37
+ def resolve
38
+ @instance._pcore_init_from_hash(super)
39
+ @instance
40
+ end
41
+ end
42
+
43
+ class ObjectArrayBuilder < Builder
44
+ def initialize(instance)
45
+ super({})
46
+ @instance = instance
47
+ end
48
+
49
+ def resolve
50
+ @instance.send(:initialize, *super.values)
51
+ @instance
52
+ end
53
+ end
54
+
3
55
  # Class that can process the `Data` produced by the {ToDataConverter} class and reassemble
4
56
  # the objects that were converted.
5
57
  #
@@ -137,9 +189,16 @@ module Serialization
137
189
  end
138
190
 
139
191
  def build(value, &block)
140
- @current[@key] = value unless @current.nil?
141
- with_value(value, &block) if block_given?
142
- value
192
+ vx = Builder.new(value)
193
+ @current[@key] = vx unless @current.nil?
194
+ with_value(vx, &block) if block_given?
195
+ vx.resolve
196
+ end
197
+
198
+ def build_object(builder, &block)
199
+ @current[@key] = builder unless @current.nil?
200
+ with_value(builder, &block) if block_given?
201
+ builder.resolve
143
202
  end
144
203
 
145
204
  def pcore_type_hash_to_value(pcore_type, value)
@@ -148,14 +207,9 @@ module Serialization
148
207
  if value.empty?
149
208
  build(pcore_type.create)
150
209
  elsif pcore_type.implementation_class.respond_to?(:_pcore_init_from_hash)
151
- build(pcore_type.allocate) do
152
- @current._pcore_init_from_hash(with_value({}) { value.each_pair { |key, elem| with(key) { convert(elem) } } })
153
- end
210
+ build_object(ObjectHashBuilder.new(pcore_type.allocate)) { value.each_pair { |key, elem| with(key) { convert(elem) } } }
154
211
  else
155
- build(pcore_type.allocate) do
156
- args = with_value([]) { value.values.each_with_index { |elem, idx| with(idx) { convert(elem) }}}
157
- @current.send(:initialize, *args)
158
- end
212
+ build_object(ObjectArrayBuilder.new(pcore_type.allocate)) { value.each_pair { |key, elem| with(key) { convert(elem) } } }
159
213
  end
160
214
  elsif value.is_a?(String)
161
215
  build(pcore_type.create(value))
@@ -47,7 +47,8 @@ module JsonPath
47
47
  #
48
48
  def resolve(context, path)
49
49
  factory = @parser.parse_string(path)
50
- resolve_any(factory.model.body, context, path)
50
+ v = resolve_any(factory.model.body, context, path)
51
+ v.is_a?(Builder) ? v.resolve : v
51
52
  end
52
53
 
53
54
  def resolve_any(ast, context, path)
@@ -9,8 +9,7 @@ module Serialization
9
9
  class ObjectReader
10
10
  include InstanceReader
11
11
 
12
- def read(impl_class, value_count, deserializer)
13
- type = impl_class._pcore_type
12
+ def read(type, impl_class, value_count, deserializer)
14
13
  (names, types, required_count) = type.parameter_info(impl_class)
15
14
  max = names.size
16
15
  unless value_count >= required_count && value_count <= max
@@ -25,7 +24,7 @@ class ObjectReader
25
24
  Types::TypeAsserter.assert_instance_of(nil, ptype, arg) { "#{type.name}[#{names[index]}]" } unless arg == :default
26
25
  else
27
26
  attr = type[names[index]]
28
- raise Serialization::SerializationError, _("Missing default value for %{type_name}[%{name}]") % { type_name: type.name, name: names[index] } unless attr.value?
27
+ raise Serialization::SerializationError, _("Missing default value for %{type_name}[%{name}]") % { type_name: type.name, name: names[index] } unless attr && attr.value?
29
28
  args << attr.value
30
29
  end
31
30
  end
@@ -43,7 +42,7 @@ class ObjectWriter
43
42
 
44
43
  def write(type, value, serializer)
45
44
  impl_class = value.class
46
- (names, types, required_count) = type.parameter_info(impl_class)
45
+ (names, _, required_count) = type.parameter_info(impl_class)
47
46
  args = names.map { |name| value.send(name) }
48
47
 
49
48
  # Pop optional arguments that are default
@@ -108,7 +108,8 @@ module Serialization
108
108
  value.instance_of?(SemanticPuppet::VersionRange),
109
109
  value.instance_of?(Time::Timestamp),
110
110
  value.instance_of?(Time::Timespan),
111
- value.instance_of?(Types::PBinaryType::Binary)
111
+ value.instance_of?(Types::PBinaryType::Binary),
112
+ value.is_a?(URI)
112
113
  push_written(value)
113
114
  @writer.write(value)
114
115
  when value.instance_of?(Array)