mementus 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f5be27f3627a1c98758d9c342f3caf1e66f5fe70
4
- data.tar.gz: aeb311c257b6107697ebc02aaad5dddb88f64030
3
+ metadata.gz: 419399d50dad3b0243a7756f259e99f64bec6da5
4
+ data.tar.gz: 12a25815a2bb6fd8beebdfd1d9aaf696f1ee5e03
5
5
  SHA512:
6
- metadata.gz: 23ea3552c0307467dd23b1066466c663087573219b4d2261f440dc85d5dd671c5f19c341000b690c3b1e8d55250307bf1532acb511e6de9a9319a90eafad0281
7
- data.tar.gz: e035bb59dd2c6298cc2301e97e5f738cf50f06cb4df4680673cee7514b674217dc8b45a312260a23253fb5eca95021d98cc14d6c3b1f42f6a24db9839ebf465a
6
+ metadata.gz: 4a8c602c0b356d31062eac51d63fc4e93b1740abc417baed0824018d04f75308ac12fdfb47953689bce86bfa8600a62675036d7e15a7107a4e3d3ae287125b85
7
+ data.tar.gz: b68d9dd85cf13935e41006c8814242243d1b3701672037a79e831433b011ac2b6a3861b1b13dc959c8a1a560349e01967d58ac8c727b0ded0cf3c2d1d5694e96
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in mementus.gemspec
4
3
  gemspec
@@ -16,12 +16,12 @@ module Mementus
16
16
  def visit(id, &block)
17
17
  @queue.concat(@graph.adjacent(id))
18
18
 
19
- while next_id = @queue.shift
20
- next if @visited[next_id]
19
+ while next_node = @queue.shift
20
+ next if @visited[next_node]
21
21
 
22
- @visited[next_id] = true
23
- block.call(NodeProxy.new(next_id, @graph))
24
- @queue.concat(@graph.adjacent(next_id))
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 |adjacent_id|
17
- next if @visited[adjacent_id]
16
+ @graph.each_adjacent(id) do |adj_node|
17
+ next if @visited[adj_node.id]
18
18
 
19
- @visited[adjacent_id] = true
20
- block.call(NodeProxy.new(adjacent_id, @graph))
21
- visit(adjacent_id, &block)
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(from, to, label=:edge)
6
- @from = if from.is_a?(Integer)
7
- Node.new(from)
8
- else
9
- from
10
- end
5
+ def initialize(id: nil, from:, to:, label: :edge)
6
+ @id = id
7
+ @label = label
11
8
 
12
- @to = if to.is_a?(Integer)
13
- Node.new(to)
14
- else
15
- to
16
- end
9
+ @from = if from.is_a?(Integer)
10
+ Node.new(id: from)
11
+ else
12
+ from
13
+ end
17
14
 
18
- @label = label
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
- attr_reader :from, :to, :label, :id
3
+ include ElementBuilder
4
4
 
5
- def initialize(from=nil, to=nil, label=:edge, id=nil)
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 label=(label)
33
- @label = label
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
@@ -0,0 +1,5 @@
1
+ module Mementus
2
+ module ElementBuilder
3
+ attr_accessor :id, :label, :props
4
+ end
5
+ end
@@ -42,6 +42,10 @@ module Mementus
42
42
  @structure.node(id)
43
43
  end
44
44
 
45
+ def edge(id)
46
+ @structure.edge(id)
47
+ end
48
+
45
49
  def nodes
46
50
  @structure.nodes
47
51
  end
@@ -6,26 +6,34 @@ module Mementus
6
6
  @edge_ids = IntegerId.new
7
7
  end
8
8
 
9
- def add_node(node)
10
- @structure.add_node(node)
9
+ def set_node(node)
10
+ @structure.set_node(node)
11
11
  end
12
12
 
13
- def create_edge(&block)
14
- edge = EdgeBuilder.new
15
- yield edge
16
- edge.id = @edge_ids.next_id unless edge.id
17
- @structure.add_edge(edge)
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
- node = NodeBuilder.new
22
- yield node
23
- node.id = @node_ids.next_id unless node.id
24
- @structure.add_node(node)
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 add_edge(edge)
28
- @structure.add_edge(edge)
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
@@ -2,7 +2,7 @@ module Mementus
2
2
  class Node
3
3
  attr_reader :id, :label
4
4
 
5
- def initialize(id=nil, label=:node)
5
+ def initialize(id: nil, label: nil)
6
6
  @id = id
7
7
  @label = label
8
8
  end
@@ -1,18 +1,9 @@
1
1
  module Mementus
2
2
  class NodeBuilder
3
- attr_reader :id, :label
3
+ include ElementBuilder
4
4
 
5
- def initialize(id=nil, label=:node)
6
- @id = id
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
@@ -1,22 +1,28 @@
1
1
  module Mementus
2
2
  class NodeProxy
3
- def initialize(id, graph)
4
- @id = id
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
- each_adjacent.to_a.map do |node|
18
- self.class.new(node, @graph)
19
- end
25
+ @graph.adjacent(@node.id)
20
26
  end
21
27
  end
22
28
  end
@@ -69,10 +69,8 @@ module Mementus
69
69
 
70
70
  class Outgoing
71
71
  def process(graph, source)
72
- if source.respond_to?(:id)
73
- graph.each_adjacent(source.id).map do |id|
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 |n|
97
- graph.each_adjacent(n.id) do |id|
98
- incoming << Mementus::NodeProxy.new(n.id, graph) if id == node.id
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 |n|
112
- graph.each_adjacent(n.id) do |id|
113
- incoming << Mementus::Edge.new(n.id, id) if ids.include?(id)
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
 
