class LicenseAuto::Npm
Constants
- LANGUAGE
Public Class Methods
check_cli()
click to toggle source
TODO: move
# File lib/license_auto/package_manager/npm.rb, line 90 def self.check_cli bash_cmd = "node -v" LicenseAuto.logger.debug(bash_cmd) stdout_str, stderr_str, status = Open3.capture3(bash_cmd) node_version = /v5\.\d+\.\d+/ if not stderr_str.empty? LicenseAuto.logger.error(stderr_str) return false elsif not stdout_str =~ node_version error = "NodeJS version: #{stdout_str} not satisfied: #{node_version}" LicenseAuto.logger.error(error) return false end bash_cmd = "node -e \"const semver = require('semver');\" -r semver" LicenseAuto.logger.debug(bash_cmd) stdout_str, stderr_str, status = Open3.capture3(bash_cmd) unless stderr_str.empty? LicenseAuto.logger.error(stderr_str) LicenseAuto.logger.info( "\nInstall npm packages first using:\n $ npm install\n") return false end return true end
is_valid_semver?(semver)
click to toggle source
semver: {String}
# File lib/license_auto/package_manager/npm.rb, line 76 def self.is_valid_semver?(semver) node_cmd = "node -e \"var semver = require('semver'); var valid = semver.validRange('#{semver}'); console.log(valid)\"" # LicenseAuto.logger.debug(node_cmd) stdout_str, _stderr_str, _status = Open3.capture3(node_cmd) is_invalid = stdout_str.gsub(/\n/, '') == 'null' # if is_invalid # LicenseAuto.logger.error("semver: #{semver} is not a valid sem-version") # else # LicenseAuto.logger.debug("semver: #{semver} is valid") # end not is_invalid end
new(path)
click to toggle source
Calls superclass method
LicenseAuto::PackageManager::new
# File lib/license_auto/package_manager/npm.rb, line 11 def initialize(path) super(path) end
Public Instance Methods
dependency_file_pattern()
click to toggle source
# File lib/license_auto/package_manager/npm.rb, line 15 def dependency_file_pattern /#{@path}\/(src\/|source\/)?package\.json$/ end
parse_dependencies()
click to toggle source
# File lib/license_auto/package_manager/npm.rb, line 19 def parse_dependencies package_json_files = dependency_file_path_names if package_json_files.empty? LicenseAuto.logger.info("#{LANGUAGE}: #{dependency_file_pattern} file not exist") return [] else package_json_files.map {|dep_file| LicenseAuto.logger.debug(dep_file) npm_definition = Hashie::Mash.new(JSON.parse(File.read(dep_file))) { dep_file: dep_file, deps: [npm_definition.dependencies, npm_definition.devDependencies].compact.map {|hash| hash.map {|pack_name, semver| available_version, remote = if semver =~ /^file:/ # DOC: https://docs.npmjs.com/files/package.json#local-paths ['local-path', semver] elsif LicenseAuto::Npm.is_valid_semver?(semver) pack = Hashie::Mash.new( "language": "NodeJS", "name": pack_name, "group": "", "version": semver, "server": "registry.npmjs.org" ) npm_registry = LicenseAuto::NpmRegistry.new(pack) version = npm_registry.chose_latest_available_version(semver) [version, npm_registry.registry] else # DOC: https://docs.npmjs.com/files/package.json#git-urls-as-dependencies git_url = semver.gsub(/^git\+/, '') matcher = LicenseAuto::Matcher::SourceURL.new(git_url) github_matched = matcher.match_github_resource if github_matched # TODO: ref=github_matched[:ref] github = GithubCom.new({}, github_matched[:owner], github_matched[:repo]) version = github.list_tags.first.name LicenseAuto.logger.debug(version) [version, git_url] end end { name: pack_name, version: available_version, remote: remote } } }.flatten } } end # LicenseAuto.logger.debug(JSON.pretty_generate(dep_files)) end