inspec 4.3.2 → 4.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +36 -38
  3. data/README.md +37 -21
  4. data/etc/deprecations.json +10 -0
  5. data/etc/plugin_filters.json +8 -0
  6. data/inspec.gemspec +38 -39
  7. data/lib/bundles/inspec-compliance/api.rb +1 -1
  8. data/lib/bundles/inspec-compliance/configuration.rb +1 -1
  9. data/lib/bundles/inspec-compliance/http.rb +1 -1
  10. data/lib/bundles/inspec-compliance/support.rb +1 -1
  11. data/lib/bundles/inspec-compliance/target.rb +1 -1
  12. data/lib/bundles/inspec-supermarket.rb +3 -7
  13. data/lib/bundles/inspec-supermarket/api.rb +10 -13
  14. data/lib/bundles/inspec-supermarket/cli.rb +12 -15
  15. data/lib/bundles/inspec-supermarket/target.rb +7 -11
  16. data/lib/fetchers/git.rb +14 -15
  17. data/lib/fetchers/local.rb +6 -10
  18. data/lib/fetchers/mock.rb +3 -5
  19. data/lib/fetchers/url.rb +42 -44
  20. data/lib/inspec.rb +23 -24
  21. data/lib/inspec/archive/tar.rb +2 -6
  22. data/lib/inspec/archive/zip.rb +3 -7
  23. data/lib/inspec/backend.rb +8 -9
  24. data/lib/inspec/base_cli.rb +64 -65
  25. data/lib/inspec/cached_fetcher.rb +2 -3
  26. data/lib/inspec/cli.rb +136 -97
  27. data/lib/inspec/config.rb +71 -61
  28. data/lib/inspec/control_eval_context.rb +22 -18
  29. data/lib/inspec/dependencies/cache.rb +2 -3
  30. data/lib/inspec/dependencies/dependency_set.rb +2 -3
  31. data/lib/inspec/dependencies/lockfile.rb +8 -9
  32. data/lib/inspec/dependencies/requirement.rb +7 -8
  33. data/lib/inspec/dependencies/resolver.rb +5 -7
  34. data/lib/inspec/describe.rb +2 -6
  35. data/lib/inspec/dist.rb +20 -0
  36. data/lib/inspec/dsl.rb +4 -7
  37. data/lib/inspec/dsl_shared.rb +1 -2
  38. data/lib/inspec/env_printer.rb +11 -12
  39. data/lib/inspec/errors.rb +0 -4
  40. data/lib/inspec/exceptions.rb +0 -1
  41. data/lib/inspec/expect.rb +5 -8
  42. data/lib/inspec/fetcher.rb +7 -10
  43. data/lib/inspec/file_provider.rb +24 -24
  44. data/lib/inspec/formatters.rb +3 -3
  45. data/lib/inspec/formatters/base.rb +8 -8
  46. data/lib/inspec/globals.rb +2 -2
  47. data/lib/inspec/impact.rb +5 -7
  48. data/lib/inspec/input_registry.rb +84 -33
  49. data/lib/inspec/library_eval_context.rb +3 -6
  50. data/lib/inspec/log.rb +1 -5
  51. data/lib/inspec/metadata.rb +17 -16
  52. data/lib/inspec/method_source.rb +5 -9
  53. data/lib/inspec/objects.rb +10 -12
  54. data/lib/inspec/objects/control.rb +7 -9
  55. data/lib/inspec/objects/describe.rb +9 -11
  56. data/lib/inspec/objects/each_loop.rb +1 -3
  57. data/lib/inspec/objects/input.rb +24 -26
  58. data/lib/inspec/objects/list.rb +4 -6
  59. data/lib/inspec/objects/or_test.rb +2 -4
  60. data/lib/inspec/objects/ruby_helper.rb +3 -5
  61. data/lib/inspec/objects/tag.rb +0 -2
  62. data/lib/inspec/objects/test.rb +9 -11
  63. data/lib/inspec/objects/value.rb +3 -5
  64. data/lib/inspec/plugin/v1.rb +2 -2
  65. data/lib/inspec/plugin/v1/plugin_types/cli.rb +1 -5
  66. data/lib/inspec/plugin/v1/plugin_types/fetcher.rb +2 -5
  67. data/lib/inspec/plugin/v1/plugin_types/resource.rb +4 -6
  68. data/lib/inspec/plugin/v1/plugin_types/secret.rb +1 -5
  69. data/lib/inspec/plugin/v1/plugin_types/source_reader.rb +1 -5
  70. data/lib/inspec/plugin/v1/plugins.rb +15 -19
  71. data/lib/inspec/plugin/v1/registry.rb +0 -4
  72. data/lib/inspec/plugin/v2.rb +8 -8
  73. data/lib/inspec/plugin/v2/activator.rb +1 -1
  74. data/lib/inspec/plugin/v2/config_file.rb +6 -6
  75. data/lib/inspec/plugin/v2/filter.rb +13 -13
  76. data/lib/inspec/plugin/v2/installer.rb +36 -24
  77. data/lib/inspec/plugin/v2/loader.rb +28 -28
  78. data/lib/inspec/plugin/v2/plugin_base.rb +15 -2
  79. data/lib/inspec/plugin/v2/plugin_types/cli.rb +5 -5
  80. data/lib/inspec/plugin/v2/plugin_types/input.rb +34 -0
  81. data/lib/inspec/plugin/v2/plugin_types/mock.rb +1 -1
  82. data/lib/inspec/plugin/v2/registry.rb +7 -7
  83. data/lib/inspec/polyfill.rb +0 -3
  84. data/lib/inspec/profile.rb +55 -63
  85. data/lib/inspec/profile_context.rb +27 -30
  86. data/lib/inspec/profile_vendor.rb +6 -9
  87. data/lib/inspec/reporters.rb +24 -24
  88. data/lib/inspec/reporters/automate.rb +17 -19
  89. data/lib/inspec/reporters/base.rb +1 -1
  90. data/lib/inspec/reporters/cli.rb +88 -91
  91. data/lib/inspec/reporters/json.rb +2 -4
  92. data/lib/inspec/reporters/json_automate.rb +1 -3
  93. data/lib/inspec/reporters/json_min.rb +1 -3
  94. data/lib/inspec/reporters/junit.rb +26 -28
  95. data/lib/inspec/reporters/yaml.rb +1 -3
  96. data/lib/inspec/require_loader.rb +0 -4
  97. data/lib/inspec/resource.rb +4 -125
  98. data/lib/inspec/resources.rb +121 -0
  99. data/lib/{resources → inspec/resources}/aide_conf.rb +24 -25
  100. data/lib/{resources → inspec/resources}/apache.rb +13 -14
  101. data/lib/{resources → inspec/resources}/apache_conf.rb +16 -17
  102. data/lib/{resources → inspec/resources}/apt.rb +17 -17
  103. data/lib/{resources → inspec/resources}/audit_policy.rb +7 -6
  104. data/lib/{resources → inspec/resources}/auditd.rb +62 -64
  105. data/lib/{resources → inspec/resources}/auditd_conf.rb +7 -8
  106. data/lib/{resources → inspec/resources}/bash.rb +6 -8
  107. data/lib/{resources → inspec/resources}/bond.rb +15 -14
  108. data/lib/{resources → inspec/resources}/bridge.rb +8 -8
  109. data/lib/{resources → inspec/resources}/chocolatey_package.rb +10 -8
  110. data/lib/{resources → inspec/resources}/command.rb +11 -10
  111. data/lib/{resources → inspec/resources}/cpan.rb +12 -12
  112. data/lib/{resources → inspec/resources}/cran.rb +9 -9
  113. data/lib/{resources → inspec/resources}/crontab.rb +47 -48
  114. data/lib/{resources → inspec/resources}/csv.rb +5 -5
  115. data/lib/{resources → inspec/resources}/dh_params.rb +5 -7
  116. data/lib/{resources → inspec/resources}/directory.rb +5 -7
  117. data/lib/{resources → inspec/resources}/docker.rb +63 -63
  118. data/lib/{resources → inspec/resources}/docker_container.rb +6 -6
  119. data/lib/{resources → inspec/resources}/docker_image.rb +9 -9
  120. data/lib/{resources → inspec/resources}/docker_object.rb +8 -13
  121. data/lib/{resources → inspec/resources}/docker_plugin.rb +6 -6
  122. data/lib/{resources → inspec/resources}/docker_service.rb +7 -7
  123. data/lib/{resources → inspec/resources}/elasticsearch.rb +40 -42
  124. data/lib/{resources → inspec/resources}/etc_fstab.rb +23 -24
  125. data/lib/{resources → inspec/resources}/etc_group.rb +26 -27
  126. data/lib/{resources → inspec/resources}/etc_hosts.rb +11 -13
  127. data/lib/{resources → inspec/resources}/etc_hosts_allow_deny.rb +25 -27
  128. data/lib/{resources → inspec/resources}/file.rb +80 -79
  129. data/lib/{resources → inspec/resources}/filesystem.rb +20 -15
  130. data/lib/{resources → inspec/resources}/firewalld.rb +26 -26
  131. data/lib/{resources → inspec/resources}/gem.rb +12 -12
  132. data/lib/{resources → inspec/resources}/groups.rb +28 -27
  133. data/lib/{resources → inspec/resources}/grub_conf.rb +46 -48
  134. data/lib/{resources → inspec/resources}/host.rb +31 -29
  135. data/lib/{resources → inspec/resources}/http.rb +24 -24
  136. data/lib/{resources → inspec/resources}/iis_app.rb +6 -7
  137. data/lib/{resources → inspec/resources}/iis_app_pool.rb +21 -19
  138. data/lib/{resources → inspec/resources}/iis_site.rb +17 -15
  139. data/lib/{resources → inspec/resources}/inetd_conf.rb +9 -10
  140. data/lib/{resources → inspec/resources}/ini.rb +7 -8
  141. data/lib/{resources → inspec/resources}/interface.rb +30 -30
  142. data/lib/{resources → inspec/resources}/iptables.rb +8 -8
  143. data/lib/{resources → inspec/resources}/json.rb +8 -10
  144. data/lib/{resources → inspec/resources}/kernel_module.rb +15 -15
  145. data/lib/{resources → inspec/resources}/kernel_parameter.rb +8 -8
  146. data/lib/{resources → inspec/resources}/key_rsa.rb +8 -10
  147. data/lib/{resources → inspec/resources}/ksh.rb +6 -8
  148. data/lib/{resources → inspec/resources}/limits_conf.rb +8 -9
  149. data/lib/{resources/login_def.rb → inspec/resources/login_defs.rb} +9 -10
  150. data/lib/{resources → inspec/resources}/mount.rb +6 -8
  151. data/lib/{resources → inspec/resources}/mssql_session.rb +16 -18
  152. data/lib/inspec/resources/mysql.rb +81 -0
  153. data/lib/{resources → inspec/resources}/mysql_conf.rb +13 -14
  154. data/lib/{resources → inspec/resources}/mysql_session.rb +16 -16
  155. data/lib/{resources → inspec/resources}/nginx.rb +16 -17
  156. data/lib/{resources → inspec/resources}/nginx_conf.rb +26 -27
  157. data/lib/{resources → inspec/resources}/npm.rb +9 -10
  158. data/lib/{resources → inspec/resources}/ntp_conf.rb +9 -10
  159. data/lib/{resources → inspec/resources}/oneget.rb +8 -8
  160. data/lib/{resources → inspec/resources}/oracledb_session.rb +33 -34
  161. data/lib/{resources → inspec/resources}/os.rb +6 -8
  162. data/lib/{resources → inspec/resources}/os_env.rb +11 -12
  163. data/lib/{resources → inspec/resources}/package.rb +66 -65
  164. data/lib/{resources → inspec/resources}/packages.rb +13 -13
  165. data/lib/{resources → inspec/resources}/parse_config.rb +8 -8
  166. data/lib/{resources → inspec/resources}/passwd.rb +18 -19
  167. data/lib/{resources → inspec/resources}/pip.rb +19 -19
  168. data/lib/{resources → inspec/resources}/platform.rb +9 -11
  169. data/lib/{resources → inspec/resources}/port.rb +134 -136
  170. data/lib/{resources → inspec/resources}/postgres.rb +40 -32
  171. data/lib/{resources → inspec/resources}/postgres_conf.rb +17 -17
  172. data/lib/{resources → inspec/resources}/postgres_hba_conf.rb +21 -23
  173. data/lib/{resources → inspec/resources}/postgres_ident_conf.rb +12 -14
  174. data/lib/{resources → inspec/resources}/postgres_session.rb +8 -9
  175. data/lib/{resources → inspec/resources}/powershell.rb +17 -13
  176. data/lib/{resources → inspec/resources}/processes.rb +29 -29
  177. data/lib/{resources/rabbitmq_conf.rb → inspec/resources/rabbitmq_config.rb} +10 -11
  178. data/lib/{resources → inspec/resources}/registry_key.rb +14 -14
  179. data/lib/inspec/resources/script.rb +1 -0
  180. data/lib/{resources → inspec/resources}/security_identifier.rb +11 -10
  181. data/lib/{resources → inspec/resources}/security_policy.rb +59 -58
  182. data/lib/{resources → inspec/resources}/service.rb +74 -75
  183. data/lib/{resources → inspec/resources}/shadow.rb +44 -45
  184. data/lib/{resources/ssh_conf.rb → inspec/resources/ssh_config.rb} +16 -17
  185. data/lib/{resources → inspec/resources}/ssl.rb +28 -29
  186. data/lib/inspec/resources/sys_info.rb +30 -0
  187. data/lib/{resources → inspec/resources}/toml.rb +5 -7
  188. data/lib/{resources → inspec/resources}/users.rb +65 -65
  189. data/lib/{resources → inspec/resources}/vbscript.rb +8 -9
  190. data/lib/{resources → inspec/resources}/virtualization.rb +60 -62
  191. data/lib/{resources → inspec/resources}/windows_feature.rb +9 -9
  192. data/lib/{resources → inspec/resources}/windows_hotfix.rb +5 -5
  193. data/lib/{resources → inspec/resources}/windows_task.rb +16 -15
  194. data/lib/{resources → inspec/resources}/wmi.rb +7 -8
  195. data/lib/{resources → inspec/resources}/x509_certificate.rb +9 -11
  196. data/lib/{resources/xinetd.rb → inspec/resources/xinetd_conf.rb} +27 -29
  197. data/lib/{resources → inspec/resources}/xml.rb +7 -7
  198. data/lib/{resources → inspec/resources}/yaml.rb +5 -6
  199. data/lib/{resources → inspec/resources}/yum.rb +10 -10
  200. data/lib/{resources → inspec/resources}/zfs_dataset.rb +6 -6
  201. data/lib/{resources → inspec/resources}/zfs_pool.rb +4 -4
  202. data/lib/inspec/rspec_extensions.rb +24 -8
  203. data/lib/inspec/rule.rb +14 -15
  204. data/lib/inspec/runner.rb +28 -28
  205. data/lib/inspec/runner_mock.rb +1 -5
  206. data/lib/inspec/runner_rspec.rb +18 -20
  207. data/lib/inspec/runtime_profile.rb +2 -5
  208. data/lib/inspec/schema.rb +142 -143
  209. data/lib/inspec/secrets.rb +3 -7
  210. data/lib/inspec/secrets/yaml.rb +3 -5
  211. data/lib/inspec/shell.rb +11 -15
  212. data/lib/inspec/shell_detector.rb +6 -7
  213. data/lib/inspec/source_reader.rb +4 -8
  214. data/lib/inspec/ui.rb +33 -39
  215. data/lib/inspec/ui_table_helper.rb +12 -0
  216. data/lib/{utils → inspec/utils}/command_wrapper.rb +4 -8
  217. data/lib/{utils → inspec/utils}/convert.rb +0 -4
  218. data/lib/{utils → inspec/utils}/database_helpers.rb +4 -8
  219. data/lib/inspec/utils/deprecation.rb +6 -0
  220. data/lib/{utils → inspec/utils}/deprecation/config_file.rb +19 -19
  221. data/lib/{utils → inspec/utils}/deprecation/deprecator.rb +12 -12
  222. data/lib/{utils → inspec/utils}/deprecation/errors.rb +1 -1
  223. data/lib/{utils → inspec/utils}/deprecation/global_method.rb +2 -2
  224. data/lib/{utils → inspec/utils}/enumerable_delegation.rb +0 -2
  225. data/lib/{utils → inspec/utils}/erlang_parser.rb +61 -65
  226. data/lib/{utils → inspec/utils}/file_reader.rb +1 -2
  227. data/lib/{utils → inspec/utils}/filter.rb +30 -33
  228. data/lib/{utils → inspec/utils}/filter_array.rb +0 -2
  229. data/lib/{utils → inspec/utils}/find_files.rb +9 -12
  230. data/lib/{utils → inspec/utils}/hash.rb +1 -5
  231. data/lib/inspec/utils/json_log.rb +15 -0
  232. data/lib/inspec/utils/latest_version.rb +13 -0
  233. data/lib/{utils → inspec/utils}/modulator.rb +0 -3
  234. data/lib/{utils → inspec/utils}/nginx_parser.rb +31 -35
  235. data/lib/{utils → inspec/utils}/object_traversal.rb +0 -3
  236. data/lib/{utils → inspec/utils}/parser.rb +45 -45
  237. data/lib/{utils → inspec/utils}/pkey_reader.rb +4 -2
  238. data/lib/{utils → inspec/utils}/simpleconfig.rb +8 -10
  239. data/lib/{utils → inspec/utils}/spdx.rb +1 -4
  240. data/lib/{utils → inspec/utils}/spdx.txt +0 -0
  241. data/lib/inspec/utils/telemetry.rb +3 -3
  242. data/lib/inspec/utils/telemetry/collector.rb +30 -9
  243. data/lib/inspec/utils/telemetry/data_series.rb +3 -1
  244. data/lib/inspec/utils/telemetry/global_methods.rb +1 -1
  245. data/lib/inspec/version.rb +1 -1
  246. data/lib/matchers/matchers.rb +22 -25
  247. data/lib/plugins/inspec-artifact/lib/inspec-artifact.rb +1 -1
  248. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +52 -45
  249. data/lib/plugins/inspec-artifact/lib/inspec-artifact/cli.rb +18 -16
  250. data/lib/plugins/inspec-artifact/test/functional/inspec_artifact_test.rb +12 -11
  251. data/lib/plugins/inspec-compliance/lib/inspec-compliance.rb +1 -1
  252. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +73 -73
  253. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api/login.rb +66 -62
  254. data/lib/plugins/inspec-compliance/lib/inspec-compliance/cli.rb +59 -57
  255. data/lib/plugins/inspec-compliance/lib/inspec-compliance/configuration.rb +11 -11
  256. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +20 -22
  257. data/lib/plugins/inspec-compliance/lib/inspec-compliance/support.rb +2 -4
  258. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +30 -27
  259. data/lib/plugins/inspec-compliance/test/functional/inspec_compliance_test.rb +12 -14
  260. data/lib/plugins/inspec-compliance/test/integration/default/cli.rb +39 -41
  261. data/lib/plugins/inspec-compliance/test/unit/api/login_test.rb +64 -64
  262. data/lib/plugins/inspec-compliance/test/unit/api_test.rb +157 -156
  263. data/lib/plugins/inspec-compliance/test/unit/target_test.rb +85 -85
  264. data/lib/plugins/inspec-habitat/Berksfile +2 -2
  265. data/lib/plugins/inspec-habitat/lib/inspec-habitat.rb +1 -1
  266. data/lib/plugins/inspec-habitat/lib/inspec-habitat/cli.rb +15 -13
  267. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +64 -63
  268. data/lib/plugins/inspec-habitat/templates/habitat/hooks/run.erb +3 -3
  269. data/lib/plugins/inspec-habitat/templates/habitat/plan.sh.erb +11 -11
  270. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/Berksfile +1 -1
  271. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/metadata.rb +8 -8
  272. data/lib/plugins/inspec-habitat/test/cookbooks/inspec_habitat_fixture/recipes/default.rb +17 -17
  273. data/lib/plugins/inspec-habitat/test/functional/inspec_habitat_test.rb +9 -8
  274. data/lib/plugins/inspec-habitat/test/integration/default/inspec_habitat/controls/inspec_habitat.rb +14 -14
  275. data/lib/plugins/inspec-habitat/test/support/example_profile/controls/example.rb +4 -4
  276. data/lib/plugins/inspec-habitat/test/unit/profile_test.rb +42 -41
  277. data/lib/plugins/inspec-init/lib/inspec-init.rb +1 -1
  278. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +6 -8
  279. data/lib/plugins/inspec-init/lib/inspec-init/cli_plugin.rb +72 -74
  280. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +9 -11
  281. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +4 -4
  282. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/Gemfile +0 -1
  283. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/inspec-plugin-template.gemspec +0 -2
  284. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template.rb +0 -2
  285. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/cli_command.rb +0 -2
  286. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/plugin.rb +0 -2
  287. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/lib/inspec-plugin-template/version.rb +0 -2
  288. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/functional/inspec_plugin_template_test.rb +5 -5
  289. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/helper.rb +1 -3
  290. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/cli_args_test.rb +2 -2
  291. data/lib/plugins/inspec-init/templates/plugins/inspec-plugin-template/test/unit/plugin_def_test.rb +2 -2
  292. data/lib/plugins/inspec-init/templates/profiles/aws/controls/example.rb +10 -11
  293. data/lib/plugins/inspec-init/templates/profiles/azure/controls/example.rb +4 -5
  294. data/lib/plugins/inspec-init/templates/profiles/gcp/controls/example.rb +10 -11
  295. data/lib/plugins/inspec-init/templates/profiles/os/controls/example.rb +6 -7
  296. data/lib/plugins/inspec-init/test/functional/inspec_init_plugin_test.rb +51 -50
  297. data/lib/plugins/inspec-init/test/functional/inspec_init_profile_test.rb +35 -33
  298. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli.rb +1 -2
  299. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +72 -70
  300. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/plugin.rb +1 -1
  301. data/lib/plugins/inspec-plugin-manager-cli/test/fixtures/plugins/wrong-name/lib/wrong-name.rb +1 -1
  302. data/lib/plugins/inspec-plugin-manager-cli/test/functional/inspec-plugin_test.rb +281 -271
  303. data/lib/plugins/inspec-plugin-manager-cli/test/unit/cli_args_test.rb +41 -41
  304. data/lib/plugins/inspec-plugin-manager-cli/test/unit/plugin_def_test.rb +25 -6
  305. data/lib/plugins/shared/core_plugin_test_helper.rb +43 -38
  306. data/lib/resource_support/aws.rb +67 -67
  307. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +4 -1
  308. data/lib/resource_support/aws/aws_resource_mixin.rb +4 -3
  309. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +4 -1
  310. data/lib/resources/aws/aws_billing_report.rb +15 -8
  311. data/lib/resources/aws/aws_billing_reports.rb +10 -7
  312. data/lib/resources/aws/aws_cloudtrail_trail.rb +9 -5
  313. data/lib/resources/aws/aws_cloudtrail_trails.rb +9 -5
  314. data/lib/resources/aws/aws_cloudwatch_alarm.rb +9 -5
  315. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +12 -8
  316. data/lib/resources/aws/aws_config_delivery_channel.rb +13 -9
  317. data/lib/resources/aws/aws_config_recorder.rb +10 -6
  318. data/lib/resources/aws/aws_ebs_volume.rb +12 -8
  319. data/lib/resources/aws/aws_ebs_volumes.rb +9 -5
  320. data/lib/resources/aws/aws_ec2_instance.rb +14 -11
  321. data/lib/resources/aws/aws_ec2_instances.rb +9 -5
  322. data/lib/resources/aws/aws_ecs_cluster.rb +11 -7
  323. data/lib/resources/aws/aws_eks_cluster.rb +13 -9
  324. data/lib/resources/aws/aws_elb.rb +9 -5
  325. data/lib/resources/aws/aws_elbs.rb +9 -5
  326. data/lib/resources/aws/aws_flow_log.rb +17 -13
  327. data/lib/resources/aws/aws_iam_access_key.rb +15 -11
  328. data/lib/resources/aws/aws_iam_access_keys.rb +19 -15
  329. data/lib/resources/aws/aws_iam_group.rb +9 -5
  330. data/lib/resources/aws/aws_iam_groups.rb +9 -5
  331. data/lib/resources/aws/aws_iam_password_policy.rb +13 -10
  332. data/lib/resources/aws/aws_iam_policies.rb +9 -5
  333. data/lib/resources/aws/aws_iam_policy.rb +16 -12
  334. data/lib/resources/aws/aws_iam_role.rb +9 -5
  335. data/lib/resources/aws/aws_iam_root_user.rb +12 -8
  336. data/lib/resources/aws/aws_iam_user.rb +12 -12
  337. data/lib/resources/aws/aws_iam_users.rb +10 -10
  338. data/lib/resources/aws/aws_kms_key.rb +12 -8
  339. data/lib/resources/aws/aws_kms_keys.rb +9 -5
  340. data/lib/resources/aws/aws_rds_instance.rb +11 -8
  341. data/lib/resources/aws/aws_route_table.rb +11 -7
  342. data/lib/resources/aws/aws_route_tables.rb +10 -6
  343. data/lib/resources/aws/aws_s3_bucket.rb +14 -11
  344. data/lib/resources/aws/aws_s3_bucket_object.rb +12 -9
  345. data/lib/resources/aws/aws_s3_buckets.rb +9 -7
  346. data/lib/resources/aws/aws_security_group.rb +16 -12
  347. data/lib/resources/aws/aws_security_groups.rb +12 -8
  348. data/lib/resources/aws/aws_sns_subscription.rb +15 -11
  349. data/lib/resources/aws/aws_sns_topic.rb +10 -6
  350. data/lib/resources/aws/aws_sns_topics.rb +9 -5
  351. data/lib/resources/aws/aws_sqs_queue.rb +18 -14
  352. data/lib/resources/aws/aws_subnet.rb +11 -7
  353. data/lib/resources/aws/aws_subnets.rb +9 -5
  354. data/lib/resources/aws/aws_vpc.rb +10 -6
  355. data/lib/resources/aws/aws_vpcs.rb +9 -5
  356. data/lib/resources/azure/azure_backend.rb +20 -18
  357. data/lib/resources/azure/azure_generic_resource.rb +13 -15
  358. data/lib/resources/azure/azure_resource_group.rb +17 -19
  359. data/lib/resources/azure/azure_virtual_machine.rb +6 -8
  360. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +6 -8
  361. data/lib/source_readers/flat.rb +6 -10
  362. data/lib/source_readers/inspec.rb +8 -12
  363. metadata +141 -142
  364. data/lib/resources/mysql.rb +0 -82
  365. data/lib/resources/sys_info.rb +0 -28
  366. data/lib/utils/deprecation.rb +0 -6
  367. data/lib/utils/json_log.rb +0 -18
  368. data/lib/utils/latest_version.rb +0 -22
