yard-docco 1.0.0

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/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ === 1.0.0 / 2011-07-31
2
+
3
+ * Initial Release
data/README.md ADDED
@@ -0,0 +1,84 @@
1
+ YARD-Docco: Docco style code annotation
2
+ ====================================
3
+
4
+ Synopsis
5
+ --------
6
+
7
+ YARD-Docco is a YARD extension that provides an additional source view that
8
+ will show comments alongside the source code within a method. I recently spent
9
+ some time learning Backbone.js and really enjoyed the annotated source code that
10
+ was generated for a large number of the examples and thought that it would be
11
+ useful to add this view to YARD's existing source view to take advantage of comments
12
+ made within methods.
13
+
14
+ Examples
15
+ --------
16
+
17
+ I have created a trivial, example project to help provide a quick
18
+ visualization of the resulting documentation.
19
+
20
+ The implemented example has been deployed at [http://recursivegames.com/yard-docco](http://recursivegames.com/yard-docco).
21
+
22
+ **1. Comments made within methods appear alongside the code they are attempting to describe.
23
+
24
+ **2. YARD tags (e.g. @note, @todo) and links will appear as they do for methods and classes.
25
+
26
+ Installation
27
+ ------------
28
+
29
+ YARD-Docco requires the following gems installed:
30
+
31
+ YARD 0.7.0 - http://yardoc.org
32
+
33
+ To install `yard-docco` use the following command:
34
+
35
+ $ gem install yard-docco
36
+
37
+ (Add `sudo` if you're installing under a POSIX system as root)
38
+
39
+ Usage
40
+ -----
41
+
42
+ YARD supports for automatically including gems with the prefix `yard-`
43
+ as a plugin. To enable automatic loading yard-docco.
44
+
45
+ $ yard config load_plugins true
46
+ $ yardoc 'example/**/*.rb'
47
+
48
+ Now you can run YARD as you [normally](https://github.com/lsegal/yard) would and
49
+ have your features, step definitions and transforms captured.
50
+
51
+ An example with the rake task:
52
+
53
+ require 'yard'
54
+
55
+ YARD::Rake::YardocTask.new do |t|
56
+ t.files = ['lib/**/*.rb', 'app/**/*.rb']
57
+ t.options = ['--any', '--extra', '--opts'] # optional
58
+ end
59
+
60
+ LICENSE
61
+ -------
62
+
63
+ (The MIT License)
64
+
65
+ Copyright (c) 2011 Franklin Webber
66
+
67
+ Permission is hereby granted, free of charge, to any person obtaining
68
+ a copy of this software and associated documentation files (the
69
+ 'Software'), to deal in the Software without restriction, including
70
+ without limitation the rights to use, copy, modify, merge, publish,
71
+ distribute, sublicense, and/or sell copies of the Software, and to
72
+ permit persons to whom the Software is furnished to do so, subject to
73
+ the following conditions:
74
+
75
+ The above copyright notice and this permission notice shall be
76
+ included in all copies or substantial portions of the Software.
77
+
78
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
79
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
80
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
81
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
82
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
83
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
84
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ require 'rake'
2
+
3
+ task :default => :gendoc
4
+
5
+ task :clean do
6
+ `rm -rf doc`
7
+ `rm -rf .yardoc`
8
+ end
9
+
10
+ task :gendoc => :clean do
11
+ `yardoc -e ./lib/yard-docco.rb 'example/**/*' --debug`
12
+ #`open doc/index.html`
13
+ end
@@ -0,0 +1,252 @@
1
+ class Example
2
+
3
+ def to_s
4
+
5
+ # Comments at the start of will be collected with the comments below and
6
+ # all notes and todos will be above even this.
7
+ # @note that I want to tell you something
8
+ # @todo this is a todo
9
+ # This sentence was below the @note and the @todo but will appear with the
10
+ # other sentences below them.
11
+ self.to_s.capitalize
12
+
13
+ # Some comments at the end that should get included as well
14
+
15
+ end
16
+
17
+ #
18
+ # Create an xml representation of the specified class based on defined
19
+ # HappyMapper elements and attributes. The method is defined in a way
20
+ # that it can be called recursively by classes that are also HappyMapper
21
+ # classes, allowg for the composition of classes.
22
+ #
23
+ # @param [Nokogiri::XML::Builder] builder an instance of the XML builder which
24
+ # is being used when called recursively.
25
+ # @param [String] default_namespace the name of the namespace which is the
26
+ # default for the xml being produced; this is specified by the element
27
+ # declaration when calling #to_xml recursively.
28
+ #
29
+ # @return [String,Nokogiri::XML::Builder] return XML representation of the
30
+ # HappyMapper object; when called recursively this is going to return
31
+ # and Nokogiri::XML::Builder object.
32
+ #
33
+ def to_xml(builder = nil,default_namespace = nil)
34
+
35
+ #
36
+ # If {#to_xml} has been called without a passed in builder instance that
37
+ # means we are going to return xml output. When it has been called with
38
+ # a builder instance that means we most likely being called recursively
39
+ # and will return the end product as a builder instance.
40
+ #
41
+ unless builder
42
+ write_out_to_xml = true
43
+ builder = Nokogiri::XML::Builder.new
44
+ end
45
+
46
+ #
47
+ # Find the attributes for the class and collect them into an array
48
+ # that will be placed into a Hash structure
49
+ #
50
+ attributes = self.class.attributes.collect do |attribute|
51
+
52
+ #
53
+ # If an attribute is marked as read_only then we want to ignore the attribute
54
+ # when it comes to saving the xml document; so we wiill not go into any of
55
+ # the below process
56
+ #
57
+ unless attribute.options[:read_only]
58
+
59
+ value = send(attribute.method_name)
60
+
61
+ #
62
+ # If the attribute defines an on_save lambda/proc or value that maps to
63
+ # a method that the class has defined, then call it with the value as a
64
+ # parameter.
65
+ #
66
+ if on_save_action = attribute.options[:on_save]
67
+ if on_save_action.is_a?(Proc)
68
+ value = on_save_action.call(value)
69
+ elsif respond_to?(on_save_action)
70
+ value = send(on_save_action,value)
71
+ end
72
+ end
73
+
74
+ #
75
+ # Attributes that have a nil value should be ignored unless they explicitly
76
+ # state that they should be expressed in the output.
77
+ #
78
+ if value || attribute.options[:state_when_nil]
79
+ attribute_namespace = attribute.options[:namespace] || default_namespace
80
+ [ "#{attribute_namespace ? "#{attribute_namespace}:" : ""}#{attribute.tag}", value ]
81
+ else
82
+ []
83
+ end
84
+
85
+ else
86
+ []
87
+ end
88
+
89
+ end.flatten
90
+
91
+ attributes = Hash[ *attributes ]
92
+
93
+ #
94
+ # Create a tag in the builder that matches the class's tag name and append
95
+ # any attributes to the element that were defined above.
96
+ #
97
+ builder.send(self.class.tag_name,attributes) do |xml|
98
+
99
+ #
100
+ # Add all the registered namespaces to the root element.
101
+ # When this is called recurisvely by composed classes the namespaces
102
+ # are still added to the root element
103
+ #
104
+ # However, we do not want to add the namespace if the namespace is 'xmlns'
105
+ # which means that it is the default namesapce of the code.
106
+ #
107
+ if self.class.instance_variable_get('@registered_namespaces') && builder.doc.root
108
+ self.class.instance_variable_get('@registered_namespaces').each_pair do |name,href|
109
+ name = nil if name == "xmlns"
110
+ builder.doc.root.add_namespace(name,href)
111
+ end
112
+ end
113
+
114
+ #
115
+ # If the object we are persisting has a namespace declaration we will want
116
+ # to use that namespace or we will use the default namespace.
117
+ # When neither are specifed we are simply using whatever is default to the
118
+ # builder
119
+ #
120
+ if self.class.respond_to?(:namespace) && self.class.namespace
121
+ xml.parent.namespace = builder.doc.root.namespace_definitions.find do |x|
122
+ x.prefix == self.class.namespace
123
+ end
124
+ elsif default_namespace
125
+ xml.parent.namespace = builder.doc.root.namespace_definitions.find do |x|
126
+ x.prefix == default_namespace
127
+ end
128
+ end
129
+
130
+
131
+ #
132
+ # When a text_node has been defined we add the resulting value
133
+ # the output xml
134
+ #
135
+ if text_node = self.class.instance_variable_get('@text_node')
136
+
137
+ unless text_node.options[:read_only]
138
+ text_accessor = text_node.tag || text_node.name
139
+ value = send(text_accessor)
140
+
141
+ if on_save_action = text_node.options[:on_save]
142
+ if on_save_action.is_a?(Proc)
143
+ value = on_save_action.call(value)
144
+ elsif respond_to?(on_save_action)
145
+ value = send(on_save_action,value)
146
+ end
147
+ end
148
+
149
+ builder.text(value)
150
+ end
151
+
152
+ end
153
+
154
+ #
155
+ # for every define element (i.e. has_one, has_many, element) we are
156
+ # going to persist each one
157
+ #
158
+ self.class.elements.each do |element|
159
+
160
+ #
161
+ # If an element is marked as read only do not consider at all when
162
+ # saving to XML.
163
+ #
164
+ unless element.options[:read_only]
165
+
166
+ tag = element.tag || element.name
167
+
168
+ #
169
+ # The value to store is the result of the method call to the element,
170
+ # by default this is simply utilizing the attr_accessor defined. However,
171
+ # this allows for this method to be overridden
172
+ #
173
+ value = send(element.name)
174
+
175
+ #
176
+ # If the element defines an on_save lambda/proc then we will call that
177
+ # operation on the specified value. This allows for operations to be
178
+ # performed to convert the value to a specific value to be saved to the xml.
179
+ #
180
+ if on_save_action = element.options[:on_save]
181
+ if on_save_action.is_a?(Proc)
182
+ value = on_save_action.call(value)
183
+ elsif respond_to?(on_save_action)
184
+ value = send(on_save_action,value)
185
+ end
186
+ end
187
+
188
+ # Normally a nil value would be ignored, however if specified then
189
+ # an empty element will be written to the xml
190
+ #
191
+ if value.nil? && element.options[:single] && element.options[:state_when_nil]
192
+ xml.send(tag,"")
193
+ end
194
+
195
+ #
196
+ # To allow for us to treat both groups of items and singular items
197
+ # equally we wrap the value and treat it as an array.
198
+ #
199
+ if value.nil?
200
+ values = []
201
+ elsif value.respond_to?(:to_ary) && !element.options[:single]
202
+ values = value.to_ary
203
+ else
204
+ values = [value]
205
+ end
206
+
207
+ values.each do |item|
208
+
209
+ if item.is_a?(HappyMapper)
210
+
211
+ #
212
+ # Other items are convertable to xml through the xml builder
213
+ # process should have their contents retrieved and attached
214
+ # to the builder structure
215
+ #
216
+ item.to_xml(xml,element.options[:namespace])
217
+
218
+ elsif item
219
+
220
+ item_namespace = element.options[:namespace] || default_namespace
221
+
222
+ #
223
+ # When a value exists we should append the value for the tag
224
+ #
225
+ if item_namespace
226
+ xml[item_namespace].send(tag,item.to_s)
227
+ else
228
+ xml.send(tag,item.to_s)
229
+ end
230
+
231
+ else
232
+
233
+ #
234
+ # Normally a nil value would be ignored, however if specified then
235
+ # an empty element will be written to the xml
236
+ #
237
+ xml.send(tag,"") if element.options[:state_when_nil]
238
+
239
+ end
240
+
241
+ end
242
+
243
+ end
244
+ end
245
+
246
+ end
247
+
248
+ write_out_to_xml ? builder.to_xml : builder
249
+
250
+ end
251
+
252
+ end
data/lib/yard-docco.rb ADDED
@@ -0,0 +1,8 @@
1
+ module DoccoInTheYARD
2
+ VERSION = '1.0.0'
3
+ end
4
+
5
+ YARD::Templates::Engine.register_template_path File.dirname(__FILE__) + '/../templates'
6
+
7
+ # The following static paths and templates are for yard server
8
+ YARD::Server.register_static_path File.dirname(__FILE__) + "/../templates/default/fulldoc/html"
@@ -0,0 +1,37 @@
1
+
2
+ .annotated_source_code {
3
+ display: none;
4
+ border-collapse:collapse;
5
+ }
6
+
7
+ /* Within the annotated source section the docstring should have a much smaller
8
+ right margin so that the description text will be closer to the center line */
9
+ .annotated_source_code * div.docstring { margin-right: 20px; }
10
+
11
+ /* For the comment column set a minimum/max width and change the fonts to look
12
+ like the nice font and size used by docco comments. Docco examples I have
13
+ seen use 450px, I'm going a little smaller here to allow more to appear on
14
+ screen. */
15
+ .annotated_source_code * td.comment {
16
+ width: 400px; min-width: 400px;
17
+ padding: 10px 0px 0px 10px;
18
+ vertical-align: text-top;
19
+ font-family: Palatino Linotype; font-size: 15px;
20
+ }
21
+
22
+ /* Give the line numbers a nice gutter that will site between the comments and
23
+ the code. */
24
+ .annotated_source_code * td.line-numbers {
25
+ background-color: #DDD;
26
+ vertical-align: text-top;
27
+ padding-left: 8px;
28
+ padding-right: 8px;
29
+ }
30
+
31
+ .annotated_source_code * td.code {
32
+ background-color: #F5F5FF;
33
+ padding-left: 10px;
34
+ padding-right: 10px;
35
+ width: 100%;
36
+ vertical-align: text-top;
37
+ }
@@ -0,0 +1,14 @@
1
+ function createAnnotatedSourceLinks() {
2
+ $('.method_details_list .annotated_source_code').
3
+ before("<span class='showSource'>[<a href='#' class='annotatedToggleSource'>View annotated source</a>]</span>");
4
+ $('.annotatedToggleSource').toggle(function() {
5
+ $(this).parent().next().slideDown(100);
6
+ $(this).text("Hide annotated source");
7
+ },
8
+ function() {
9
+ $(this).parent().next().slideUp(100);
10
+ $(this).text("View annotated source");
11
+ });
12
+ }
13
+
14
+ $(createAnnotatedSourceLinks);
@@ -0,0 +1,7 @@
1
+ def init
2
+ super
3
+
4
+ asset("js/docco.js",file("js/docco.js",true))
5
+ asset("css/docco.css",file("css/docco.css",true))
6
+
7
+ end
@@ -0,0 +1,17 @@
1
+ def init
2
+ super
3
+ end
4
+
5
+ #
6
+ # Append yard-docco stylesheet to yard core stylesheets
7
+ #
8
+ def stylesheets
9
+ super + %w(css/docco.css)
10
+ end
11
+
12
+ #
13
+ # Append yard-docco javascript to yard core javascripts
14
+ #
15
+ def javascripts
16
+ super + %w(js/docco.js)
17
+ end
@@ -0,0 +1,21 @@
1
+ <table class="annotated_source_code">
2
+ <tr>
3
+ <td colspan="3" style="padding-left: 10px;">
4
+ <pre class="code"><span class="info file"># File '<%= h object.file %>'<% if object.line %>, line <%= object.line %><% end %></span></pre>
5
+ </td>
6
+ </tr>
7
+ <% object.annotated_source.each do |source| %>
8
+ <tr>
9
+ <td class="comment">
10
+ <span><%= docstring_comment Array(source.first).join("\n") %>
11
+ </td>
12
+ <td class="line-numbers">
13
+ <pre class="lines" style="padding-right: 0px;"><%= h show_annotated_lines(source) %></pre>
14
+ </td>
15
+ <td class="code">
16
+ <pre class="code"><span class="info file"><%= html_syntax_highlight Array(source.last).join("\n") %></pre>
17
+ </td>
18
+ </tr>
19
+ <% end %>
20
+
21
+ </table>
@@ -0,0 +1,130 @@
1
+ def init
2
+ super
3
+
4
+ # Added the annotated source template to the end of the sections to be rendered.
5
+ sections.push(:annotated_source)
6
+
7
+ # object contains the method details that are about to be processed.
8
+ #
9
+ # object.source contains all the source within the method that we can use
10
+ # to generate the inline documentation. We should allow for the normal sour
11
+ #
12
+ # Source with annotations would simply look at the source and each line with
13
+ # a comment would be lumped together with comments.
14
+ object.annotated_source = annotate_source(object.source)
15
+
16
+ end
17
+
18
+ #
19
+ # The comments within a method are just strings and have not been converted into
20
+ # Docstrings. Here we hijack the method object and send it to the docstring
21
+ # template to be rendered with the new docstring.
22
+ #
23
+ # @param [String] comments that should be converted into a docstring and then
24
+ # rendered with the docstring template.
25
+ # @return [String] the rendered results of the docstring
26
+ def docstring_comment(comments)
27
+ method_object = object.dup
28
+ object.docstring = Docstring.new(comments,object)
29
+
30
+ result = T('docstring').run(options)
31
+ object = method_object
32
+ result
33
+ end
34
+
35
+ #
36
+ # This method will find the comments and then the source code (non-comments) and
37
+ # generate an array of comment-code pairs which should be displayed next to each
38
+ # other.
39
+ #
40
+ # @param [String] source that will be scanned and annotated
41
+ #
42
+ # @return [Array<Array<String,String>>] an array of arrays. Each element contains
43
+ # in the first element the comments, the second contains the source code.
44
+ def annotate_source(source)
45
+
46
+ annotated = []
47
+ current_comment = nil
48
+ current_code = nil
49
+ finished_comment = nil
50
+
51
+ # Move through the source code line by line.
52
+ # When we come to a comment line (starts with #) then we add a source
53
+ # When we come to a non-comment line we are done builing that comment
54
+ # we would then start to build the source up line by line
55
+ source.split("\n").each do |line|
56
+
57
+ if line =~ /^\s*#.*$/
58
+
59
+ # When parsing a comment
60
+ #
61
+ # If we are parsing the first comment then we need to look to see if there
62
+ # was some code that we were parsing and finish that code. Then we need to
63
+ # add the comment to a new array of comments
64
+ #
65
+ # If this is another comment, after the first one then we need to add it
66
+ # to the list of comments.
67
+ if current_comment
68
+ current_comment << line[/^\s*#\s?(.+)/,1].to_s
69
+ else
70
+
71
+ if current_code
72
+ annotated << [ finished_comment, current_code ]
73
+ finished_comment = current_code = nil
74
+
75
+ end
76
+
77
+ (current_comment ||=[]) << line[/^\s*#\s?(.+)/,1].to_s
78
+ end
79
+
80
+ else
81
+
82
+ # When parsing a line of code
83
+ #
84
+ # If we are parsing the first line of code then if there are any comments
85
+ # then we are done with the comments that are associated with this line of
86
+ # code (and any lines that follow). We want to save the finished block of
87
+ # comments so that we can put it together with the code when we are finished
88
+ # with it.
89
+ #
90
+ if current_comment
91
+ finished_comment = current_comment
92
+ current_comment = nil
93
+ else
94
+ # We were not working on a comment
95
+ end
96
+
97
+ # Add the current code line to the current_code if one exists (create one if it does not exist)
98
+ (current_code ||= []) << line.to_s
99
+
100
+ end
101
+
102
+ end
103
+
104
+ # If we have finished parsing lines and we still have code within a home, which
105
+ # is likely if the the source code ends with an end. We want to create a new pair
106
+ if current_code
107
+ annotated << [ finished_comment.to_s, current_code ]
108
+ current_code = nil
109
+ end
110
+
111
+ # If we have a comment that still remains, then the comment exists without
112
+ # source and we should add it the pairs.
113
+ if current_comment
114
+ annotated << [ current_comment, "" ]
115
+ current_comment = nil
116
+ end
117
+
118
+ return annotated
119
+ end
120
+
121
+ def show_annotated_lines(section)
122
+ @current_count ||= object.line
123
+
124
+ # Add the comment line length to the line number
125
+ @current_count += Array(section.first).length
126
+
127
+ lines = (@current_count..(@current_count+Array(section.last).length)).to_a.join("\n")
128
+ @current_count += Array(section.last).length
129
+ lines
130
+ end
@@ -0,0 +1,10 @@
1
+ <table class="source_code">
2
+ <tr>
3
+ <td>
4
+ <pre class="lines"><%= "\n\n\n" %><%= h format_lines(object) %></pre>
5
+ </td>
6
+ <td>
7
+ <pre class="code"><span class="info file"># File '<%= h object.file %>'<% if object.line %>, line <%= object.line %><% end %></span><%= "\n\n" %><%= html_syntax_highlight object.source %></pre>
8
+ </td>
9
+ </tr>
10
+ </table>
@@ -0,0 +1,62 @@
1
+ require 'YARD'
2
+ require File.dirname(__FILE__) + "/lib/yard-docco"
3
+
4
+ module DoccoInTheYARD
5
+ def self.show_version_changes(version)
6
+ date = ""
7
+ changes = []
8
+ grab_changes = false
9
+
10
+ File.open("#{File.dirname(__FILE__)}/History.txt",'r') do |file|
11
+ while (line = file.gets) do
12
+
13
+ if line =~ /^===\s*#{version.gsub('.','\.')}\s*\/\s*(.+)\s*$/
14
+ grab_changes = true
15
+ date = $1.strip
16
+ elsif line =~ /^===\s*.+$/
17
+ grab_changes = false
18
+ elsif grab_changes
19
+ changes = changes << line
20
+ end
21
+
22
+ end
23
+ end
24
+
25
+ { :date => date, :changes => changes }
26
+ end
27
+ end
28
+
29
+ Gem::Specification.new do |s|
30
+ s.name = 'yard-docco'
31
+ s.version = ::DoccoInTheYARD::VERSION
32
+ s.authors = ["Franklin Webber"]
33
+ s.description = %{
34
+ YARD-Docco is a YARD extension that provides an additional source view that
35
+ will show comments alongside the source code within a method. }
36
+ s.summary = "Docco style documentation within methods"
37
+ s.email = 'franklin.webber@gmail.com'
38
+ s.homepage = "http://github.com/burtlo/yard-docco"
39
+
40
+ s.platform = Gem::Platform::RUBY
41
+
42
+ changes = DoccoInTheYARD.show_version_changes(::DoccoInTheYARD::VERSION)
43
+
44
+ s.post_install_message = %{
45
+ (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==)
46
+
47
+ Thank you for installing yard-docco #{::DoccoInTheYARD::VERSION} / #{changes[:date]}.
48
+
49
+ Changes:
50
+ #{changes[:changes].collect{|change| " #{change}"}.join("")}
51
+ (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==)
52
+
53
+ }
54
+
55
+ s.add_dependency 'yard', '>= 0.7.0'
56
+
57
+ s.rubygems_version = "1.3.7"
58
+ s.files = `git ls-files`.split("\n")
59
+ s.extra_rdoc_files = ["README.md", "History.txt"]
60
+ s.rdoc_options = ["--charset=UTF-8"]
61
+ s.require_path = "lib"
62
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yard-docco
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: ruby
7
+ authors:
8
+ - Franklin Webber
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-31 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: yard
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.7.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ description: " \n YARD-Docco is a YARD extension that provides an additional source view that\n will show comments alongside the source code within a method. "
28
+ email: franklin.webber@gmail.com
29
+ executables: []
30
+
31
+ extensions: []
32
+
33
+ extra_rdoc_files:
34
+ - README.md
35
+ - History.txt
36
+ files:
37
+ - History.txt
38
+ - README.md
39
+ - Rakefile
40
+ - example/annotated_source.rb
41
+ - lib/yard-docco.rb
42
+ - templates/default/fulldoc/html/css/docco.css
43
+ - templates/default/fulldoc/html/js/docco.js
44
+ - templates/default/fulldoc/html/setup.rb
45
+ - templates/default/layout/html/setup.rb
46
+ - templates/default/method_details/html/annotated_source.erb
47
+ - templates/default/method_details/html/setup.rb
48
+ - templates/default/method_details/html/source.erb
49
+ - yard-docco.gemspec
50
+ has_rdoc: true
51
+ homepage: http://github.com/burtlo/yard-docco
52
+ licenses: []
53
+
54
+ post_install_message: "\n\
55
+ (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==)\n\n Thank you for installing yard-docco 1.0.0 / 2011-07-31.\n \n Changes:\n \n * Initial Release\n\
56
+ (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==) (==)\n\n"
57
+ rdoc_options:
58
+ - --charset=UTF-8
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: "0"
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: "0"
73
+ requirements: []
74
+
75
+ rubyforge_project:
76
+ rubygems_version: 1.6.2
77
+ signing_key:
78
+ specification_version: 3
79
+ summary: Docco style documentation within methods
80
+ test_files: []
81
+