Sha256: 32c9141d0480839647d2cd29e4d5c003a2cf39d24c16814cef86096c83475100

Contents?: true

Size: 1.03 KB

Versions: 2

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

require "bundler"
require "bundler/lockfile_parser"
require "pathname"

module CobraCommander
  module Dependencies
    # Calculates ruby bundler dependencies
    class Bundler
      autoload :Package, "cobra_commander/dependencies/bundler/package"

      attr_reader :path

      def initialize(root)
        @root = Pathname.new(root)
        @path = @root.join("Gemfile.lock").realpath
      end

      def root
        Package.new(path: path, dependencies: lockfile.dependencies.values)
      end

      def packages
        @packages ||= components_source.specs.map do |spec|
          Package.new(spec)
        end
      end

    private

      def lockfile
        @lockfile ||= ::Bundler::LockfileParser.new(::Bundler.read_file(path))
      end

      def components_source
        @components_source ||= begin
          source = @lockfile.sources.find { |s| s.path.to_s.eql?("components") }
          ::Bundler::Source::Path.new(source.options.merge("root_path" => @root))
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cobra_commander-0.15.1 lib/cobra_commander/dependencies/bundler.rb
cobra_commander-0.15.0 lib/cobra_commander/dependencies/bundler.rb