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
  prefix@file.yaml  => 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



56
57
58
# File 'lib/dagger/vertex.rb', line 56

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('^')] if key.prefix?('^')

  @forest[key]
end

#added_to_graph(graph) ⇒ Object



72
73
74
75
76
# File 'lib/dagger/vertex.rb', line 72

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

  @graph = graph
end

#edge_added(edge) ⇒ Object



60
61
62
63
64
# File 'lib/dagger/vertex.rb', line 60

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

  @inherited << edge.tail.to_key_wood
end

#edge_removed(edge) ⇒ Object



66
67
68
69
70
# File 'lib/dagger/vertex.rb', line 66

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
53
54
# File 'lib/dagger/vertex.rb', line 47

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

#flatten(cleanup: true) ⇒ Object



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

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



78
79
80
81
82
# File 'lib/dagger/vertex.rb', line 78

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

  @graph = nil
end

#to_hObject



98
99
100
# File 'lib/dagger/vertex.rb', line 98

def to_h
  flatten(cleanup: true).to_h
end

#to_json(*args) ⇒ Object



106
107
108
# File 'lib/dagger/vertex.rb', line 106

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



102
103
104
# File 'lib/dagger/vertex.rb', line 102

def to_yaml
  flatten(cleanup: true).to_yaml
end