mementus 0.2.4 → 0.2.5

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: 9008afd3cf8e01e46d74afdb9ba4421ba5fa6576
4
- data.tar.gz: 3a23ffd82033bad559238dd80ec316efb86feb60
3
+ metadata.gz: 4513413f72d998079932e3f00c021ed47b11df04
4
+ data.tar.gz: c2ffeff4b00e94c2753b198e039298f4be9ec22a
5
5
  SHA512:
6
- metadata.gz: a51672c818d3883aeecf5a599e8b33c6f5f342e8434345e3c93d60749a591781b8557dd640c3e74b98abb222702dd6a2a28ade00702f452f723f7144be3fb9a6
7
- data.tar.gz: c35706222b866937ad4439a762df37969cd800bae904f91751c6eb2b557c293cdd2085676e53a4dee70ca667b09b5086244af3e05b84dea4db0daa9258b29c87
6
+ metadata.gz: bea03fed5e0f750561ea11d1dac5788f14f5e0223db893ad4df88d617554e9814ffff0146f1161c23580de3bbe16b46218049a073faa389b98bb1a89710dbfb1
7
+ data.tar.gz: 83e39ec2a2981bced0d5f928e48d0e8cc231430a76efc394f56b4399e84135395f68fec57dc92202e82ec092e340763b180ee5dfac4a2fecff7cd6d3d36b5d6f
@@ -3,82 +3,63 @@ require 'set'
3
3
  module Mementus
4
4
  class Graph
5
5
  def initialize(is_directed=true)
6
- @index = {}
7
- @is_directed = is_directed
6
+ @structure = Structure.new(is_directed)
8
7
  end
9
8
 
10
9
  def nodes_count
11
- @index.size
10
+ @structure.nodes_count
12
11
  end
13
12
 
14
13
  def edges_count
15
- c = 0
16
- each_edge { c += 1 }
17
- c
14
+ @structure.edges_count
18
15
  end
19
16
 
20
17
  def directed?
21
- @is_directed
18
+ @structure.directed?
22
19
  end
23
20
 
24
21
  def add_node(node)
25
- @index[node] ||= Set.new
22
+ @structure.add_node(node)
26
23
  end
27
24
 
28
25
  def create_edge(&block)
29
- edge = Edge.new
30
- yield edge
31
- add_edge(edge)
26
+ @structure.create_edge(&block)
32
27
  end
33
28
 
34
29
  def create_node(&block)
35
- node = Node.new
36
- yield node
37
- add_node(node)
30
+ @structure.create_node(&block)
38
31
  end
39
32
 
40
33
  def add_edge(edge)
41
- add_node(edge.from)
42
- add_node(edge.to)
43
-
44
- @index[edge.from].add(edge.to)
45
- @index[edge.to].add(edge.from) unless directed?
34
+ @structure.add_edge(edge)
46
35
  end
47
36
 
48
37
  def has_node?(node)
49
- @index.key?(node)
38
+ @structure.has_node?(node)
50
39
  end
51
40
 
52
41
  def has_edge?(edge)
53
- has_node?(edge.from) && @index[edge.from].include?(edge.to)
42
+ @structure.has_edge?(edge)
54
43
  end
55
44
 
56
45
  def node(id)
57
- @index.keys.find { |node| node.id == id }
46
+ @structure.node(id)
58
47
  end
59
48
 
60
49
  def nodes
61
- @index.keys
50
+ @structure.nodes
62
51
  end
63
52
 
64
53
  def each_node(&blk)
65
- @index.each_key(&blk)
54
+ @structure.each_node(&blk)
66
55
  end
67
56
 
68
57
  def each_adjacent(node, &blk)
69
- @index[node].each(&blk)
58
+ @structure.each_adjacent(node, &blk)
70
59
  end
71
60
 
72
61
  def each_edge(&blk)
73
- if directed?
74
- each_node do |from|
75
- each_adjacent(from) do |to|
76
- yield Edge.new(from, to)
77
- end
78
- end
79
- else
80
- raise 'Edge traversal unsupported for undirected graphs'
81
- end
62
+ @structure.each_edge(&blk)
82
63
  end
83
64
  end
84
65
  end
@@ -0,0 +1,82 @@
1
+ module Mementus
2
+ class Structure
3
+ def initialize(is_directed)
4
+ @index = {}
5
+ @is_directed = is_directed
6
+ end
7
+
8
+ def nodes_count
9
+ @index.size
10
+ end
11
+
12
+ def edges_count
13
+ c = 0
14
+ each_edge { c += 1 }
15
+ c
16
+ end
17
+
18
+ def directed?
19
+ @is_directed
20
+ end
21
+
22
+ def create_edge(&block)
23
+ edge = Edge.new
24
+ yield edge
25
+ add_edge(edge)
26
+ end
27
+
28
+ def add_node(node)
29
+ @index[node] ||= Set.new
30
+ end
31
+
32
+ def create_node(&block)
33
+ node = Node.new
34
+ yield node
35
+ add_node(node)
36
+ end
37
+
38
+ def add_edge(edge)
39
+ add_node(edge.from)
40
+ add_node(edge.to)
41
+
42
+ @index[edge.from].add(edge.to)
43
+ @index[edge.to].add(edge.from) unless directed?
44
+ end
45
+
46
+ def has_node?(node)
47
+ @index.key?(node)
48
+ end
49
+
50
+ def has_edge?(edge)
51
+ has_node?(edge.from) && @index[edge.from].include?(edge.to)
52
+ end
53
+
54
+ def node(id)
55
+ @index.keys.find { |node| node.id == id }
56
+ end
57
+
58
+ def nodes
59
+ @index.keys
60
+ end
61
+
62
+ def each_node(&blk)
63
+ @index.each_key(&blk)
64
+ end
65
+
66
+ def each_adjacent(node, &blk)
67
+ @index[node].each(&blk)
68
+ end
69
+
70
+ def each_edge(&blk)
71
+ if directed?
72
+ each_node do |from|
73
+ each_adjacent(from) do |to|
74
+ yield Edge.new(from, to)
75
+ end
76
+ end
77
+ else
78
+ raise 'Edge traversal unsupported for undirected graphs'
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,3 +1,3 @@
1
1
  module Mementus
2
- VERSION = '0.2.4'.freeze
2
+ VERSION = '0.2.5'.freeze
3
3
  end
data/lib/mementus.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  require_relative 'mementus/graph'
2
+ require_relative 'mementus/structure'
2
3
  require_relative 'mementus/node'
3
4
  require_relative 'mementus/edge'
4
5
  require_relative 'mementus/node_proxy'
5
6
  require_relative 'mementus/depth_first_search'
6
7
  require_relative 'mementus/breadth_first_search'
8
+ require_relative 'mementus/query/traversal'
7
9
  require_relative 'mementus/query/source'
8
10
  require_relative 'mementus/query/step'
9
11
  require_relative 'mementus/query/traversal'
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.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - maetl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-13 00:00:00.000000000 Z
11
+ date: 2016-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,6 +76,7 @@ files:
76
76
  - lib/mementus/query/step.rb
77
77
  - lib/mementus/query/traversal.rb
78
78
  - lib/mementus/relation.rb
79
+ - lib/mementus/structure.rb
79
80
  - lib/mementus/version.rb
80
81
  - mementus.gemspec
81
82
  - spec/graph_spec.rb