2015-09-08 23:12:25 +01:00
# encoding: utf-8
2015-10-06 18:55:44 +02:00
# author: Christoph Hartmann
# author: Dominik Richter
2015-09-08 23:12:25 +01:00
2015-10-26 04:04:18 +01:00
class NpmPackage < Inspec . resource ( 1 )
2015-09-08 23:12:25 +01:00
name 'npm'
2015-11-27 14:02:38 +01:00
desc 'Use the npm InSpec audit resource to test if a global npm package is installed. npm is the the package manager for Nodejs packages, such as bower and StatsD.'
example "
describe npm ( 'bower' ) do
it { should be_installed }
end
"
2015-09-08 23:12:25 +01:00
def initialize ( package_name )
@package_name = package_name
@cache = nil
end
def info
2015-10-01 15:25:08 +02:00
return @info if defined? ( @info )
2015-09-17 16:43:10 +02:00
2015-10-26 04:04:18 +01:00
cmd = inspec . command ( " npm ls -g --json #{ @package_name } " )
2015-09-17 16:43:10 +02:00
@info = {
2015-09-08 23:12:25 +01:00
name : @package_name ,
2015-09-09 18:52:27 +02:00
type : 'npm' ,
2015-09-17 20:35:14 +02:00
installed : cmd . exit_status == 0 ,
2015-09-08 23:12:25 +01:00
}
2015-09-17 16:43:10 +02:00
return @info unless @info [ :installed ]
pkgs = JSON . parse ( cmd . stdout )
2015-09-17 20:35:14 +02:00
@info [ :version ] = pkgs [ 'dependencies' ] [ @package_name ] [ 'version' ]
@info
2015-09-08 23:12:25 +01:00
end
def installed?
2015-09-17 20:51:06 +02:00
info [ :installed ] == true
2015-09-08 23:12:25 +01:00
end
def version
2015-09-17 16:43:10 +02:00
info [ :version ]
2015-09-08 23:12:25 +01:00
end
def to_s
2015-10-12 13:01:58 +02:00
" Npm Package #{ @package_name } "
2015-09-08 23:12:25 +01:00
end
end