@@ -1,13 +1,12 @@
1
- # encoding: utf-8
2
-
3
- require 'pathname'
4
- require 'hashie/mash'
1
+ require "pathname"
2
+ require "hashie/mash"
3
+ require "inspec/resources/command"
5
4
 
6
5
  module Inspec::Resources
7
6
  class Nginx < Inspec.resource(1)
8
- name 'nginx'
9
- supports platform: 'unix'
10
- desc 'Use the nginx InSpec audit resource to test information about your NGINX instance.'
7
+ name "nginx"
8
+ supports platform: "unix"
9
+ desc "Use the nginx InSpec audit resource to test information about your NGINX instance."
11
10
  example <<~EXAMPLE
12
11
  describe nginx do
13
12
  its('conf_path') { should cmp '/etc/nginx/nginx.conf' }
@@ -21,13 +20,13 @@ module Inspec::Resources
21
20
  EXAMPLE
22
21
  attr_reader :params, :bin_dir
23
22
 
24
- def initialize(nginx_path = '/usr/sbin/nginx')
25
- return skip_resource 'The `nginx` resource is not yet available on your OS.' if inspec.os.windows?
26
- return skip_resource 'The `nginx` binary not found in the path provided.' unless inspec.command(nginx_path).exist?
23
+ def initialize(nginx_path = "/usr/sbin/nginx")
24
+ return skip_resource "The `nginx` resource is not yet available on your OS." if inspec.os.windows?
25
+ return skip_resource "The `nginx` binary not found in the path provided." unless inspec.command(nginx_path).exist?
27
26
 
