rbgraph 0.0.9 → 0.0.10

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: 30ae4eff0161d1ccdae198feb100e9f9c520ad61
4
- data.tar.gz: 10bf406825afbec203a318dcfbbfee2c7cc189f2
3
+ metadata.gz: 5588201fb27d2d21e295f33420713c96e6833ddc
4
+ data.tar.gz: 1785bb677b091f0d905267eb1fd54aae9afc6f1c
5
5
  SHA512:
6
- metadata.gz: 4eb268a4b7763b840bedb0ddb00c280d0c3c3435715a3bb316a845ccc56a0e7eb0250c6c76305f53df148f934a01ae3062a4e88ac259f5e90a51a89a350bf291
7
- data.tar.gz: 0e6dc62726d01b0134a12de1086a23077e0d714283af6dd7d79f33301ab7eb4516d5da4ffd912418f0d59199c19c021345a7135bd4ea7fb63400573931a380af
6
+ metadata.gz: 2ce0a08141f4e053c777a03cac2d152353e2bc31f00472f852c019a6de5ca5658bd3427bbdffe12516ff276264e9f3ce002fa3b8b324da1bf7ccc035fd6de52b
7
+ data.tar.gz: b5c46c0d16a59051ee65f4205048b741e3779881b035a8caf7c0a58261b81af72d4ad74f090e58fc08e3bc690ddcf182146365357f5f8ff51899d59a70ad5818
data/README.md CHANGED
@@ -63,6 +63,8 @@ graph.add_edge!({id: 1}, {id: 2}, {weight: 3})
63
63
  graph.edges["1==2"].weight => 5
64
64
  ```
65
65
 
66
+ Version 0.0.10+
67
+
66
68
  Support for node merging.
67
69
  ```ruby
68
70
  graph = Rbgraph::UndirectedGraph.new()
@@ -73,6 +75,10 @@ graph.add_edge!({id: 3}, {id: 4})
73
75
  # 1 -> 2 -> 3 -> 4
74
76
  graph.merge_nodes!([2, 3])
75
77
  # 1 -> 2 => 4
78
+
79
+ # 1 -> 2 -> 3 -> 4
80
+ graph.merge_nodes!([2, 3], {id: 5})
81
+ # 1 -> 5 => 4
76
82
  ```
77
83
 
78
84
 
data/lib/rbgraph/graph.rb CHANGED
@@ -49,20 +49,28 @@ module Rbgraph
49
49
 
50
50
  def remove_edge!(edge)
51
51
  edge = edge.is_a?(Edge) ? edge : edges[edge]
52
- edge.node1.remove_neighbor(edge.node2)
53
- edge.node2.remove_neighbor(edge.node1)
52
+ edge.node1.neighbors.delete(edge.node2.id)
53
+ edge.node2.neighbors.delete(edge.node1.id)
54
+ edge.node1.edges.delete(edge.id)
55
+ edge.node2.edges.delete(edge.id)
54
56
  edges.delete(edge.id)
55
57
  end
56
58
 
57
- def merge_nodes!(node_ids, &block)
58
- node_ids = node_ids || yield
59
- first_node = nodes[node_ids.shift]
60
- if !first_node.nil? && !node_ids.empty?
61
- node_ids.each do |node_id|
62
- node = nodes[node_id]
63
- first_node.absorb!(node)
64
- end
59
+ def merge_nodes!(node_ids, new_attrs = {})
60
+ node_ids = node_ids.map { |node_id| nodes[node_id].nil? ? nil : node_id } .compact
61
+ return nil if node_ids.empty?
62
+ if new_attrs[:id].nil?
63
+ new_node = nodes[node_ids.shift]
64
+ new_node.merge(Node.new({id: 0}.merge(new_attrs)))
65
+ else
66
+ new_node = add_node!(new_attrs)
67
+ end
68
+ node_ids.each do |node_id|
69
+ node = nodes[node_id]
70
+ new_node.absorb!(node)
71
+ raise "!!" if !nodes[node_id].nil?
65
72
  end
73
+ new_node
66
74
  end
67
75
 
68
76
  def connect_nodes(node1, node2, edge)
data/lib/rbgraph/node.rb CHANGED
@@ -38,12 +38,8 @@ module Rbgraph
38
38
  self
39
39
  end
40
40
 
41
- def remove_neighbor(node)
42
- neighbors.delete(node.id)
43
- end
44
-
45
41
  def absorb!(node)
46
- node.edges.each do |edge_id, edge|
42
+ node.edges.values.each do |edge|
47
43
  other_node = edge.other_node(node)
48
44
  if edge.out_for?(node)
49
45
  graph.add_edge!(self, other_node, edge.attributes) unless other_node == self
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.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Lamprianidis