mementus 0.6.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8d7aae1069c6ccb20e101540608915d4c0b157b
4
- data.tar.gz: 2b8273eb17e130395902b111c6d2714fd76ee444
3
+ metadata.gz: f193ed0050a256b3b529dd997fafe002fbe7697e
4
+ data.tar.gz: e928862b3e4e55e1ce0ac1050eec7457238a7ce2
5
5
  SHA512:
6
- metadata.gz: e3080d4ed7e24a87065cf575e3df8675d30053f2afc5313f9f321a9a8b4677a04563e810d4168b4b461e8057a6a831d26c622c5983f9ca21fc747768abc61249
7
- data.tar.gz: 39cd8b39a4dac486d3c24d9ccc9e0b53665c5406341d89695e82fc87c364c09b431097b8414e582196026c68222e13e02369a34dbc17a48bcc8f4d136f7181a9
6
+ metadata.gz: c9f0a1203c8cc72cbcaeb26383f8f38181f50863267f71fe64c3f429cb007fcc311cf8a380cc06690df3b9e1a3340c65c269c19775723b580cac78c782e33ecd
7
+ data.tar.gz: c0495f33c80d74d81212df81f9314eb198f8c40e5e18bf5cc10697934f72ec9279f0e1e4be2488a46c63f5f90160f00652afbe0533c2fb812b3483d99ebcb7ac
@@ -1,45 +1,13 @@
1
1
  module Mementus
2
2
  class GraphBuilder
3
+ include Mutators
4
+
3
5
  def initialize(is_directed)
4
6
  @structure = Structure::IncidenceList.new(is_directed)
5
7
  @node_ids = IntegerId.new
6
8
  @edge_ids = IntegerId.new
7
9
  end
8
10
 
9
- def set_node(node)
10
- @structure.set_node(node)
11
- node
12
- end
13
-
14
- def set_edge(edge)
15
- @structure.set_edge(edge)
16
- edge
17
- end
18
-
19
- def add_node(id: nil, label: nil, props: {})
20
- id = @node_ids.next_id unless id
21
- set_node(Node.new(id: id, label: label, props: props))
22
- end
23
-
24
- def add_edge(id: nil, from: nil, to: nil, label: nil, props: {})
25
- id = @edge_ids.next_id unless id
26
- set_edge(Edge.new(id: id, from: from, to: to, label: label, props: props))
27
- end
28
-
29
- def create_node(&block)
30
- builder = NodeBuilder.new
31
- yield builder
32
- builder.id = @node_ids.next_id unless builder.id
33
- set_node(builder.to_node)
34
- end
35
-
36
- def create_edge(&block)
37
- builder = EdgeBuilder.new
38
- yield builder
39
- builder.id = @edge_ids.next_id unless builder.id
40
- set_edge(builder.to_edge)
41
- end
42
-
43
11
  def graph
44
12
  @structure
45
13
  end
@@ -0,0 +1,11 @@
1
+ module Mementus
2
+ class MutableGraph < Graph
3
+ include Mutators
4
+
5
+ def initialize
6
+ @structure = Structure::IncidenceList.new(true)
7
+ @node_ids = IntegerId.new
8
+ @edge_ids = IntegerId.new
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ module Mementus
2
+ module Mutators
3
+ def set_node(node)
4
+ @structure.set_node(node)
5
+ node
6
+ end
7
+
8
+ def set_edge(edge)
9
+ @structure.set_edge(edge)
10
+ edge
11
+ end
12
+
13
+ def add_node(id: nil, label: nil, props: {})
14
+ id = @node_ids.next_id unless id
15
+ set_node(Node.new(id: id, label: label, props: props))
16
+ end
17
+
18
+ def add_edge(id: nil, from: nil, to: nil, label: nil, props: {})
19
+ id = @edge_ids.next_id unless id
20
+ set_edge(Edge.new(id: id, from: from, to: to, label: label, props: props))
21
+ end
22
+
23
+ def create_node(&block)
24
+ builder = NodeBuilder.new
25
+ yield builder
26
+ builder.id = @node_ids.next_id unless builder.id
27
+ set_node(builder.to_node)
28
+ end
29
+
30
+ def create_edge(&block)
31
+ builder = EdgeBuilder.new
32
+ yield builder
33
+ builder.id = @edge_ids.next_id unless builder.id
34
+ set_edge(builder.to_edge)
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module Mementus
2
- VERSION = '0.6.0'.freeze
2
+ VERSION = '0.7.0'.freeze
3
3
  end
