rbgraph 0.2.0 → 0.3.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: 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