Sha256: 7ec0120298c1d80ad9f56e6dd3524d87f38d6a8b9c5fc9cdfdc311e9455b6dd2

Contents?: true

Size: 1.35 KB

Versions: 2

Compression:

Stored size: 1.35 KB

Contents

module LicenseFinder
  class Bundle
    attr_writer :ignore_groups

    def initialize(bundler_definition=nil)
      @definition = bundler_definition || Bundler::Definition.build(gemfile_path, lockfile_path, nil)
    end

    def gems
      return @gems if @gems

      @gems ||= definition.specs_for(included_groups).map do |spec|
        dependency = dependencies.detect { |dep| dep.name == spec.name }

        BundledGem.new(spec, dependency)
      end

      setup_parent_child_relationships

      @gems
    end

    private
    attr_reader :definition

    def ignore_groups
      @ignore_groups ||= LicenseFinder.config.ignore_groups
    end

    def setup_parent_child_relationships
      dependency_index = {}

      gems.each do |dep|
        dependency_index[dep.dependency_name] = dep
      end

      gems.each do |dep|
        dep.children.each do |child_dep|
          license_finder_dependency = dependency_index[child_dep]
          license_finder_dependency.parents << dep.dependency_name if license_finder_dependency
        end
      end
    end

    def dependencies
      @dependencies ||= definition.dependencies
    end

    def included_groups
      definition.groups - ignore_groups
    end

    def gemfile_path
      Pathname.new("Gemfile").expand_path
    end

    def lockfile_path
      gemfile_path.dirname.join('Gemfile.lock')
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
license_finder-0.7.3 lib/license_finder/bundle.rb
license_finder-0.7.1 lib/license_finder/bundle.rb