Sha256: b2aaf6a8387a09039835231c19c047698c8e335862741ef57ce008a25785ca79

Contents?: true

Size: 1.85 KB

Versions: 2

Compression:

Stored size: 1.85 KB

Contents

# typed: strict
# frozen_string_literal: true

module Graphwerk
  module Presenters
    class Package
      extend T::Sig

      sig { params(package: Packwerk::Package, root_path: Pathname).void }
      def initialize(package, root_path)
        @package = package
        @root_path = root_path
      end

      sig { returns(String) }
      def name
        package_name.node_name
      end

      sig { returns(T::Array[String]) }
      def dependencies
        @package.dependencies.map { |dependency| Name.new(dependency).node_name }
      end

      sig { returns(T::Array[String]) }
      def deprecated_references
        DeprecatedReferencesLoader.new(@package, @root_path).load.map do |reference|
          Name.new(reference).node_name
        end
      end

      ROOT_COLOR = 'black'
      COMPONENT_COLOR = 'azure4'

      sig { returns(String) }
      def color
        return ROOT_COLOR if package_name.root?

        COMPONENT_COLOR
      end

      private

      sig { returns(Name) }
      def package_name
        @package_name = T.let(@package_name, T.nilable(Name))
        @package_name ||= Name.new(@package.name)
      end

      class Name
        extend T::Sig

        sig { params(package_name: String).void }
        def initialize(package_name)
          @package_name = package_name
        end

        sig { returns(String) }
        def node_name
          return without_root_package unless root?

          Constants::ROOT_PACKAGE_NAME
        end

        sig { returns(T::Boolean) }
        def root?
          @package_name == Packwerk::Package::ROOT_PACKAGE_NAME
        end

        private

        sig { returns(String) }
        def without_root_package
          T.must(@package_name.split('/', 2).last)
        end
      end

      private_constant :ROOT_COLOR,
                       :COMPONENT_COLOR,
                       :Name
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
graphwerk-1.2.1 lib/graphwerk/presenters/package.rb
graphwerk-1.2.0 lib/graphwerk/presenters/package.rb