data/lib/mementus.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  require 'fiber'
2
2
  require 'mementus/graph'
3
+ require 'mementus/mutators'
4
+ require 'mementus/mutable_graph'
3
5
  require 'mementus/structure/adjacency_list'
4
6
  require 'mementus/structure/incidence_list'
5
7
  require 'mementus/node'
data/spec/graph_spec.rb CHANGED
@@ -123,18 +123,6 @@ describe Mementus::Graph do
123
123
  end
124
124
  end
125
125
 
126
- specify '#create_edge -> with props' do
127
- graph = Mementus::Graph.new do
128
- create_edge do |edge|
129
- edge.from = 'A'
130
- edge.to = 'B'
131
- edge.props = {
132
- name: 'Relationship'
133
- }
134
- end
135
- end
136
- end
137
-
138
126
  specify '#has_node?' do
139
127
  graph = Mementus::Graph.new do
140
128
  set_node(node_1)
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mementus::MutableGraph do
4
+ specify '#new' do
5
+ graph = Mementus::MutableGraph.new
6
+
7
+ expect(graph.nodes_count).to eq(0)
8
+ expect(graph.edges_count).to eq(0)
9
+ end
10
+
11
+ specify '#set_node' do
12
+ graph = Mementus::MutableGraph.new
13
+ graph.set_node(node_1)
14
+
15
+ expect(graph.nodes_count).to eq(1)
16
+ expect(graph.edges_count).to eq(0)
17
+ end
18
+
19
+ specify '#add_node' do
20
+ graph = Mementus::MutableGraph.new
21
+ graph.add_node(id: 1)
22
+
23
+ expect(graph.nodes_count).to eq(1)
24
+ expect(graph.edges_count).to eq(0)
25
+ expect(graph.node(1).id).to eq(1)
26
+ end
27
+
28
+ specify '#add_node -> with auto id' do
29
+ graph = Mementus::MutableGraph.new
30
+ graph.add_node
31
+
32
+ expect(graph.node(1).id).to eq(1)
33
+ end
34
+
35
+ specify '#add_node -> with props' do
36
+ graph = Mementus::MutableGraph.new
37
+ graph.add_node(props: { title: 'Vertex' })
38
+
39
+ expect(graph.node(1)[:title]).to eq('Vertex')
40
+ end
41
+
42
+ specify '#create_node' do
43
+ graph = Mementus::MutableGraph.new
44
+ graph.create_node do |node|
45
+ node.id = 20
46
+ node.label = :vertex
47
+ node.props[:title] = 'Vertex'
48
+ end
49
+
50
+ expect(graph.nodes_count).to eq(1)
51
+ expect(graph.edges_count).to eq(0)
52
+
53
+ graph.node(20).tap do |node|
54
+ expect(node.id).to eq(20)
55
+ expect(node.label).to eq(:vertex)
56
+ expect(node[:title]).to eq('Vertex')
57
+ end
58
+ end
59
+
60
+ specify '#set_edge' do
61
+ graph = Mementus::MutableGraph.new
62
+ graph.set_edge(edge_1_2)
63
+
64
+ expect(graph.nodes_count).to eq(2)
65
+ expect(graph.edges_count).to eq(1)
66
+ expect(graph.node(1).id).to eq(1)
67
+ expect(graph.node(2).id).to eq(2)
68
+ end
69
+
70
+ specify '#add_edge' do
71
+ graph = Mementus::MutableGraph.new
72
+ graph.add_edge(id: 3, from: 1, to: 2)
73
+
74
+ expect(graph.nodes_count).to eq(2)
75
+ expect(graph.edges_count).to eq(1)
76
+ expect(graph.node(1).id).to eq(1)
77
+ expect(graph.node(2).id).to eq(2)
78
+ expect(graph.edge(3).id).to eq(3)
79
+ end
80
+
81
+ specify '#add_edge -> with auto id' do
82
+ graph = Mementus::MutableGraph.new
83
+ graph.add_edge(from: 1, to: 2)
84
+
85
+ expect(graph.edge(1).id).to eq(1)
86
+ end
87
+
88
+ specify '#add_edge -> with props' do
89
+ graph = Mementus::MutableGraph.new
90
+ graph.add_edge(from: 1, to: 2, props: { title: 'Relationship' })
91
+
92
+ expect(graph.edge(1)[:title]).to eq('Relationship')
93
+ end
94
+
95
+ specify '#create_edge' do
96
+ graph = Mementus::MutableGraph.new
97
+ graph.create_edge do |edge|
98
+ edge.id = 123
99
+ edge.label = :relationship
100
+ edge.from = 'A'
101
+ edge.to = 'B'
102
+ edge.props[:name] = 'Relationship'
103
+ end
104
+
105
+ expect(graph.nodes_count).to eq(2)
106
+ expect(graph.edges_count).to eq(1)
107
+
108
+ graph.edge(123).tap do |edge|
109
+ expect(edge.id).to eq(123)
110
+ expect(edge.label).to eq(:relationship)
111
+ expect(edge.from.id).to eq('A')
112
+ expect(edge.to.id).to eq('B')
113
+ expect(edge[:name]).to eq('Relationship')
114
+ end
115
+ end
116
+ 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.6.0
4
+ version: 0.7.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-12 00:00:00.000000000 Z
11
+ date: 2017-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -79,6 +79,8 @@ files:
79
79
  - lib/mementus/library.rb
