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 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"