inspec-core 4.23.4 → 4.24.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +16 -33
  3. data/inspec-core.gemspec +8 -9
  4. data/lib/bundles/inspec-supermarket/api.rb +2 -2
  5. data/lib/bundles/inspec-supermarket/target.rb +1 -1
  6. data/lib/inspec/archive/tar.rb +1 -1
  7. data/lib/inspec/archive/zip.rb +3 -3
  8. data/lib/inspec/base_cli.rb +7 -1
  9. data/lib/inspec/cached_fetcher.rb +1 -1
  10. data/lib/inspec/cli.rb +5 -3
  11. data/lib/inspec/config.rb +5 -5
  12. data/lib/inspec/dependencies/cache.rb +1 -1
  13. data/lib/inspec/env_printer.rb +2 -2
  14. data/lib/inspec/fetcher/git.rb +3 -3
  15. data/lib/inspec/fetcher/local.rb +1 -1
  16. data/lib/inspec/fetcher/url.rb +4 -4
  17. data/lib/inspec/file_provider.rb +4 -4
  18. data/lib/inspec/formatters/base.rb +16 -0
  19. data/lib/inspec/globals.rb +8 -2
  20. data/lib/inspec/input.rb +3 -0
  21. data/lib/inspec/input_registry.rb +5 -3
  22. data/lib/inspec/metadata.rb +1 -1
  23. data/lib/inspec/plugin/v1/plugins.rb +2 -2
  24. data/lib/inspec/plugin/v2.rb +5 -0
  25. data/lib/inspec/plugin/v2/config_file.rb +1 -1
  26. data/lib/inspec/plugin/v2/filter.rb +2 -2
  27. data/lib/inspec/plugin/v2/installer.rb +5 -5
  28. data/lib/inspec/plugin/v2/loader.rb +6 -1
  29. data/lib/inspec/plugin/v2/registry.rb +2 -2
  30. data/lib/inspec/profile.rb +3 -3
  31. data/lib/inspec/profile_context.rb +1 -1
  32. data/lib/inspec/reporters/automate.rb +2 -2
  33. data/lib/inspec/reporters/json.rb +3 -1
  34. data/lib/inspec/reporters/json_automate.rb +1 -1
  35. data/lib/inspec/resource.rb +2 -0
  36. data/lib/inspec/resources.rb +5 -5
  37. data/lib/inspec/resources/apt.rb +6 -6
  38. data/lib/inspec/resources/auditd.rb +1 -1
  39. data/lib/inspec/resources/csv.rb +1 -1
  40. data/lib/inspec/resources/dh_params.rb +1 -1
  41. data/lib/inspec/resources/file.rb +1 -1
  42. data/lib/inspec/resources/grub_conf.rb +2 -1
  43. data/lib/inspec/resources/http.rb +1 -1
  44. data/lib/inspec/resources/iis_website.rb +1 -1
  45. data/lib/inspec/resources/interfaces.rb +1 -1
  46. data/lib/inspec/resources/json.rb +2 -2
  47. data/lib/inspec/resources/key_rsa.rb +1 -1
  48. data/lib/inspec/resources/mssql_session.rb +5 -1
  49. data/lib/inspec/resources/mysql_session.rb +1 -1
  50. data/lib/inspec/resources/nginx.rb +1 -1
  51. data/lib/inspec/resources/nginx_conf.rb +1 -1
  52. data/lib/inspec/resources/npm.rb +1 -1
  53. data/lib/inspec/resources/oracledb_session.rb +1 -1
  54. data/lib/inspec/resources/package.rb +1 -1
  55. data/lib/inspec/resources/parse_config.rb +5 -2
  56. data/lib/inspec/resources/platform.rb +11 -1
  57. data/lib/inspec/resources/port.rb +1 -1
  58. data/lib/inspec/resources/postgres_session.rb +1 -1
  59. data/lib/inspec/resources/ppa.rb +1 -1
  60. data/lib/inspec/resources/processes.rb +1 -1
  61. data/lib/inspec/resources/rabbitmq_conf.rb +1 -1
  62. data/lib/inspec/resources/registry_key.rb +1 -1
  63. data/lib/inspec/resources/sshd_config.rb +1 -1
  64. data/lib/inspec/resources/ssl.rb +2 -2
  65. data/lib/inspec/resources/toml.rb +1 -1
  66. data/lib/inspec/resources/vbscript.rb +1 -1
  67. data/lib/inspec/resources/windows_registry_key.rb +1 -1
  68. data/lib/inspec/resources/wmi.rb +16 -8
  69. data/lib/inspec/resources/x509_certificate.rb +1 -1
  70. data/lib/inspec/resources/xml.rb +1 -1
  71. data/lib/inspec/rule.rb +8 -8
  72. data/lib/inspec/run_data.rb +1 -1
  73. data/lib/inspec/run_data/result.rb +2 -0
  74. data/lib/inspec/runner.rb +2 -2
  75. data/lib/inspec/schema.rb +3 -1
  76. data/lib/inspec/schema/exec_json.rb +1 -1
  77. data/lib/inspec/schema/output_schema.rb +1 -1
  78. data/lib/inspec/schema/primitives.rb +1 -1
  79. data/lib/inspec/shell.rb +3 -3
  80. data/lib/inspec/shell_detector.rb +2 -2
  81. data/lib/inspec/utils/command_wrapper.rb +1 -1
  82. data/lib/inspec/utils/deprecation/config_file.rb +2 -2
  83. data/lib/inspec/utils/json_log.rb +1 -1
  84. data/lib/inspec/utils/telemetry/collector.rb +1 -1
  85. data/lib/inspec/utils/telemetry/data_series.rb +1 -1
  86. data/lib/inspec/version.rb +1 -1
  87. data/lib/plugins/inspec-artifact/lib/inspec-artifact/base.rb +5 -5
  88. data/lib/plugins/inspec-compliance/README.md +1 -1
  89. data/lib/plugins/inspec-compliance/lib/inspec-compliance/api.rb +3 -3
  90. data/lib/plugins/inspec-compliance/lib/inspec-compliance/http.rb +2 -2
  91. data/lib/plugins/inspec-compliance/lib/inspec-compliance/target.rb +2 -2
  92. data/lib/plugins/inspec-habitat/lib/inspec-habitat/profile.rb +3 -3
  93. data/lib/plugins/inspec-init/lib/inspec-init/cli.rb +1 -1
  94. data/lib/plugins/inspec-init/lib/inspec-init/cli_profile.rb +1 -1
  95. data/lib/plugins/inspec-init/lib/inspec-init/renderer.rb +2 -2
  96. data/lib/plugins/inspec-init/templates/profiles/aws/README.md +1 -1
  97. data/lib/plugins/inspec-plugin-manager-cli/lib/inspec-plugin-manager-cli/cli_command.rb +3 -3
  98. data/lib/plugins/inspec-reporter-html2/README.md +1 -1
  99. data/lib/plugins/inspec-reporter-html2/lib/inspec-reporter-html2/reporter.rb +1 -1
  100. data/lib/plugins/inspec-reporter-json-min/lib/inspec-reporter-json-min/reporter.rb +1 -1
  101. data/lib/plugins/inspec-reporter-junit/README.md +9 -7
  102. data/lib/plugins/inspec-reporter-junit/lib/inspec-reporter-junit.rb +10 -1
  103. data/lib/plugins/inspec-reporter-junit/lib/inspec-reporter-junit/reporter.rb +94 -12
  104. data/lib/plugins/shared/core_plugin_test_helper.rb +6 -22
  105. metadata +44 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a2786d0d36c3218a4d79f4578c4a814469115787d4470fa81d422b05b2025462
