Class: Yarrow::Content::SourceCollector

Inherits:
Object
  • Object
show all
Defined in:
lib/yarrow/content/source_collector.rb

Overview

Collects a digraph of all directories and files underneath the given input directory.

Class Method Summary collapse

Class Method Details

.collect(input_dir) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
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
# File 'lib/yarrow/content/source_collector.rb', line 6

def self.collect(input_dir)
  Mementus::Graph.new(is_mutable: true) do
    root = create_node do |root|
      root.label = :root
    end

    directories = {
      Pathname.new(input_dir).to_s => root.id
    }

    Pathname.glob("#{input_dir}/**/**").each do |entry|
      if entry.directory?
        #puts "Reading directory: #{entry}"

        content_node = create_node do |dir|
          dir.label = :directory
          dir.props[:name] = entry.basename.to_s
          dir.props[:slug] = entry.basename.to_s
          dir.props[:path] = entry.to_s
          dir.props[:entry] = entry
        end

        directories[entry.to_s] = content_node.id
      else
        #puts "Reading file: #{entry} (#{entry.basename.sub_ext('')})"

        content_node = create_node do |file|
          file.label = :file
          file.props[:name] = entry.basename.to_s
          file.props[:slug] = entry.basename.sub_ext('').to_s
          file.props[:path] = entry.to_s
          file.props[:entry] = entry
        end
      end

      if directories.key?(entry.dirname.to_s)
        #puts "Create parent edge: #{directories[entry.dirname.to_s]}"

        create_edge do |edge|
          edge.label = :child
          edge.from = directories[entry.dirname.to_s]
          edge.to = content_node
        end
      end
    end
  end
end