jeffreyhunter77-R2Doc 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/CHANGELOG +1 -0
  2. data/LICENSE +20 -0
  3. data/Manifest +50 -0
  4. data/R2Doc.gemspec +33 -0
  5. data/README +103 -0
  6. data/README.rdoc +103 -0
  7. data/Rakefile +9 -0
  8. data/bin/r2doc +157 -0
  9. data/lib/r2doc.rb +7 -0
  10. data/lib/r2doc/context_extensions.rb +237 -0
  11. data/lib/r2doc/erb_template_engine.rb +11 -0
  12. data/lib/r2doc/generator.rb +123 -0
  13. data/lib/r2doc/rdoc_v2_generator.rb +112 -0
  14. data/lib/r2doc/template.rb +95 -0
  15. data/lib/r2doc/template/r2doc/_aliases.html.erb +22 -0
  16. data/lib/r2doc/template/r2doc/_attributes.html.erb +24 -0
  17. data/lib/r2doc/template/r2doc/_classes_and_modules.html.erb +13 -0
  18. data/lib/r2doc/template/r2doc/_constants.html.erb +22 -0
  19. data/lib/r2doc/template/r2doc/_method_detail.html.erb +10 -0
  20. data/lib/r2doc/template/r2doc/_method_details.html.erb +17 -0
  21. data/lib/r2doc/template/r2doc/_method_listing.html.erb +37 -0
  22. data/lib/r2doc/template/r2doc/_method_listing_row.html.erb +4 -0
  23. data/lib/r2doc/template/r2doc/_nav.html.erb +40 -0
  24. data/lib/r2doc/template/r2doc/_nav_item.html.erb +1 -0
  25. data/lib/r2doc/template/r2doc/class.html.erb +71 -0
  26. data/lib/r2doc/template/r2doc/file.html.erb +52 -0
  27. data/lib/r2doc/template/r2doc/images/blue-arrow-right.png +0 -0
  28. data/lib/r2doc/template/r2doc/images/blue-arrow-up.png +0 -0
  29. data/lib/r2doc/template/r2doc/images/blue-box.png +0 -0
  30. data/lib/r2doc/template/r2doc/images/blue-plus.png +0 -0
  31. data/lib/r2doc/template/r2doc/images/close-button.png +0 -0
  32. data/lib/r2doc/template/r2doc/images/green-arrow-right.png +0 -0
  33. data/lib/r2doc/template/r2doc/images/green-arrow-up.png +0 -0
  34. data/lib/r2doc/template/r2doc/images/nav-back.png +0 -0
  35. data/lib/r2doc/template/r2doc/images/nav-bottom.png +0 -0
  36. data/lib/r2doc/template/r2doc/images/nav-top.png +0 -0
  37. data/lib/r2doc/template/r2doc/images/orange-hash.png +0 -0
  38. data/lib/r2doc/template/r2doc/images/red-dash.png +0 -0
  39. data/lib/r2doc/template/r2doc/images/search-back.png +0 -0
  40. data/lib/r2doc/template/r2doc/images/top-back.png +0 -0
  41. data/lib/r2doc/template/r2doc/images/top-left.png +0 -0
  42. data/lib/r2doc/template/r2doc/images/top-right.png +0 -0
  43. data/lib/r2doc/template/r2doc/index.html.erb +42 -0
  44. data/lib/r2doc/template/r2doc/jquery.js +19 -0
  45. data/lib/r2doc/template/r2doc/prototype.js +285 -0
  46. data/lib/r2doc/template/r2doc/r2doc.css +400 -0
  47. data/lib/r2doc/template/r2doc/rdoc-utils.js +510 -0
  48. data/lib/r2doc/template/r2doc/rdoc.js.erb +164 -0
  49. data/lib/r2doc/template_util.rb +82 -0
  50. data/lib/rdoc/discover.rb +4 -0
  51. data/lib/rdoc/generators/r2doc_generator.rb +105 -0
  52. metadata +155 -0