4
- data.tar.gz: a0d30c7b81dbb4e58e6b9e8c0447f0855ce1f94f223c1f4f5861a03dfce2ce6c
3
+ metadata.gz: bfed5976ebd618d37b1fbf0058fbd9389b243dbd5070444fda7558cf309392c3
4
+ data.tar.gz: 3b894051f2f56e249af59acf0de10c50d8a826d3af1755eaf60100a7a4934dab
5
5
  SHA512:
6
- metadata.gz: 915bbf9f4302c5fe2e8a41bc131b935bc42861cd4f76d0163ef1aeddc231cdbaf1f653ffd621bb79e5a531baa941e59852b34550d114bf30d95d4eb2ff5aa876
7
- data.tar.gz: d7b5f80f550bf092aaa0faaf660225f99e3e4d6b600d9a89a45c0648b752a00cac5e30aaaf74fdb940bb135b2ae2ae02112f9617adbe6c25abc46c10d9492c5d
6
+ metadata.gz: c1d9b3598a4bc81085d95b5a4b254ac57001aa301e4371394b8b8b307b54ed26644784ccf9dafd2e52d4e2553e5c1ff77ae821691ef738e542f13d892f692f81
7
+ data.tar.gz: 54f9be8adc1870127be3e825e809499270717d395fa26d11408f186a66fdb61ca7db0ac78fd73143652893bd482acf2d1009c3343609e8b34bcd3ff3eb0aaa0c
data/Gemfile CHANGED
@@ -11,6 +11,11 @@ gem "inspec-bin", path: "./inspec-bin"
11
11
 
