rbgraph 0.0.6 → 0.0.7
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 +4 -4
- data/README.md +8 -0
- data/lib/rbgraph/edge.rb +18 -0
- data/lib/rbgraph/graphs/directed.rb +7 -0
- data/lib/rbgraph/graphs/undirected.rb +4 -0
- data/lib/rbgraph/node.rb +18 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0fe2bf64b05c39412353c43e2b61be62802eba8
|
4
|
+
data.tar.gz: 275c4daead8f24d392d04287e4f05c16e3538745
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 661096f726414cdd4cd59282a9844647a77389355eba19a71cd69bf5abb08c7de7c3bec7a8a94acd34e4dfa2446ca353762671eb62a7a00182615dee4da80a4e
|
7
|
+
data.tar.gz: e36ba691c1ccb04c3747c9169346264d701ce7e7262933930d00b88d7590fb5376fea9c7c94c13d6d0872ff7d219095fd40c5a86537ada41f6b438a9eafc722a
|
data/README.md
CHANGED
@@ -40,6 +40,14 @@ will output
|
|
40
40
|
[10, 11]
|
41
41
|
```
|
42
42
|
|
43
|
+
Version 0.0.7+
|
44
|
+
|
45
|
+
Nodes support in and out degree.
|
46
|
+
```ruby
|
47
|
+
node.in_degree
|
48
|
+
node.out_degree
|
49
|
+
```
|
50
|
+
depending on if you constructed a Directed or Undirected graph.
|
43
51
|
|
44
52
|
### Disclaimer
|
45
53
|
This project is written on a need to use basis for inclusion to other projects I'm working on for now, so completion is not an immediate goal.
|
data/lib/rbgraph/edge.rb
CHANGED
@@ -5,6 +5,7 @@ module Rbgraph
|
|
5
5
|
attr_accessor :id
|
6
6
|
attr_accessor :node1
|
7
7
|
attr_accessor :node2
|
8
|
+
attr_accessor :directed
|
8
9
|
attr_accessor :attributes
|
9
10
|
|
10
11
|
def initialize(node1, node2, attributes = {})
|
@@ -12,6 +13,7 @@ module Rbgraph
|
|
12
13
|
self.node2 = node2
|
13
14
|
self.attributes = attributes
|
14
15
|
self.id = attributes[:id] || "#{node1.id}=#{attributes[:kind]}=#{node2.id}"
|
16
|
+
self.directed = !!attributes[:directed]
|
15
17
|
end
|
16
18
|
|
17
19
|
def ==(node)
|
@@ -33,6 +35,22 @@ module Rbgraph
|
|
33
35
|
self
|
34
36
|
end
|
35
37
|
|
38
|
+
def out_for?(node)
|
39
|
+
if directed
|
40
|
+
node == node1
|
41
|
+
else
|
42
|
+
node == node1 || node == node2
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def in_for?(node)
|
47
|
+
if directed
|
48
|
+
node == node2
|
49
|
+
else
|
50
|
+
node == node1 || node == node2
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
36
54
|
end
|
37
55
|
|
38
56
|
end
|
@@ -2,8 +2,15 @@ module Rbgraph
|
|
2
2
|
|
3
3
|
class DirectedGraph < Graph
|
4
4
|
|
5
|
+
def add_edge!(node1, node2, edge_attributes = {})
|
6
|
+
super(node1, node2, {directed: true}.merge(edge_attributes))
|
7
|
+
end
|
8
|
+
|
5
9
|
def connect_nodes(node1, node2, edge)
|
6
10
|
node1.connect_to(node2, edge)
|
11
|
+
if node2.edges[edge.id].nil?
|
12
|
+
node2.edges[edge.id] ||= edge
|
13
|
+
end
|
7
14
|
end
|
8
15
|
|
9
16
|
end
|
@@ -2,6 +2,10 @@ module Rbgraph
|
|
2
2
|
|
3
3
|
class UndirectedGraph < Graph
|
4
4
|
|
5
|
+
def add_edge!(node1, node2, edge_attributes = {})
|
6
|
+
super(node1, node2, {directed: false}.merge(edge_attributes))
|
7
|
+
end
|
8
|
+
|
5
9
|
def connect_nodes(node1, node2, edge)
|
6
10
|
node1.connect_to(node2, edge)
|
7
11
|
node2.connect_to(node1, edge)
|
data/lib/rbgraph/node.rb
CHANGED
@@ -31,12 +31,28 @@ module Rbgraph
|
|
31
31
|
|
32
32
|
def connect_to(node, edge)
|
33
33
|
if neighbors[node.id].nil? && edges[edge.id].nil?
|
34
|
-
neighbors[node.id]
|
35
|
-
edges[edge.id]
|
34
|
+
neighbors[node.id] ||= node
|
35
|
+
edges[edge.id] ||= edge
|
36
36
|
end
|
37
37
|
self
|
38
38
|
end
|
39
39
|
|
40
|
+
def outgoing_edges
|
41
|
+
edges.select { |eid, edge| edge.out_for?(self) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def incoming_edges
|
45
|
+
edges.select { |eid, edge| edge.in_for?(self) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def out_degree
|
49
|
+
outgoing_edges.size
|
50
|
+
end
|
51
|
+
|
52
|
+
def in_degree
|
53
|
+
incoming_edges.size
|
54
|
+
end
|
55
|
+
|
40
56
|
end
|
41
57
|
|
42
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbgraph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- George Lamprianidis
|
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
60
|
version: '0'
|
61
61
|
requirements: []
|
62
62
|
rubyforge_project:
|
63
|
-
rubygems_version: 2.
|
63
|
+
rubygems_version: 2.4.3
|
64
64
|
signing_key:
|
65
65
|
specification_version: 4
|
66
66
|
summary: Ruby graphs!
|