@@ -0,0 +1,164 @@
1
+ rdoc.searchList = [<%= (@classes + complete_method_list).sort{|a,b| a.name <=> b.name}.collect{|c| (c.is_method_context?) ? "{display_name:\"#{c.name}\",description:\"(#{c.context.parent.full_name})\",href:\"#{c.path}\"}" : "{display_name:\"#{c.name}\",description:\"\",href:\"#{c.path}\"}"}.join(",") %>];
2
+
3
+ /**
4
+ * Auto completion for search box
5
+ */
6
+ rdoc.SearchAutoCompleter = Class.create();
7
+ Object.extend(rdoc.SearchAutoCompleter.prototype, rdoc.CustomAutoCompleter.prototype);
8
+ Object.extend(rdoc.SearchAutoCompleter.prototype, {
9
+ /**
10
+ * Constructor
11
+ *
12
+ * @param elem The element or id to preform autocompletion for
13
+ * @param chooser The element or id of the window that diplays the choices
14
+ */
15
+ initialize: function(elem, chooser) {
16
+ this.baseInitialize(elem, chooser);
17
+ },
18
+
19
+ /**
20
+ * Retrieve the list of options for autocompletion
21
+ */
22
+ delayedUpdate: function() {
23
+ this.selectedIndex = (this.selectedIndex || this.selectedIndex == 0) ? 0 : null
24
+ this.newSelections(rdoc.searchList, true);
25
+ },
26
+
27
+ /**
28
+ * Called when a pure text entry is selected
29
+ */
30
+ determineIds: function() {
31
+ // no special action needed
32
+ },
33
+
34
+ /**
35
+ * Called when a particular item in the list is selected
36
+ */
37
+ setIds: function(result) {
38
+ location = rdoc.genUrl(rdoc.currentPath, result.href);
39
+ },
40
+
41
+ /**
42
+ * Do a contains search for a given value
43
+ */
44
+ searchForContains: function() {
45
+ var txt = this.element.value.toUpperCase();
46
+ var tokens = txt.split(/\s+/);
47
+ var matches = [];
48
+ var i, j, matched;
49
+
50
+ for (i = 0; i < rdoc.searchList.length; i++) {
51
+ matched = 1;
52
+ for (j = 0; j < tokens.length; j++) {
53
+ if (rdoc.searchList[i].display_name.toUpperCase().indexOf(tokens[j]) == -1) {
54
+ matched = 0;
55
+ break;
56
+ }
57
+ }
58
+ if (matched != 0) matches.push(rdoc.searchList[i]);
59
+ }
60
+
61
+ this.displaySearchResults(matches);
62
+ },
63
+
64
+ /**
65
+ * Displays the search results
66
+ */
67
+ displaySearchResults: function(matches) {
68
+ if (matches.length == 0) {
69
+ window.location = rdoc.genUrl(rdoc.currentPath, matches[i].href);
70
+ } else {
71
+ if (this.updateTimer != null) clearTimeout(this.updateTimer);
72
+ this.updateTimer = null;
73
+ this.hide();
74
+ rdoc.searchDialog.displayResults(matches);
75
+ }
76
+ },
77
+
78
+ /**
79
+ * Set the position for the chooser window
80
+ * (sadly, Position.close just doesn't work everywhere correctly)
81
+ */
82
+ positionChooser: function() {
83
+ var p = this.element;
84
+ var left = 0;
85
+ var top = 0;
86
+ while (p) {
87
+ left += p.offsetLeft;
88
+ top += p.offsetTop;
89
+ p = p.offsetParent
90
+ }
91
+ this.chooser.style.left = left + 'px';
92
+ this.chooser.style.top = (top + this.element.offsetHeight) + 'px';
93
+ },
94
+
95
+ /**
96
+ * Effect for displaying the chooser.
97
+ */
98
+ displayChooser: function() {
99
+ this.chooser.style.height = '1px';
100
+ this.chooser.style.width = '120px';
101
+ jQuery(this.chooser).animate({height: '120px', width: '300px', opacity: 1}, 'fast');
102
+ }
103
+
104
+ });
105
+
106
+ /**
107
+ * Search results dialog
108
+ */
109
+ rdoc.SearchResultsDialog = Class.create();
110
+ Object.extend(rdoc.SearchResultsDialog.prototype, rdoc.CustomDialog.prototype);
111
+ Object.extend(rdoc.SearchResultsDialog.prototype, {
112
+ /**
113
+ * Constructor
114
+ */
115
+ initialize: function() {
116
+ this.baseInitialize({});
117
+ this.dialog.className = 'search_results';
118
+ },
119
+
120
+ /**
121
+ * Display search results
122
+ */
123
+ displayResults: function(results) {
124
+ var html = '<h1><a onclick="rdoc.searchDialog.close(); return false;"></a>Search Results</h1><ul>';
125
+
126
+ var i;
127
+ for (i = 0; i < results.length; i++) {
128
+ html += '<li class="'+(i % 2 == 0 ? 'odd' : 'even')+'" ' +
129
+ "onclick=\"window.location='" + rdoc.genUrl(rdoc.currentPath, results[i].href) + "'\">" +
130
+ results[i].display_name.escapeHTML() + ' ' +
131
+ '<span class="description">' + results[i].description.escapeHTML() + '</span>' +
132
+ '</li>';
133
+ }
134
+
135
+ if (results.length == 0) {
136
+ html += '<li class="odd">No results found</li>';
137
+ }
138
+
139
+ html += '</ul>';
140
+ this.dialog.innerHTML = html;
141
+ this.open();
142
+ },
143
+
144
+ /**
145
+ * Return the width of the dialog in pixels
146
+ */
147
+ dialogWidth: function() {
148
+ return 550;
149
+ }
150
+
151
+ });
152
+
153
+ /**
154
+ * Runs when the document is loaded
155
+ */
156
+ Event.observe(window, 'load', function(event) {
157
+ rdoc.searchField = new rdoc.SearchAutoCompleter('search_criteria', 'search_choices');
158
+ rdoc.searchDialog = new rdoc.SearchResultsDialog();
159
+ Event.observe($('searchform'), 'submit', function(event) {
160
+ Event.stop(event);
161
+ $('search_criteria').blur();
162
+ rdoc.searchField.searchForContains();
163
+ });
164
+ });
@@ -0,0 +1,82 @@
1
+ module R2Doc
2
+
3
+ # Utility functions available for use in templates
4
+ module TemplateUtil
5
+ # Convert a target url to one that is relative to a given
6
+ # path. This method is updated to account for paths to files
7
+ # in the root directory.
8
+ def TemplateUtil.gen_url(path, target)
9
+ from = File.dirname(path)
10
+ to, to_file = File.split(target)
11
+
12
+ from = from.split("/")
13
+ to = to.split("/")
14
+
15
+ from.shift if from.first == '.'
16
+ to.shift if to.first == '.'
17
+
18
+ while from.size > 0 and to.size > 0 and from[0] == to[0]
19
+ from.shift
20
+ to.shift
21
+ end
22
+
23
+ from.fill("..")
24
+ from.concat(to)
25
+ from << to_file
26
+ File.join(*from)
27
+ end
28
+
29
+ # Runs a partial template and return the contents. This is similar
30
+ # to, but much lighter weight than the notion of partials in Rails.
31
+ # Example usage:
32
+ # render_partial :foo # renders the partial in '_foo.html.erb'
33
+ # render_partial :foo, {:bar=>1} # renders the partial and sets local variable bar to 1
34
+ def render_partial(partial, locals = nil)
35
+ local_assign_code = locals.nil? ? '' : locals.keys.collect{|k| "#{k} = locals[:#{k}];"}.join
36
+ template = "#{template_name}/_#{partial.to_s}"
37
+ proc_code = <<-end_src
38
+ Proc.new {
39
+ #{local_assign_code}
40
+ R2Doc::TemplateManager.load_template('#{template}').result(binding)
41
+ }
42
+ end_src
43
+ p = eval proc_code
44
+ p.call
45
+ end
46
+
47
+ # A much simplified and altered version of the link_to method in
48
+ # ActionView::Helpers::UrlHelper, creates a link of the given
49
+ # +content+ to the given +url+. If +url+ is a string it is assumed
50
+ # to be relative to the top of the documentation directory. If +url+
51
+ # is a ContextUser object, its path is used. The final URL is
52
+ # adjusted to match the path of the current file being output. If
53
+ # +html_options+ are provided, they become attributes of the returned
54
+ # tag.
55
+ def link_to(content, url, html_options = nil)
56
+ url = url.path if url.respond_to?(:path)
57
+ attrs = html_options.nil? ? {} : html_options
58
+ attrs[:href] = R2Doc::TemplateUtil.gen_url(@current_path, url)
59
+ content_tag 'a', content, attrs
60
+ end
61
+
62
+ # Return the relative path to +url+ for the current file. Assumes
63
+ # that +url+ is a ContextUser or path relative to the top of the
64
+ # documentation directory.
65
+ def path_to(url)
66
+ url = url.path if url.respond_to?(:path)
67
+ R2Doc::TemplateUtil.gen_url(@current_path, url)
68
+ end
69
+
70
+ # Return an html tag with content an attributed defined by the provided hash
71
+ def content_tag(tagname, content, html_options = {})
72
+ attr_string = html_options.collect{|k,v| " #{h(k.to_s)}=\"#{h(v)}\""}.join('')
73
+ "<#{tagname}#{attr_string}>#{content}</#{tagname}>"
74
+ end
75
+
76
+ # Returns an even or odd class name for striping rows using a zero-based index
77
+ def stripe_class(index, class_prefix = '')
78
+ "#{class_prefix}#{index % 2 == 0 ? 'odd' : 'even'}"
79
+ end
80
+ end
81
+
82
+ end
@@ -0,0 +1,4 @@
1
+ # This file is invoked by RDoc version 2 when it searches for gems
2
+ # associated with RDoc. It is responsible for loading any generators or
3
+ # other items this gem provides for RDoc
4
+ require 'r2doc/rdoc_v2_generator'
@@ -0,0 +1,105 @@
1
+
2
+ require 'ftools'
3
+
4
+ require 'rdoc/options'
5
+ require 'rdoc/markup/simple_markup'
6
+ require 'rdoc/markup/simple_markup/to_html'
7
+ require 'rdoc/generators/html_generator'
8
+
9
+ require 'erb'
10
+
11
+ require 'r2doc/context_extensions'
12
+ require 'r2doc/template'
13
+ require 'r2doc/template_util'
14
+ require 'r2doc/generator'
15
+ require 'r2doc/erb_template_engine'
16
+
17
+ Generators::ContextUser.class_eval do
18
+ include R2Doc::ContextExtensions
19
+ end
20
+
21
+ Generators::HtmlClass.class_eval do
22
+ include R2Doc::ClassExtensions
23
+ end
24
+
25
+ Generators::HtmlMethod.class_eval do
26
+ include R2Doc::MethodExtensions
27
+ end
28
+
29
+ module R2Doc
30
+ # Accessor for the AllReferences class
31
+ def self.all_references
32
+ Generators::AllReferences
33
+ end
34
+ end
35
+
36
+ module Generators
37
+
38
+ class ContextUser #:nodoc:
39
+ protected
40
+ def format_path=(new_path)
41
+ @html_formatter = HyperlinkHtml.new(new_path, self)
42
+ end
43
+ end
44
+
45
+ class HtmlMethod #:nodoc:
46
+ def create_source_code_file(code_body)
47
+ end
48
+ end
49
+
50
+ class HTMLGenerator #:nodoc:
51
+ def HTMLGenerator.gen_url(path, target)
52
+ R2Doc::TemplateUtil.gen_url(path, target)
53
+ end
54
+ end
55
+
56
+ # R2Doc generator for RDoc v1.0.1
57
+ class R2DOCGenerator < HTMLGenerator
58
+
59
+ include ERB::Util
60
+ include R2Doc::TemplateUtil
61
+ include R2Doc::Generator
62
+
63
+ # Factory method
64
+ def R2DOCGenerator.for(options)
65
+ R2DOCGenerator.new(options)
66
+ end
67
+
68
+ # Constructor
69
+ def initialize(*args)
70
+ super
71
+ build_static_file_list
72
+ end
73
+
74
+ # Perform version-specific initialization
75
+ def generate_prep
76
+ end
77
+
78
+ # Return the name of the template
79
+ def template_name
80
+ @options.template || 'r2doc'
81
+ end
82
+
83
+ # Return the list of top level objects for this RDoc version
84
+ def get_toplevels
85
+ RDoc::TopLevel
86
+ end
87
+
88
+ # Create a new file object for this RDoc version
89
+ def create_file_context(context, options)
90
+ HtmlFile.new(context, options, FILE_DIR)
91
+ end
92
+
93
+ # Create a new class object for this RDoc version
94
+ def create_class_context(context, file, options)
95
+ HtmlClass.new(context, file, CLASS_DIR, options)
96
+ end
97
+
98
+ # Return a list of all defined methods
99
+ def complete_method_list
100
+ HtmlMethod.all_methods
101
+ end
102
+
103
+ end
104
+
105
+ end
metadata ADDED
@@ -0,0 +1,155 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jeffreyhunter77-R2Doc
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.1"
5
+ platform: ruby
6
+ authors:
7
+ - Jeffrey Hunter and Mission Critical Labs, Inc.
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-07-17 00:00:00 -07:00
13
+ default_executable: r2doc
14
+ dependencies: []
15
+
16
+ description: R2Doc is an improved generator for RDoc. It provides an improved output template for documentation (including search and frameless navigation), but also aims to be more extensible so that template authoring is an easier task with a wider set of options.
17
+ email: r2doc@missioncriticallabs.com
18
+ executables:
19
+ - r2doc
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - bin/r2doc
24
+ - CHANGELOG
25
+ - lib/r2doc/context_extensions.rb
26
+ - lib/r2doc/erb_template_engine.rb
27
+ - lib/r2doc/generator.rb
28
+ - lib/r2doc/rdoc_v2_generator.rb
29
+ - lib/r2doc/template/r2doc/_aliases.html.erb
30
+ - lib/r2doc/template/r2doc/_attributes.html.erb
31
+ - lib/r2doc/template/r2doc/_classes_and_modules.html.erb
32
+ - lib/r2doc/template/r2doc/_constants.html.erb
33
+ - lib/r2doc/template/r2doc/_method_detail.html.erb
34
+ - lib/r2doc/template/r2doc/_method_details.html.erb
35
+ - lib/r2doc/template/r2doc/_method_listing.html.erb
36
+ - lib/r2doc/template/r2doc/_method_listing_row.html.erb
37
+ - lib/r2doc/template/r2doc/_nav.html.erb
38
+ - lib/r2doc/template/r2doc/_nav_item.html.erb
39
+ - lib/r2doc/template/r2doc/class.html.erb
40
+ - lib/r2doc/template/r2doc/file.html.erb
41
+ - lib/r2doc/template/r2doc/images/blue-arrow-right.png
42
+ - lib/r2doc/template/r2doc/images/blue-arrow-up.png
43
+ - lib/r2doc/template/r2doc/images/blue-box.png
44
+ - lib/r2doc/template/r2doc/images/blue-plus.png
45
+ - lib/r2doc/template/r2doc/images/close-button.png
46
+ - lib/r2doc/template/r2doc/images/green-arrow-right.png
47
+ - lib/r2doc/template/r2doc/images/green-arrow-up.png
48
+ - lib/r2doc/template/r2doc/images/nav-back.png
49
+ - lib/r2doc/template/r2doc/images/nav-bottom.png
50
+ - lib/r2doc/template/r2doc/images/nav-top.png
51
+ - lib/r2doc/template/r2doc/images/orange-hash.png
52
+ - lib/r2doc/template/r2doc/images/red-dash.png
53
+ - lib/r2doc/template/r2doc/images/search-back.png
54
+ - lib/r2doc/template/r2doc/images/top-back.png
55
+ - lib/r2doc/template/r2doc/images/top-left.png
56
+ - lib/r2doc/template/r2doc/images/top-right.png
57
+ - lib/r2doc/template/r2doc/index.html.erb
58
+ - lib/r2doc/template/r2doc/jquery.js
59
+ - lib/r2doc/template/r2doc/prototype.js
60
+ - lib/r2doc/template/r2doc/r2doc.css
61
+ - lib/r2doc/template/r2doc/rdoc-utils.js
62
+ - lib/r2doc/template/r2doc/rdoc.js.erb
63
+ - lib/r2doc/template.rb
64
+ - lib/r2doc/template_util.rb
65
+ - lib/r2doc.rb
66
+ - lib/rdoc/discover.rb
67
+ - lib/rdoc/generators/r2doc_generator.rb
68
+ - LICENSE
69
+ - README
70
+ - README.rdoc
71
+ files:
72
+ - bin/r2doc
73
+ - CHANGELOG
74
+ - lib/r2doc/context_extensions.rb
75
+ - lib/r2doc/erb_template_engine.rb
76
+ - lib/r2doc/generator.rb
77
+ - lib/r2doc/rdoc_v2_generator.rb
78
+ - lib/r2doc/template/r2doc/_aliases.html.erb
79
+ - lib/r2doc/template/r2doc/_attributes.html.erb
80
+ - lib/r2doc/template/r2doc/_classes_and_modules.html.erb
81
+ - lib/r2doc/template/r2doc/_constants.html.erb
82
+ - lib/r2doc/template/r2doc/_method_detail.html.erb
83
+ - lib/r2doc/template/r2doc/_method_details.html.erb
84
+ - lib/r2doc/template/r2doc/_method_listing.html.erb
85
+ - lib/r2doc/template/r2doc/_method_listing_row.html.erb
86
+ - lib/r2doc/template/r2doc/_nav.html.erb
87
+ - lib/r2doc/template/r2doc/_nav_item.html.erb
88
+ - lib/r2doc/template/r2doc/class.html.erb
89
+ - lib/r2doc/template/r2doc/file.html.erb
90
+ - lib/r2doc/template/r2doc/images/blue-arrow-right.png
91
+ - lib/r2doc/template/r2doc/images/blue-arrow-up.png
92
+ - lib/r2doc/template/r2doc/images/blue-box.png
93
+ - lib/r2doc/template/r2doc/images/blue-plus.png
94
+ - lib/r2doc/template/r2doc/images/close-button.png
95
+ - lib/r2doc/template/r2doc/images/green-arrow-right.png
96
+ - lib/r2doc/template/r2doc/images/green-arrow-up.png
97
+ - lib/r2doc/template/r2doc/images/nav-back.png
98
+ - lib/r2doc/template/r2doc/images/nav-bottom.png
99
+ - lib/r2doc/template/r2doc/images/nav-top.png
100
+ - lib/r2doc/template/r2doc/images/orange-hash.png
101
+ - lib/r2doc/template/r2doc/images/red-dash.png
102
+ - lib/r2doc/template/r2doc/images/search-back.png
103
+ - lib/r2doc/template/r2doc/images/top-back.png
104
+ - lib/r2doc/template/r2doc/images/top-left.png
105
+ - lib/r2doc/template/r2doc/images/top-right.png
106
+ - lib/r2doc/template/r2doc/index.html.erb
107
+ - lib/r2doc/template/r2doc/jquery.js
108
+ - lib/r2doc/template/r2doc/prototype.js
109
+ - lib/r2doc/template/r2doc/r2doc.css
110
+ - lib/r2doc/template/r2doc/rdoc-utils.js
111
+ - lib/r2doc/template/r2doc/rdoc.js.erb
112
+ - lib/r2doc/template.rb
113
+ - lib/r2doc/template_util.rb
114
+ - lib/r2doc.rb
115
+ - lib/rdoc/discover.rb
116
+ - lib/rdoc/generators/r2doc_generator.rb
117
+ - LICENSE
118
+ - Manifest
119
+ - Rakefile
120
+ - README
121
+ - README.rdoc
122
+ - R2Doc.gemspec
123
+ has_rdoc: true
124
+ homepage: http://r2doc.org
125
+ post_install_message:
126
+ rdoc_options:
127
+ - --line-numbers
128
+ - --inline-source
129
+ - --title
130
+ - R2Doc
131
+ - --main
132
+ - README
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: "0"
140
+ version:
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: "1.2"
146
+ version:
147
+ requirements: []
148
+
149
+ rubyforge_project: r2doc
150
+ rubygems_version: 1.2.0
151
+ signing_key:
152
+ specification_version: 2
153
+ summary: An extensible RDoc generator using ERB
154
+ test_files: []
155
+