tangle 0.6.5 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tangle/directed/edge.rb +4 -3
- data/lib/tangle/edge.rb +2 -1
- data/lib/tangle/graph.rb +9 -3
- data/lib/tangle/graph_private.rb +1 -0
- data/lib/tangle/graph_protected.rb +4 -0
- data/lib/tangle/mixin/ancestry.rb +20 -6
- data/lib/tangle/simple/graph.rb +0 -6
- data/lib/tangle/vertex.rb +11 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5203984ea1bf3218c6ac6e2a84493af7feec46d2dda8f6005e8d24b5e81671db
|
4
|
+
data.tar.gz: b39938c50a2a828963af60ee6877dae048a52a5a83fb6e5ccadc3f2727cc66d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5598f8494cee8dfdbbc6061ab2f00596fb70fd419872a8884182c21b0ad0c62c234c2ac766df1dadffa4cd6ce84b60b5a1b44f46cbc27782e162535252db89b2
|
7
|
+
data.tar.gz: c34f2d721e72680ffca31108d1b608b868912bc8b631f9abd7ea866335503e287ae9031660a8d2c1e2781a6ce9276c22d302001339522ddf18224b665838695f
|
data/lib/tangle/directed/edge.rb
CHANGED
@@ -24,9 +24,10 @@ module Tangle
|
|
24
24
|
|
25
25
|
protected
|
26
26
|
|
27
|
-
def with_vertices(
|
28
|
-
@child
|
29
|
-
|
27
|
+
def with_vertices(child, parent = child)
|
28
|
+
@child = child
|
29
|
+
@parent = parent
|
30
|
+
super
|
30
31
|
end
|
31
32
|
end
|
32
33
|
end
|
data/lib/tangle/edge.rb
CHANGED
@@ -16,7 +16,8 @@ module Tangle
|
|
16
16
|
#
|
17
17
|
# End users should probably use Graph#add_edge instead.
|
18
18
|
#
|
19
|
-
def initialize(vertex1, vertex2 = vertex1, graph: nil, **kwargs)
|
19
|
+
def initialize(vertex1, vertex2 = vertex1, graph: nil, name: nil, **kwargs)
|
20
|
+
@name = name
|
20
21
|
with_graph(graph)
|
21
22
|
with_vertices(vertex1, vertex2)
|
22
23
|
|
data/lib/tangle/graph.rb
CHANGED
@@ -59,11 +59,12 @@ module Tangle
|
|
59
59
|
#
|
60
60
|
# edges => Array
|
61
61
|
#
|
62
|
-
def edges(&selector)
|
62
|
+
def edges(vertex: nil, &selector)
|
63
|
+
edges = vertex.nil? ? @edges : @edges_by_vertex[vertex]
|
63
64
|
if block_given?
|
64
|
-
|
65
|
+
edges.select(&selector)
|
65
66
|
else
|
66
|
-
|
67
|
+
edges.to_a
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -130,5 +131,10 @@ module Tangle
|
|
130
131
|
end
|
131
132
|
|
132
133
|
attr_reader :mixins
|
134
|
+
|
135
|
+
def to_s
|
136
|
+
"#<#{self.class}: #{vertices.count} vertices, #{edges.count} edges>"
|
137
|
+
end
|
138
|
+
alias inspect to_s
|
133
139
|
end
|
134
140
|
end
|
data/lib/tangle/graph_private.rb
CHANGED
@@ -10,6 +10,7 @@ module Tangle
|
|
10
10
|
def insert_vertex(vertex)
|
11
11
|
raise ArgumentError unless vertex.graph.eql?(self)
|
12
12
|
|
13
|
+
@edges_by_vertex[vertex] = []
|
13
14
|
@vertices_by_name[vertex.name] = vertex unless vertex.name.nil?
|
14
15
|
@vertices_by_id[vertex.vertex_id] = vertex
|
15
16
|
end
|
@@ -20,6 +21,9 @@ module Tangle
|
|
20
21
|
raise ArgumentError unless edge.graph.eql?(self)
|
21
22
|
|
22
23
|
@edges << edge
|
24
|
+
edge.vertices.each do |vertex|
|
25
|
+
@edges_by_vertex[vertex] << edge
|
26
|
+
end
|
23
27
|
edge
|
24
28
|
end
|
25
29
|
|
@@ -12,12 +12,14 @@ module Tangle
|
|
12
12
|
module Graph
|
13
13
|
include Tangle::Mixin::Connectedness::Graph
|
14
14
|
|
15
|
-
def ancestor_subgraph(vertex)
|
16
|
-
|
15
|
+
def ancestor_subgraph(vertex, &selector)
|
16
|
+
vertex = get_vertex(vertex) unless vertex.is_a? Vertex
|
17
|
+
clone.with_vertices(vertex.ancestors(&selector)).with_edges(edges)
|
17
18
|
end
|
18
19
|
|
19
|
-
def descendant_subgraph(vertex)
|
20
|
-
|
20
|
+
def descendant_subgraph(vertex, &selector)
|
21
|
+
vertex = get_vertex(vertex) unless vertex.is_a? Vertex
|
22
|
+
clone.with_vertices(vertex.descendants(&selector)).with_edges(edges)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
@@ -28,13 +30,19 @@ module Tangle
|
|
28
30
|
include Tangle::Mixin::Connectedness::Vertex
|
29
31
|
|
30
32
|
def parent_edges
|
31
|
-
@graph.edges { |edge| edge.child?(self) }
|
33
|
+
@graph.edges(vertex: self) { |edge| edge.child?(self) }
|
32
34
|
end
|
33
35
|
|
34
36
|
def parents
|
35
37
|
neighbours(parent_edges)
|
36
38
|
end
|
37
39
|
|
40
|
+
def ancestors
|
41
|
+
result = [self] + parents.flat_map(&:ancestors)
|
42
|
+
return result unless block_given?
|
43
|
+
result.select(&:yield)
|
44
|
+
end
|
45
|
+
|
38
46
|
def parent?(other)
|
39
47
|
@graph.edges.any? { |edge| edge.child?(self) && edge.parent?(other) }
|
40
48
|
end
|
@@ -44,7 +52,7 @@ module Tangle
|
|
44
52
|
end
|
45
53
|
|
46
54
|
def child_edges
|
47
|
-
@graph.edges { |edge| edge.parent?(self) }
|
55
|
+
@graph.edges(vertex: self) { |edge| edge.parent?(self) }
|
48
56
|
end
|
49
57
|
|
50
58
|
def children
|
@@ -55,6 +63,12 @@ module Tangle
|
|
55
63
|
@graph.edges.any? { |edge| edge.parent?(self) && edge.child?(other) }
|
56
64
|
end
|
57
65
|
|
66
|
+
def descendants
|
67
|
+
result = [self] + children.flat_map(&:descendants)
|
68
|
+
return result unless block_given?
|
69
|
+
result.select(&:yield)
|
70
|
+
end
|
71
|
+
|
58
72
|
def descendant?(other)
|
59
73
|
other == self || children.any? { |child| child.descendant?(other) }
|
60
74
|
end
|
data/lib/tangle/simple/graph.rb
CHANGED
data/lib/tangle/vertex.rb
CHANGED
@@ -46,7 +46,7 @@ module Tangle
|
|
46
46
|
def edges
|
47
47
|
return [] if @graph.nil?
|
48
48
|
|
49
|
-
@graph.edges
|
49
|
+
@graph.edges(vertex: self)
|
50
50
|
end
|
51
51
|
|
52
52
|
# Return the set of adjacent vertices
|
@@ -84,6 +84,16 @@ module Tangle
|
|
84
84
|
attr_reader :name
|
85
85
|
attr_reader :vertex_id
|
86
86
|
|
87
|
+
def to_s
|
88
|
+
values = {
|
89
|
+
class: self.class,
|
90
|
+
ident: name.nil? ? format('0x%x', vertex_id) : "'#{name}'",
|
91
|
+
n_edges: edges.count
|
92
|
+
}
|
93
|
+
format('#<%<class>s:%<ident>s: %<n_edges>d edges>', values)
|
94
|
+
end
|
95
|
+
alias inspect to_s
|
96
|
+
|
87
97
|
protected
|
88
98
|
|
89
99
|
def with_graph(graph)
|