requidef 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.md +13 -0
- data/README.md +5 -13
- data/bin/Makefile +2 -2
- data/bin/requidef +2 -2
- data/bin/requidef.rb +35 -0
- data/lib/{matrix.rb → generic/matrix.rb} +0 -0
- data/lib/{matrix2csv.rb → generic/matrix2csv.rb} +8 -4
- data/lib/{row_of_nodes.rb → generic/row_of_nodes.rb} +0 -0
- data/lib/{tree.rb → generic/tree.rb} +17 -1
- data/lib/{tree2matrix.rb → generic/tree2matrix.rb} +0 -0
- data/lib/html2rd.rb +43 -0
- data/lib/mm2rdtree.rb +81 -0
- data/lib/{rd2nodes.rb → rd2rdnodes.rb} +1 -1
- data/lib/rd2rdtree.rb +6 -0
- data/lib/{node.rb → rdnode.rb} +19 -0
- data/lib/{nodes2tree.rb → rdnodes2rdtree.rb} +3 -3
- data/lib/rdtree.rb +31 -0
- data/lib/{nodetree.rb → rdtree2dot.rb} +6 -29
- data/lib/rdtree2rd.rb +18 -0
- data/lib/requidef.rb +3 -3
- metadata +29 -20
data/ChangeLog.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# version 0.1.0
|
2
|
+
The consequence of 10H rapid developement.
|
3
|
+
It had many bugs so we could not use the command after 'gem install'ing.
|
4
|
+
|
5
|
+
# version 0.2.0
|
6
|
+
(Below describes the future which is not happened still.)
|
7
|
+
We found that the .rd file is not as easy to edit as we had expected.
|
8
|
+
So we decided to edit file in XMind, a free MindMap tool, export it to HTML to translate to .rd file.
|
9
|
+
Other features,
|
10
|
+
* The commandline I/F is changed.
|
11
|
+
* Fixed the reported bugs in 0.1.0.
|
12
|
+
* Provides some converter functionality.
|
13
|
+
* It is now ready to get started by just gem installing.
|
data/README.md
CHANGED
@@ -1,27 +1,19 @@
|
|
1
1
|
# requidef
|
2
|
-
Requiem for the Requirement Definitions.
|
2
|
+
Requiem for the boring Requirement Definitions.
|
3
|
+
Save time and get back to coding.
|
3
4
|
|
4
5
|
## Motivation
|
5
6
|
Do you know the most and the last thing that hinder our technology grow rapidly in this century?
|
6
7
|
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
|
+
We, workers, are forced to write ten of thousand of lenghty documents with MS Word, MS Excel ... you know what.
|
8
9
|
I disrespect every single of the softwares MS provides.
|
9
10
|
Today, we declared to be free from these greedy evils.
|
10
11
|
|
11
|
-
This software, requidef, will guide you to the haven where any documentation works are happy.
|
12
|
+
This software, requidef [r`ekwidef], will guide you to the haven where any documentation works are happy.
|
12
13
|
|
13
14
|
## Installation
|
14
15
|
Only for Ruby >= 1.9
|
15
|
-
|
16
|
-
gem install requidef
|
17
|
-
|
18
|
-
## Recent Releases
|
19
|
-
- 0.1.0
|
20
|
-
-- The consequence of 10 hours rapid developement.
|
21
|
-
- Next : 0.2.0
|
22
|
-
-- Bug fix. Already found 3
|
23
|
-
-- impl : tree -> rd
|
24
|
-
-- impl : http -> tree
|
16
|
+
just 'gem install requidef'.
|
25
17
|
|
26
18
|
## Contributing to requidef
|
27
19
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
data/bin/Makefile
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
sample : dot_sample csv_sample
|
2
2
|
|
3
3
|
dot_sample :
|
4
|
-
|
4
|
+
requidef --type=dot --file=sample.rd > sample.dot
|
5
5
|
dot -Tjpg sample.dot -o sample.jpg
|
6
6
|
|
7
7
|
csv_sample :
|
8
|
-
|
8
|
+
requidef -t csv -f sample.rd > sample.csv
|
9
9
|
|
10
10
|
clean_sample :
|
11
11
|
rm sample.dot sample.csv sample.jpg
|
data/bin/requidef
CHANGED
@@ -15,12 +15,12 @@ end
|
|
15
15
|
opt = OptionParser.new
|
16
16
|
|
17
17
|
type = nil
|
18
|
-
opt.on("-t VAL") do |v|
|
18
|
+
opt.on("-t", "--type=VAL") do |v|
|
19
19
|
type = v
|
20
20
|
end
|
21
21
|
|
22
22
|
input = nil
|
23
|
-
opt.on("-f VAL") do |v|
|
23
|
+
opt.on("-f", "--file=VAL") do |v|
|
24
24
|
input = v
|
25
25
|
end
|
26
26
|
opt.parse!(ARGV)
|
data/bin/requidef.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
|
3
|
+
require "requidef"
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
def print_dot(input)
|
7
|
+
print dot(input)
|
8
|
+
end
|
9
|
+
|
10
|
+
def print_csv(input)
|
11
|
+
print csv(input)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Main
|
15
|
+
opt = OptionParser.new
|
16
|
+
|
17
|
+
type = nil
|
18
|
+
opt.on("-t", "--type=VAL") do |v|
|
19
|
+
type = v
|
20
|
+
end
|
21
|
+
|
22
|
+
input = nil
|
23
|
+
opt.on("-f", "--file=VAL") do |v|
|
24
|
+
input = v
|
25
|
+
end
|
26
|
+
opt.parse!(ARGV)
|
27
|
+
|
28
|
+
case type
|
29
|
+
when "dot"
|
30
|
+
print_dot(input)
|
31
|
+
when "csv"
|
32
|
+
print_csv(input)
|
33
|
+
else
|
34
|
+
raise "no match on type"
|
35
|
+
end
|
File without changes
|
@@ -1,13 +1,17 @@
|
|
1
1
|
require_relative "matrix"
|
2
2
|
|
3
|
-
def matrix2csv(matrix, &writer)
|
3
|
+
def matrix2csv(matrix, range = [0...matrix.m_size, 0...matrix.n_size], &writer)
|
4
4
|
s = ""
|
5
|
-
for i in 0
|
5
|
+
for i in range[0]
|
6
6
|
ms = []
|
7
|
-
|
7
|
+
ms_range = range[1]
|
8
|
+
for j in ms_range
|
8
9
|
ms[j] = writer.call matrix.get([i,j])
|
9
10
|
end
|
10
|
-
|
11
|
+
# NOTE: The separator of csv file is decisively |
|
12
|
+
# I/F to change the charactor is the future work.
|
13
|
+
separator = "|"
|
14
|
+
s += ms[ms_range].join separator
|
11
15
|
s += "\n" unless i == matrix.m_size - 1
|
12
16
|
end
|
13
17
|
s
|
File without changes
|
@@ -5,6 +5,12 @@ class Tree
|
|
5
5
|
@parents = []
|
6
6
|
end
|
7
7
|
|
8
|
+
def list_depth_traverse(under)
|
9
|
+
list = []
|
10
|
+
do_list_depth_traverse(under, list)
|
11
|
+
return list
|
12
|
+
end
|
13
|
+
|
8
14
|
def values
|
9
15
|
@values
|
10
16
|
end
|
@@ -58,6 +64,16 @@ class Tree
|
|
58
64
|
|
59
65
|
private
|
60
66
|
|
67
|
+
def do_list_depth_traverse(under, list)
|
68
|
+
list << under
|
69
|
+
if leaf?(under)
|
70
|
+
return
|
71
|
+
end
|
72
|
+
children(under).each do |id|
|
73
|
+
do_list_depth_traverse(id, list)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
61
77
|
def register_edge(from, to)
|
62
78
|
if @edges[from] == nil
|
63
79
|
@edges[from] = Array.new
|
@@ -89,5 +105,5 @@ if __FILE__ == $0
|
|
89
105
|
puts "children:#{t.children(i)}"
|
90
106
|
end
|
91
107
|
|
92
|
-
|
108
|
+
p t.list_depth_traverse(t.root_id)
|
93
109
|
end
|
File without changes
|
data/lib/html2rd.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# NOTE:
|
2
|
+
# HTML from XMind 3.2.1 lets only h1, h2 and h3.
|
3
|
+
# So, this code only succeeds if the height of the tree is no more greater than 3.
|
4
|
+
# No practical. Must reconsider.
|
5
|
+
|
6
|
+
require "hpricot"
|
7
|
+
|
8
|
+
def html2rd(html)
|
9
|
+
body = read_body(html)
|
10
|
+
regex = /<h(\d).*?>(.*?)<\/h\d>/m
|
11
|
+
body.scan(regex).map do |e|
|
12
|
+
hx2rd(e)
|
13
|
+
end.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
def hx2rd(header)
|
17
|
+
depth = header[0].to_i
|
18
|
+
s = read_anchor(header[1].strip)
|
19
|
+
"#{repeat(depth, "-")} #{s}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def read_anchor(anchor)
|
23
|
+
anchor.scan(/<a.*?>(.*?)<\/a>/m)[0][0]
|
24
|
+
end
|
25
|
+
|
26
|
+
def repeat(n, s)
|
27
|
+
Array.new(n, s).join
|
28
|
+
end
|
29
|
+
|
30
|
+
def read_body(html)
|
31
|
+
doc = Hpricot(open("sample.html"))
|
32
|
+
x = ""
|
33
|
+
(doc/"body").each do |e|
|
34
|
+
x += e.to_html
|
35
|
+
end
|
36
|
+
x
|
37
|
+
end
|
38
|
+
|
39
|
+
if __FILE__ == $0
|
40
|
+
p html2rd("sample.html")
|
41
|
+
# p read_body("sample.html")
|
42
|
+
# p read_anchor("<a name=\"hoge\">text</a>")
|
43
|
+
end
|
data/lib/mm2rdtree.rb
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require "rexml/document"
|
2
|
+
require_relative "generic/tree"
|
3
|
+
require_relative "rdnode"
|
4
|
+
|
5
|
+
def mm2tree(mm)
|
6
|
+
build_tree(mm)
|
7
|
+
end
|
8
|
+
|
9
|
+
# Doc -> Tree (of Text node class)
|
10
|
+
def build_tree(mm)
|
11
|
+
t = Tree.new
|
12
|
+
doc_root_id = 1
|
13
|
+
t.add_node(0, DummyRoot)
|
14
|
+
t.add_edge(0, doc_root_id)
|
15
|
+
do_build_tree(root_node_of(mm), doc_root_id, 1, t)
|
16
|
+
t
|
17
|
+
end
|
18
|
+
|
19
|
+
def do_build_tree(doc, id, depth, t)
|
20
|
+
t.add_node( id, to_node(doc, depth) )
|
21
|
+
n = doc.elements.size
|
22
|
+
for i in 1...n+1
|
23
|
+
child_id = id+i
|
24
|
+
child_depth = depth + 1
|
25
|
+
child_doc = doc.elements[i]
|
26
|
+
child_value = to_node( child_doc, child_depth )
|
27
|
+
t.add_node( child_id, child_value )
|
28
|
+
t.add_edge( id, child_id )
|
29
|
+
|
30
|
+
do_build_tree( child_doc, child_id, child_depth, t )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_node(doc, depth)
|
35
|
+
text = doc.attributes["TEXT"]
|
36
|
+
Text.new(depth, text)
|
37
|
+
end
|
38
|
+
|
39
|
+
def root_node_of(mm)
|
40
|
+
f = File.open(mm, "r")
|
41
|
+
|
42
|
+
txt = f.read
|
43
|
+
doc = REXML::Document.new( txt )
|
44
|
+
|
45
|
+
f.close
|
46
|
+
doc.root.elements[1]
|
47
|
+
end
|
48
|
+
|
49
|
+
if __FILE__ == $0
|
50
|
+
# p root_node_of("sample.mm")
|
51
|
+
p mm2tree("sample.mm")
|
52
|
+
|
53
|
+
puts "# Test ------------------------"
|
54
|
+
include REXML
|
55
|
+
f = File.open("sample.mm", "r")
|
56
|
+
txt = f.read
|
57
|
+
|
58
|
+
p txt
|
59
|
+
doc = Document.new txt
|
60
|
+
p doc
|
61
|
+
p doc.size
|
62
|
+
p "xx"
|
63
|
+
p doc.root.size
|
64
|
+
p doc.root.elements.size
|
65
|
+
p doc.root.elements[1]
|
66
|
+
p doc.root.elements[2]
|
67
|
+
p doc.root.elements[3]
|
68
|
+
|
69
|
+
n = doc.root.elements[1]
|
70
|
+
p n.attributes["TEXT"]
|
71
|
+
|
72
|
+
f.close
|
73
|
+
|
74
|
+
# Try:
|
75
|
+
# doc.size # what means?
|
76
|
+
# doc.root #=> Element
|
77
|
+
# doc.root.
|
78
|
+
# n.attributes[name]
|
79
|
+
|
80
|
+
puts "# -----------------------------"
|
81
|
+
end
|
data/lib/rd2rdtree.rb
ADDED
data/lib/{node.rb → rdnode.rb}
RENAMED
@@ -25,6 +25,10 @@ class Link < Node
|
|
25
25
|
def to_csv
|
26
26
|
""
|
27
27
|
end
|
28
|
+
|
29
|
+
def to_rd
|
30
|
+
"#{dashes(@depth)} >>#{@dest}"
|
31
|
+
end
|
28
32
|
end
|
29
33
|
|
30
34
|
class Tag < Node
|
@@ -46,8 +50,13 @@ class Tag < Node
|
|
46
50
|
def to_desc
|
47
51
|
@text
|
48
52
|
end
|
53
|
+
|
54
|
+
def to_rd
|
55
|
+
"#{dashes(@depth)} [[#{@tag}:#{@text}]]"
|
56
|
+
end
|
49
57
|
end
|
50
58
|
|
59
|
+
|
51
60
|
class Text < Node
|
52
61
|
def initialize(depth, text)
|
53
62
|
super(depth)
|
@@ -65,8 +74,18 @@ class Text < Node
|
|
65
74
|
def to_desc
|
66
75
|
@text
|
67
76
|
end
|
77
|
+
|
78
|
+
def to_rd
|
79
|
+
"#{dashes(@depth)} #{@text}"
|
80
|
+
end
|
68
81
|
end
|
69
82
|
|
83
|
+
def dashes(n)
|
84
|
+
Array.new(n, "-").join ""
|
85
|
+
end
|
86
|
+
|
87
|
+
DummyRoot = Text.new(0, "DummyRoot")
|
88
|
+
|
70
89
|
if __FILE__ == $0
|
71
90
|
n = Text.new(10, "akira")
|
72
91
|
n.tmp[:x] = 100
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require_relative "tree"
|
2
|
-
require_relative "
|
1
|
+
require_relative "generic/tree"
|
2
|
+
require_relative "rdnode"
|
3
3
|
|
4
4
|
def nodes2tree(nodes)
|
5
5
|
nodess = depth2link(nodes)
|
@@ -17,7 +17,7 @@ def nodes2tree(nodes)
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def depth2link(nodes)
|
20
|
-
nodess = [
|
20
|
+
nodess = [DummyRoot] + nodes
|
21
21
|
nodess.each_with_index do |n, i|
|
22
22
|
n.id = i
|
23
23
|
end
|
data/lib/rdtree.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "generic/matrix2csv"
|
2
|
+
require_relative "generic/tree2matrix"
|
3
|
+
require_relative "rdtree2dot"
|
4
|
+
|
5
|
+
class Tree
|
6
|
+
|
7
|
+
def to_csv
|
8
|
+
m = tree2matrix(self)
|
9
|
+
|
10
|
+
range = [
|
11
|
+
0...m.m_size,
|
12
|
+
1...m.n_size]
|
13
|
+
c = matrix2csv(m, range) do |n|
|
14
|
+
s = nil
|
15
|
+
if n == nil
|
16
|
+
s = ""
|
17
|
+
else
|
18
|
+
s = n.to_csv
|
19
|
+
end
|
20
|
+
s
|
21
|
+
end
|
22
|
+
c
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
require_relative "rd2rdtree"
|
27
|
+
if __FILE__ == $0
|
28
|
+
t = rd2rdtree("sample.rd")
|
29
|
+
puts t.to_csv
|
30
|
+
puts t.to_dot
|
31
|
+
end
|
@@ -1,26 +1,7 @@
|
|
1
|
-
require_relative "
|
2
|
-
require_relative "tree2matrix"
|
3
|
-
require_relative "node"
|
1
|
+
require_relative "generic/tree"
|
4
2
|
|
5
3
|
class Tree
|
6
4
|
|
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
5
|
def to_dot
|
25
6
|
elems = []
|
26
7
|
for i in 0...size
|
@@ -43,13 +24,18 @@ class Tree
|
|
43
24
|
elems << dot_edge_desc(i, child) unless link_node?(child)
|
44
25
|
end
|
45
26
|
end
|
27
|
+
|
28
|
+
# NOTE: The ratio of the output figure is 1 at default.
|
29
|
+
# I/F to change the ratio is the future work.
|
46
30
|
"""
|
47
31
|
digraph graphname {
|
32
|
+
graph [ratio = 1]
|
48
33
|
#{elems.join("\n ")}
|
49
34
|
}
|
50
35
|
"""
|
51
36
|
end
|
52
37
|
|
38
|
+
private
|
53
39
|
def dot_node_desc(id)
|
54
40
|
"v#{id} [label=\"#{value(id).to_desc}\"];"
|
55
41
|
end
|
@@ -91,12 +77,3 @@ digraph graphname {
|
|
91
77
|
id2id
|
92
78
|
end
|
93
79
|
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/rdtree2rd.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative "generic/tree"
|
2
|
+
|
3
|
+
class Tree
|
4
|
+
def to_rd
|
5
|
+
nodes = list_depth_traverse(root_id)
|
6
|
+
# NOTE: Eliminate the DummyRoot from rd file.
|
7
|
+
nodes.delete(root_id)
|
8
|
+
nodes.map do |node|
|
9
|
+
value(node).to_rd
|
10
|
+
end.join("\n")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
require_relative "rd2rdtree"
|
15
|
+
if __FILE__ == $0
|
16
|
+
t = rd2rdtree( "sample.rd" )
|
17
|
+
print t.to_rd
|
18
|
+
end
|
data/lib/requidef.rb
CHANGED
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.4
|
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-22 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &26055980 !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: *26055980
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &26055500 !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: *26055500
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jeweler
|
38
|
-
requirement: &
|
38
|
+
requirement: &26055020 !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: *26055020
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rcov
|
49
|
-
requirement: &
|
49
|
+
requirement: &26054540 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,33 +54,42 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *26054540
|
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
62
|
- Makefile
|
63
63
|
- requidef
|
64
|
+
- requidef.rb
|
64
65
|
- sample.rd
|
65
66
|
extensions: []
|
66
67
|
extra_rdoc_files:
|
68
|
+
- ChangeLog.md
|
67
69
|
- LICENSE.txt
|
68
70
|
- README.md
|
69
71
|
files:
|
70
|
-
- lib/matrix.rb
|
71
|
-
- lib/matrix2csv.rb
|
72
|
-
- lib/
|
73
|
-
- lib/
|
74
|
-
- lib/
|
75
|
-
- lib/
|
72
|
+
- lib/generic/matrix.rb
|
73
|
+
- lib/generic/matrix2csv.rb
|
74
|
+
- lib/generic/row_of_nodes.rb
|
75
|
+
- lib/generic/tree.rb
|
76
|
+
- lib/generic/tree2matrix.rb
|
77
|
+
- lib/html2rd.rb
|
78
|
+
- lib/mm2rdtree.rb
|
79
|
+
- lib/rd2rdnodes.rb
|
80
|
+
- lib/rd2rdtree.rb
|
81
|
+
- lib/rdnode.rb
|
82
|
+
- lib/rdnodes2rdtree.rb
|
83
|
+
- lib/rdtree.rb
|
84
|
+
- lib/rdtree2dot.rb
|
85
|
+
- lib/rdtree2rd.rb
|
76
86
|
- lib/requidef.rb
|
77
|
-
-
|
78
|
-
- lib/tree.rb
|
79
|
-
- lib/tree2matrix.rb
|
87
|
+
- ChangeLog.md
|
80
88
|
- LICENSE.txt
|
81
89
|
- README.md
|
82
90
|
- bin/Makefile
|
83
91
|
- bin/requidef
|
92
|
+
- bin/requidef.rb
|
84
93
|
- bin/sample.rd
|
85
94
|
homepage: http://github.com/akiradeveloper/requidef
|
86
95
|
licenses:
|
@@ -97,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
97
106
|
version: '0'
|
98
107
|
segments:
|
99
108
|
- 0
|
100
|
-
hash:
|
109
|
+
hash: -1372144996746053066
|
101
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
111
|
none: false
|
103
112
|
requirements:
|