28
27
  cmd = inspec.command("#{nginx_path} -V 2>&1")
29
- if !cmd.exit_status.zero?
30
- return skip_resource 'Error using the command nginx -V'
28
+ if cmd.exit_status != 0
29
+ return skip_resource "Error using the command nginx -V"
31
30
  end
32
31
  @data = cmd.stdout
33
32
  @params = {}
@@ -42,17 +41,17 @@ module Inspec::Resources
42
41
 
43
42
  def openssl_version
44
43
  result = @data.scan(/built with OpenSSL\s(\S+)\s(\d+\s\S+\s\d{4})/).flatten
45
- Hashie::Mash.new({ 'version' => result[0], 'date' => result[1] })
44
+ Hashie::Mash.new({ "version" => result[0], "date" => result[1] })
46
45
  end
47
46
 
48
47
  def compiler_info
49
48
  result = @data.scan(/built by (\S+)\s(\S+)\s(\S+)/).flatten
50
- Hashie::Mash.new({ 'compiler' => result[0], 'version' => result[1], 'date' => result[2] })
49
+ Hashie::Mash.new({ "compiler" => result[0], "version" => result[1], "date" => result[2] })
51
50
  end
52
51
 
53
52
  def support_info
54
53
  support_info = @data.scan(/(.*\S+) support enabled/).flatten
