mementus 0.2.4 → 0.2.5

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