mementus 0.4.0 → 0.5.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/Gemfile +0 -1
- data/lib/mementus/breadth_first_search.rb +5 -5
- data/lib/mementus/depth_first_search.rb +5 -5
- data/lib/mementus/edge.rb +13 -12
- data/lib/mementus/edge_builder.rb +6 -23
- data/lib/mementus/element_builder.rb +5 -0
- data/lib/mementus/graph.rb +4 -0
- data/lib/mementus/graph_builder.rb +21 -13
- data/lib/mementus/node.rb +1 -1
- data/lib/mementus/node_builder.rb +3 -12
- data/lib/mementus/node_proxy.rb +13 -7
- data/lib/mementus/pipeline.rb +9 -11
- data/lib/mementus/query/step.rb +3 -2
- data/lib/mementus/structure/adjacency_list.rb +7 -7
- data/lib/mementus/structure/incidence_list.rb +15 -11
- data/lib/mementus/version.rb +1 -1
- data/lib/mementus.rb +19 -18
- data/spec/edge_spec.rb +5 -5
- data/spec/graph_spec.rb +34 -15
- data/spec/node_proxy_spec.rb +5 -8
- data/spec/node_spec.rb +16 -0
- data/spec/query_spec.rb +1 -1
- data/spec/spec_helper.rb +20 -0
- data/spec/structure_spec.rb +13 -13
- data/spec/traversal_spec.rb +7 -7
- metadata +5 -3
- data/Rakefile +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 419399d50dad3b0243a7756f259e99f64bec6da5
|
4
|
+
data.tar.gz: 12a25815a2bb6fd8beebdfd1d9aaf696f1ee5e03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a8c602c0b356d31062eac51d63fc4e93b1740abc417baed0824018d04f75308ac12fdfb47953689bce86bfa8600a62675036d7e15a7107a4e3d3ae287125b85
|
7
|
+
data.tar.gz: b68d9dd85cf13935e41006c8814242243d1b3701672037a79e831433b011ac2b6a3861b1b13dc959c8a1a560349e01967d58ac8c727b0ded0cf3c2d1d5694e96
|
data/Gemfile
CHANGED
@@ -16,12 +16,12 @@ module Mementus
|
|
16
16
|
def visit(id, &block)
|
17
17
|
@queue.concat(@graph.adjacent(id))
|
18
18
|
|
19
|
-
while
|
20
|
-
next if @visited[
|
19
|
+
while next_node = @queue.shift
|
20
|
+
next if @visited[next_node]
|
21
21
|
|
22
|
-
@visited[
|
23
|
-
block.call(
|
24
|
-
@queue.concat(@graph.adjacent(
|
22
|
+
@visited[next_node] = true
|
23
|
+
block.call(next_node)
|
24
|
+
@queue.concat(@graph.adjacent(next_node.id))
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -13,12 +13,12 @@ module Mementus
|
|
13
13
|
private
|
14
14
|
|
15
15
|
def visit(id, &block)
|
16
|
-
@graph.each_adjacent(id) do |
|
17
|
-
next if @visited[
|
16
|
+
@graph.each_adjacent(id) do |adj_node|
|
17
|
+
next if @visited[adj_node.id]
|
18
18
|
|
19
|
-
@visited[
|
20
|
-
block.call(
|
21
|
-
visit(
|
19
|
+
@visited[adj_node.id] = true
|
20
|
+
block.call(adj_node)
|
21
|
+
visit(adj_node.id, &block)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/lib/mementus/edge.rb
CHANGED
@@ -2,20 +2,21 @@ module Mementus
|
|
2
2
|
class Edge
|
3
3
|
attr_reader :from, :to, :label, :id
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
|
7
|
-
|
8
|
-
else
|
9
|
-
from
|
10
|
-
end
|
5
|
+
def initialize(id: nil, from:, to:, label: :edge)
|
6
|
+
@id = id
|
7
|
+
@label = label
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
@from = if from.is_a?(Integer)
|
10
|
+
Node.new(id: from)
|
11
|
+
else
|
12
|
+
from
|
13
|
+
end
|
17
14
|
|
18
|
-
@
|
15
|
+
@to = if to.is_a?(Integer)
|
16
|
+
Node.new(id: to)
|
17
|
+
else
|
18
|
+
to
|
19
|
+
end
|
19
20
|
end
|
20
21
|
|
21
22
|
def nodes
|
@@ -1,23 +1,14 @@
|
|
1
1
|
module Mementus
|
2
2
|
class EdgeBuilder
|
3
|
-
|
3
|
+
include ElementBuilder
|
4
4
|
|
5
|
-
|
6
|
-
@from = from
|
7
|
-
@to = to
|
8
|
-
@label = label
|
9
|
-
@id = id
|
10
|
-
end
|
11
|
-
|
12
|
-
def id=(id)
|
13
|
-
@id = id
|
14
|
-
end
|
5
|
+
attr_reader :from, :to
|
15
6
|
|
16
7
|
def from=(node, label=:node)
|
17
8
|
if node.is_a?(Node)
|
18
9
|
@from = node
|
19
10
|
else
|
20
|
-
@from = Node.new(node, label)
|
11
|
+
@from = Node.new(id: node, label: label)
|
21
12
|
end
|
22
13
|
end
|
23
14
|
|
@@ -25,20 +16,12 @@ module Mementus
|
|
25
16
|
if node.is_a?(Node)
|
26
17
|
@to = node
|
27
18
|
else
|
28
|
-
@to = Node.new(node, label)
|
19
|
+
@to = Node.new(id: node, label: label)
|
29
20
|
end
|
30
21
|
end
|
31
22
|
|
32
|
-
def
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def nodes
|
37
|
-
[@from, @to]
|
38
|
-
end
|
39
|
-
|
40
|
-
def other(node)
|
41
|
-
@from == node ? @to : @from
|
23
|
+
def to_edge
|
24
|
+
Edge.new(id: id, from: from, to: to, label: label)
|
42
25
|
end
|
43
26
|
end
|
44
27
|
end
|
data/lib/mementus/graph.rb
CHANGED
@@ -6,26 +6,34 @@ module Mementus
|
|
6
6
|
@edge_ids = IntegerId.new
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
@structure.
|
9
|
+
def set_node(node)
|
10
|
+
@structure.set_node(node)
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
edge
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
def set_edge(edge)
|
14
|
+
@structure.set_edge(edge)
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_node(id: nil, label: nil)
|
18
|
+
@structure.set_node(Node.new(id: id, label: label))
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_edge(id: nil, from: nil, to: nil, label: nil)
|
22
|
+
@structure.set_edge(Edge.new(id: id, from: from, to: to, label: label))
|
18
23
|
end
|
19
24
|
|
20
25
|
def create_node(&block)
|
21
|
-
|
22
|
-
yield
|
23
|
-
|
24
|
-
|
26
|
+
builder = NodeBuilder.new
|
27
|
+
yield builder
|
28
|
+
builder.id = @node_ids.next_id unless builder.id
|
29
|
+
set_node(builder.to_node)
|
25
30
|
end
|
26
31
|
|
27
|
-
def
|
28
|
-
|
32
|
+
def create_edge(&block)
|
33
|
+
builder = EdgeBuilder.new
|
34
|
+
yield builder
|
35
|
+
builder.id = @edge_ids.next_id unless builder.id
|
36
|
+
set_edge(builder.to_edge)
|
29
37
|
end
|
30
38
|
|
31
39
|
def graph
|
data/lib/mementus/node.rb
CHANGED
@@ -1,18 +1,9 @@
|
|
1
1
|
module Mementus
|
2
2
|
class NodeBuilder
|
3
|
-
|
3
|
+
include ElementBuilder
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
@label = label
|
8
|
-
end
|
9
|
-
|
10
|
-
def id=(id)
|
11
|
-
@id = id
|
12
|
-
end
|
13
|
-
|
14
|
-
def label=(label)
|
15
|
-
@label = label
|
5
|
+
def to_node
|
6
|
+
Node.new(id: id, label: label)
|
16
7
|
end
|
17
8
|
end
|
18
9
|
end
|
data/lib/mementus/node_proxy.rb
CHANGED
@@ -1,22 +1,28 @@
|
|
1
1
|
module Mementus
|
2
2
|
class NodeProxy
|
3
|
-
def initialize(
|
4
|
-
@
|
3
|
+
def initialize(node, graph)
|
4
|
+
@node = node
|
5
5
|
@graph = graph
|
6
6
|
end
|
7
7
|
|
8
8
|
def id
|
9
|
-
@id
|
9
|
+
@node.id
|
10
|
+
end
|
11
|
+
|
12
|
+
def label
|
13
|
+
@node.label
|
14
|
+
end
|
15
|
+
|
16
|
+
def outgoing
|
17
|
+
|
10
18
|
end
|
11
19
|
|
12
20
|
def each_adjacent(&block)
|
13
|
-
@graph.each_adjacent(@id, &block)
|
21
|
+
@graph.each_adjacent(@node.id, &block)
|
14
22
|
end
|
15
23
|
|
16
24
|
def adjacent
|
17
|
-
|
18
|
-
self.class.new(node, @graph)
|
19
|
-
end
|
25
|
+
@graph.adjacent(@node.id)
|
20
26
|
end
|
21
27
|
end
|
22
28
|
end
|
data/lib/mementus/pipeline.rb
CHANGED
@@ -69,10 +69,8 @@ module Mementus
|
|
69
69
|
|
70
70
|
class Outgoing
|
71
71
|
def process(graph, source)
|
72
|
-
if source.respond_to?(:
|
73
|
-
|
74
|
-
Mementus::NodeProxy.new(id, graph)
|
75
|
-
end
|
72
|
+
if source.respond_to?(:adjacent)
|
73
|
+
source.adjacent
|
76
74
|
else
|
77
75
|
source.inject([]) do |result, node|
|
78
76
|
result.concat(node.adjacent)
|
@@ -84,7 +82,7 @@ module Mementus
|
|
84
82
|
class OutgoingEdges
|
85
83
|
def process(graph, node)
|
86
84
|
graph.each_adjacent(node.id).map do |id|
|
87
|
-
Mementus::Edge.new(node, id)
|
85
|
+
Mementus::Edge.new(from: node, to: id)
|
88
86
|
end
|
89
87
|
end
|
90
88
|
end
|
@@ -93,9 +91,9 @@ module Mementus
|
|
93
91
|
def process(graph, node)
|
94
92
|
incoming = []
|
95
93
|
|
96
|
-
graph.each_node do |
|
97
|
-
graph.each_adjacent(
|
98
|
-
incoming <<
|
94
|
+
graph.each_node do |graph_node|
|
95
|
+
graph.each_adjacent(graph_node.id) do |adj_node|
|
96
|
+
incoming << graph_node if adj_node.id == node.id
|
99
97
|
end
|
100
98
|
end
|
101
99
|
|
@@ -108,9 +106,9 @@ module Mementus
|
|
108
106
|
ids = source.respond_to?(:id) ? [source.id] : source.map(&:id)
|
109
107
|
incoming = []
|
110
108
|
|
111
|
-
graph.each_node do |
|
112
|
-
graph.each_adjacent(
|
113
|
-
incoming << Mementus::Edge.new(
|
109
|
+
graph.each_node do |graph_node|
|
110
|
+
graph.each_adjacent(graph_node.id) do |adj_node|
|
111
|
+
incoming << Mementus::Edge.new(from: graph_node, to: adj_node) if ids.include?(adj_node.id)
|
114
112
|
end
|
115
113
|
end
|
116
114
|
|
data/lib/mementus/query/step.rb
CHANGED
@@ -20,13 +20,13 @@ module Mementus
|
|
20
20
|
@is_directed
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def set_node(node)
|
24
24
|
@index[node.id] ||= Set.new
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
|
29
|
-
|
27
|
+
def set_edge(edge)
|
28
|
+
set_node(edge.from) unless has_node?(edge.from)
|
29
|
+
set_node(edge.to) unless has_node?(edge.to)
|
30
30
|
|
31
31
|
@index[edge.from.id].add(edge.to.id)
|
32
32
|
@index[edge.to.id].add(edge.from.id) unless directed?
|
@@ -41,11 +41,11 @@ module Mementus
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def node(id)
|
44
|
-
NodeProxy.new(id, self)
|
44
|
+
NodeProxy.new(Node.new(id: id), self)
|
45
45
|
end
|
46
46
|
|
47
47
|
def nodes
|
48
|
-
@index.keys.map { |id| NodeProxy.new(id, self) }
|
48
|
+
@index.keys.map { |id| NodeProxy.new(Node.new(id: id), self) }
|
49
49
|
end
|
50
50
|
|
51
51
|
def adjacent(id)
|
@@ -64,7 +64,7 @@ module Mementus
|
|
64
64
|
if directed?
|
65
65
|
each_node do |from|
|
66
66
|
each_adjacent(from.id) do |to|
|
67
|
-
yield Edge.new(from, to)
|
67
|
+
yield Edge.new(from: from, to: to)
|
68
68
|
end
|
69
69
|
end
|
70
70
|
else
|
@@ -26,26 +26,30 @@ module Mementus
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def has_edge?(edge)
|
29
|
-
@edges.key?(
|
29
|
+
@edges.key?(edge.id)
|
30
30
|
end
|
31
31
|
|
32
|
-
def
|
33
|
-
@nodes[node.id] = node
|
32
|
+
def set_node(node)
|
33
|
+
@nodes[node.id] = NodeProxy.new(node, self)
|
34
34
|
@outgoing[node.id] ||= []
|
35
35
|
@incoming[node.id] ||= []
|
36
36
|
end
|
37
37
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
38
|
+
def set_edge(edge)
|
39
|
+
set_node(edge.from) unless has_node?(edge.from)
|
40
|
+
set_node(edge.to) unless has_node?(edge.to)
|
41
41
|
|
42
|
-
@edges[
|
42
|
+
@edges[edge.id] = edge
|
43
43
|
@outgoing[edge.from.id] << edge.to.id
|
44
44
|
@incoming[edge.to.id] << edge.from.id
|
45
45
|
end
|
46
46
|
|
47
|
+
def edge(id)
|
48
|
+
@edges[id]
|
49
|
+
end
|
50
|
+
|
47
51
|
def node(id)
|
48
|
-
|
52
|
+
@nodes[id]
|
49
53
|
end
|
50
54
|
|
51
55
|
def each_node(&block)
|
@@ -53,15 +57,15 @@ module Mementus
|
|
53
57
|
end
|
54
58
|
|
55
59
|
def nodes
|
56
|
-
@nodes.
|
60
|
+
@nodes.values
|
57
61
|
end
|
58
62
|
|
59
63
|
def adjacent(id)
|
60
|
-
@outgoing[id]
|
64
|
+
@nodes.values_at(*@outgoing[id])
|
61
65
|
end
|
62
66
|
|
63
67
|
def each_adjacent(id, &blk)
|
64
|
-
|
68
|
+
adjacent(id).each(&blk)
|
65
69
|
end
|
66
70
|
end
|
67
71
|
end
|
data/lib/mementus/version.rb
CHANGED
data/lib/mementus.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
1
|
+
require 'mementus/graph'
|
2
|
+
require 'mementus/structure/adjacency_list'
|
3
|
+
require 'mementus/structure/incidence_list'
|
4
|
+
require 'mementus/node'
|
5
|
+
require 'mementus/edge'
|
6
|
+
require 'mementus/node_proxy'
|
7
|
+
require 'mementus/pipeline'
|
8
|
+
require 'mementus/depth_first_search'
|
9
|
+
require 'mementus/breadth_first_search'
|
10
|
+
require 'mementus/query/traversal'
|
11
|
+
require 'mementus/query/source'
|
12
|
+
require 'mementus/query/step'
|
13
|
+
require 'mementus/query/traversal'
|
14
|
+
require 'mementus/integer_id'
|
15
|
+
require 'mementus/element_builder'
|
16
|
+
require 'mementus/graph_builder'
|
17
|
+
require 'mementus/node_builder'
|
18
|
+
require 'mementus/edge_builder'
|
19
|
+
require 'mementus/direction'
|
data/spec/edge_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Mementus::Edge do
|
4
4
|
it 'should initialize with integer ids' do
|
5
|
-
edge = Mementus::Edge.new(1, 2)
|
5
|
+
edge = Mementus::Edge.new(from: 1, to: 2)
|
6
6
|
|
7
7
|
expect(edge.from).to be_a(Mementus::Node)
|
8
8
|
expect(edge.from.id).to eq(1)
|
@@ -11,7 +11,7 @@ describe Mementus::Edge do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'should initialize with node instances' do
|
14
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1), Mementus::Node.new(2))
|
14
|
+
edge = Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2))
|
15
15
|
|
16
16
|
expect(edge.from).to be_a(Mementus::Node)
|
17
17
|
expect(edge.from.id).to eq(1)
|
@@ -20,14 +20,14 @@ describe Mementus::Edge do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should initialize with label given' do
|
23
|
-
edge = Mementus::Edge.new(1, 2, :relationship)
|
23
|
+
edge = Mementus::Edge.new(from: 1, to: 2, label: :relationship)
|
24
24
|
|
25
25
|
expect(edge.label).to eq(:relationship)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should test equality based on value' do
|
29
|
-
edge1 = Mementus::Edge.new(1, 2, :relationship)
|
30
|
-
edge2 = Mementus::Edge.new(1, 2, :relationship)
|
29
|
+
edge1 = Mementus::Edge.new(from: 1, to: 2, label: :relationship)
|
30
|
+
edge2 = Mementus::Edge.new(from: 1, to: 2, label: :relationship)
|
31
31
|
|
32
32
|
expect(edge1).to eq(edge2)
|
33
33
|
expect(edge1.hash).to eq(edge2.hash)
|
data/spec/graph_spec.rb
CHANGED
@@ -8,13 +8,23 @@ describe Mementus::Graph do
|
|
8
8
|
expect(graph.edges_count).to eq(0)
|
9
9
|
end
|
10
10
|
|
11
|
+
specify '#set_node' do
|
12
|
+
graph = Mementus::Graph.new do
|
13
|
+
set_node(node_1)
|
14
|
+
end
|
15
|
+
|
16
|
+
expect(graph.nodes_count).to eq(1)
|
17
|
+
expect(graph.edges_count).to eq(0)
|
18
|
+
end
|
19
|
+
|
11
20
|
specify '#add_node' do
|
12
21
|
graph = Mementus::Graph.new do
|
13
|
-
add_node(
|
22
|
+
add_node(id: 1)
|
14
23
|
end
|
15
24
|
|
16
25
|
expect(graph.nodes_count).to eq(1)
|
17
26
|
expect(graph.edges_count).to eq(0)
|
27
|
+
expect(graph.node(1).id).to eq(1)
|
18
28
|
end
|
19
29
|
|
20
30
|
specify '#create_node' do
|
@@ -27,12 +37,23 @@ describe Mementus::Graph do
|
|
27
37
|
|
28
38
|
expect(graph.nodes_count).to eq(1)
|
29
39
|
expect(graph.edges_count).to eq(0)
|
40
|
+
expect(graph.node(20).id).to eq(20)
|
41
|
+
end
|
42
|
+
|
43
|
+
specify '#set_edge' do
|
44
|
+
graph = Mementus::Graph.new do
|
45
|
+
set_edge(edge_1_2)
|
46
|
+
end
|
47
|
+
|
48
|
+
expect(graph.nodes_count).to eq(2)
|
49
|
+
expect(graph.edges_count).to eq(1)
|
30
50
|
expect(graph.node(1).id).to eq(1)
|
51
|
+
expect(graph.node(2).id).to eq(2)
|
31
52
|
end
|
32
53
|
|
33
54
|
specify '#add_edge' do
|
34
55
|
graph = Mementus::Graph.new do
|
35
|
-
add_edge(
|
56
|
+
add_edge(id: 3, from: 1, to: 2)
|
36
57
|
end
|
37
58
|
|
38
59
|
expect(graph.nodes_count).to eq(2)
|
@@ -44,6 +65,7 @@ describe Mementus::Graph do
|
|
44
65
|
specify '#create_edge' do
|
45
66
|
graph = Mementus::Graph.new do
|
46
67
|
create_edge do |edge|
|
68
|
+
edge.id = 123
|
47
69
|
edge.label = :relationship
|
48
70
|
edge.from = "A"
|
49
71
|
edge.to = "B"
|
@@ -52,42 +74,39 @@ describe Mementus::Graph do
|
|
52
74
|
|
53
75
|
expect(graph.nodes_count).to eq(2)
|
54
76
|
expect(graph.edges_count).to eq(1)
|
77
|
+
expect(graph.edge(123).id).to eq(123)
|
55
78
|
end
|
56
79
|
|
57
80
|
specify '#has_node?' do
|
58
|
-
node = Mementus::Node.new(1, :node)
|
59
81
|
graph = Mementus::Graph.new do
|
60
|
-
|
82
|
+
set_node(node_1)
|
61
83
|
end
|
62
84
|
|
63
|
-
expect(graph.has_node?(
|
85
|
+
expect(graph.has_node?(node_1)).to be true
|
64
86
|
end
|
65
87
|
|
66
88
|
specify '#has_edge?' do
|
67
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node))
|
68
89
|
graph = Mementus::Graph.new do
|
69
|
-
|
90
|
+
set_edge(edge_1_2)
|
70
91
|
end
|
71
92
|
|
72
|
-
expect(graph.has_edge?(
|
93
|
+
expect(graph.has_edge?(edge_1_2)).to be true
|
73
94
|
end
|
74
95
|
|
75
96
|
specify '#node(id)' do
|
76
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node))
|
77
97
|
graph = Mementus::Graph.new do
|
78
|
-
|
98
|
+
set_edge(edge_1_2)
|
79
99
|
end
|
80
100
|
|
81
|
-
expect(graph.node(1).id).to eq(
|
101
|
+
expect(graph.node(1).id).to eq(edge_1_2.from.id)
|
82
102
|
end
|
83
103
|
|
84
104
|
specify '#nodes(filter)' do
|
85
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node))
|
86
105
|
graph = Mementus::Graph.new do
|
87
|
-
|
106
|
+
set_edge(edge_1_2)
|
88
107
|
end
|
89
108
|
|
90
|
-
expect(graph.nodes.first.id).to eq(
|
91
|
-
expect(graph.nodes.last.id).to eq(
|
109
|
+
expect(graph.nodes.first.id).to eq(edge_1_2.from.id)
|
110
|
+
expect(graph.nodes.last.id).to eq(edge_1_2.to.id)
|
92
111
|
end
|
93
112
|
end
|
data/spec/node_proxy_spec.rb
CHANGED
@@ -1,16 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Mementus::NodeProxy do
|
4
|
-
specify '#
|
5
|
-
node1 = Mementus::Node.new(1, :node)
|
6
|
-
node2 = Mementus::Node.new(2, :node)
|
7
|
-
node3 = Mementus::Node.new(3, :node)
|
4
|
+
specify '#adjacent' do
|
8
5
|
graph = Mementus::Graph.new do
|
9
|
-
|
10
|
-
|
6
|
+
set_edge(edge_1_2)
|
7
|
+
set_edge(edge_1_3)
|
11
8
|
end
|
12
9
|
|
13
|
-
node_proxy = Mementus::NodeProxy.new(
|
14
|
-
expect(node_proxy.adjacent.map { |node| node.id}).to eq([
|
10
|
+
node_proxy = Mementus::NodeProxy.new(node_1, graph)
|
11
|
+
expect(node_proxy.adjacent.map { |node| node.id }).to eq([node_2.id, node_3.id])
|
15
12
|
end
|
16
13
|
end
|
data/spec/node_spec.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mementus::Node do
|
4
|
+
it 'should initialize with id' do
|
5
|
+
node = Mementus::Node.new(id: 22)
|
6
|
+
|
7
|
+
expect(node.id).to eq(22)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should initialize with id and label' do
|
11
|
+
node = Mementus::Node.new(id: 22, label: :vertex)
|
12
|
+
|
13
|
+
expect(node.id).to eq(22)
|
14
|
+
expect(node.label).to eq(:vertex)
|
15
|
+
end
|
16
|
+
end
|
data/spec/query_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe Mementus::Query do
|
4
4
|
let(:graph) do
|
5
5
|
Mementus::Graph.new do
|
6
|
-
|
6
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 1),to: Mementus::Node.new(id: 2)))
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,23 @@
|
|
1
1
|
require 'rspec'
|
2
2
|
require 'mementus'
|
3
3
|
require 'mementus/library'
|
4
|
+
|
5
|
+
def node_1
|
6
|
+
Mementus::Node.new(id: 1)
|
7
|
+
end
|
8
|
+
|
9
|
+
def node_2
|
10
|
+
Mementus::Node.new(id: 2)
|
11
|
+
end
|
12
|
+
|
13
|
+
def node_3
|
14
|
+
Mementus::Node.new(id: 2)
|
15
|
+
end
|
16
|
+
|
17
|
+
def edge_1_2
|
18
|
+
Mementus::Edge.new(from: node_1, to: node_2)
|
19
|
+
end
|
20
|
+
|
21
|
+
def edge_1_3
|
22
|
+
Mementus::Edge.new(from: node_1, to: node_3)
|
23
|
+
end
|
data/spec/structure_spec.rb
CHANGED
@@ -11,18 +11,18 @@ shared_examples_for "a mutable graph data structure" do
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
describe '#
|
15
|
-
it '
|
16
|
-
structure.
|
14
|
+
describe '#set_node' do
|
15
|
+
it 'assigns a node object to the graph' do
|
16
|
+
structure.set_node(Mementus::Node.new(id: 1))
|
17
17
|
|
18
18
|
expect(structure.nodes_count).to eq(1)
|
19
19
|
expect(structure.edges_count).to eq(0)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
describe '#
|
23
|
+
describe '#set_edge' do
|
24
24
|
it 'adds an edge object to the graph' do
|
25
|
-
structure.
|
25
|
+
structure.set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2)))
|
26
26
|
|
27
27
|
expect(structure.nodes_count).to eq(2)
|
28
28
|
expect(structure.edges_count).to eq(1)
|
@@ -31,8 +31,8 @@ shared_examples_for "a mutable graph data structure" do
|
|
31
31
|
|
32
32
|
describe '#has_node?' do
|
33
33
|
it 'tests for the presence of a given node' do
|
34
|
-
node = Mementus::Node.new(1
|
35
|
-
structure.
|
34
|
+
node = Mementus::Node.new(id: 1)
|
35
|
+
structure.set_node(node)
|
36
36
|
|
37
37
|
expect(structure.has_node?(node)).to be true
|
38
38
|
end
|
@@ -40,8 +40,8 @@ shared_examples_for "a mutable graph data structure" do
|
|
40
40
|
|
41
41
|
describe '#has_edge?' do
|
42
42
|
it 'tests for the presence of a given edge' do
|
43
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :
|
44
|
-
structure.
|
43
|
+
edge = Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2))
|
44
|
+
structure.set_edge(edge)
|
45
45
|
|
46
46
|
expect(structure.has_edge?(edge)).to be true
|
47
47
|
end
|
@@ -49,8 +49,8 @@ shared_examples_for "a mutable graph data structure" do
|
|
49
49
|
|
50
50
|
describe '#node(id)' do
|
51
51
|
it 'finds a node by id' do
|
52
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :
|
53
|
-
structure.
|
52
|
+
edge = Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2))
|
53
|
+
structure.set_edge(edge)
|
54
54
|
|
55
55
|
expect(structure.node(1).id).to eq(edge.from.id)
|
56
56
|
end
|
@@ -58,8 +58,8 @@ shared_examples_for "a mutable graph data structure" do
|
|
58
58
|
|
59
59
|
describe '#nodes' do
|
60
60
|
it 'lists all nodes in the graph' do
|
61
|
-
edge = Mementus::Edge.new(Mementus::Node.new(1, :
|
62
|
-
structure.
|
61
|
+
edge = Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2))
|
62
|
+
structure.set_edge(edge)
|
63
63
|
|
64
64
|
expect(structure.nodes.first.id).to eq(edge.from.id)
|
65
65
|
expect(structure.nodes.last.id).to eq(edge.to.id)
|
data/spec/traversal_spec.rb
CHANGED
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
describe 'Basic graph traversals' do
|
4
4
|
let(:graph) do
|
5
5
|
Mementus::Graph.new do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 2)))
|
7
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 2), to: Mementus::Node.new(id: 3)))
|
8
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 2), to: Mementus::Node.new(id: 5)))
|
9
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 1), to: Mementus::Node.new(id: 6)))
|
10
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 2), to: Mementus::Node.new(id: 7)))
|
11
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 7), to: Mementus::Node.new(id: 8)))
|
12
|
+
set_edge(Mementus::Edge.new(from: Mementus::Node.new(id: 5), to: Mementus::Node.new(id: 9)))
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
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.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maetl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -64,13 +64,13 @@ files:
|
|
64
64
|
- Gemfile
|
65
65
|
- LICENSE.txt
|
66
66
|
- README.md
|
67
|
-
- Rakefile
|
68
67
|
- lib/mementus.rb
|
69
68
|
- lib/mementus/breadth_first_search.rb
|
70
69
|
- lib/mementus/depth_first_search.rb
|
71
70
|
- lib/mementus/direction.rb
|
72
71
|
- lib/mementus/edge.rb
|
73
72
|
- lib/mementus/edge_builder.rb
|
73
|
+
- lib/mementus/element_builder.rb
|
74
74
|
- lib/mementus/graph.rb
|
75
75
|
- lib/mementus/graph_builder.rb
|
76
76
|
- lib/mementus/integer_id.rb
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- spec/herschel_spec.rb
|
94
94
|
- spec/integer_id_spec.rb
|
95
95
|
- spec/node_proxy_spec.rb
|
96
|
+
- spec/node_spec.rb
|
96
97
|
- spec/pipeline_spec.rb
|
97
98
|
- spec/query_spec.rb
|
98
99
|
- spec/spec_helper.rb
|
@@ -129,6 +130,7 @@ test_files:
|
|
129
130
|
- spec/herschel_spec.rb
|
130
131
|
- spec/integer_id_spec.rb
|
131
132
|
- spec/node_proxy_spec.rb
|
133
|
+
- spec/node_spec.rb
|
132
134
|
- spec/pipeline_spec.rb
|
133
135
|
- spec/query_spec.rb
|
134
136
|
- spec/spec_helper.rb
|
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|