55
- support_info.empty? ? nil : support_info.join(' ')
54
+ support_info.empty? ? nil : support_info.join(" ")
56
55
  end
57
56
 
58
57
  def modules
@@ -60,7 +59,7 @@ module Inspec::Resources
60
59
  end
61
60
 
62
61
  def to_s
63
- 'Nginx Environment'
62
+ "Nginx Environment"
64
63
  end
65
64
 
66
65
  private
@@ -73,7 +72,7 @@ module Inspec::Resources
73
72
 
74
73
  def parse_config
75
74
  @params[:prefix] = @data.scan(/--prefix=(\S+)\s/).flatten.first
76
- @params[:service] = 'nginx'
75
+ @params[:service] = "nginx"
77
76
  @params[:version] = @data.scan(%r{nginx version: nginx\/(\S+)\s}).flatten.first
78
77
  end
79
78
 
@@ -1,9 +1,7 @@
1
- # encoding: utf-8
2
-
3
- require 'utils/nginx_parser'
4
- require 'utils/find_files'
5
- require 'utils/file_reader'
6
- require 'forwardable'
1
+ require "inspec/utils/nginx_parser"
2
+ require "inspec/utils/find_files"
3
+ require "inspec/utils/file_reader"
4
+ require "forwardable"
7
5
 
