class IisAppPool

def enable32bit

def enable32bit
  iis_app_pool[:e32b]
end

def exists?

def exists?
  !iis_app_pool[:pool_name].empty?
end

def iis_app_pool

rubocop:disable Metrics/AbcSize
I cannot think of a way to shorten this method
def iis_app_pool
  return @cache unless @cache.nil?
  command = "Import-Module WebAdministration; Get-Item '#{@pool_path}' | Select-Object * | ConvertTo-Json"
  cmd = inspec.command(command)
  begin
    pool = JSON.parse(cmd.stdout)
  rescue JSON::ParserError => _e
    raise Inspec::Exceptions::ResourceFailed, 'Unable to parse app pool JSON'
  end
  # map our values to a hash table
  @cache = {
    pool_name: pool['name'],
    version: pool['managedRuntimeVersion'],
    e32b: pool['enable32BitAppOnWin64'],
    mode: pool['managedPipelineMode'],
    processes: pool['processModel']['maxProcesses'],
    timeout: "#{pool['processModel']['idleTimeout']['Hours']}:#{pool['processModel']['idleTimeout']['Minutes']}:#{pool['processModel']['idleTimeout']['Seconds']}",
    timeout_days: pool['processModel']['idleTimeout']['Days'],
    timeout_hours: pool['processModel']['idleTimeout']['Hours'],
    timeout_minutes: pool['processModel']['idleTimeout']['Minutes'],
    timeout_seconds: pool['processModel']['idleTimeout']['Seconds'],
    user_identity_type: pool['processModel']['identityType'],
    username: pool['processModel']['userName'],
  }
end

def initialize(pool_name)

def initialize(pool_name)
  @pool_name = pool_name
  @pool_path = "IIS:\\AppPools\\#{@pool_name}"
  @cache = nil
  # verify that this resource is only supported on Windows
  return skip_resource 'The `iis_app_pool` resource is not supported on your OS.' unless inspec.os.windows?
end

def max_processes

def max_processes
  iis_app_pool[:processes]
end

def pipeline_mode

def pipeline_mode
  iis_app_pool[:mode]
end

def pool_name

def pool_name
  iis_app_pool[:pool_name]
end

def runtime_version

def runtime_version
  iis_app_pool[:version]
end

def timeout

def timeout
  iis_app_pool[:timeout]
end

def timeout_days

def timeout_days
  iis_app_pool[:timeout_days]
end

def timeout_hours

def timeout_hours
  iis_app_pool[:timeout_hours]
end

def timeout_minutes

def timeout_minutes
  iis_app_pool[:timeout_minutes]
end

def timeout_seconds

def timeout_seconds
  iis_app_pool[:timeout_seconds]
end

def to_s

def to_s
  "iis_app_pool '#{@pool_name}'"
end

def user_identity_type

def user_identity_type
  iis_app_pool[:user_identity_type]
end

def username

def username
  iis_app_pool[:username]
end