rbgraph 0.0.6 → 0.0.7

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