8
6
  # STABILITY: Experimental
9
7
  # This resouce needs a proper interace to the underlying data, which is currently missing.
@@ -14,11 +12,11 @@ require 'forwardable'
14
12
  # when running remotely.
15
13
  module Inspec::Resources
16
14
  class NginxConf < Inspec.resource(1)
17
- name 'nginx_conf'
18
- supports platform: 'unix'
19
- desc 'Use the nginx_conf InSpec resource to test configuration data '\
20
- 'for the NginX web server located in /etc/nginx/nginx.conf on '\
21
- 'Linux and UNIX platforms.'
15
+ name "nginx_conf"
16
+ supports platform: "unix"
17
+ desc "Use the nginx_conf InSpec resource to test configuration data "\
18
+ "for the NginX web server located in /etc/nginx/nginx.conf on "\
19
+ "Linux and UNIX platforms."
22
20
  example <<~EXAMPLE
23
21
  describe nginx_conf.params ...
24
22
  describe nginx_conf('/path/to/my/nginx.conf').params ...
@@ -32,9 +30,9 @@ module Inspec::Resources
32
30
  attr_reader :contents
33
31
 
34
32
  def initialize(conf_path = nil)
35
- @conf_path = conf_path || '/etc/nginx/nginx.conf'
33
+ @conf_path = conf_path || "/etc/nginx/nginx.conf"
36
34
  @contents = {}
