Class: Inspec::Fetcher::Local
- Inherits:
-
Object
- Object
- Inspec::Fetcher::Local
- Defined in:
- lib/inspec/fetcher/local.rb
Class Method Summary collapse
-
.resolve(target) ⇒ Object
Priority is used for setting precedence of fetchers.
- .resolve_from_hash(target) ⇒ Object
- .resolve_from_string(target) ⇒ Object
Instance Method Summary collapse
- #archive_path ⇒ Object
- #cache_key ⇒ Object
- #fetch(path) ⇒ Object
-
#initialize(target, opts = {}) ⇒ Local
constructor
A new instance of Local.
- #perform_shasum(target) ⇒ Object
- #resolved_source ⇒ Object
- #sha256 ⇒ Object
- #writable? ⇒ Boolean
Constructor Details
#initialize(target, opts = {}) ⇒ Local
Returns a new instance of Local.
41 42 43 44 45 |
# File 'lib/inspec/fetcher/local.rb', line 41 def initialize(target, opts = {}) @target = target @backend = opts[:backend] @archive_shasum = nil end |
Class Method Details
.resolve(target) ⇒ Object
Priority is used for setting precedence of fetchers. And registry plugin(v1) decides which fetcher to use for loading profiles by using this priority
9 10 11 12 13 14 15 16 17 |
# File 'lib/inspec/fetcher/local.rb', line 9 def self.resolve(target) if target.is_a?(String) local_path = resolve_from_string(target) new(local_path) if local_path elsif target.is_a?(Hash) local_path = resolve_from_hash(target) new(local_path, target) if local_path end end |
.resolve_from_hash(target) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/inspec/fetcher/local.rb', line 19 def self.resolve_from_hash(target) return unless target.key?(:path) if target.key?(:cwd) File.(target[:path], target[:cwd]) else target[:path] end end |
.resolve_from_string(target) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/inspec/fetcher/local.rb', line 29 def self.resolve_from_string(target) # Support "urls" in the form of file:// if target.start_with?("file://") target = target.gsub(%r{^file://}, "") else # support for windows paths target = target.tr("\\", "/") end target if File.exist?(File.(target)) end |
Instance Method Details
#archive_path ⇒ Object
82 83 84 |
# File 'lib/inspec/fetcher/local.rb', line 82 def archive_path @target end |
#cache_key ⇒ Object
90 91 92 |
# File 'lib/inspec/fetcher/local.rb', line 90 def cache_key sha256.to_s end |
#fetch(path) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/inspec/fetcher/local.rb', line 47 def fetch(path) # If `inspec exec` is used then we should not vendor/fetch. This makes # local development easier and more predictable. return @target if Inspec::BaseCLI.inspec_cli_command == :exec # Skip vendoring if @backend is not set (example: ad hoc runners) return @target unless @backend if File.directory?(@target) # Create an archive, checksum, and move to the vendor directory Dir.mktmpdir do |tmpdir| temp_archive = File.join(tmpdir, "#{File.basename(@target)}.tar.gz") opts = { backend: @backend, output: temp_archive, } # Create a temporary archive at `opts[:output]` Inspec::Profile.for_target(@target, opts).archive(opts) checksum = perform_shasum(temp_archive) final_path = File.join(path, checksum) FileUtils.mkdir_p(final_path) Inspec::FileProvider.for_path(temp_archive).extract(final_path) end else # Verify profile (archive) is valid and extract to vendor directory opts = { backend: @backend } Inspec::Profile.for_target(@target, opts).check Inspec::FileProvider.for_path(@target).extract(path) end @target end |
#perform_shasum(target) ⇒ Object
104 105 106 107 108 109 |
# File 'lib/inspec/fetcher/local.rb', line 104 def perform_shasum(target) return @archive_shasum if @archive_shasum raise(Inspec::FetcherFailure, "Profile dependency local path '#{target}' does not exist") unless File.exist?(target) @archive_shasum = OpenSSL::Digest.digest("SHA256", File.read(target)).unpack("H*")[0] end |
#resolved_source ⇒ Object
111 112 113 114 115 |
# File 'lib/inspec/fetcher/local.rb', line 111 def resolved_source h = { path: @target } h[:sha256] = sha256 if sha256 h end |
#sha256 ⇒ Object
94 95 96 97 98 99 100 101 102 |
# File 'lib/inspec/fetcher/local.rb', line 94 def sha256 if !@archive_shasum.nil? @archive_shasum elsif File.directory?(@target) nil else perform_shasum(@target) end end |
#writable? ⇒ Boolean
86 87 88 |
# File 'lib/inspec/fetcher/local.rb', line 86 def writable? File.directory?(@target) end |