Class: Inspec::Plugins::Fetcher
- Inherits:
-
PluginRegistry::Plugin
- Object
- PluginRegistry::Plugin
- Inspec::Plugins::Fetcher
- Defined in:
- lib/inspec/plugin/v1/plugin_types/fetcher.rb
Overview
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.
Instance Attribute Summary collapse
-
#target ⇒ Object
Returns the value of attribute target.
Attributes inherited from PluginRegistry::Plugin
Class Method Summary collapse
Instance Method Summary collapse
-
#archive_path ⇒ Object
The path to the archive on disk.
-
#cache_key ⇒ Object
The unique key based on the content of the remote archive.
-
#fetch(_path) ⇒ Object
Fetches the remote source to a local source, using the provided path as a partial filename.
-
#relative_target ⇒ Object
relative_target is provided to keep compatibility with 3rd party plugins.
-
#requires_locking? ⇒ Boolean
Returns false by default This is used to regulate cache contention.
-
#resolved_source ⇒ Object
The full specification of the remote source, with any ambigious references provided by the user resolved to an exact reference where possible.
-
#update_from_opts(opts) ⇒ Object
This optional method may be used after a failed fetch.
-
#update_ivar_from_opt(opt_name, opts) ⇒ Object
Helper for above; usful when the subclass ivars whose names exactly match the names of the fetcher options.
- #writable? ⇒ Boolean
Methods inherited from PluginRegistry::Plugin
name, priority, resolve, resolve_next
Instance Attribute Details
#target ⇒ Object
Returns the value of attribute target.
23 24 25 |
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 23 def target @target end |
Class Method Details
Instance Method Details
#archive_path ⇒ Object
The path to the archive on disk. This can be passed to a FileProvider to get access to the files in the fetched profile.
34 35 36 |
# 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 ⇒ Object
The unique key based on the content of the remote archive.
64 65 66 |
# 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) ⇒ Object
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
47 48 49 |
# 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 ⇒ Object
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.
104 105 106 107 |
# 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 |
#requires_locking? ⇒ Boolean
Returns false by default This is used to regulate cache contention. Fetchers that are sensitive to cache contention should return true.
112 113 114 |
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 112 def requires_locking? false end |
#resolved_source ⇒ Object
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.
57 58 59 |
# 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) ⇒ Object
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
80 81 82 83 84 |
# 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) ⇒ Object
Helper for above; usful when the subclass ivars whose names exactly match the names of the fetcher options.
88 89 90 91 92 93 |
# 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? ⇒ Boolean
25 26 27 |
# File 'lib/inspec/plugin/v1/plugin_types/fetcher.rb', line 25 def writable? false end |