mementus 0.5.13 → 0.6.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/README.md +0 -13
- data/lib/mementus/graph.rb +0 -2
- data/lib/mementus/node_proxy.rb +4 -1
- data/lib/mementus/structure/adjacency_list.rb +2 -0
- data/lib/mementus/structure/incidence_list.rb +40 -0
- data/lib/mementus/version.rb +1 -1
- data/spec/structure/incidence_list_spec.rb +2 -0
- data/spec/structure/mutable_graph_example.rb +60 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c8d7aae1069c6ccb20e101540608915d4c0b157b
|
4
|
+
data.tar.gz: 2b8273eb17e130395902b111c6d2714fd76ee444
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3080d4ed7e24a87065cf575e3df8675d30053f2afc5313f9f321a9a8b4677a04563e810d4168b4b461e8057a6a831d26c622c5983f9ca21fc747768abc61249
|
7
|
+
data.tar.gz: 39cd8b39a4dac486d3c24d9ccc9e0b53665c5406341d89695e82fc87c364c09b431097b8414e582196026c68222e13e02369a34dbc17a48bcc8f4d136f7181a9
|
data/README.md
CHANGED
@@ -2,19 +2,6 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/maetl/mementus)
|
4
4
|
|
5
|
-
## Roadmap
|
6
|
-
|
7
|
-
| Version | Summary |
|
8
|
-
|---------|--------------------------------------------------------------|
|
9
|
-
| `0.5` | ~~Support fiber based lazily evaluated pipeline traversals~~ |
|
10
|
-
| `0.6` | Modular graph processing API and query style |
|
11
|
-
| `0.7` | Implement basic filter, side effect and transform pipes |
|
12
|
-
| `0.8` | API support for Dijkstra/A* traversals using edge props |
|
13
|
-
| `0.9` | Pluggable graph structure representations |
|
14
|
-
| `0.10` | API support for tsort and strongly connected components |
|
15
|
-
| `0.11` | Expand graph library with interesting sample data |
|
16
|
-
| `0.12` | Import/export via JSON and XML formats |
|
17
|
-
|
18
5
|
## License
|
19
6
|
|
20
7
|
Provided under the terms of the MIT License. See the `LICENSE` file in the root of this project for more information.
|
data/lib/mementus/graph.rb
CHANGED
data/lib/mementus/node_proxy.rb
CHANGED
@@ -41,9 +41,12 @@ module Mementus
|
|
41
41
|
@graph.incoming(@node.id, match)
|
42
42
|
end
|
43
43
|
|
44
|
-
# TODO: Fix
|
45
44
|
def outgoing_edges(match=nil)
|
46
45
|
@graph.outgoing_edges(@node.id, match)
|
47
46
|
end
|
47
|
+
|
48
|
+
def incoming_edges(match=nil)
|
49
|
+
@graph.incoming_edges(@node.id, match)
|
50
|
+
end
|
48
51
|
end
|
49
52
|
end
|
@@ -163,6 +163,46 @@ module Mementus
|
|
163
163
|
def incoming_edges(id, match=nil)
|
164
164
|
incident_edges(id, match, :in)
|
165
165
|
end
|
166
|
+
|
167
|
+
def remove_node(node)
|
168
|
+
if node.is_a?(Mementus::Node) || node.is_a?(Mementus::NodeProxy)
|
169
|
+
node_id = node.id
|
170
|
+
else
|
171
|
+
node_id = node
|
172
|
+
end
|
173
|
+
|
174
|
+
@outgoing_e[node_id].each do |edge_id|
|
175
|
+
@incoming[@edges[edge_id].to.id].delete(node_id)
|
176
|
+
@incoming_e[@edges[edge_id].to.id].delete(edge_id)
|
177
|
+
@edges.delete(edge_id)
|
178
|
+
end
|
179
|
+
|
180
|
+
@incoming_e[node_id].each do |edge_id|
|
181
|
+
@outgoing[@edges[edge_id].from.id].delete(node_id)
|
182
|
+
@outgoing_e[@edges[edge_id].from.id].delete(edge_id)
|
183
|
+
@edges.delete(edge_id)
|
184
|
+
end
|
185
|
+
|
186
|
+
@nodes.delete(node_id)
|
187
|
+
end
|
188
|
+
|
189
|
+
def remove_edge(edge)
|
190
|
+
if edge.is_a?(Mementus::Edge) || edge.is_a?(Mementus::EdgeProxy)
|
191
|
+
edge_id = edge.id
|
192
|
+
else
|
193
|
+
edge_id = edge
|
194
|
+
end
|
195
|
+
|
196
|
+
edge = @edges[edge_id]
|
197
|
+
|
198
|
+
@outgoing[edge.from.id].delete(edge.to.id)
|
199
|
+
@incoming[edge.to.id].delete(edge.from.id)
|
200
|
+
|
201
|
+
@outgoing_e[edge.from.id].delete(edge_id)
|
202
|
+
@incoming_e[edge.to.id].delete(edge_id)
|
203
|
+
|
204
|
+
@edges.delete(edge_id)
|
205
|
+
end
|
166
206
|
end
|
167
207
|
end
|
168
208
|
end
|
data/lib/mementus/version.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require_relative 'indexed_graph_example'
|
2
2
|
require_relative 'directed_graph_example'
|
3
3
|
require_relative 'property_graph_example'
|
4
|
+
require_relative 'mutable_graph_example'
|
4
5
|
|
5
6
|
describe Mementus::Structure::IncidenceList do
|
6
7
|
let(:structure) do
|
@@ -10,4 +11,5 @@ describe Mementus::Structure::IncidenceList do
|
|
10
11
|
it_behaves_like 'an indexed graph data structure'
|
11
12
|
it_behaves_like 'a directed graph data structure'
|
12
13
|
it_behaves_like 'a property graph data structure'
|
14
|
+
it_behaves_like 'a mutable graph data structure'
|
13
15
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
shared_examples_for 'a mutable graph data structure' do
|
2
|
+
before do
|
3
|
+
structure.set_node(Mementus::Node.new(id: 1))
|
4
|
+
structure.set_node(Mementus::Node.new(id: 2))
|
5
|
+
structure.set_node(Mementus::Node.new(id: 3))
|
6
|
+
|
7
|
+
structure.set_edge(Mementus::Edge.new(id: 10, from: 1, to: 2))
|
8
|
+
structure.set_edge(Mementus::Edge.new(id: 20, from: 2, to: 3))
|
9
|
+
structure.set_edge(Mementus::Edge.new(id: 30, from: 1, to: 3))
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#remove_node' do
|
13
|
+
it 'removes all references to a given node' do
|
14
|
+
structure.remove_node(Mementus::Node.new(id: 2))
|
15
|
+
|
16
|
+
expect(structure.nodes.count).to eq(2)
|
17
|
+
expect(structure.edges.count).to eq(1)
|
18
|
+
expect(structure.node(1).outgoing.count).to eq(1)
|
19
|
+
expect(structure.node(3).incoming.count).to eq(1)
|
20
|
+
expect(structure.node(1).outgoing_edges.count).to eq(1)
|
21
|
+
expect(structure.node(3).incoming_edges.count).to eq(1)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'removes all references to a given node id' do
|
25
|
+
structure.remove_node(2)
|
26
|
+
|
27
|
+
expect(structure.nodes.count).to eq(2)
|
28
|
+
expect(structure.edges.count).to eq(1)
|
29
|
+
expect(structure.node(1).outgoing.count).to eq(1)
|
30
|
+
expect(structure.node(3).incoming.count).to eq(1)
|
31
|
+
expect(structure.node(1).outgoing_edges.count).to eq(1)
|
32
|
+
expect(structure.node(3).incoming_edges.count).to eq(1)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#remove_edge' do
|
37
|
+
it 'removes all references to a given edge' do
|
38
|
+
edge = Mementus::Edge.new(id: 10, from: 1, to: 2)
|
39
|
+
structure.remove_edge(edge)
|
40
|
+
|
41
|
+
expect(structure.nodes.count).to eq(3)
|
42
|
+
expect(structure.edges.count).to eq(2)
|
43
|
+
expect(structure.node(1).outgoing.count).to eq(1)
|
44
|
+
expect(structure.node(2).incoming.count).to eq(0)
|
45
|
+
expect(structure.node(1).outgoing_edges.count).to eq(1)
|
46
|
+
expect(structure.node(2).incoming_edges.count).to eq(0)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'removes all references to a given edge id' do
|
50
|
+
structure.remove_edge(10)
|
51
|
+
|
52
|
+
expect(structure.nodes.count).to eq(3)
|
53
|
+
expect(structure.edges.count).to eq(2)
|
54
|
+
expect(structure.node(1).outgoing.count).to eq(1)
|
55
|
+
expect(structure.node(2).incoming.count).to eq(0)
|
56
|
+
expect(structure.node(1).outgoing_edges.count).to eq(1)
|
57
|
+
expect(structure.node(2).incoming_edges.count).to eq(0)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mementus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maetl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -111,6 +111,7 @@ files:
|
|
111
111
|
- spec/structure/directed_graph_example.rb
|
112
112
|
- spec/structure/incidence_list_spec.rb
|
113
113
|
- spec/structure/indexed_graph_example.rb
|
114
|
+
- spec/structure/mutable_graph_example.rb
|
114
115
|
- spec/structure/property_graph_example.rb
|
115
116
|
- spec/traversal_spec.rb
|
116
117
|
homepage: https://github.com/maetl/mementus
|
@@ -154,6 +155,7 @@ test_files:
|
|
154
155
|
- spec/structure/directed_graph_example.rb
|
155
156
|
- spec/structure/incidence_list_spec.rb
|
156
157
|
- spec/structure/indexed_graph_example.rb
|
158
|
+
- spec/structure/mutable_graph_example.rb
|
157
159
|
- spec/structure/property_graph_example.rb
|
158
160
|
- spec/traversal_spec.rb
|
159
161
|
has_rdoc:
|