12
12
  gem "ffi", ">= 1.9.14", "!= 1.13.0"
13
13
 
14
+ if Gem.ruby_version.to_s.start_with?("2.5")
15
+ # 16.7.23 required ruby 2.6+
16
+ gem "chef-utils", "< 16.7.23" # TODO: remove when we drop ruby 2.5
17
+ end
18
+
14
19
  group :omnibus do
15
20
  gem "rb-readline"
16
21
  gem "appbundler"
@@ -19,45 +24,23 @@ group :omnibus do
19
24
  end
20
25
 
21
26
  group :test do
22
- gem "chefstyle", "~> 1.2.1"
23
- gem "minitest", "~> 5.5"
24
- gem "minitest-sprint", "~> 1.0"
25
- gem "rake", ">= 10"
26
- gem "simplecov", ["~> 0.10", "<=0.18.2"]
27
+ gem "chefstyle", "~> 1.5.7"
27
28
  gem "concurrent-ruby", "~> 1.0"
29
+ gem "html-proofer", platforms: :ruby # do not attempt to run proofer on windows
30
+ gem "json_schemer", ">= 0.2.1", "< 0.2.12"
31
+ gem "m"
32
+ gem "minitest-sprint", "~> 1.0"
33
+ gem "minitest", "~> 5.5"
28
34
  gem "mocha", "~> 1.1"
35
+ gem "nokogiri", "~> 1.9"
36
+ gem "pry-byebug"
37
+ gem "pry", "~> 0.10"
38
+ gem "rake", ">= 10"
29
39
  gem "ruby-progressbar", "~> 1.8"
40
+ gem "simplecov", "~> 0.18"
30
41
  gem "webmock", "~> 3.0"
31
- gem "m"
32
- gem "pry", "~> 0.10"
33
- gem "pry-byebug"
34
- gem "html-proofer", platforms: :ruby # do not attempt to run proofer on windows
35
- end
36
-
37
- group :integration do
38
- gem "berkshelf"
39
- gem "test-kitchen"
40
- gem "kitchen-vagrant"
41
- gem "chef", "< 15"
42
- gem "chef-zero", "< 15"
43
- gem "kitchen-inspec"
44
- gem "kitchen-ec2"
45
- gem "kitchen-dokken"
46
- gem "git"
47
- end
48
-
49
- # gems for Maintainers.md generation
50
- group :maintenance do
51
- gem "tomlrb"
52
-
53
- # To sync maintainers with github
54
- gem "octokit"
55
- gem "netrc"
56
42
  end
57
43
 