37
- return skip_resource 'The `nginx_conf` resource is currently not supported on Windows.' if inspec.os.windows?
35
+ return skip_resource "The `nginx_conf` resource is currently not supported on Windows." if inspec.os.windows?
38
36
  read_content(@conf_path)
39
37
  end
40
38
 
@@ -46,7 +44,7 @@ module Inspec::Resources
46
44
  end
47
45
 
48
46
  def http
49
- NginxConfHttp.new(params['http'], self)
47
+ NginxConfHttp.new(params["http"], self)
50
48
  end
51
49
 
52
50
  def_delegators :http, :servers, :locations
@@ -91,8 +89,8 @@ module Inspec::Resources
91
89
 
92
90
  # Any call to `include` gets its data read, parsed, and merged back
93
91
  # into the current data structure
94
- if data.key?('include')
95
- data.delete('include').flatten
92
+ if data.key?("include")
93
+ data.delete("include").flatten
96
94
  .map { |x| File.expand_path(x, rel_path) }
97
95
  .map { |x| find_files(x) }.flatten
98
96
  .map { |path| parse_nginx(path) }
@@ -143,7 +141,7 @@ module Inspec::Resources
143
141
  end
144
142
 
145
143
  def to_s
146
- @parent.to_s + ', http entries'
144
+ @parent.to_s + ", http entries"
147
145
  end
148
146
  alias inspect to_s
149
147
  end
@@ -156,7 +154,7 @@ module Inspec::Resources
156
154
  end
157
155
 
158
156
  filter = FilterTable.create
159
- filter.register_column(:servers, field: 'server')
157
+ filter.register_column(:servers, field: "server")
160
158
  .install_filter_methods_on_resource(self, :server_table)
161
159
 
162
160
  def locations
@@ -164,18 +162,18 @@ module Inspec::Resources
164
162
  end
165
163
 
166
164
  def to_s
167
- @parent.to_s + ', http entry'
165
+ @parent.to_s + ", http entry"
168
166
  end
169
167
  alias inspect to_s
170
168
 
171
169
  private
172
170
 
173
171
  def server_table
174
- @server_table ||= (params['server'] || []).map { |x| { 'server' => NginxConfServer.new(x, self) } }
172
+ @server_table ||= (params["server"] || []).map { |x| { "server" => NginxConfServer.new(x, self) } }
175
173
  end
176
174
  end
177
175
 
178
- class NginxConfServer
176
+ class NginxConfServer # TODO: rename NginxServer
179
177
  attr_reader :params, :parent
180
178
  def initialize(params, parent)
181
179
  @parent = parent
@@ -183,15 +181,15 @@ module Inspec::Resources
183
181
  end
184
182
 
185
183
  filter = FilterTable.create
186
- filter.register_column(:locations, field: 'location')
184
+ filter.register_column(:locations, field: "location")
187
185
  .install_filter_methods_on_resource(self, :location_table)
188
186
 
189
187
  def to_s
190
- server = ''
191
- name = Array(params['server_name']).flatten.first
188
+ server = ""
189
+ name = Array(params["server_name"]).flatten.first
192
190
  unless name.nil?
193
191
  server += name
194
- listen = Array(params['listen']).flatten.first
192
+ listen = Array(params["listen"]).flatten.first
195
193
  server += ":#{listen}" unless listen.nil?
196
194
  end
197
195
 
@@ -203,7 +201,7 @@ module Inspec::Resources
203
201
  private
204
202
 
205
203
  def location_table
206
- @location_table ||= (params['location'] || []).map { |x| { 'location' => NginxConfLocation.new(x, self) } }
204
+ @location_table ||= (params["location"] || []).map { |x| { "location" => NginxConfLocation.new(x, self) } }
207
205
  end
208
206
  end
209
207
 
@@ -215,8 +213,9 @@ module Inspec::Resources
215
213
  end
216
214
 
217
215
  def to_s
218
- location = Array(params['_']).join(' ')
216
+ location = Array(params["_"]).join(" ")
219
217
  # go three levels up: 1. to the server entry, 2. http entry and 3. to the root nginx conf
218
+ # TODO: fix parent.parent.parent
220
219
  @parent.parent.parent.to_s + ", location #{location.inspect}"
221
220
  end
222
221
  alias inspect to_s
@@ -1,13 +1,12 @@
1
- # encoding: utf-8
2
-
3
- require 'shellwords'
1
+ require "inspec/resources/command"
2
+ require "shellwords"
4
3
 
5
4
  module Inspec::Resources
6
5
  class NpmPackage < Inspec.resource(1)
7
- name 'npm'
8
- supports platform: 'unix'
9
- supports platform: 'windows'
10
- desc 'Use the npm InSpec audit resource to test if a global npm package is installed. npm is the the package manager for Nodejs packages, such as bower and StatsD.'
6
+ name "npm"
7
+ supports platform: "unix"
8
+ supports platform: "windows"
9
+ desc "Use the npm InSpec audit resource to test if a global npm package is installed. npm is the the package manager for Nodejs packages, such as bower and StatsD."
11
10
  example <<~EXAMPLE