@@ -2,11 +2,12 @@ module Mementus
2
2
  module Query
3
3
  class Step
4
4
  def initialize(traversal, id)
5
- @node = NodeProxy.new(id, traversal.graph)
5
+ @traversal = traversal
6
+ @id = id
6
7
  end
7
8
 
8
9
  def to_node
9
- @node
10
+ @traversal.graph.node(@id)
10
11
  end
11
12
  end
12
13
  end
@@ -20,13 +20,13 @@ module Mementus
20
20
  @is_directed
21
21
  end
22
22
 
23
- def add_node(node)
23
+ def set_node(node)
24
24
  @index[node.id] ||= Set.new
25
25
  end
26
26
 
27
- def add_edge(edge)
28
- add_node(edge.from) unless has_node?(edge.from)
29
- add_node(edge.to) unless has_node?(edge.to)
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?("#{edge.from.id},#{edge.to.id}")
29
+ @edges.key?(edge.id)
30
30
  end
31
31
 
32
- def add_node(node)
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 add_edge(edge)
39
- add_node(edge.from) unless has_node?(edge.from)
40
- add_node(edge.to) unless has_node?(edge.to)
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["#{edge.from.id},#{edge.to.id}"] = edge
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
- NodeProxy.new(id, self)
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.keys.map { |id| NodeProxy.new(id, self) }
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
- @outgoing[id].each(&blk)
68
+ adjacent(id).each(&blk)
65
69
  end
66
70
  end
67
71
  end
@@ -1,3 +1,3 @@
1
1
  module Mementus
2
- VERSION = '0.4.0'.freeze
2
+ VERSION = '0.5.0'.freeze
3
3
  end
data/lib/mementus.rb CHANGED
@@ -1,18 +1,19 @@
1
- require_relative 'mementus/graph'
2
- require_relative 'mementus/structure/adjacency_list'
3
- require_relative 'mementus/structure/incidence_list'
4
- require_relative 'mementus/node'
5
- require_relative 'mementus/edge'
6
- require_relative 'mementus/node_proxy'
7
- require_relative 'mementus/pipeline'
8
- require_relative 'mementus/depth_first_search'
9
- require_relative 'mementus/breadth_first_search'
10
- require_relative 'mementus/query/traversal'
11
- require_relative 'mementus/query/source'
12
- require_relative 'mementus/query/step'
13
- require_relative 'mementus/query/traversal'
14
- require_relative 'mementus/integer_id'
15
- require_relative 'mementus/graph_builder'
16
- require_relative 'mementus/node_builder'
17
- require_relative 'mementus/edge_builder'
18
- require_relative 'mementus/direction'
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(Mementus::Node.new(1, :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(Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node)))
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
- add_node(node)
82
+ set_node(node_1)
61
83
  end
62
84
 
63
- expect(graph.has_node?(node)).to be true
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
- add_edge(edge)
90
+ set_edge(edge_1_2)
70
91
  end
71
92
 
72
- expect(graph.has_edge?(edge)).to be true
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
- add_edge(edge)
98
+ set_edge(edge_1_2)
79
99
  end
80
100
 
81
- expect(graph.node(1).id).to eq(edge.from.id)
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
- add_edge(edge)
106
+ set_edge(edge_1_2)
88
107
  end
89
108
 
90
- expect(graph.nodes.first.id).to eq(edge.from.id)
91
- expect(graph.nodes.last.id).to eq(edge.to.id)
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
@@ -1,16 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Mementus::NodeProxy do
4
- specify '#new' do
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
- add_edge(Mementus::Edge.new(node1, node2))
10
- add_edge(Mementus::Edge.new(node1, node3))
6
+ set_edge(edge_1_2)
7
+ set_edge(edge_1_3)
11
8
  end
12
9
 
13
- node_proxy = Mementus::NodeProxy.new(1, graph)
14
- expect(node_proxy.adjacent.map { |node| node.id}).to eq([node2.id, node3.id])
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
- add_edge(Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node)))
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
@@ -11,18 +11,18 @@ shared_examples_for "a mutable graph data structure" do
11
11
  end
12
12
  end
13
13
 
14
- describe '#add_node' do
15
- it 'adds a node object to the graph' do
16
- structure.add_node(Mementus::Node.new(1, :node))
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 '#add_edge' do
23
+ describe '#set_edge' do
24
24
  it 'adds an edge object to the graph' do
25
- structure.add_edge(Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node)))
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, :node)
35
- structure.add_node(node)
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, :node), Mementus::Node.new(2, :node))
44
- structure.add_edge(edge)
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, :node), Mementus::Node.new(2, :node))
53
- structure.add_edge(edge)
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, :node), Mementus::Node.new(2, :node))
62
- structure.add_edge(edge)
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)
@@ -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
- add_edge(Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(2, :node)))
7
- add_edge(Mementus::Edge.new(Mementus::Node.new(2, :node), Mementus::Node.new(3, :node)))
8
- add_edge(Mementus::Edge.new(Mementus::Node.new(2, :node), Mementus::Node.new(5, :node)))
9
- add_edge(Mementus::Edge.new(Mementus::Node.new(1, :node), Mementus::Node.new(6, :node)))
10
- add_edge(Mementus::Edge.new(Mementus::Node.new(2, :node), Mementus::Node.new(7, :node)))
11
- add_edge(Mementus::Edge.new(Mementus::Node.new(7, :node), Mementus::Node.new(8, :node)))
12
- add_edge(Mementus::Edge.new(Mementus::Node.new(5, :node), Mementus::Node.new(9, :node)))
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.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-15 00:00:00.000000000 Z
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"