class Bixby::Provision::Packager::NPM

Public Instance Methods

install(*packages) click to toggle source
# File lib/bixby/provision/dsl/packager/npm.rb, line 8
def install(*packages)
  if packages.last.kind_of? Hash then
    opts = packages.pop
  else
    opts = {}
  end
  packages = packages.flatten.sort

  logger.info "npm install: " + packages.join(" ")

  installed = query_installed_packages(packages, opts)
  needed = packages.find_all{ |s| !installed.include? s }
  if needed.empty? then
    logger.info "[npm] package(s) already installed"
    return
  end

  global = opts[:global]
  if global then
    cmd = "npm install -g " + packages.join(" ")
    logged_sudo(cmd, env)
  else
    cmd = "npm install " + packages.join(" ")
    logged_systemu(cmd, env)
  end
end
installed?(package, opts={}) click to toggle source
# File lib/bixby/provision/dsl/packager/npm.rb, line 35
def installed?(package, opts={})
  query_installed_packages(package, opts).include? package
end

Private Instance Methods

env() click to toggle source
# File lib/bixby/provision/dsl/packager/npm.rb, line 60
def env
  { :env => { "PATH" => Provision::Base::PATH } }
end
query_installed_packages(packages, opts={}) click to toggle source

Query NPM DB for presence of given packages. Returns a hash for easy lookup

@param [Array<String>] packages

@return [Hash<String, 1>]

# File lib/bixby/provision/dsl/packager/npm.rb, line 47
def query_installed_packages(packages, opts={})
  packages = [ packages ] if not packages.kind_of? Array
  packages.flatten!

  g = opts[:global] ? "-g" : ""

  installed = {}
  systemu("npm #{g} ls --parseable --depth 1 " + packages.join(" "), env).
    stdout.split(/\n/).each{ |s| installed[File.basename(s)] = 1 }

  return installed
end