80
80
  - lib/mementus/library/herschel_graph.rb
81
81
  - lib/mementus/library/story_graph.rb
82
+ - lib/mementus/mutable_graph.rb
83
+ - lib/mementus/mutators.rb
82
84
  - lib/mementus/node.rb
83
85
  - lib/mementus/node_builder.rb
84
86
  - lib/mementus/node_proxy.rb
@@ -102,6 +104,7 @@ files:
102
104
  - spec/graph_spec.rb
103
105
  - spec/herschel_spec.rb
104
106
  - spec/integer_id_spec.rb
107
+ - spec/mutable_graph_spec.rb
105
108
  - spec/node_proxy_spec.rb
106
109
  - spec/node_spec.rb
107
110
  - spec/pipeline/step_spec.rb
@@ -134,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
137
  version: '0'
135
138
  requirements: []
136
139
  rubyforge_project:
137
- rubygems_version: 2.6.11
140
+ rubygems_version: 2.6.13
138
141
  signing_key:
139
142
  specification_version: 4
140
143
  summary: Graph data structure toolkit for Ruby applications.
@@ -146,6 +149,7 @@ test_files:
146
149
  - spec/graph_spec.rb
147
150
  - spec/herschel_spec.rb
148
151
  - spec/integer_id_spec.rb
152
+ - spec/mutable_graph_spec.rb
149
153
  - spec/node_proxy_spec.rb
150
154
  - spec/node_spec.rb
151
155
  - spec/pipeline/step_spec.rb
@@ -158,4 +162,3 @@ test_files:
158
162
  - spec/structure/mutable_graph_example.rb
159
163
  - spec/structure/property_graph_example.rb
160
164
  - spec/traversal_spec.rb
161
- has_rdoc: