Sha256: 2368e8806f434667cd0508449f4515299999d725b9e9fcf0ce4156e2aa1a34ed

Contents?: true

Size: 1.86 KB

Versions: 20

Compression:

Stored size: 1.86 KB

Contents

# typed: true
# frozen_string_literal: true

require "json"
require "dependabot/dependency_file"
require "dependabot/composer/file_fetcher"
require "dependabot/composer/file_parser"

module Dependabot
  module Composer
    class FileFetcher
      class PathDependencyBuilder
        def initialize(path:, directory:, lockfile:)
          @path = path
          @directory = directory
          @lockfile = lockfile
        end

        def dependency_file
          filename = File.join(path, PackageManager::MANIFEST_FILENAME)

          # Current we just return `nil` if a path dependency can't be built.
          # In future we may wish to change that to a raise. (We'll get errors
          # in the UpdateChecker or FileUpdater if we fail to build files.)
          built_content = build_path_dep_content
          return unless built_content

          DependencyFile.new(
            name: Pathname.new(filename).cleanpath.to_path,
            content: built_content,
            directory: directory,
            support_file: true
          )
        end

        private

        attr_reader :path
        attr_reader :lockfile
        attr_reader :directory

        def details_from_lockfile
          keys = FileParser::DEPENDENCY_GROUP_KEYS
                 .map { |h| h.fetch(:lockfile) }

          keys.each do |key|
            next unless parsed_lockfile[key]

            parsed_lockfile[key].each do |details|
              return details if details.dig("dist", "url") == path
            end
          end

          nil
        end

        def build_path_dep_content
          return unless details_from_lockfile

          details_from_lockfile.to_json
        end

        def parsed_lockfile
          return {} unless lockfile

          @parsed_lockfile ||= JSON.parse(lockfile.content)
        rescue JSON::ParserError
          {}
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
dependabot-composer-0.301.1 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.301.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.300.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.299.1 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.299.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.298.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.297.2 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.297.1 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.297.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.296.3 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.296.2 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.296.1 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.296.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.295.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.294.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.293.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.292.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.291.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.290.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb
dependabot-composer-0.289.0 lib/dependabot/composer/file_fetcher/path_dependency_builder.rb