58
44
  group :deploy do
59
45
  gem "inquirer"
60
46
  end
61
-
62
- # add these additional dependencies into Gemfile.local
63
- eval_gemfile(__FILE__ + ".local") if File.exist?(__FILE__ + ".local")
@@ -1,4 +1,4 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require "inspec/version"
4
4
 
@@ -13,7 +13,7 @@ Gem::Specification.new do |spec|
13
13
  spec.license = "Apache-2.0"
14
14
  spec.require_paths = ["lib"]
15
15
 
16
- spec.required_ruby_version = "~> 2.4"
16
+ spec.required_ruby_version = ">= 2.5"
17
17
 
18
18
  # the gemfile and gemspec are necessary for appbundler so don't remove it
19
19
  spec.files =
@@ -26,22 +26,21 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "chef-telemetry", "~> 1.0"
27
27
  spec.add_dependency "license-acceptance", ">= 0.2.13", "< 3.0"
28
28
  spec.add_dependency "thor", ">= 0.20", "< 2.0"
29
- spec.add_dependency "json_schemer", ">= 0.2.1", "< 0.2.12"
30
29
  spec.add_dependency "method_source", ">= 0.8", "< 2.0"
31
- spec.add_dependency "rubyzip", "~> 1.2", ">= 1.2.2"
32
- spec.add_dependency "rspec", "~> 3.9"
30
+ spec.add_dependency "rubyzip", ">= 1.2.2", "< 3.0"
31
+ spec.add_dependency "rspec", "~> 3.10"
33
32
  spec.add_dependency "rspec-its", "~> 1.2"
34
33
  spec.add_dependency "pry", "~> 0.13"
35
- spec.add_dependency "hashie", "~> 3.4"
34
+ spec.add_dependency "hashie", ">= 3.4", "< 5.0"
36
35
  spec.add_dependency "mixlib-log", "~> 3.0"
37
36
  spec.add_dependency "sslshake", "~> 1.2"
38
37
  spec.add_dependency "parallel", "~> 1.9"
39
- spec.add_dependency "faraday", ">= 0.9.0"
38
+ spec.add_dependency "faraday", ">= 0.9.0", "< 1.2"
40
39
  spec.add_dependency "tty-table", "~> 0.10"
41
40
  spec.add_dependency "tty-prompt", "~> 0.17"
42
- spec.add_dependency "tomlrb", "~> 1.2.0"
41
+ spec.add_dependency "tomlrb", ">= 1.2", "< 2.1"
43
42
  spec.add_dependency "addressable", "~> 2.4"
44
- spec.add_dependency "parslet", "~> 1.5"
43
+ spec.add_dependency "parslet", ">= 1.5", "< 3.0"
45
44
  spec.add_dependency "semverse", "~> 3.0"
46
45
  spec.add_dependency "multipart-post", "~> 2.0"
47
46
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "net/http"
4
- require "addressable/uri"
3
+ require "net/http" unless defined?(Net::HTTP)
4
+ require "addressable/uri" unless defined?(Addressable::URI)
5
5
 
6
6
  module Supermarket
7
7
  class API
@@ -1,4 +1,4 @@
1
- require "uri"
1
+ require "uri" unless defined?(URI)
2
2
  require "inspec/fetcher"
3
3
  require "inspec/fetcher/url"
4
4
 
@@ -1,4 +1,4 @@
1
- require "rubygems/package"
1
+ require "rubygems/package" unless defined?(Gem::Package)
2
2
 
3
3
  module Inspec::Archive
4
4
  class TarArchiveGenerator
@@ -1,6 +1,6 @@
1
- require "rubygems"
2
- require "zip"
3
- require "pathname"
1
+ require "rubygems" unless defined?(Gem)
2
+ require "zip" unless defined?(Zip)
3
+ require "pathname" unless defined?(Pathname)
4
4
 
5
5
  module Inspec::Archive
6
6
  class ZipArchiveGenerator
