Class: DiverDown::Web::DefinitionFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/diver_down/web/definition_filter.rb

Instance Method Summary collapse

Constructor Details

#initialize(metadata, focus_modules: [], modules: [], remove_internal_sources: false) ⇒ DefinitionFilter

Returns a new instance of DefinitionFilter.

Parameters:

  • metadata_alias (DiverDown::Web::Metadata)
  • focus_modules (Array<String>) (defaults to: [])
  • modules (Array<String>) (defaults to: [])
  • remove_internal_sources (Boolean) (defaults to: false)


10
11
12
13
14
15
# File 'lib/diver_down/web/definition_filter.rb', line 10

def initialize(, focus_modules: [], modules: [], remove_internal_sources: false)
  @metadata = 
  @focus_modules = focus_modules
  @modules = modules | focus_modules
  @remove_internal_sources = remove_internal_sources
end

Instance Method Details

#filter(definition) ⇒ DiverDown::Definition

Parameters:

Returns:



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/diver_down/web/definition_filter.rb', line 19

def filter(definition)
  return definition if !@remove_internal_sources && @modules.empty?

  new_definition = DiverDown::Definition.new(
    definition_group: definition.definition_group,
    title: definition.title
  )

  source_names = extract_match_source_names(definition.sources)

  definition.sources.each do |source|
    next unless source_names.include?(source.source_name)

    new_source = new_definition.find_or_build_source(source.source_name)

    source.dependencies.each do |dependency|
      next unless source_names.include?(dependency.source_name)
      next unless focus_module?(source, dependency)
      next if @remove_internal_sources && @metadata.source(source.source_name).module == @metadata.source(dependency.source_name).module

      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