requidef 0.1.2 → 0.1.4

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/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
- ruby requidef -t dot -f sample.rd > sample.dot
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
- ruby requidef -t csv -f sample.rd > sample.csv
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...matrix.m_size
5
+ for i in range[0]
6
6
  ms = []
7
- for j in 0...matrix.n_size
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
- s += ms.join ","
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
@@ -1,4 +1,4 @@
1
- require_relative "node"
1
+ require_relative "rdnode"
2
2
 
3
3
  # rd -> [node]
4
4
  def rd2nodes(file)
data/lib/rd2rdtree.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative "rd2rdnodes"
2
+ require_relative "rdnodes2rdtree"
3
+
4
+ def rd2rdtree(rd)
5
+ nodes2tree( rd2nodes(rd) )
6
+ end
@@ -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 "node"
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 = [Text.new(0, "Root")] + nodes
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 "matrix2csv"
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
@@ -1,6 +1,6 @@
1
- require_relative "nodetree"
2
- require_relative "rd2nodes"
3
- require_relative "nodes2tree"
1
+ require_relative "rdtree"
2
+ require_relative "rd2rdnodes"
3
+ require_relative "rdnodes2rdtree"
4
4
 
5
5
  def rd2tree(file)
6
6
  nodes2tree( rd2nodes(file) )
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.2
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-21 00:00:00.000000000Z
12
+ date: 2011-08-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &25426960 !ruby/object:Gem::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: *25426960
24
+ version_requirements: *26055980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &25426440 !ruby/object:Gem::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: *25426440
35
+ version_requirements: *26055500
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jeweler
38
- requirement: &25425880 !ruby/object:Gem::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: *25425880
46
+ version_requirements: *26055020
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rcov
49
- requirement: &25425320 !ruby/object:Gem::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: *25425320
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/node.rb
73
- - lib/nodes2tree.rb
74
- - lib/nodetree.rb
75
- - lib/rd2nodes.rb
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
- - lib/row_of_nodes.rb
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: 3420236441750194994
109
+ hash: -1372144996746053066
101
110
  required_rubygems_version: !ruby/object:Gem::Requirement
102
111
  none: false
103
112
  requirements: