rbgraph 0.0.9 → 0.0.10

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