@@ -1,4 +1,4 @@
1
- require "thor"
1
+ require "thor" unless defined?(Thor)
2
2
  require "inspec/log"
3
3
  require "inspec/ui"
4
4
  require "inspec/config"
@@ -164,6 +164,12 @@ module Inspec
164
164
  desc: "After normal execution order, results are sorted by control ID, or by file (default), or randomly. None uses legacy unsorted mode."
165
165
  end
166
166
 
167
+ def self.help(*args)
168
+ super(*args)
169
+ puts "\nAbout #{Inspec::Dist::PRODUCT_NAME}:"
170
+ puts " Patents: chef.io/patents\n\n"
171
+ end
172
+
167
173
  def self.format_platform_info(params: {}, indent: 0, color: 39)
168
174
  str = ""
169
175
  params.each do |item, info|
@@ -1,5 +1,5 @@
1
1
  require "inspec/fetcher"
2
- require "forwardable"
2
+ require "forwardable" unless defined?(Forwardable)
3
3
 
4
4
  module Inspec
5
5
  class CachedFetcher
@@ -48,7 +48,8 @@ class Inspec::InspecCLI < Inspec::BaseCLI
48
48
  desc: "Allow or disable user interaction"
49
49
 
50
50
  class_option :disable_core_plugins, type: :string, banner: "", # Actually a boolean, but this suppresses the creation of a --no-disable...
51
- desc: "Disable loading all plugins that are shipped in the lib/plugins directory of InSpec. Useful in development."
51
+ desc: "Disable loading all plugins that are shipped in the lib/plugins directory of InSpec. Useful in development.",
52
+ hide: true
52
53
 
53
54
  class_option :disable_user_plugins, type: :string, banner: "",
54
55
  desc: "Disable loading all plugins that the user installed."
@@ -66,7 +67,7 @@ class Inspec::InspecCLI < Inspec::BaseCLI
66
67
  desc: "A list of controls to include. Ignore all other tests."
67
68
  profile_options
68
69
  def json(target)
69
- require "json"
70
+ require "json" unless defined?(JSON)
70
71
 
71
72
  o = config
72
73
  diagnose(o)
@@ -194,7 +195,8 @@ class Inspec::InspecCLI < Inspec::BaseCLI
194
195
  pretty_handle_exception(e)
195
196
  end
196
197
 
197
- desc "exec LOCATIONS", <<~EOT
198
+ desc "exec LOCATIONS", "Run all tests at LOCATIONS."
199
+ long_desc <<~EOT
198
200
  Run all test files at the specified LOCATIONS.
199
201
 
200
202
  Loads the given profile(s) and fetches their dependencies if needed. Then
@@ -1,11 +1,11 @@
1
1
  # Represents InSpec configuration. Merges defaults, config file options,
2
2
  # and CLI arguments.
3
3
 
4
- require "pp"
5
- require "stringio"
6
- require "forwardable"
7
- require "thor"
8
- require "base64"
4
+ require "pp" unless defined?(PP)
5
+ require "stringio" unless defined?(StringIO)
6
+ require "forwardable" unless defined?(Forwardable)
7
+ require "thor" unless defined?(Thor)
8
+ require "base64" unless defined?(Base64)
9
9
  require "inspec/plugin/v2/filter"
10
10
 
11
11
  module Inspec
@@ -1,4 +1,4 @@
1
- require "fileutils"
1
+ require "fileutils" unless defined?(FileUtils)
2
2
 
3
3
  module Inspec
4
4
  #
@@ -1,6 +1,6 @@
1
1
  require "inspec/shell_detector"
2
- require "erb"
3
- require "shellwords"
2
+ require "erb" unless defined?(Erb)
3
+ require "shellwords" unless defined?(Shellwords)
4
4
 
5
5
  module Inspec
6
6
  class EnvPrinter