12
11
  describe npm('bower') do
13
12
  it { should be_installed }
@@ -30,19 +29,19 @@ module Inspec::Resources
30
29
  if @location
31
30
  npm = "cd #{Shellwords.escape @location} && npm"
32
31
  else
33
- npm = 'npm -g'
32
+ npm = "npm -g"
34
33
  end
35
34
 
36
35
  cmd = inspec.command("#{npm} ls --json #{@package_name}")
37
36
  @info = {
38
37
  name: @package_name,
39
- type: 'npm',
38
+ type: "npm",
40
39
  installed: cmd.exit_status == 0,
41
40
  }
42
41
  return @info unless @info[:installed]
43
42
 
44
43
  pkgs = JSON.parse(cmd.stdout)
45
- @info[:version] = pkgs['dependencies'][@package_name]['version']
44
+ @info[:version] = pkgs["dependencies"][@package_name]["version"]
46
45
  @info
47
46
  end
48
47
 
@@ -1,14 +1,13 @@
1
- # encoding: utf-8
2
1
  # copyright: 2015, Vulcano Security GmbH
3
2
 
4
- require 'utils/simpleconfig'
5
- require 'utils/file_reader'
3
+ require "inspec/utils/simpleconfig"
4
+ require "inspec/utils/file_reader"
6
5
 
7
6
  module Inspec::Resources
8
7
  class NtpConf < Inspec.resource(1)
9
- name 'ntp_conf'
10
- supports platform: 'unix'
11
- desc 'Use the ntp_conf InSpec audit resource to test the synchronization settings defined in the ntp.conf file. This file is typically located at /etc/ntp.conf.'
8
+ name "ntp_conf"
9
+ supports platform: "unix"
10
+ desc "Use the ntp_conf InSpec audit resource to test the synchronization settings defined in the ntp.conf file. This file is typically located at /etc/ntp.conf."
12
11
  example <<~EXAMPLE
13
12
  describe ntp_conf do
14
13
  its('server') { should_not eq nil }
@@ -19,19 +18,19 @@ module Inspec::Resources
19
18
  include FileReader
20
19
 
21
20
  def initialize(path = nil)
22
- @conf_path = path || '/etc/ntp.conf'
21
+ @conf_path = path || "/etc/ntp.conf"
23
22
  @content = read_file_content(@conf_path)
24
23
  end
25
24
 
26
25
  def method_missing(name)
27
26
  param = read_params[name.to_s]
28
27
  # extract first value if we have only one value in array
29
- return param[0] if param.is_a?(Array) and param.length == 1
28
+ return param[0] if param.is_a?(Array) && (param.length == 1)
30
29
  param
31
30
  end
32
31
 
33
32
  def to_s
34
- 'ntp.conf'
33
+ "ntp.conf"
35
34
  end
36
35
 
37
36
  private
@@ -43,7 +42,7 @@ module Inspec::Resources
43
42
  conf = SimpleConfig.new(
44
43
  @content,
45
44
  assignment_regex: /^\s*(\S+)\s+(.*)\s*$/,
46
- multiple_values: true,
45
+ multiple_values: true
47
46
  )
48
47
  @params = conf.params
49
48
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ require "inspec/resources/command"
2
2
 
3
3
  # This resource talks with OneGet (https://github.com/OneGet/oneget)
4
4
  # Its part of Windows Management Framework 5.0 and part of Windows 10
@@ -9,9 +9,9 @@
9
9
  # end
10
10
  module Inspec::Resources
11
11
  class OneGetPackage < Inspec.resource(1)
12
- name 'oneget'
13
- supports platform: 'windows'
14
- desc 'Use the oneget InSpec audit resource to test if the named package and/or package version is installed on the system. This resource uses OneGet, which is part of the Windows Management Framework 5.0 and Windows 10. This resource uses the Get-Package cmdlet to return all of the package names in the OneGet repository.'
12
+ name "oneget"
13
+ supports platform: "windows"
14
+ desc "Use the oneget InSpec audit resource to test if the named package and/or package version is installed on the system. This resource uses OneGet, which is part of the Windows Management Framework 5.0 and Windows 10. This resource uses the Get-Package cmdlet to return all of the package names in the OneGet repository."
15
15
  example <<~EXAMPLE
16
16
  describe oneget('zoomit') do
17
17
  it { should be_installed }
@@ -23,14 +23,14 @@ module Inspec::Resources
23
23
  @package_name = package_name
24
24
 
25
25
  # verify that this resource is only supported on Windows
26
- return skip_resource 'The `oneget` resource is not supported on your OS.' if !inspec.os.windows?
26
+ return skip_resource "The `oneget` resource is not supported on your OS." if !inspec.os.windows?
27
27
  end
28
28
 
29
29
  def info
30
30
  return @info if defined?(@info)
31
31
 
32
32
  @info = {}
33
- @info[:type] = 'oneget'
33
+ @info[:type] = "oneget"
34
34
  @info[:installed] = false
35
35
 
36
36
  cmd = inspec.command("Get-Package -Name '#{@package_name}' | ConvertTo-Json")
@@ -51,8 +51,8 @@ module Inspec::Resources
51
51
  return @info
52
52
  end
53
53
 
54
- @info[:name] = pkgs['Name'] if pkgs.key?('Name')
55
- @info[:version] = pkgs['Version'] if pkgs.key?('Version')
54
+ @info[:name] = pkgs["Name"] if pkgs.key?("Name")
55
+ @info[:version] = pkgs["Version"] if pkgs.key?("Version")
56
56
  @info
57
57
  end
58
58
 
@@ -1,20 +1,19 @@
1
- # encoding: utf-8
2
-
3
- require 'hashie/mash'
4
- require 'utils/database_helpers'
5
- require 'htmlentities'
6
- require 'rexml/document'
7
- require 'csv'
1
+ require "inspec/resources/command"
2
+ require "hashie/mash"
3
+ require "inspec/utils/database_helpers"
4
+ require "htmlentities"
5
+ require "rexml/document"
6
+ require "csv"
8
7
 
9
8
  module Inspec::Resources
10
9
  # STABILITY: Experimental
11
10
  # This resource needs further testing and refinement
12
11
  #
13
12
  class OracledbSession < Inspec.resource(1)
