Class: Dagger::Vertex
- Inherits:
-
Object
- Object
- Dagger::Vertex
- 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+ = [ ++ = {},
+local+ [ { file_keys }, ... ],
[ { Default } ],
+inherited+ = [ [ parent ], ... ]
]
Instance Method Summary collapse
- #<<(keytree) ⇒ Object
- #[](key) ⇒ Object
- #added_to_graph(graph) ⇒ Object
- #edge_added(edge) ⇒ Object
- #edge_removed(edge) ⇒ Object
- #fetch(key, *default, &block) ⇒ Object
- #flatten(cleanup: true) ⇒ Object
-
#initialize(name, cached: false) ⇒ Vertex
constructor
A new instance of Vertex.
- #name ⇒ Object (also: #to_s)
- #removed_from_graph(graph) ⇒ Object
- #to_h ⇒ Object
- #to_json(*args) ⇒ Object
- #to_key_forest ⇒ Object (also: #to_key_wood)
- #to_yaml ⇒ Object
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.name'] = name ['_meta.basename'] = File.basename(name) ['_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 |
#name ⇒ Object 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_h ⇒ Object
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_forest ⇒ Object Also known as: to_key_wood
30 31 32 |
# File 'lib/dagger/vertex.rb', line 30 def to_key_forest @forest end |
#to_yaml ⇒ Object
102 103 104 |
# File 'lib/dagger/vertex.rb', line 102 def to_yaml flatten(cleanup: true).to_yaml end |