requidef 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +24 -4
- data/lib/matrix.rb +74 -0
- data/lib/matrix2csv.rb +31 -0
- data/lib/node.rb +74 -0
- data/lib/nodes2tree.rb +41 -0
- data/lib/nodetree.rb +102 -0
- data/lib/rd2nodes.rb +60 -0
- data/lib/requidef.rb +17 -0
- data/lib/row_of_nodes.rb +67 -0
- data/lib/tree.rb +93 -0
- data/lib/tree2matrix.rb +27 -0
- metadata +21 -13
- data/bin/.requidef.swp +0 -0
data/README.md
CHANGED
@@ -1,11 +1,33 @@
|
|
1
1
|
# requidef
|
2
|
+
Requiem for the Requirement Definitions.
|
2
3
|
|
3
4
|
## Motivation
|
5
|
+
Do you know the most and the last thing that hinder our technology grow rapidly in this century?
|
6
|
+
The most harmful software, you know that is the MS Office.
|
7
|
+
We, workers, are forced to write lenghty documents with MS Word, MS Excel ... you know what.
|
8
|
+
I disrespect every single of the softwares MS provides.
|
9
|
+
Today, we declared to be free from these greedy evils.
|
10
|
+
|
11
|
+
This software, requidef, will guide you to the haven where any documentation works are happy.
|
4
12
|
|
5
13
|
## Installation
|
14
|
+
Only for Ruby >= 1.9
|
15
|
+
|
16
|
+
gem install requidef
|
17
|
+
|
18
|
+
or
|
19
|
+
|
20
|
+
git clone $(this repo) and add path to the bin dir.
|
21
|
+
|
22
|
+
## Recent Releases
|
23
|
+
- 0.1.0
|
24
|
+
-- The consequence of 10 hours rapid developement.
|
25
|
+
- Next : 0.2.0
|
26
|
+
-- Bug fix. Already found 3
|
27
|
+
-- impl : tree -> rd
|
28
|
+
-- impl : http -> tree
|
6
29
|
|
7
30
|
## Contributing to requidef
|
8
|
-
|
9
31
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
10
32
|
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
11
33
|
* Fork the project
|
@@ -15,7 +37,5 @@
|
|
15
37
|
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
16
38
|
|
17
39
|
## Copyright
|
18
|
-
|
19
|
-
Copyright (c) 2011 Akira Hayakawa. See LICENSE.txt for
|
40
|
+
Copyright (c) 2011 Akira Hayakawa (@akiradeveloper). See LICENSE.txt for
|
20
41
|
further details.
|
21
|
-
|
data/lib/matrix.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
class Matrix
|
2
|
+
def initialize()
|
3
|
+
@mat = []
|
4
|
+
@n = 0
|
5
|
+
end
|
6
|
+
|
7
|
+
def n_size
|
8
|
+
@n
|
9
|
+
end
|
10
|
+
|
11
|
+
def m_size
|
12
|
+
@mat.size
|
13
|
+
end
|
14
|
+
|
15
|
+
def set(at, value)
|
16
|
+
expand(at)
|
17
|
+
i = at[0]
|
18
|
+
j = at[1]
|
19
|
+
@mat[i][j] = value
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(at)
|
23
|
+
i = at[0]
|
24
|
+
j = at[1]
|
25
|
+
@mat[i][j]
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_s
|
29
|
+
p @mat
|
30
|
+
# print "["
|
31
|
+
# print @mat.join(",\n")
|
32
|
+
# print "]\n"
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def expand(by)
|
38
|
+
_m_size = by[0] + 1
|
39
|
+
_n_size = by[1] + 1
|
40
|
+
|
41
|
+
if _m_size > m_size
|
42
|
+
expand_m(_m_size)
|
43
|
+
end
|
44
|
+
|
45
|
+
if _n_size > n_size
|
46
|
+
expand_n(_n_size)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
def expand_m(to)
|
52
|
+
(to-m_size).times do
|
53
|
+
@mat << Array.new(n_size)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def expand_n(to)
|
58
|
+
@mat.each do |x|
|
59
|
+
n = x.size
|
60
|
+
(to-n).times do
|
61
|
+
x << nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
@n = to
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
if __FILE__ == $0
|
69
|
+
m = Matrix.new
|
70
|
+
m.set([0,2], "akira")
|
71
|
+
puts m
|
72
|
+
m.set([2,0], "developer")
|
73
|
+
puts m
|
74
|
+
end
|
data/lib/matrix2csv.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "matrix"
|
2
|
+
|
3
|
+
def matrix2csv(matrix, &writer)
|
4
|
+
s = ""
|
5
|
+
for i in 0...matrix.m_size
|
6
|
+
ms = []
|
7
|
+
for j in 0...matrix.n_size
|
8
|
+
ms[j] = writer.call matrix.get([i,j])
|
9
|
+
end
|
10
|
+
s += ms.join ","
|
11
|
+
s += "\n" unless i == matrix.m_size - 1
|
12
|
+
end
|
13
|
+
s
|
14
|
+
end
|
15
|
+
|
16
|
+
if __FILE__ == $0
|
17
|
+
m = Matrix.new
|
18
|
+
m.set([0,1], "a")
|
19
|
+
m.set([1,0], "b")
|
20
|
+
|
21
|
+
t = matrix2csv(m) do |x|
|
22
|
+
s = nil
|
23
|
+
if x == nil
|
24
|
+
s = ""
|
25
|
+
else
|
26
|
+
s = x*2
|
27
|
+
end
|
28
|
+
s
|
29
|
+
end
|
30
|
+
print t
|
31
|
+
end
|
data/lib/node.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
class Node
|
2
|
+
def initialize(depth)
|
3
|
+
@depth = depth
|
4
|
+
@tmp = {}
|
5
|
+
end
|
6
|
+
attr_reader :tmp ,:depth
|
7
|
+
attr_accessor :id
|
8
|
+
end
|
9
|
+
|
10
|
+
class Link < Node
|
11
|
+
def initialize(depth, dest)
|
12
|
+
super(depth)
|
13
|
+
@dest = dest
|
14
|
+
end
|
15
|
+
attr_reader :dest
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"(Link depth:#{@depth}, dest:#{@dest}, tmp:#{@tmp})"
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_desc
|
22
|
+
""
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_csv
|
26
|
+
""
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Tag < Node
|
31
|
+
def initialize(depth, tag, text)
|
32
|
+
super(depth)
|
33
|
+
@tag = tag
|
34
|
+
@text = text
|
35
|
+
end
|
36
|
+
attr_reader :tag
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
"(Tag depth:#{@depth}, tag:#{@tag}, text:#{@text}, tmp:#{@tmp})"
|
40
|
+
end
|
41
|
+
|
42
|
+
def to_csv
|
43
|
+
@text
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_desc
|
47
|
+
@text
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class Text < Node
|
52
|
+
def initialize(depth, text)
|
53
|
+
super(depth)
|
54
|
+
@text = text
|
55
|
+
end
|
56
|
+
|
57
|
+
def to_s
|
58
|
+
"(Text depth:#{@depth}, text:#{@text}, tmp:#{@tmp})"
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_csv
|
62
|
+
@text
|
63
|
+
end
|
64
|
+
|
65
|
+
def to_desc
|
66
|
+
@text
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if __FILE__ == $0
|
71
|
+
n = Text.new(10, "akira")
|
72
|
+
n.tmp[:x] = 100
|
73
|
+
p n
|
74
|
+
end
|
data/lib/nodes2tree.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative "tree"
|
2
|
+
require_relative "node"
|
3
|
+
|
4
|
+
def nodes2tree(nodes)
|
5
|
+
nodess = depth2link(nodes)
|
6
|
+
t = Tree.new
|
7
|
+
nodess.each do |n|
|
8
|
+
t.add_node(n.id, n)
|
9
|
+
end
|
10
|
+
for i in 1...nodess.size
|
11
|
+
n = nodess[i]
|
12
|
+
from = n.tmp[:parent_id]
|
13
|
+
to = n.id
|
14
|
+
t.add_edge(from, to)
|
15
|
+
end
|
16
|
+
t
|
17
|
+
end
|
18
|
+
|
19
|
+
def depth2link(nodes)
|
20
|
+
nodess = [Text.new(0, "Root")] + nodes
|
21
|
+
nodess.each_with_index do |n, i|
|
22
|
+
n.id = i
|
23
|
+
end
|
24
|
+
current = [nodess[0]]
|
25
|
+
for i in 1...nodess.size
|
26
|
+
n = nodess[i]
|
27
|
+
x = n.depth - 1
|
28
|
+
n.tmp[:parent_id] = current[x].id
|
29
|
+
current[n.depth] = n
|
30
|
+
end
|
31
|
+
|
32
|
+
nodess
|
33
|
+
end
|
34
|
+
|
35
|
+
if __FILE__ == $0
|
36
|
+
puts depth2link([Text.new(1, "akira"), Text.new(2, "developer")])
|
37
|
+
t = nodes2tree([Text.new(1, "akira"), Text.new(2, "developer")])
|
38
|
+
|
39
|
+
puts "------------"
|
40
|
+
puts t.size
|
41
|
+
end
|
data/lib/nodetree.rb
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
require_relative "matrix2csv"
|
2
|
+
require_relative "tree2matrix"
|
3
|
+
require_relative "node"
|
4
|
+
|
5
|
+
class Tree
|
6
|
+
|
7
|
+
def to_csv
|
8
|
+
m = tree2matrix(self)
|
9
|
+
|
10
|
+
# TODO: Link node write the tag it links to.
|
11
|
+
# Maybe, let Node has ID so we can reach the parent.
|
12
|
+
c = matrix2csv(m) do |n|
|
13
|
+
s = nil
|
14
|
+
if n == nil
|
15
|
+
s = ""
|
16
|
+
else
|
17
|
+
s = n.to_csv
|
18
|
+
end
|
19
|
+
s
|
20
|
+
end
|
21
|
+
c
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_dot
|
25
|
+
elems = []
|
26
|
+
for i in 0...size
|
27
|
+
unless link_node?(i)
|
28
|
+
elems << dot_node_desc(i)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
linkmap = mk_linkmap
|
32
|
+
for i in 0...size
|
33
|
+
if link_node?(i)
|
34
|
+
to = linkmap[i]
|
35
|
+
from = parent(i)
|
36
|
+
elems << dot_edge_desc(from, to)
|
37
|
+
next
|
38
|
+
end
|
39
|
+
if leaf?(i)
|
40
|
+
next
|
41
|
+
end
|
42
|
+
children(i).each do |child|
|
43
|
+
elems << dot_edge_desc(i, child) unless link_node?(child)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
"""
|
47
|
+
digraph graphname {
|
48
|
+
#{elems.join("\n ")}
|
49
|
+
}
|
50
|
+
"""
|
51
|
+
end
|
52
|
+
|
53
|
+
def dot_node_desc(id)
|
54
|
+
"v#{id} [label=\"#{value(id).to_desc}\"];"
|
55
|
+
end
|
56
|
+
|
57
|
+
def dot_edge_desc(from, to)
|
58
|
+
"v#{from} -> v#{to};"
|
59
|
+
end
|
60
|
+
|
61
|
+
def link_node?(id)
|
62
|
+
n = value(id)
|
63
|
+
n.class == Link
|
64
|
+
end
|
65
|
+
|
66
|
+
def mk_tag2id
|
67
|
+
tag2id = {}
|
68
|
+
for i in 0...size
|
69
|
+
n = value(i)
|
70
|
+
if n.class == Tag
|
71
|
+
tag2id[n.tag] = i
|
72
|
+
end
|
73
|
+
end
|
74
|
+
tag2id
|
75
|
+
end
|
76
|
+
|
77
|
+
def mk_linkmap
|
78
|
+
id2tag = {}
|
79
|
+
for i in 0...size
|
80
|
+
n = value(i)
|
81
|
+
if n.class == Link
|
82
|
+
id2tag[i] = n.dest
|
83
|
+
end
|
84
|
+
end
|
85
|
+
id2id = {}
|
86
|
+
tag2id = mk_tag2id
|
87
|
+
id2tag.keys.each do |key|
|
88
|
+
tag = id2tag[key]
|
89
|
+
id2id[key] = tag2id[tag]
|
90
|
+
end
|
91
|
+
id2id
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
require_relative "rd2nodes"
|
96
|
+
require_relative "nodes2tree"
|
97
|
+
if __FILE__ == $0
|
98
|
+
t = nodes2tree( rd2nodes("sample.rd") )
|
99
|
+
p t
|
100
|
+
p t.to_csv
|
101
|
+
print t.to_dot
|
102
|
+
end
|
data/lib/rd2nodes.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require_relative "node"
|
2
|
+
|
3
|
+
# rd -> [node]
|
4
|
+
def rd2nodes(file)
|
5
|
+
f = File.open(file, "r")
|
6
|
+
lines = f.read.split("\n")
|
7
|
+
nodes = lines2nodes(lines)
|
8
|
+
f.close
|
9
|
+
nodes
|
10
|
+
end
|
11
|
+
|
12
|
+
def lines2nodes(lines)
|
13
|
+
xs = []
|
14
|
+
lines.each do |line|
|
15
|
+
xs << line2node(line)
|
16
|
+
end
|
17
|
+
xs
|
18
|
+
end
|
19
|
+
|
20
|
+
# Example,
|
21
|
+
# --- aaa => Text(3, "aaa")
|
22
|
+
# -- >>bbb => Link(2, "bbb")
|
23
|
+
# - [[ccc:ddd]] => Tag(1, "ccc", "ddd")
|
24
|
+
def line2node(line)
|
25
|
+
splits = line.split(" ")
|
26
|
+
dashes = splits[0]
|
27
|
+
depth = dashes.split("").size
|
28
|
+
rest = splits[1...splits.size][0]
|
29
|
+
if rest.start_with?(">>")
|
30
|
+
ss = parse_link(rest)
|
31
|
+
return Link.new(depth, ss)
|
32
|
+
elsif rest.start_with?("[[")
|
33
|
+
ss = parse_tag(rest)
|
34
|
+
return Tag.new(depth, ss[0], ss[1])
|
35
|
+
else
|
36
|
+
ss = parse_text(rest)
|
37
|
+
return Text.new(depth, ss)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def parse_text(s)
|
42
|
+
s
|
43
|
+
end
|
44
|
+
|
45
|
+
# NOTE: under-engineering
|
46
|
+
def parse_link(s)
|
47
|
+
s.delete ">>"
|
48
|
+
end
|
49
|
+
|
50
|
+
# NOTE: under-engineering
|
51
|
+
def parse_tag(s)
|
52
|
+
ss = s.delete("[[").delete("]]")
|
53
|
+
ss.split(":")
|
54
|
+
end
|
55
|
+
|
56
|
+
if __FILE__ == $0
|
57
|
+
puts "nodes from .rd"
|
58
|
+
nodes = rd2nodes("sample.rd")
|
59
|
+
puts nodes
|
60
|
+
end
|
data/lib/requidef.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require_relative "nodetree"
|
2
|
+
require_relative "rd2nodes"
|
3
|
+
require_relative "nodes2tree"
|
4
|
+
|
5
|
+
def rd2tree(file)
|
6
|
+
nodes2tree( rd2nodes(file) )
|
7
|
+
end
|
8
|
+
|
9
|
+
# File -> String
|
10
|
+
def dot(file)
|
11
|
+
rd2tree(file).to_dot
|
12
|
+
end
|
13
|
+
|
14
|
+
# File -> String
|
15
|
+
def csv(file)
|
16
|
+
rd2tree(file).to_csv
|
17
|
+
end
|
data/lib/row_of_nodes.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative "tree"
|
2
|
+
|
3
|
+
def row_of_nodes(tree)
|
4
|
+
RowOfNodes.new(tree).row_of_nodes
|
5
|
+
end
|
6
|
+
|
7
|
+
class RowOfNodes
|
8
|
+
|
9
|
+
def initialize(tree)
|
10
|
+
@tree = tree
|
11
|
+
@array = Array.new(tree.values.size, [0,0])
|
12
|
+
end
|
13
|
+
|
14
|
+
def row_of_nodes
|
15
|
+
n = @tree.root_id
|
16
|
+
set_row_of_nodes(n)
|
17
|
+
@array.map { |xx| xx[0] }
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def set_row_of_nodes(id)
|
23
|
+
if @tree.leaf? id
|
24
|
+
@array[id][1] = 1
|
25
|
+
return
|
26
|
+
end
|
27
|
+
|
28
|
+
children_id = @tree.children(id)
|
29
|
+
|
30
|
+
for i in 0...children_id.size
|
31
|
+
child_id = children_id[i]
|
32
|
+
a = @array[id][0] + @array[id][1]
|
33
|
+
# @array[child_id][0] = @array[id][0] + @array[id][1]
|
34
|
+
@array[child_id] = [a, @array[child_id][1]]
|
35
|
+
set_row_of_nodes(child_id)
|
36
|
+
# @array[id][1] += @array[child_id][1]
|
37
|
+
b = @array[id][1] + @array[child_id][1]
|
38
|
+
@array[id] = [@array[id][0], b]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
if __FILE__ == $0
|
44
|
+
# test ------------------
|
45
|
+
a = [[1,1], [2,2]]
|
46
|
+
a[0][0] = a[0][0] + a[0][1]
|
47
|
+
p a #=> no problem.
|
48
|
+
|
49
|
+
# NOTE:
|
50
|
+
# The problem occured above related to
|
51
|
+
# Array on recursion.
|
52
|
+
# -----------------------
|
53
|
+
|
54
|
+
t = Tree.new
|
55
|
+
t.add_node(0, nil)
|
56
|
+
t.add_node(1, nil)
|
57
|
+
t.add_node(2, nil)
|
58
|
+
t.add_node(3, nil)
|
59
|
+
t.add_node(4, nil)
|
60
|
+
|
61
|
+
t.add_edge(0, 2)
|
62
|
+
t.add_edge(0, 1)
|
63
|
+
t.add_edge(1, 3)
|
64
|
+
t.add_edge(1, 4)
|
65
|
+
|
66
|
+
p row_of_nodes(t)
|
67
|
+
end
|
data/lib/tree.rb
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
class Tree
|
2
|
+
def initialize
|
3
|
+
@values = []
|
4
|
+
@edges = []
|
5
|
+
@parents = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def values
|
9
|
+
@values
|
10
|
+
end
|
11
|
+
|
12
|
+
def size
|
13
|
+
@values.size
|
14
|
+
end
|
15
|
+
|
16
|
+
def parent(id)
|
17
|
+
@parents[id]
|
18
|
+
end
|
19
|
+
|
20
|
+
def depth(id)
|
21
|
+
d = 0
|
22
|
+
i = id
|
23
|
+
until( i==root_id )
|
24
|
+
i = parent(i)
|
25
|
+
d += 1
|
26
|
+
end
|
27
|
+
d
|
28
|
+
end
|
29
|
+
|
30
|
+
def root_id
|
31
|
+
0
|
32
|
+
end
|
33
|
+
|
34
|
+
def value(id)
|
35
|
+
@values[id]
|
36
|
+
end
|
37
|
+
|
38
|
+
def children(id)
|
39
|
+
@edges[id]
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_node(id, value)
|
43
|
+
@values[id] = value
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_edge(from, to)
|
47
|
+
register_edge(from, to)
|
48
|
+
register_parent(to, from)
|
49
|
+
end
|
50
|
+
|
51
|
+
def leaf?(id)
|
52
|
+
@edges[id] == nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def branch?(id)
|
56
|
+
! leaf?(id)
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def register_edge(from, to)
|
62
|
+
if @edges[from] == nil
|
63
|
+
@edges[from] = Array.new
|
64
|
+
end
|
65
|
+
@edges[from] << to
|
66
|
+
end
|
67
|
+
|
68
|
+
def register_parent(from, to)
|
69
|
+
@parents[from] = to
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
if __FILE__ == $0
|
74
|
+
t = Tree.new
|
75
|
+
t.add_node(0, "a")
|
76
|
+
t.add_node(1, "b")
|
77
|
+
t.add_node(2, "c")
|
78
|
+
|
79
|
+
t.add_edge(0, 1)
|
80
|
+
t.add_edge(1, 2)
|
81
|
+
[0,1,2].each do |i|
|
82
|
+
puts "id:#{i}"
|
83
|
+
puts "value:#{t.value(i)}"
|
84
|
+
puts "leaf?:#{t.leaf?(i)}"
|
85
|
+
puts "branch?:#{t.branch?(i)}"
|
86
|
+
puts "depth:#{t.depth(i)}"
|
87
|
+
end
|
88
|
+
[0,1].each do |i|
|
89
|
+
puts "children:#{t.children(i)}"
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
end
|
data/lib/tree2matrix.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative "matrix"
|
2
|
+
require_relative "row_of_nodes"
|
3
|
+
|
4
|
+
def tree2matrix(tree)
|
5
|
+
rows = row_of_nodes(tree)
|
6
|
+
m = Matrix.new
|
7
|
+
for i in 0...tree.size
|
8
|
+
m.set( [rows[i], tree.depth(i)], tree.value(i) )
|
9
|
+
end
|
10
|
+
m
|
11
|
+
end
|
12
|
+
|
13
|
+
if __FILE__ == $0
|
14
|
+
t = Tree.new
|
15
|
+
t.add_node(0, 0)
|
16
|
+
t.add_node(1, 1)
|
17
|
+
t.add_node(2, 2)
|
18
|
+
t.add_node(3, 3)
|
19
|
+
t.add_node(4, 4)
|
20
|
+
|
21
|
+
t.add_edge(0, 2)
|
22
|
+
t.add_edge(0, 1)
|
23
|
+
t.add_edge(1, 3)
|
24
|
+
t.add_edge(1, 4)
|
25
|
+
|
26
|
+
print tree2matrix(t)
|
27
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: requidef
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-08-
|
12
|
+
date: 2011-08-21 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &14359940 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.3.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *14359940
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &14359460 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *14359460
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jeweler
|
38
|
-
requirement: &
|
38
|
+
requirement: &14358980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.6.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *14358980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rcov
|
49
|
-
requirement: &
|
49
|
+
requirement: &14358500 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,12 +54,11 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *14358500
|
58
58
|
description: Which do you use for your requirement definition job? MS Excel? MS Word?
|
59
59
|
Uninstall them. Because you will get a better solution.
|
60
60
|
email: ruby.wktk@gmail.com
|
61
61
|
executables:
|
62
|
-
- .requidef.swp
|
63
62
|
- Makefile
|
64
63
|
- requidef
|
65
64
|
- sample.rd
|
@@ -68,9 +67,18 @@ extra_rdoc_files:
|
|
68
67
|
- LICENSE.txt
|
69
68
|
- README.md
|
70
69
|
files:
|
70
|
+
- lib/matrix.rb
|
71
|
+
- lib/matrix2csv.rb
|
72
|
+
- lib/node.rb
|
73
|
+
- lib/nodes2tree.rb
|
74
|
+
- lib/nodetree.rb
|
75
|
+
- lib/rd2nodes.rb
|
76
|
+
- lib/requidef.rb
|
77
|
+
- lib/row_of_nodes.rb
|
78
|
+
- lib/tree.rb
|
79
|
+
- lib/tree2matrix.rb
|
71
80
|
- LICENSE.txt
|
72
81
|
- README.md
|
73
|
-
- bin/.requidef.swp
|
74
82
|
- bin/Makefile
|
75
83
|
- bin/requidef
|
76
84
|
- bin/sample.rd
|
@@ -89,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
97
|
version: '0'
|
90
98
|
segments:
|
91
99
|
- 0
|
92
|
-
hash: -
|
100
|
+
hash: -4304971184590871815
|
93
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
102
|
none: false
|
95
103
|
requirements:
|
data/bin/.requidef.swp
DELETED
Binary file
|