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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 30f582c64c3e5b6aba3716ee81c606164db386dd
4
- data.tar.gz: e2255e174f3282c5cd56441575bb045527850338
3
+ metadata.gz: a0fe2bf64b05c39412353c43e2b61be62802eba8
4
+ data.tar.gz: 275c4daead8f24d392d04287e4f05c16e3538745
5
5
  SHA512:
6
- metadata.gz: 846a7e5c1fe33ba95f46c1897358022b6f340ed3ee3942c49768e5721b46f713d3dcdecda76715c10fc3063fa1f758e72e3897487f90ddc293913f263dd6b195
7
- data.tar.gz: 8a6f26a45e8e26e0449838d09447875f28591ebecaf988f3f5983abf898f3ec0f10e2f4558421acc422ca3d6f8dc8528fa4913e7a555ba5165ab882398fd4e6b
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] = node
35
- edges[edge.id] = edge
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.6
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.2.2
63
+ rubygems_version: 2.4.3
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: Ruby graphs!