Sha256: 6b176b6fab871eb09d535567a0e790e062c09ad1f1e34f8715ba48afbc334f33
Contents?: true
Size: 1.72 KB
Versions: 20
Compression:
Stored size: 1.72 KB
Contents
# frozen_string_literal: true module LicenseFinder class Rebar < PackageManager def initialize(options = {}) super @command = options[:rebar_command] || package_management_command @deps_path = Pathname(options[:rebar_deps_dir] || File.join(project_path, '_build/default/lib')) end def current_packages rebar_deps.map do |name, version| licenses, homepage = dep_info(name) RebarPackage.new( name, version, install_path: @deps_path.join(name), homepage: homepage, spec_licenses: licenses.nil? ? [] : [licenses], logger: logger ) end end def package_management_command 'rebar3' end def possible_package_paths [project_path.join('rebar.config')] end private def rebar_deps command = "#{@command} tree" stdout, stderr, status = Dir.chdir(project_path) { Cmd.run(command) } raise "Command '#{command}' failed to execute: #{stderr}" unless status.success? stdout .each_line .reject { |line| line.start_with?('=') || line.include?('project app') } .map do |line| matches = line.match(/(?<name>\w+)─(?<version>[\S.]+)\s*/) [matches[:name], matches[:version]] if matches end.compact end def dep_info(name) command = "#{@command} pkgs #{name}" stdout, _, status = Cmd.run(command) return [nil, nil] unless status.success? licenses = nil homepage = nil stdout.scan(/Licenses: (?<licenses>.+)|(?<homepage>(https|http).*)/) do |pkg_licenses, pkg_homepage| licenses ||= pkg_licenses homepage ||= pkg_homepage end [licenses, homepage] end end end
Version data entries
20 entries across 20 versions & 2 rubygems