dag 0.0.1 → 0.0.2
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.
- data/.yardopts +1 -0
- data/README.md +4 -0
- data/lib/dag/vertex.rb +28 -2
- data/lib/dag.rb +2 -2
- data/spec/lib/dag/vertex_spec.rb +21 -2
- data/spec/lib/dag_spec.rb +0 -4
- metadata +3 -2
data/.yardopts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--no-private
|
data/README.md
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
Very simple directed acyclic graphs for Ruby.
|
4
4
|
|
5
|
+
[](https://travis-ci.org/kevinrutherford/dag)
|
6
|
+
[](https://codeclimate.com/github/kevinrutherford/dag)
|
8
|
+
|
5
9
|
## Installation
|
6
10
|
|
7
11
|
Install the gem
|
data/lib/dag/vertex.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
class DAG
|
2
2
|
|
3
3
|
class Vertex
|
4
|
-
attr_reader :dag
|
4
|
+
attr_reader :dag, :payload
|
5
5
|
|
6
|
-
def initialize(dag)
|
6
|
+
def initialize(dag, payload)
|
7
7
|
@dag = dag
|
8
|
+
@payload = payload
|
8
9
|
end
|
9
10
|
|
11
|
+
private :initialize
|
12
|
+
|
10
13
|
def outgoing_edges
|
11
14
|
@dag.edges.select {|e| e.origin == self}
|
12
15
|
end
|
@@ -23,11 +26,34 @@ class DAG
|
|
23
26
|
outgoing_edges.map(&:destination).uniq
|
24
27
|
end
|
25
28
|
|
29
|
+
def inspect
|
30
|
+
"DAG::Vertex:#{@payload.inspect}"
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# Is there a path from here to +other+ following edges in the DAG?
|
35
|
+
#
|
36
|
+
# @param [DAG::Vertex] another Vertex is the same DAG
|
37
|
+
# @raise [ArgumentError] if +other+ is not a Vertex in the same DAG
|
38
|
+
# @return true iff there is a path following edges within this DAG
|
39
|
+
#
|
26
40
|
def has_path_to?(other)
|
27
41
|
raise ArgumentError.new('You must supply a vertex in this DAG') unless
|
28
42
|
other && Vertex === other && other.dag == self.dag
|
29
43
|
successors.include?(other) || successors.any? {|v| v.has_path_to?(other) }
|
30
44
|
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Retrieve a value from the vertex's payload.
|
48
|
+
# This is a shortcut for vertex.payload[key].
|
49
|
+
#
|
50
|
+
# @param key [Object] the payload key
|
51
|
+
# @return the corresponding value from the payload Hash, or nil if not found
|
52
|
+
#
|
53
|
+
def [](key)
|
54
|
+
@payload[key]
|
55
|
+
end
|
56
|
+
|
31
57
|
end
|
32
58
|
|
33
59
|
end
|
data/lib/dag.rb
CHANGED
data/spec/lib/dag/vertex_spec.rb
CHANGED
@@ -3,8 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe DAG::Vertex do
|
4
4
|
let(:dag) { DAG.new }
|
5
5
|
subject { dag.add_vertex }
|
6
|
-
let(:v1) { dag.add_vertex }
|
7
|
-
let(:v2) { dag.add_vertex }
|
6
|
+
let(:v1) { dag.add_vertex(name: :v1) }
|
7
|
+
let(:v2) { dag.add_vertex(name: :v2) }
|
8
8
|
|
9
9
|
describe 'an instance' do
|
10
10
|
it 'cannot have a path to a non-vertex' do
|
@@ -16,6 +16,25 @@ describe DAG::Vertex do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
describe 'with a payload' do
|
20
|
+
subject { dag.add_vertex(name: 'Fred', size: 34) }
|
21
|
+
|
22
|
+
it 'allows the payload to be accessed' do
|
23
|
+
subject[:name].should == 'Fred'
|
24
|
+
subject[:size].should == 34
|
25
|
+
subject.payload.should == {name: 'Fred', size: 34}
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'returns nil for missing payload key' do
|
29
|
+
subject[56].should be_nil
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'allows the payload to be changed' do
|
33
|
+
subject.payload[:another] = 'ha'
|
34
|
+
subject[:another].should == 'ha'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
19
38
|
context 'with predecessors' do
|
20
39
|
before do
|
21
40
|
dag.add_edge from: v1, to: subject
|
data/spec/lib/dag_spec.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -66,6 +66,7 @@ extensions: []
|
|
66
66
|
extra_rdoc_files: []
|
67
67
|
files:
|
68
68
|
- .rspec
|
69
|
+
- .yardopts
|
69
70
|
- Gemfile
|
70
71
|
- Gemfile.lock
|
71
72
|
- README.md
|