@@ -1,6 +1,6 @@
1
- require "tmpdir"
2
- require "fileutils"
3
- require "mixlib/shellout"
1
+ require "tmpdir" unless defined?(Dir.mktmpdir)
2
+ require "fileutils" unless defined?(FileUtils)
3
+ require "mixlib/shellout" unless defined?(Mixlib::ShellOut)
4
4
  require "inspec/log"
5
5
 
6
6
  module Inspec::Fetcher
@@ -1,4 +1,4 @@
1
- require "openssl"
1
+ require "openssl" unless defined?(OpenSSL)
2
2
 
3
3
  module Inspec::Fetcher
4
4
  class Local < Inspec.fetcher(1)
@@ -1,7 +1,7 @@
1
- require "uri"
2
- require "openssl"
3
- require "tempfile"
4
- require "open-uri"
1
+ require "uri" unless defined?(URI)
2
+ require "openssl" unless defined?(OpenSSL)
3
+ require "tempfile" unless defined?(Tempfile)
4
+ require "open-uri" unless defined?(OpenURI)
5
5
 
6
6
  module Inspec::Fetcher
7
7
  class Url < Inspec.fetcher(1)
@@ -1,7 +1,7 @@
1
- require "rubygems/package"
2
- require "pathname"
3
- require "zlib"
4
- require "zip"
1
+ require "rubygems/package" unless defined?(Gem::Package)
2
+ require "pathname" unless defined?(Pathname)
3
+ require "zlib" unless defined?(Zlib)
4
+ require "zip" unless defined?(Zip)
5
5
 
6
6
  module Inspec
7
7
  class FileProvider
@@ -159,6 +159,14 @@ module Inspec::Formatters
159
159
  resource_title: example.metadata[:described_class] || example.metadata[:example_group][:description],
160
160
  expectation_message: format_expectation_message(example),
161
161
  waiver_data: example.metadata[:waiver_data],
162
+ # This enforces the resource name as expected based off of the class
163
+ # name. However, if we wanted the `name` attribute against the class
164
+ # to be canonical for this case (consider edge cases!) we would use
165
+ # example.metadata[:described_class].instance_variable_get(:@__resource_name__)&.to_s
166
+ resource_class: example.metadata[:described_class].class.superclass.name,
167
+ # This is a raw grep of the text passed to the resource in any format,
168
+ # and is used to enforce near-uniqueness against the resource.
169
+ resource_params: find_resource_params(example.metadata[:described_class]),
162
170
  }
163
171
 
164
172
  unless (pid = example.metadata[:profile_id]).nil?
@@ -174,6 +182,14 @@ module Inspec::Formatters
174
182
  res
175
183
  end
176
184
 
185
+ def find_resource_params(example)
186
+ if example.class.ancestors.include?(Inspec::Resource)
187
+ example.instance_variable_get(:@resource_params)
188
+ else
189
+ []
190
+ end
191
+ end
192
+
177
193
  def format_expectation_message(example)
178
194
  if (example.metadata[:example_group][:description_args].first == example.metadata[:example_group][:described_class]) ||
179
195
  example.metadata[:example_group][:described_class].nil?
@@ -1,15 +1,21 @@
1
1
  require_relative "utils/install_context"
2
2
 
3
3
  module Inspec
4
-
5
4
  extend Inspec::InstallContextHelpers
6
5
 
7
6
  def self.config_dir
8
- ENV["INSPEC_CONFIG_DIR"] ? ENV["INSPEC_CONFIG_DIR"] : File.join(Dir.home, ".inspec")
7
+ ENV["INSPEC_CONFIG_DIR"] || File.join(home_path, ".inspec")
9
8
  end
10
9
 
11
10
  def self.src_root
12
11
  @src_root ||= File.expand_path(File.join(__FILE__, "../../.."))
13
12
  end
14
13
 
14
+ def self.home_path
15
+ Dir.home
16
+ rescue ArgumentError, NoMethodError
17
+ # If ENV['HOME'] is not set, Dir.home will fail due to expanding the ~. Fallback to Etc.
18
+ require "etc" unless defined?(Etc)
19
+ Etc.getpwuid.dir
20
+ end
15
21
  end
