rbgraph 0.2.0 → 0.3.0

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: bf0651e43311d3e309fc16dc6a295cbaa6a22d01
4
- data.tar.gz: 74de94cc9f37c30a21e0dd71932362502e67fb92
3
+ metadata.gz: 57cd18654388a00de3e34afe32243bf721820d5d
4
+ data.tar.gz: 03dbcda9b0895503528e6e56d5ebb6d42b4c5acf
5
5
  SHA512:
6
- metadata.gz: c10c70096241736953e7dc983f897b6e72749280a79f02830b999b783ba4c46dd6b0b16b46c35ad89ba46b4cbea905bb1735300381861689188b268725a09cef
7
- data.tar.gz: 4d7543bae183a0f6b17bf9e06bc86746376c8e80cdd7fa884ff36e413718257835844e1a44230e09b5739b326bd7b471eeb469352ca2252b9c25b0833cffcb2a
6
+ metadata.gz: aed7cdcf511eb6a0cda1e15732714d37e2357c69a3790d29a5aa18c7b6f81312f5f103bb1cd1eaa9fd02caa737ba437e5f478a38de35f19df53dc8da29eafce3
7
+ data.tar.gz: 3528826955f305a39c595c97d5ae6b69c40ef3c43f569384549a1e983d00a6d158670952286d51522c4978efa59993f3d90044b0f5fd9930fe730d85ff3e42e4
data/lib/rbgraph/edge.rb CHANGED
@@ -43,6 +43,10 @@ module Rbgraph
43
43
  node == node1 ? node2 : node1
44
44
  end
45
45
 
46
+ def different_node(node)
47
+ ([node1, node2] - [node]).first
48
+ end
49
+
46
50
  def merge!(edge, &block)
47
51
  self.weight += edge.weight unless edge.weight.nil?
48
52
  raise "Cannot merging edges of different kind!" if kind != edge.kind
data/lib/rbgraph/node.rb CHANGED
@@ -69,6 +69,42 @@ module Rbgraph
69
69
  edges.select { |eid, edge| edge.in_for?(self) }
70
70
  end
71
71
 
72
+ def parent
73
+ if graph.directed?
74
+ incoming_edges_arr = incoming_edges.values
75
+ case incoming_edges_arr.size
76
+ when 0 then nil
77
+ when 1 then incoming_edges_arr.first.different_node(self) ||
78
+ raise("Node #{id} is connected to self!")
79
+ else
80
+ raise "Node #{id} has more than 1 incoming edges!"
81
+ end
82
+ end
83
+ end
84
+
85
+ def ancestors
86
+ if graph.directed?
87
+ nodes = {}
88
+ up = parent
89
+ nodes[up.id] = up unless up.nil?
90
+ while !up.parent.nil?
91
+ up = up.parent
92
+ if nodes[up.id].nil?
93
+ nodes[up.id] = up
94
+ else
95
+ raise "Cycle detected while getting ancestors of #{id}!"
96
+ end
97
+ end
98
+ nodes
99
+ else
100
+ {}
101
+ end
102
+ end
103
+
104
+ def root
105
+ ancestors.values.last
106
+ end
107
+
72
108
  def out_degree
73
109
  outgoing_edges.size
74
110
  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.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Lamprianidis