include Chef::Mixin::ShellOut
+use_inline_resources
+
def load_current_resource
- @packages = JSON.parse(shell_out("npm list --global --json").stdout)["dependencies"]
+ @packages = JSON.parse(shell_out("npm list --global --json").stdout)["dependencies"] || {}
@current_resource = Chef::Resource::NodejsPackage.new(new_resource.name)
@current_resource.package_name(new_resource.package_name)
- if package = @packages[@current_resource.package_name]
+ if (package = @packages[@current_resource.package_name])
@current_resource.version(package["version"])
end
@current_resource
end
action :install do
- if new_resource.version
- package_name = "#{new_resource.package_name}@#{new_resource.version}"
- else
- package_name = new_resource.package_name
- end
+ package_name = if new_resource.version
+ "#{new_resource.package_name}@#{new_resource.version}"
+ else
+ new_resource.package_name
+ end
- unless @packages.include?(new_resource.package_name)
+ if !@packages.include?(new_resource.package_name)
+ shell_out!("npm install --global #{package_name}")
+ new_resource.updated_by_last_action(true)
+ elsif new_resource.version &&
+ new_resource.version != @current_resource.version
shell_out!("npm install --global #{package_name}")
new_resource.updated_by_last_action(true)
- else
- if new_resource.version &&
- new_resource.version != @current_resource.version
- shell_out!("npm install --global #{package_name}")
- new_resource.updated_by_last_action(true)
- end
end
end