Class: Dagger::Vertex

Inherits:
Object
  • Object
show all
Defined in:
lib/dagger/vertex.rb

Overview

Vertex class for Dagger, representing a filesystem directory

dir/
  file.yaml         => keytree
  [email protected]  => prefix.keytree

+forest+ = [ +meta+       = {},
             +local+        [ { file_keys }, ... ],
                            [ { Default } ],
             +inherited+  = [ [ parent ], ... ]
           ]

Instance Method Summary collapse

Constructor Details

#initialize(name, cached: false) ⇒ Vertex

Returns a new instance of Vertex.



23
24
25
26
27
28
# File 'lib/dagger/vertex.rb', line 23

def initialize(name, cached: false)
  @forest = initialize_forest(cached)
  @meta['_meta.name'] = name
  @meta['_meta.basename'] = File.basename(name)
  @meta['_meta.dirname'] = File.dirname(name)
end

Instance Method Details

#<<(keytree) ⇒ Object



54
55
56
# File 'lib/dagger/vertex.rb', line 54

def <<(keytree)
  @local << keytree
end

#[](key) ⇒ Object



40
41
42
43
44
45
# File 'lib/dagger/vertex.rb', line 40

def [](key)
  key = key.to_key_path
  return @inherited[key.drop(1)] if key.prefix?('^')

  @forest[key]
end

#added_to_graph(graph) ⇒ Object



70
71
72
73
74
# File 'lib/dagger/vertex.rb', line 70

def added_to_graph(graph)
  raise %(belongs another graph) if @graph&.!= graph

  @graph = graph
end

#edge_added(edge) ⇒ Object



58
59
60
61
62
# File 'lib/dagger/vertex.rb', line 58

def edge_added(edge)
  return unless edge.head?(self)

  @inherited << edge.tail.to_key_wood
end

#edge_removed(edge) ⇒ Object



64
65
66
67
68
# File 'lib/dagger/vertex.rb', line 64

def edge_removed(edge)
  return unless edge.head?(self)

  @inherited.reject! { |tree| tree.equal?(edge.tail.to_key_wood) }
end

#fetch(key, *default, &block) ⇒ Object



47
48
49
50
51
52
# File 'lib/dagger/vertex.rb', line 47

def fetch(key, *default, &block)
  key = key.to_key_path
  return @inherited.fetch(key.drop(1), *default, &block) if key.prefix?('^')

  @forest.fetch(key, *default, &block)
end

#flatten(cleanup: true) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/dagger/vertex.rb', line 82

def flatten(cleanup: true)
  forest = initialize_forest(true)

  forest.key_paths.select { |key| key.prefix?('_default') }.each do |key|
    forest[key.drop(1)]
  end

  flattened = forest.flatten
  return flattened unless cleanup

  flattened.to_h.delete_if { |key| key.to_s.start_with?('_') }
  flattened
end

#nameObject Also known as: to_s



35
36
37
# File 'lib/dagger/vertex.rb', line 35

def name
  @forest['_meta.name']
end

#removed_from_graph(graph) ⇒ Object



76
77
78
79
80
# File 'lib/dagger/vertex.rb', line 76

def removed_from_graph(graph)
  raise %(not part of graph) if @graph&.!= graph

  @graph = nil
end

#to_hObject



96
97
98
# File 'lib/dagger/vertex.rb', line 96

def to_h
  flatten(cleanup: true).to_h
end

#to_json(*args) ⇒ Object



104
105
106
# File 'lib/dagger/vertex.rb', line 104

def to_json(*args)
  flatten(cleanup: true).to_json(*args)
end

#to_key_forestObject Also known as: to_key_wood



30
31
32
# File 'lib/dagger/vertex.rb', line 30

def to_key_forest
  @forest
end

#to_yamlObject



100
101
102
# File 'lib/dagger/vertex.rb', line 100

def to_yaml
  flatten(cleanup: true).to_yaml
end