14
- name 'oracledb_session'
15
- supports platform: 'unix'
16
- supports platform: 'windows'
17
- desc 'Use the oracledb_session InSpec resource to test commands against an Oracle database'
13
+ name "oracledb_session"
14
+ supports platform: "unix"
15
+ supports platform: "windows"
16
+ desc "Use the oracledb_session InSpec resource to test commands against an Oracle database"
18
17
  example <<~EXAMPLE
19
18
  sql = oracledb_session(user: 'my_user', pass: 'password')
20
19
  describe sql.query(\"SELECT UPPER(VALUE) AS VALUE FROM V$PARAMETER WHERE UPPER(NAME)='AUDIT_SYS_OPERATIONS'\").row(0).column('value') do
@@ -28,11 +27,11 @@ module Inspec::Resources
28
27
  @user = opts[:user]
29
28
  @password = opts[:password] || opts[:pass]
30
29
  if opts[:pass]
31
- Inspec.deprecate(:oracledb_session_pass_option, 'The oracledb_session `pass` option is deprecated. Please use `password`.')
30
+ Inspec.deprecate(:oracledb_session_pass_option, "The oracledb_session `pass` option is deprecated. Please use `password`.")
32
31
  end
33
32
 
34
- @host = opts[:host] || 'localhost'
35
- @port = opts[:port] || '1521'
33
+ @host = opts[:host] || "localhost"
34
+ @port = opts[:port] || "1521"
36
35
  @service = opts[:service]
37
36
 
38
37
  # connection as sysdba stuff
@@ -41,21 +40,21 @@ module Inspec::Resources
41
40
  @db_role = opts[:as_db_role]
42
41
 
43
42
  # we prefer sqlci although it is way slower than sqlplus, but it understands csv properly
44
- @sqlcl_bin = 'sql' unless opts.key?(:sqlplus_bin) # don't use it if user specified sqlplus_bin option
45
- @sqlplus_bin = opts[:sqlplus_bin] || 'sqlplus'
43
+ @sqlcl_bin = "sql" unless opts.key?(:sqlplus_bin) # don't use it if user specified sqlplus_bin option
44
+ @sqlplus_bin = opts[:sqlplus_bin] || "sqlplus"
46
45
 
47
46
  return fail_resource "Can't run Oracle checks without authentication" if @su_user.nil? && (@user.nil? || @password.nil?)
48
- return fail_resource 'You must provide a service name for the session' if @service.nil?
47
+ return fail_resource "You must provide a service name for the session" if @service.nil?
49
48
  end
50
49
 
51
50
  def query(q)
52
51
  escaped_query = q.gsub(/\\/, '\\\\').gsub(/"/, '\\"')
53
52
  # escape tables with $
54
- escaped_query = escaped_query.gsub('$', '\\$')
53
+ escaped_query = escaped_query.gsub("$", '\\$')
55
54
 
56
55
  p = nil
57
56
  # use sqlplus if sqlcl is not available
58
- if @sqlcl_bin and inspec.command(@sqlcl_bin).exist?
57
+ if @sqlcl_bin && inspec.command(@sqlcl_bin).exist?
59
58
  bin = @sqlcl_bin
60
59
  opts = "set sqlformat csv\nSET FEEDBACK OFF"
61
60
  p = :parse_csv_result
@@ -66,7 +65,7 @@ module Inspec::Resources
66
65
  end
67
66
 
68
67
  query = verify_query(escaped_query)
69
- query += ';' unless query.end_with?(';')
68
+ query += ";" unless query.end_with?(";")
70
69
  if @db_role.nil?
71
70
  command = %{#{bin} "#{@user}"/"#{@password}"@#{@host}:#{@port}/#{@service} <<EOC\n#{opts}\n#{query}\nEXIT\nEOC}
72
71
  elsif @su_user.nil?
@@ -87,14 +86,14 @@ module Inspec::Resources
87
86
  end
88
87
 
89
88
  def to_s
90
- 'Oracle Session'
89
+ "Oracle Session"
91
90
  end
92
91
 
93
92
  private
94
93
 
95
94
  def verify_query(query)
96
95
  # ensure we have a ; at the end
97
- query + ';' if !query.strip.end_with?(';')
96
+ query + ";" if !query.strip.end_with?(";")
98
97
  query
99
98
  end
100
99
 
@@ -105,44 +104,44 @@ module Inspec::Resources
105
104
  # convert to hash
106
105
  headers = table.headers
107
106
 
108
- results = table.map { |row|
107
+ results = table.map do |row|
109
108
  res = {}
110
- headers.each { |header|
109
+ headers.each do |header|
111
110
  res[header.downcase] = row[header]
112
- }
111
+ end
113
112
  Hashie::Mash.new(res)
114
- }
113
+ end
115
114
  results
116
115
  end
117
116
 
118
117
  def parse_html_result(stdout) # rubocop:disable Metrics/AbcSize
119
118
  result = stdout
120
119
  # make oracle html valid html by removing the p tag, it does not include a closing tag
121
- result = result.gsub('<p>', '').gsub('</p>', '').gsub('<br>', '')
120
+ result = result.gsub("<p>", "").gsub("</p>", "").gsub("<br>", "")
122
121
  doc = REXML::Document.new result
123
- table = doc.elements['table']
122
+ table = doc.elements["table"]
124
123
  hash = []
125
124
  if !table.nil?
126
125
  rows = table.elements.to_a
127
- headers = rows[0].elements.to_a('th').map { |entry| entry.text.strip }
126
+ headers = rows[0].elements.to_a("th").map { |entry| entry.text.strip }
128
127
  rows.delete_at(0)
129
128
 
130
129
  # iterate over each row, first row is header
131
130
  hash = []
132
131
  if !rows.nil? && !rows.empty?
133
- hash = rows.map { |row|
132
+ hash = rows.map do |row|
134
133
  res = {}
135
- entries = row.elements.to_a('td')
134
+ entries = row.elements.to_a("td")
136
135
  # ignore if we have empty entries, oracle is adding th rows in between
137
136
  return nil if entries.empty?
138
- headers.each_with_index { |header, index|
137
+ headers.each_with_index do |header, index|
139
138
  # we need htmlentities since we do not have nokogiri
140
139
  coder = HTMLEntities.new
141
140
  val = coder.decode(entries[index].text).strip
142
141
  res[header.downcase] = val
143
- }
142
+ end
144
143
  Hashie::Mash.new(res)
145
- }.compact
144
+ end.compact
146
145
  end
147
146
  end
148
147
  hash