class Inspec::Resources::ChocoPkg

Attributes

package_name[R]

Public Class Methods

new(package_name, _opts = {}) click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 21
def initialize(package_name, _opts = {})
  raise "Chocolatey is not installed" unless inspec.command("choco").exist?

  @package_name = package_name
  @cache = base_data.update(generate_cache)
end

Public Instance Methods

info() click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 32
def info
  @cache.dup
end
installed?() click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 28
def installed?
  @cache[:installed]
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/inspec/resources/chocolatey_package.rb, line 40
def method_missing(method_name, *args, &block)
  if @cache.key?(method_name)
    @cache.fetch(method_name)
  else
    super
  end
end
respond_to_missing?(method_name, *) click to toggle source
Calls superclass method
# File lib/inspec/resources/chocolatey_package.rb, line 36
def respond_to_missing?(method_name, *)
  @cache.key?(method_name) || super
end
to_s() click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 48
def to_s
  "Chocolatey package #{package_name}"
end

Private Instance Methods

base_data() click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 54
def base_data
  {
    name: package_name,
    version: nil,
    installed: false,
    type: "chocolatey",
  }
end
generate_cache() click to toggle source
# File lib/inspec/resources/chocolatey_package.rb, line 63
    def generate_cache
      command = <<-EOH
      (choco list --local-only --exact --include-programs --limit-output '#{package_name.gsub("'", "\`'")}') -Replace "\\|", "=" | ConvertFrom-StringData | ConvertTo-JSON
      EOH

      cmd = inspec.powershell(command.strip)

      return {} if cmd.exit_status != 0 || cmd.stdout.strip.empty?

      out = JSON.parse(cmd.stdout)

      {
        version: out.fetch(package_name),
        installed: true,
      }
    rescue JSON::ParserError, KeyError
      {}
    end