Sha256: 43d3c8ed409ec98dd4c19738ffadcff7f40b4a10185376d2deb50421114270a0

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

# frozen_string_literal: true

module DiverDown
  class Web
    class ModuleSourcesFilter
      # @param metadata_alias [DiverDown::Web::Metadata]
      def initialize(metadata)
        @metadata = metadata
      end

      # @param definition [DiverDown::Definition]
      # @param modules [Array<Array<String>>]
      # @return [DiverDown::Definition]
      def filter(definition, modules:)
        new_definition = DiverDown::Definition.new(
          definition_group: definition.definition_group,
          title: definition.title
        )

        is_match_modules = ->(source_name) do
          source_modules = @metadata.source(source_name).modules
          source_modules.first(modules.size) == modules
        end

        definition.sources.each do |source|
          next unless is_match_modules.call(source.source_name)

          new_source = new_definition.find_or_build_source(source.source_name)

          source.dependencies.each do |dependency|
            next unless is_match_modules.call(dependency.source_name)

            new_dependency = new_source.find_or_build_dependency(dependency.source_name)

            next unless new_dependency

            dependency.method_ids.each do |method_id|
              new_method_id = new_dependency.find_or_build_method_id(
                context: method_id.context,
                name: method_id.name
              )

              method_id.paths.each do |path|
                new_method_id.add_path(path)
              end
            end
          end
        end

        new_definition
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
diver_down-0.0.1.alpha14 lib/diver_down/web/module_sources_filter.rb