@@ -14,14 +14,17 @@ module Inspec
14
14
  class Input
15
15
 
16
16
  class Error < Inspec::Error; end
17
+
17
18
  class ValidationError < Error
18
19
  attr_accessor :input_name
19
20
  attr_accessor :input_value
20
21
  attr_accessor :input_type
21
22
  end
23
+
22
24
  class TypeError < Error
23
25
  attr_accessor :input_type
24
26
  end
27
+
25
28
  class RequiredError < Error
26
29
  attr_accessor :input_name
27
30
  end
@@ -1,5 +1,5 @@
1
- require "forwardable"
2
- require "singleton"
1
+ require "forwardable" unless defined?(Forwardable)
2
+ require "singleton" unless defined?(Singleton)
3
3
  require "inspec/input"
4
4
  require "inspec/secrets"
5
5
  require "inspec/exceptions"
@@ -14,9 +14,11 @@ module Inspec
14
14
  extend Forwardable
15
15
 
16
16
  class Error < Inspec::Error; end
17
+
17
18
  class ProfileLookupError < Error
18
19
  attr_accessor :profile_name
19
20
  end
21
+
20
22
  class InputLookupError < Error
21
23
  attr_accessor :profile_name
22
24
  attr_accessor :input_name
@@ -199,7 +201,7 @@ module Inspec
199
201
  value = YAML.load(value)
200
202
  rescue Psych::SyntaxError => yaml_error
201
203
  # It could be that we just tried to run JSON through the YAML parser.
202
- require "json"
204
+ require "json" unless defined?(JSON)
203
205
  begin
204
206
  value = JSON.parse(value)
205
207
  rescue JSON::ParserError => json_error
@@ -216,7 +216,7 @@ module Inspec
216
216
  end
217
217
 
218
218
  def self.from_yaml(ref, content, profile_id, logger = nil)
219
- require "erb"
219
+ require "erb" unless defined?(Erb)
220
220
  res = Metadata.new(ref, logger)
221
221
  res.params = YAML.load(ERB.new(content).result)
222
222
  res.content = content
@@ -1,4 +1,4 @@
1
- require "forwardable"
1
+ require "forwardable" unless defined?(Forwardable)
2
2
 
3
3
  module Inspec
4
4
  # Resource Plugins
@@ -36,7 +36,7 @@ module Inspec
36
36
  .flatten
37
37
 
38
38
  # load bundled plugins
39
- bundled_dir = File.expand_path(File.dirname(__FILE__))
39
+ bundled_dir = __dir__
40
40
  @paths += Dir[File.join(bundled_dir, "..", "bundles", "inspec-*.rb")].flatten
41
41
 
42
42
  # map paths to names
@@ -6,17 +6,22 @@ module Inspec
6
6
  class Exception < Inspec::Error; end
7
7
  class ConfigError < Inspec::Plugin::V2::Exception; end
8
8
  class LoadError < Inspec::Plugin::V2::Exception; end
9
+
9
10
  class GemActionError < Inspec::Plugin::V2::Exception
10
11
  attr_accessor :plugin_name
11
12
  attr_accessor :version
12
13
  end
14
+
13
15
  class InstallError < Inspec::Plugin::V2::GemActionError; end
16
+
14
17
  class PluginExcludedError < Inspec::Plugin::V2::InstallError
15
18
  attr_accessor :details
16
19
  end
20
+
17
21
  class UpdateError < Inspec::Plugin::V2::GemActionError
18
22
  attr_accessor :from_version, :to_version
19
23
  end
24
+
20
25
  class UnInstallError < Inspec::Plugin::V2::GemActionError; end
21
26
  class SearchError < Inspec::Plugin::V2::GemActionError; end
22
27
  end
@@ -1,4 +1,4 @@
1
- require "json"
1
+ require "json" unless defined?(JSON)
2
2
 
3
3
  module Inspec::Plugin::V2
4
4
  # Represents the plugin config file on disk.