class Inspec::Plugins::Fetcher

An Inspec::Plugins::Fetcher is responsible for fetching a remote source to a local directory or file provided by the user.

In general, there are two kinds of fetchers. (1) Fetchers that implement this entire API (see the Git or Url fetchers for examples), and (2) fetchers that only implement self.resolve and then call the resolve_next method with a modified target hash. Fetchers in (2) do not need to implement the functions in this class because the caller will never actually get an instance of those fetchers.

Attributes

target[RW]

Public Class Methods

plugin_registry() click to toggle source
# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 19
def self.plugin_registry
  Inspec::Fetcher::Registry
end

Public Instance Methods

archive_path() click to toggle source

The path to the archive on disk. This can be passed to a FileProvider to get access to the files in the fetched profile.

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 34
def archive_path
  raise "Fetcher #{self} does not implement `archive_path()`. This is required."
end
cache_key() click to toggle source

The unique key based on the content of the remote archive.

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 64
def cache_key
  raise "Fetcher #{self} does not implement `cache_key()`. This is required for terminal fetchers."
end
fetch(_path) click to toggle source

Fetches the remote source to a local source, using the provided path as a partial filename. That is, if you pass /foo/bar/baz, the fetcher can create:

/foo/bar/baz/: A profile directory, or /foo/bar/baz.tar.gz: A profile tarball, or /foo/bar/baz.zip

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 47
def fetch(_path)
  raise "Fetcher #{self} does not implement `fetch()`. This is required."
end
relative_target() click to toggle source

relative_target is provided to keep compatibility with 3rd party plugins.

Deprecated: This function may be removed in future versions of Inspec, don't depend on it in new plugins.

@returns [Inspec::RelativeFileProvider]

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 104
def relative_target
  file_provider = Inspec::FileProvider.for_path(archive_path)
  file_provider.relative_provider
end
resolved_source() click to toggle source

The full specification of the remote source, with any ambigious references provided by the user resolved to an exact reference where possible. For example, in the Git provide, a tag will be resolved to an exact revision.

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 57
def resolved_source
  raise "Fetcher #{self} does not implement `resolved_source()`. This is required for terminal fetchers."
end
update_from_opts(opts) click to toggle source

This optional method may be used after a failed fetch. If the fetcher can be updated with information that might lead to a successful retrieval of alternative content, this method may be called.

Default implementation makes a peculiar assumption that the class has

a ivar named @archive_shasum and you have a fetcher opt that pairs with it named sha256, and those are the only two that matter for updating.

Return TrueClass if the fetcher was updated and a retry is in order Return FalseClass if the update contained no useful information and a retry should not be attempted

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 80
def update_from_opts(opts)
  changed = @archive_shasum != opts[:sha256]
  @archive_shasum = opts[:sha256]
  changed
end
update_ivar_from_opt(opt_name, opts) click to toggle source

Helper for above; usful when the subclass ivars whose names exactly match the names of the fetcher options.

# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 88
def update_ivar_from_opt(opt_name, opts)
  ivar_sym = "@#{opt_name}".to_sym
  changed = instance_variable_get(ivar_sym) != opts[opt_name]
  instance_variable_set(ivar_sym, opts[opt_name])
  changed
end
writable?() click to toggle source
# File lib/inspec/plugin/v1/plugin_types/fetcher.rb, line 25
def writable?
  false
end