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
[email protected] => prefix.keytree
+forest+ = [ +meta+ = {},
+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['_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 |
#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
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_h ⇒ Object
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_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
100 101 102 |
# File 'lib/dagger/vertex.rb', line 100 def to_yaml flatten(cleanup: true).to_yaml end |