rdoc-shomen 0.1.1
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/.ruby +62 -0
- data/Confile.rb +5 -0
- data/HISTORY.rdoc +20 -0
- data/LICENSE.txt +30 -0
- data/README.rdoc +42 -0
- data/lib/rdoc/discover.rb +35 -0
- data/lib/rdoc/generator/shomen.rb +667 -0
- data/lib/rdoc/generator/shomen_extensions.rb +154 -0
- data/test/case_specification.rb +20 -0
- data/test/fixture/doc/doc.json +1 -0
- metadata +99 -0
data/.ruby
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
- meta
|
4
|
+
authors:
|
5
|
+
- name: trans
|
6
|
+
email: transfire@gmail.com
|
7
|
+
copyrights:
|
8
|
+
- holder: Rubyworks
|
9
|
+
year: '2011'
|
10
|
+
license: BSD-2-Clause
|
11
|
+
requirements:
|
12
|
+
- name: shomen-model
|
13
|
+
- name: citron
|
14
|
+
groups:
|
15
|
+
- test
|
16
|
+
development: true
|
17
|
+
- name: detroit
|
18
|
+
groups:
|
19
|
+
- build
|
20
|
+
development: true
|
21
|
+
dependencies: []
|
22
|
+
alternatives: []
|
23
|
+
conflicts: []
|
24
|
+
repositories:
|
25
|
+
- uri: git://github.com/rubyworks/rdoc-shomen.git
|
26
|
+
scm: git
|
27
|
+
name: upstream
|
28
|
+
resources:
|
29
|
+
- uri: http://rubyworks.github.com/rdoc-shomen
|
30
|
+
name: home
|
31
|
+
type: home
|
32
|
+
- uri: http://rubydoc.info/gems/rdoc-shoment
|
33
|
+
name: docs
|
34
|
+
type: doc
|
35
|
+
- uri: http://github.com/rubyworks/rdoc-shomen
|
36
|
+
name: code
|
37
|
+
type: code
|
38
|
+
- uri: http://github.com/rubyworks/rdoc-shomen/issues
|
39
|
+
name: bugs
|
40
|
+
type: bugs
|
41
|
+
- uri: http://groups.google.com/groups/rubyworks-mailinglist
|
42
|
+
name: mail
|
43
|
+
type: mail
|
44
|
+
extra: {}
|
45
|
+
load_path:
|
46
|
+
- lib
|
47
|
+
revision: 0
|
48
|
+
created: '2010-07-01'
|
49
|
+
summary: RDoc Generator for Shomen Documentation Format
|
50
|
+
title: RDoc Shomen
|
51
|
+
version: 0.1.1
|
52
|
+
name: rdoc-shomen
|
53
|
+
description: ! 'RDoc-Shomen is an RDoc generator plugin that can be used to generate
|
54
|
+
Shomen
|
55
|
+
|
56
|
+
documentation. This is an alternative to the shomen command line tool which
|
57
|
+
|
58
|
+
use the `.rdoc` cache to generate a shomen document. In contrast the rdoc-shomen
|
59
|
+
|
60
|
+
generator operates as a traditional rdoc plugin.'
|
61
|
+
organization: rubyworks
|
62
|
+
date: '2012-04-16'
|
data/Confile.rb
ADDED
data/HISTORY.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
= RELEASE HISTORY
|
2
|
+
|
3
|
+
== 0.1.1 | 2012-04-20
|
4
|
+
|
5
|
+
This release simple uses the new shomen-model gem,
|
6
|
+
instead of the previous shomen gem.
|
7
|
+
|
8
|
+
Changes:
|
9
|
+
|
10
|
+
* Use shomen-model instead of shomen.
|
11
|
+
|
12
|
+
|
13
|
+
== 0.1.0 | 2012-04-18
|
14
|
+
|
15
|
+
This is the first release of rdoc-shomen.
|
16
|
+
|
17
|
+
Changes:
|
18
|
+
|
19
|
+
* Happy first release day!
|
20
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
RDoc Shomen - Shomen Generator for RDoc
|
2
|
+
|
3
|
+
Copyright (c) 2011 Rubyworks. All rights reserved.
|
4
|
+
|
5
|
+
Licensed (spdx) BSD-2-Clause
|
6
|
+
|
7
|
+
Redistribution and use in source and binary forms,
|
8
|
+
with or without modification, are permitted provided that the following
|
9
|
+
conditions are met:
|
10
|
+
|
11
|
+
1. Redistributions of source code must retain the above copyright notice,
|
12
|
+
this list of conditions and the following disclaimer.
|
13
|
+
|
14
|
+
2. Redistributions in binary form must reproduce the above copyright
|
15
|
+
notice, this list of conditions and the following disclaimer in the
|
16
|
+
documentation and/or other materials provided with the distribution.
|
17
|
+
|
18
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
19
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
21
|
+
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
22
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
23
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
25
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
26
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
27
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
|
29
|
+
(http://github.com/rubyworks/rdoc-shomen)
|
30
|
+
|
data/README.rdoc
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
= Shomen RDoc Generator
|
2
|
+
|
3
|
+
{Homepage}[http://rubyworks.github.com/rdoc-shomen] /
|
4
|
+
{Report Issue}[http://github.com/rubyworks/rdoc-shomen/issues] /
|
5
|
+
{Source Code}[http://github.com/rubyworks/rdoc-shomen] /
|
6
|
+
{Mailing List}[http://google.groups.com/groups/rubyworks-mailinglist]
|
7
|
+
|
8
|
+
{<img src="https://secure.travis-ci.org/rubyworks/rdoc-shomen.png" />}[http://travis-ci.org/rubyworks/rdoc-shomen]
|
9
|
+
|
10
|
+
|
11
|
+
== Description
|
12
|
+
|
13
|
+
This is the old-school Shomen generator for RDoc.
|
14
|
+
|
15
|
+
|
16
|
+
== Instruction
|
17
|
+
|
18
|
+
Use the shomen generator like any other RDoc generator.
|
19
|
+
|
20
|
+
$ rdoc -f shomen -m README.rdoc lib [A-Z]*.*
|
21
|
+
|
22
|
+
The shomen document will be saved to the output directory (default `doc`)
|
23
|
+
as wither `doc.json` or as `<name>-<version>.json` if project metadata is
|
24
|
+
discoverable.
|
25
|
+
|
26
|
+
The generator supports a couple of special options:
|
27
|
+
|
28
|
+
* `--yaml` option will save the file to YAML format instead of JSON.
|
29
|
+
* `--source` will include full source code in script entries.
|
30
|
+
|
31
|
+
The `--source` option is not recommended for documentation that will
|
32
|
+
be served online as it will make the documation file rather large.
|
33
|
+
|
34
|
+
|
35
|
+
== Copyrights
|
36
|
+
|
37
|
+
Copyright (c) 2011 Rubyworks. All rights reserved.
|
38
|
+
|
39
|
+
RDoc Shomen is distributable in accordance with the *BSD-2-Clause* license.
|
40
|
+
|
41
|
+
See LICENSE.txt file for details.
|
42
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
begin
|
2
|
+
require "rubygems"
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
6
|
+
begin
|
7
|
+
gem 'rdoc', '~> 3'
|
8
|
+
#gem 'shomen'
|
9
|
+
require_relative 'generator/shomen'
|
10
|
+
rescue Gem::LoadError => error
|
11
|
+
puts error
|
12
|
+
rescue LoadError => error
|
13
|
+
puts error
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
#puts "RDoc discovered Shomen!" if $DEBUG
|
21
|
+
|
22
|
+
# If using Gems put her on the $LOAD_PATH
|
23
|
+
#begin
|
24
|
+
# require "rubygems"
|
25
|
+
# gem "rdoc", ">= 2.5"
|
26
|
+
# gem "shomen"
|
27
|
+
#end
|
28
|
+
|
29
|
+
#require 'shomen/rdoc/option_fix'
|
30
|
+
|
31
|
+
#RDoc.generator_option('shomen') do
|
32
|
+
# require 'shomen/rdoc/generator'
|
33
|
+
# RDoc::Generator::Shomen
|
34
|
+
#end
|
35
|
+
|
@@ -0,0 +1,667 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
require 'yaml'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require 'shomen-model'
|
7
|
+
|
8
|
+
require 'rdoc/rdoc'
|
9
|
+
require 'rdoc/generator'
|
10
|
+
require 'rdoc/generator/markup'
|
11
|
+
require 'rdoc/generator/shomen_extensions'
|
12
|
+
|
13
|
+
# Shomen Adaptor for RDoc utilizes the rdoc tool to parse ruby source code
|
14
|
+
# to build a Shomen documenation file.
|
15
|
+
#
|
16
|
+
# RDoc is almost entirely a free-form documentation system, so it is not
|
17
|
+
# possible for Shomen to fully harness all the details it can support from
|
18
|
+
# the RDoc documentation, such as method argument descriptions.
|
19
|
+
#
|
20
|
+
class RDoc::Generator::Shomen
|
21
|
+
|
22
|
+
#
|
23
|
+
DESCRIPTION = 'Shomen documentation format'
|
24
|
+
|
25
|
+
# Register shomen generator with RDoc.
|
26
|
+
RDoc::RDoc.add_generator(self)
|
27
|
+
|
28
|
+
#include RDocShomen::Metadata
|
29
|
+
|
30
|
+
# Standard generator factory method.
|
31
|
+
#
|
32
|
+
# options - Generator options.
|
33
|
+
#
|
34
|
+
# Returns new RDoc::Generator::Shomen instance.
|
35
|
+
def self.for(options)
|
36
|
+
new(options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# User options from the command line.
|
40
|
+
attr :options
|
41
|
+
|
42
|
+
#
|
43
|
+
def self.setup_options(options)
|
44
|
+
options.source = false
|
45
|
+
options.yaml = false
|
46
|
+
|
47
|
+
opt = options.option_parser
|
48
|
+
|
49
|
+
opt.separator nil
|
50
|
+
opt.separator "Shomen generator options:"
|
51
|
+
opt.separator nil
|
52
|
+
opt.on("--yaml", "Generate YAML document instead of JSON.") do |value|
|
53
|
+
options.yaml = true
|
54
|
+
end
|
55
|
+
opt.separator nil
|
56
|
+
opt.on("--source", "Include full source code for scripts.") do |value|
|
57
|
+
options.github = true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
# List of all classes and modules.
|
62
|
+
#def all_classes_and_modules
|
63
|
+
# @all_classes_and_modules ||= RDoc::TopLevel.all_classes_and_modules
|
64
|
+
#end
|
65
|
+
|
66
|
+
# In the world of the RDoc Generators #classes is the same
|
67
|
+
# as #all_classes_and_modules. Well, except that its sorted
|
68
|
+
# too. For classes sans modules, see #types.
|
69
|
+
#
|
70
|
+
def classes
|
71
|
+
@classes ||= RDoc::TopLevel.all_classes_and_modules.sort
|
72
|
+
end
|
73
|
+
|
74
|
+
# Only toplevel classes and modules.
|
75
|
+
def classes_toplevel
|
76
|
+
@classes_toplevel ||= classes.select {|klass| !(RDoc::ClassModule === klass.parent) }
|
77
|
+
end
|
78
|
+
|
79
|
+
#
|
80
|
+
def files
|
81
|
+
@files ||= (
|
82
|
+
@files_rdoc.select{ |f| f.parser != RDoc::Parser::Simple }
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
# List of toplevel files. RDoc supplies this via the #generate method.
|
87
|
+
def files_toplevel
|
88
|
+
@files_toplevel ||= (
|
89
|
+
@files_rdoc.select{ |f| f.parser == RDoc::Parser::Simple }
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
#
|
94
|
+
def files_hash
|
95
|
+
@files ||= RDoc::TopLevel.files_hash
|
96
|
+
end
|
97
|
+
|
98
|
+
# List of all methods in all classes and modules.
|
99
|
+
def methods_all
|
100
|
+
@methods_all ||= classes.map{ |m| m.method_list }.flatten.sort
|
101
|
+
end
|
102
|
+
|
103
|
+
# List of all attributes in all classes and modules.
|
104
|
+
def attributes_all
|
105
|
+
@attributes_all ||= classes.map{ |m| m.attributes }.flatten.sort
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
def constants_all
|
110
|
+
@constants_all ||= classes.map{ |c| c.constants }.flatten
|
111
|
+
end
|
112
|
+
|
113
|
+
## TODO: What's this then?
|
114
|
+
##def json_creatable?
|
115
|
+
## RDoc::TopLevel.json_creatable?
|
116
|
+
##end
|
117
|
+
|
118
|
+
# RDoc needs this to function.
|
119
|
+
def class_dir ; nil ; end
|
120
|
+
|
121
|
+
# RDoc needs this to function.
|
122
|
+
def file_dir ; nil ; end
|
123
|
+
|
124
|
+
# TODO: Rename ?
|
125
|
+
def shomen
|
126
|
+
@table || {}
|
127
|
+
end
|
128
|
+
|
129
|
+
# Build the initial indices and output objects based on an array of
|
130
|
+
# top level objects containing the extracted information.
|
131
|
+
#
|
132
|
+
# files - Files to document.
|
133
|
+
#
|
134
|
+
# Returns nothing.
|
135
|
+
def generate(files)
|
136
|
+
@files_rdoc = files.sort
|
137
|
+
|
138
|
+
@table = {}
|
139
|
+
|
140
|
+
generate_metadata
|
141
|
+
generate_constants
|
142
|
+
generate_classes
|
143
|
+
#generate_attributes
|
144
|
+
generate_methods
|
145
|
+
generate_documents
|
146
|
+
generate_scripts # must be last b/c it depends on the others
|
147
|
+
|
148
|
+
# TODO: method accessor fields need to be handled
|
149
|
+
|
150
|
+
# THINK: Internal referencing model, YAML and JSYNC ?
|
151
|
+
#ref_table = reference_table(@table)
|
152
|
+
|
153
|
+
if options.yaml
|
154
|
+
out = @table.to_yaml
|
155
|
+
else
|
156
|
+
out = JSON.generate(@table)
|
157
|
+
end
|
158
|
+
|
159
|
+
if options.op_dir == '-'
|
160
|
+
puts out
|
161
|
+
else
|
162
|
+
File.open(output_file, 'w') do |f|
|
163
|
+
f << out
|
164
|
+
end unless $dryrun
|
165
|
+
end
|
166
|
+
|
167
|
+
#rescue StandardError => err
|
168
|
+
# debug_msg "%s: %s\n %s" % [ err.class.name, err.message, err.backtrace.join("\n ") ]
|
169
|
+
# raise err
|
170
|
+
end
|
171
|
+
|
172
|
+
#
|
173
|
+
def output_file
|
174
|
+
name = project_metadata['name']
|
175
|
+
vers = project_metadata['version']
|
176
|
+
|
177
|
+
if name && vers
|
178
|
+
"#{name}-#{vers}.json"
|
179
|
+
else
|
180
|
+
'doc.json'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
protected
|
185
|
+
|
186
|
+
# Initialize new generator.
|
187
|
+
#
|
188
|
+
# options - Generator options.
|
189
|
+
#
|
190
|
+
# Returns new RDoc::Generator::Shomen instance.
|
191
|
+
def initialize(options)
|
192
|
+
@options = options
|
193
|
+
#@options.diagram = false # why?
|
194
|
+
|
195
|
+
@path_base = Pathname.pwd.expand_path
|
196
|
+
|
197
|
+
# TODO: This is probably not needed any more.
|
198
|
+
@path_output = Pathname.new(@options.op_dir).expand_path(@path_base)
|
199
|
+
end
|
200
|
+
|
201
|
+
# Current pathname.
|
202
|
+
attr :path_base
|
203
|
+
|
204
|
+
# The output path.
|
205
|
+
attr :path_output
|
206
|
+
|
207
|
+
#
|
208
|
+
def path_output_relative(path=nil)
|
209
|
+
if path
|
210
|
+
path.to_s.sub(path_base.to_s+'/', '')
|
211
|
+
else
|
212
|
+
@path_output_relative ||= path_output.to_s.sub(path_base.to_s+'/', '')
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
#
|
217
|
+
def project_metadata
|
218
|
+
@project_metadata ||= Shomen::Metadata.new
|
219
|
+
end
|
220
|
+
|
221
|
+
#
|
222
|
+
def generate_metadata
|
223
|
+
@table['(metadata)'] = project_metadata.to_h
|
224
|
+
end
|
225
|
+
|
226
|
+
# Add constants to table.
|
227
|
+
def generate_constants
|
228
|
+
debug_msg "Generating constant documentation:"
|
229
|
+
constants_all.each do |rdoc|
|
230
|
+
model = Shomen::Model::Constant.new
|
231
|
+
|
232
|
+
model.path = rdoc.parent.full_name + '::' + rdoc.name
|
233
|
+
model.name = rdoc.name
|
234
|
+
model.namespace = rdoc.parent.full_name
|
235
|
+
model.comment = comment(rdoc.comment)
|
236
|
+
model.format = 'rdoc'
|
237
|
+
model.value = rdoc.value
|
238
|
+
model.files = ["/#{rdoc.file.full_name}"]
|
239
|
+
|
240
|
+
@table[model.path] = model.to_h
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
# Add classes (and modules) to table.
|
245
|
+
def generate_classes
|
246
|
+
debug_msg "Generating class/module documentation:"
|
247
|
+
|
248
|
+
classes.each do |rdoc_class|
|
249
|
+
debug_msg "%s (%s)" % [ rdoc_class.full_name, rdoc_class.path ]
|
250
|
+
|
251
|
+
if rdoc_class.type=='class'
|
252
|
+
model = Shomen::Model::Class.new
|
253
|
+
else
|
254
|
+
model = Shomen::Model::Module.new
|
255
|
+
end
|
256
|
+
|
257
|
+
model.path = rdoc_class.full_name
|
258
|
+
model.name = rdoc_class.name
|
259
|
+
model.namespace = rdoc_class.full_name.split('::')[0...-1].join('::')
|
260
|
+
model.includes = rdoc_class.includes.map{ |x| x.name } # FIXME: How to "lookup" full name?
|
261
|
+
model.extensions = [] # TODO: How to get extensions?
|
262
|
+
model.comment = comment(rdoc_class.comment)
|
263
|
+
model.format = 'rdoc'
|
264
|
+
model.constants = rdoc_class.constants.map{ |x| complete_name(x.name, rdoc_class.full_name) }
|
265
|
+
model.modules = rdoc_class.modules.map{ |x| complete_name(x.name, rdoc_class.full_name) }
|
266
|
+
model.classes = rdoc_class.classes.map{ |x| complete_name(x.name, rdoc_class.full_name) }
|
267
|
+
model.methods = rdoc_class.method_list.map{ |m| method_name(m) }.uniq
|
268
|
+
model.accessors = rdoc_class.attributes.map{ |a| method_name(a) }.uniq #+ ":#{a.rw}" }.uniq
|
269
|
+
model.files = rdoc_class.in_files.map{ |x| "/#{x.full_name}" }
|
270
|
+
|
271
|
+
if rdoc_class.type == 'class'
|
272
|
+
# HACK: No idea why RDoc is returning some weird superclass:
|
273
|
+
# <RDoc::NormalClass:0xd924d4 class Object < BasicObject includes: []
|
274
|
+
# attributes: [] methods: [#<RDoc::AnyMethod:0xd92b8c Object#fileutils
|
275
|
+
# (public)>] aliases: []>
|
276
|
+
# Maybe it has something to do with #fileutils?
|
277
|
+
model.superclass = (
|
278
|
+
case rdoc_class.superclass
|
279
|
+
when nil
|
280
|
+
when String
|
281
|
+
rdoc_class.superclass
|
282
|
+
else
|
283
|
+
rdoc_class.superclass.full_name
|
284
|
+
end
|
285
|
+
)
|
286
|
+
end
|
287
|
+
|
288
|
+
@table[model.path] = model.to_h
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
# TODO: How to get literal interface separate from call-sequnces?
|
293
|
+
|
294
|
+
# Transform RDoc methods to Shomen model and add to table.
|
295
|
+
def generate_methods
|
296
|
+
debug_msg "Generating method documentation:"
|
297
|
+
|
298
|
+
list = methods_all + attributes_all
|
299
|
+
|
300
|
+
list.each do |rdoc_method|
|
301
|
+
#debug_msg "%s" % [rdoc_method.full_name]
|
302
|
+
|
303
|
+
#full_name = method_name(m)
|
304
|
+
#'prettyname' => m.pretty_name,
|
305
|
+
#'type' => m.type, # class or instance
|
306
|
+
|
307
|
+
model = Shomen::Model::Method.new
|
308
|
+
|
309
|
+
model.path = method_name(rdoc_method)
|
310
|
+
model.name = rdoc_method.name
|
311
|
+
model.namespace = rdoc_method.parent_name
|
312
|
+
model.comment = comment(rdoc_method.comment)
|
313
|
+
model.format = 'rdoc'
|
314
|
+
model.aliases = rdoc_method.aliases.map{ |a| method_name(a) }
|
315
|
+
model.alias_for = method_name(rdoc_method.is_alias_for)
|
316
|
+
model.singleton = rdoc_method.singleton
|
317
|
+
|
318
|
+
model.declarations << rdoc_method.type.to_s #singleton ? 'class' : 'instance'
|
319
|
+
model.declarations << rdoc_method.visibility.to_s
|
320
|
+
|
321
|
+
model.interfaces = []
|
322
|
+
if rdoc_method.call_seq
|
323
|
+
rdoc_method.call_seq.split("\n").each do |cs|
|
324
|
+
cs = cs.to_s.strip
|
325
|
+
model.interfaces << parse_interface(cs) unless cs == ''
|
326
|
+
end
|
327
|
+
end
|
328
|
+
model.interfaces << parse_interface("#{rdoc_method.name}#{rdoc_method.params}")
|
329
|
+
|
330
|
+
model.returns = [] # RDoc doesn't support specifying return values
|
331
|
+
model.file = '/'+rdoc_method.source_code_location.first
|
332
|
+
model.line = rdoc_method.source_code_location.last.to_i
|
333
|
+
model.source = rdoc_method.source_code_raw
|
334
|
+
|
335
|
+
if rdoc_method.respond_to?(:c_function)
|
336
|
+
model.language = rdoc_method.c_function ? 'c' : 'ruby'
|
337
|
+
else
|
338
|
+
model.language = 'ruby'
|
339
|
+
end
|
340
|
+
|
341
|
+
@table[model.path] = model.to_h
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
#--
|
346
|
+
=begin
|
347
|
+
#
|
348
|
+
def generate_attributes
|
349
|
+
#$stderr.puts "HERE!"
|
350
|
+
#$stderr.puts attributes_all.inspect
|
351
|
+
#exit
|
352
|
+
debug_msg "Generating attributes documentation:"
|
353
|
+
attributes_all.each do |rdoc_attribute|
|
354
|
+
debug_msg "%s" % [rdoc_attribute.full_name]
|
355
|
+
|
356
|
+
adapter = Shomen::RDoc::MethodAdapter.new(rdoc_attribute)
|
357
|
+
data = Shomen::Model::Method.new(adapter).to_h
|
358
|
+
|
359
|
+
@table[data['path']] = data
|
360
|
+
|
361
|
+
#code = m.source_code_raw
|
362
|
+
#file, line = m.source_code_location
|
363
|
+
|
364
|
+
#full_name = method_name(m)
|
365
|
+
|
366
|
+
#'prettyname' => m.pretty_name,
|
367
|
+
#'type' => m.type, # class or instance
|
368
|
+
|
369
|
+
#model_class = m.singleton ? Shomen::Model::Function : Shomen::Model::Method
|
370
|
+
#model_class = Shomen::Model::Attribute
|
371
|
+
|
372
|
+
#@table[full_name] = model_class.new(
|
373
|
+
# 'path' => full_name,
|
374
|
+
# 'name' => m.name,
|
375
|
+
# 'namespace' => m.parent_name,
|
376
|
+
# 'comment' => comment(m.comment),
|
377
|
+
# 'access' => m.visibility.to_s,
|
378
|
+
# 'rw' => m.rw, # TODO: better name ?
|
379
|
+
# 'singleton' => m.singleton,
|
380
|
+
# 'aliases' => m.aliases.map{ |a| method_name(a) },
|
381
|
+
# 'alias_for' => method_name(m.is_alias_for),
|
382
|
+
# 'image' => m.params,
|
383
|
+
# 'arguments' => [],
|
384
|
+
# 'parameters' => [],
|
385
|
+
# 'block' => m.block_params, # TODO: what is block?
|
386
|
+
# 'interface' => m.arglists,
|
387
|
+
# 'returns' => [],
|
388
|
+
# 'file' => file,
|
389
|
+
# 'line' => line,
|
390
|
+
# 'source' => code
|
391
|
+
#).to_h
|
392
|
+
end
|
393
|
+
end
|
394
|
+
=end
|
395
|
+
#++
|
396
|
+
|
397
|
+
# Parse method interface.
|
398
|
+
#
|
399
|
+
# TODO: remove any trailing comment too
|
400
|
+
def parse_interface(interface)
|
401
|
+
args, block = [], {}
|
402
|
+
|
403
|
+
interface, returns = interface.split(/[=-]\>/)
|
404
|
+
interface = interface.strip
|
405
|
+
if i = interface.index(/\)\s*\{/)
|
406
|
+
block['image'] = interface[i+1..-1].strip
|
407
|
+
interface = interface[0..i].strip
|
408
|
+
end
|
409
|
+
|
410
|
+
arguments = interface.strip.sub(/^.*?\(/,'').chomp(')')
|
411
|
+
arguments = arguments.split(/\s*\,\s*/)
|
412
|
+
arguments.each do |a|
|
413
|
+
if a.start_with?('&')
|
414
|
+
block['name'] = a
|
415
|
+
else
|
416
|
+
n,v = a.split('=')
|
417
|
+
args << (v ? {'name'=>n,'default'=>v} : {'name'=>n})
|
418
|
+
end
|
419
|
+
end
|
420
|
+
|
421
|
+
result = {}
|
422
|
+
result['signature'] = interface
|
423
|
+
result['arguments'] = args
|
424
|
+
result['block'] = block unless block.empty?
|
425
|
+
result['returns'] = returns.strip if returns
|
426
|
+
return result
|
427
|
+
end
|
428
|
+
private :parse_interface
|
429
|
+
|
430
|
+
# Generate entries for information files, e.g. `README.rdoc`.
|
431
|
+
def generate_documents
|
432
|
+
files_toplevel.each do |rdoc_document|
|
433
|
+
absolute_path = File.join(path_base, rdoc_document.full_name)
|
434
|
+
|
435
|
+
model = Shomen::Model::Document.new
|
436
|
+
|
437
|
+
model.path = rdoc_document.full_name
|
438
|
+
model.name = File.basename(absolute_path)
|
439
|
+
model.created = File.mtime(absolute_path)
|
440
|
+
model.modified = File.mtime(absolute_path)
|
441
|
+
model.text = File.read(absolute_path) #comment(file.comment)
|
442
|
+
model.format = mime_type(absolute_path)
|
443
|
+
|
444
|
+
@table['/'+model.path] = model.to_h
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
# TODO: Add loadpath and make file path relative to it?
|
449
|
+
|
450
|
+
# Generate script entries.
|
451
|
+
def generate_scripts
|
452
|
+
#debug_msg "Generating file documentation in #{path_output_relative}:"
|
453
|
+
#templatefile = self.path_template + 'file.rhtml'
|
454
|
+
|
455
|
+
files.each do |rdoc_file|
|
456
|
+
debug_msg "%s" % [rdoc_file.full_name]
|
457
|
+
|
458
|
+
absolute_path = File.join(path_base, rdoc_file.full_name)
|
459
|
+
#rel_prefix = self.path_output.relative_path_from(outfile.dirname)
|
460
|
+
|
461
|
+
model = Shomen::Model::Script.new
|
462
|
+
|
463
|
+
model.path = rdoc_file.full_name
|
464
|
+
model.name = File.basename(rdoc_file.full_name)
|
465
|
+
model.created = File.ctime(absolute_path)
|
466
|
+
model.modified = File.mtime(absolute_path)
|
467
|
+
|
468
|
+
if options.source
|
469
|
+
model.source = File.read(absolute_path) #comment(file.comment)
|
470
|
+
model.language = mime_type(absolute_path)
|
471
|
+
end
|
472
|
+
|
473
|
+
webcvs = options.webcvs || project_metadata['webcvs']
|
474
|
+
if webcvs
|
475
|
+
model.uri = File.join(webcvs, model.path) # TODO: use open-uri ?
|
476
|
+
model.language = mime_type(absolute_path)
|
477
|
+
end
|
478
|
+
|
479
|
+
#model.header =
|
480
|
+
#model.footer =
|
481
|
+
model.requires = rdoc_file.requires.map{ |r| r.name }
|
482
|
+
model.constants = rdoc_file.constants.map{ |c| c.full_name }
|
483
|
+
|
484
|
+
# note that this utilizes the table we are building
|
485
|
+
# so it needs to be the last thing done.
|
486
|
+
@table.each do |k, h|
|
487
|
+
case h['!']
|
488
|
+
when 'module'
|
489
|
+
model.modules ||= []
|
490
|
+
model.modules << k if h['files'].include?(rdoc_file.full_name)
|
491
|
+
when 'class'
|
492
|
+
model.classes ||= []
|
493
|
+
model.classes << k if h['files'].include?(rdoc_file.full_name)
|
494
|
+
when 'method'
|
495
|
+
model.methods ||= []
|
496
|
+
model.methods << k if h['file'] == rdoc_file.full_name
|
497
|
+
when 'class-method'
|
498
|
+
model.class_methods ||= []
|
499
|
+
model.class_methods << k if h['file'] == rdoc_file.full_name
|
500
|
+
end
|
501
|
+
end
|
502
|
+
|
503
|
+
@table['/'+model.path] = model.to_h
|
504
|
+
end
|
505
|
+
end
|
506
|
+
|
507
|
+
# Returns String of fully qualified name.
|
508
|
+
def complete_name(name, namespace)
|
509
|
+
if name !~ /^#{namespace}/
|
510
|
+
"#{namespace}::#{name}"
|
511
|
+
else
|
512
|
+
name
|
513
|
+
end
|
514
|
+
end
|
515
|
+
|
516
|
+
#
|
517
|
+
def collect_methods(class_module, singleton=false)
|
518
|
+
list = []
|
519
|
+
class_module.method_list.each do |m|
|
520
|
+
next if singleton ^ m.singleton
|
521
|
+
list << method_name(m)
|
522
|
+
end
|
523
|
+
list.uniq
|
524
|
+
end
|
525
|
+
|
526
|
+
#
|
527
|
+
def collect_attributes(class_module, singleton=false)
|
528
|
+
list = []
|
529
|
+
class_module.attributes.each do |a|
|
530
|
+
next if singleton ^ a.singleton
|
531
|
+
#p a.rw
|
532
|
+
#case a.rw
|
533
|
+
#when :write, 'W'
|
534
|
+
# list << "#{method_name(a)}="
|
535
|
+
#else
|
536
|
+
list << method_name(a)
|
537
|
+
#end
|
538
|
+
end
|
539
|
+
list.uniq
|
540
|
+
end
|
541
|
+
|
542
|
+
#
|
543
|
+
def method_name(method)
|
544
|
+
return nil if method.nil?
|
545
|
+
if method.singleton
|
546
|
+
i = method.full_name.rindex('::')
|
547
|
+
method.full_name[0...i] + '.' + method.full_name[i+2..-1]
|
548
|
+
else
|
549
|
+
method.full_name
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
553
|
+
#
|
554
|
+
def mime_type(path)
|
555
|
+
case File.extname(path)
|
556
|
+
when '.rb', '.rbx' then 'text/ruby'
|
557
|
+
when '.c' then 'text/c-source'
|
558
|
+
when '.rdoc' then 'text/rdoc'
|
559
|
+
when '.md', '.markdown' then 'text/markdown'
|
560
|
+
else 'text/plain'
|
561
|
+
end
|
562
|
+
end
|
563
|
+
|
564
|
+
# Output progress information if rdoc debugging is enabled
|
565
|
+
|
566
|
+
def debug_msg(msg)
|
567
|
+
return unless $DEBUG_RDOC
|
568
|
+
case msg[-1,1]
|
569
|
+
when '.' then tab = "= "
|
570
|
+
when ':' then tab = "== "
|
571
|
+
else tab = "* "
|
572
|
+
end
|
573
|
+
$stderr.puts(tab + msg)
|
574
|
+
end
|
575
|
+
|
576
|
+
#
|
577
|
+
def comment(rdoc_comment)
|
578
|
+
case rdoc_comment
|
579
|
+
when String
|
580
|
+
"" # something is wrong if this is a string
|
581
|
+
else
|
582
|
+
rdoc_comment.text
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
586
|
+
end
|
587
|
+
|
588
|
+
|
589
|
+
|
590
|
+
#--
|
591
|
+
=begin
|
592
|
+
#
|
593
|
+
# N O T U S E D
|
594
|
+
#
|
595
|
+
|
596
|
+
# Sort based on how often the top level namespace occurs, and then on the
|
597
|
+
# name of the module -- this works for projects that put their stuff into
|
598
|
+
# a namespace, of course, but doesn't hurt if they don't.
|
599
|
+
def sort_salient(classes)
|
600
|
+
nscounts = classes.inject({}) do |counthash, klass|
|
601
|
+
top_level = klass.full_name.gsub( /::.*/, '' )
|
602
|
+
counthash[top_level] ||= 0
|
603
|
+
counthash[top_level] += 1
|
604
|
+
counthash
|
605
|
+
endfiles_toplevel
|
606
|
+
classes.sort_by{ |klass|
|
607
|
+
top_level = klass.full_name.gsub( /::.*/, '' )
|
608
|
+
[nscounts[top_level] * -1, klass.full_name]
|
609
|
+
}.select{ |klass|
|
610
|
+
klass.document_self
|
611
|
+
}
|
612
|
+
end
|
613
|
+
=end
|
614
|
+
|
615
|
+
=begin
|
616
|
+
# Loop through table and convert all named references into bonofied object
|
617
|
+
# references.
|
618
|
+
def reference_table(table)
|
619
|
+
debug_msg "== Generating Reference Table"
|
620
|
+
new_table = {}
|
621
|
+
table.each do |key, entry|
|
622
|
+
debug_msg "%s" % [key]
|
623
|
+
data = entry.dup
|
624
|
+
new_table[key] = data
|
625
|
+
case data['!']
|
626
|
+
when 'script'
|
627
|
+
data["constants"] = ref_list(data["constants"])
|
628
|
+
data["modules"] = ref_list(data["modules"])
|
629
|
+
data["classes"] = ref_list(data["classes"])
|
630
|
+
data["functions"] = ref_list(data["functions"])
|
631
|
+
data["methods"] = ref_list(data["methods"])
|
632
|
+
when 'file'
|
633
|
+
when 'constant'
|
634
|
+
data["namespace"] = ref_item(data["namespace"])
|
635
|
+
when 'module', 'class'
|
636
|
+
data["namespace"] = ref_item(data["namespace"])
|
637
|
+
data["includes"] = ref_list(data["includes"])
|
638
|
+
#data["extended"] = ref_list(data["extended"])
|
639
|
+
data["constants"] = ref_list(data["constants"])
|
640
|
+
data["modules"] = ref_list(data["modules"])
|
641
|
+
data["classes"] = ref_list(data["classes"])
|
642
|
+
data["functions"] = ref_list(data["functions"])
|
643
|
+
data["methods"] = ref_list(data["methods"])
|
644
|
+
data["files"] = ref_list(data["files"])
|
645
|
+
data["superclass"] = ref_item(data["superclass"]) if data.key?("superclass")
|
646
|
+
when 'method', 'function'
|
647
|
+
data["namespace"] = ref_item(data["namespace"])
|
648
|
+
data["file"] = ref_item(data["file"])
|
649
|
+
end
|
650
|
+
end
|
651
|
+
new_table
|
652
|
+
end
|
653
|
+
|
654
|
+
# Given a key, return the matching table item. If not found return the key.
|
655
|
+
def ref_item(key)
|
656
|
+
@table[key] || key
|
657
|
+
end
|
658
|
+
|
659
|
+
# Given a list of keys, return the matching table items.
|
660
|
+
def ref_list(keys)
|
661
|
+
#keys.map{ |k| @table[k] || k }
|
662
|
+
keys.map{ |k| @table[k] || nil }.compact
|
663
|
+
end
|
664
|
+
|
665
|
+
=end
|
666
|
+
#++
|
667
|
+
|
@@ -0,0 +1,154 @@
|
|
1
|
+
class RDoc::Options
|
2
|
+
# true/false to include full source
|
3
|
+
attr_accessor :source
|
4
|
+
# true/false to use YAML instead of JSON
|
5
|
+
attr_accessor :yaml
|
6
|
+
end
|
7
|
+
|
8
|
+
class RDoc::TopLevel
|
9
|
+
#
|
10
|
+
def to_h
|
11
|
+
{
|
12
|
+
:path => path,
|
13
|
+
:name => base_name,
|
14
|
+
:fullname => full_name,
|
15
|
+
:rootname => absolute_name,
|
16
|
+
:modified => last_modified,
|
17
|
+
:diagram => diagram
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
#def to_json
|
23
|
+
# to_h.to_json
|
24
|
+
#end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
class RDoc::ClassModule
|
29
|
+
#
|
30
|
+
def with_documentation?
|
31
|
+
document_self_or_methods || classes_and_modules.any?{ |c| c.with_documentation? }
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
def document_self_or_methods
|
36
|
+
document_self || method_list.any?{ |m| m.document_self }
|
37
|
+
end
|
38
|
+
|
39
|
+
# #
|
40
|
+
# def to_h
|
41
|
+
# {
|
42
|
+
# :name => name,
|
43
|
+
# :fullname => full_name,
|
44
|
+
# :type => type,
|
45
|
+
# :path => path,
|
46
|
+
# :superclass => module? ? nil : superclass
|
47
|
+
# }
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# def to_json
|
51
|
+
# to_h.to_json
|
52
|
+
# end
|
53
|
+
end
|
54
|
+
|
55
|
+
|
56
|
+
module RDoc::SourceCodeAccess
|
57
|
+
|
58
|
+
#
|
59
|
+
def source_code_raw
|
60
|
+
return '' unless @token_stream
|
61
|
+
src = ""
|
62
|
+
@token_stream.each do |t|
|
63
|
+
next unless t
|
64
|
+
src << t.text
|
65
|
+
end
|
66
|
+
#add_line_numbers(src)
|
67
|
+
src
|
68
|
+
end
|
69
|
+
|
70
|
+
#
|
71
|
+
def source_code_location
|
72
|
+
src = source_code_raw
|
73
|
+
if md = /File (.*?), line (\d+)/.match(src)
|
74
|
+
file = md[1]
|
75
|
+
line = md[2]
|
76
|
+
else
|
77
|
+
file = "(unknown)"
|
78
|
+
line = 0
|
79
|
+
end
|
80
|
+
return file, line
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
class RDoc::AnyMethod
|
87
|
+
include RDoc::SourceCodeAccess
|
88
|
+
|
89
|
+
# # NOTE: dont_rename_initialize isn't used
|
90
|
+
# def to_h
|
91
|
+
# {
|
92
|
+
# :name => name,
|
93
|
+
# :fullname => full_name,
|
94
|
+
# :prettyname => pretty_name,
|
95
|
+
# :path => path,
|
96
|
+
# :type => type,
|
97
|
+
# :visibility => visibility,
|
98
|
+
# :blockparams => block_params,
|
99
|
+
# :singleton => singleton,
|
100
|
+
# :text => text,
|
101
|
+
# :aliases => aliases,
|
102
|
+
# :aliasfor => is_alias_for,
|
103
|
+
# :aref => aref,
|
104
|
+
# :parms => params,
|
105
|
+
# :callseq => call_seq
|
106
|
+
# #:paramseq => param_seq,
|
107
|
+
# }
|
108
|
+
# end
|
109
|
+
|
110
|
+
# #
|
111
|
+
# def to_json
|
112
|
+
# to_h.to_json
|
113
|
+
# end
|
114
|
+
end
|
115
|
+
|
116
|
+
class RDoc::Attr
|
117
|
+
include RDoc::SourceCodeAccess
|
118
|
+
end
|
119
|
+
|
120
|
+
=begin
|
121
|
+
|
122
|
+
# DEPRECATE ASAP
|
123
|
+
require "rdoc/parser/c"
|
124
|
+
# New RDoc somehow misses class comemnts.
|
125
|
+
# copyied this function from "2.2.2"
|
126
|
+
if ['2.4.2', '2.4.3'].include? RDoc::VERSION
|
127
|
+
class RDoc::Parser::C
|
128
|
+
def find_class_comment(class_name, class_meth)
|
129
|
+
comment = nil
|
130
|
+
if @content =~ %r{((?>/\*.*?\*/\s+))
|
131
|
+
(static\s+)?void\s+Init_#{class_name}\s*(?:_\(\s*)?\(\s*(?:void\s*)\)}xmi then
|
132
|
+
comment = $1
|
133
|
+
elsif @content =~ %r{Document-(?:class|module):\s#{class_name}\s*?(?:<\s+[:,\w]+)?\n((?>.*?\*/))}m
|
134
|
+
comment = $1
|
135
|
+
else
|
136
|
+
if @content =~ /rb_define_(class|module)/m then
|
137
|
+
class_name = class_name.split("::").last
|
138
|
+
comments = []
|
139
|
+
@content.split(/(\/\*.*?\*\/)\s*?\n/m).each_with_index do |chunk, index|
|
140
|
+
comments[index] = chunk
|
141
|
+
if chunk =~ /rb_define_(class|module).*?"(#{class_name})"/m then
|
142
|
+
comment = comments[index-1]
|
143
|
+
break
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
class_meth.comment = mangle_comment(comment) if comment
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
=end
|
154
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'citron'
|
2
|
+
require 'brass'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
testcase "Document conforms to specificaiton" do
|
6
|
+
|
7
|
+
# IMPORTANT! For now we need to hand create this document.
|
8
|
+
FIXTURE_DOCUMENT = 'test/fixture/doc/doc.json'
|
9
|
+
|
10
|
+
def initialize(*a,&b)
|
11
|
+
super(*a,&b)
|
12
|
+
|
13
|
+
@doc = JSON.load(File.new(FIXTURE_DOCUMENT))
|
14
|
+
end
|
15
|
+
|
16
|
+
test "(metadata)" do
|
17
|
+
assert @doc['(metadata)']
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
{"(metadata)":{"source":["meta"],"authors":[{"name":"trans","email":"transfire@gmail.com"}],"copyrights":[],"requirements":[{"name":"rdoc","version":"3+"},{"name":"qed","groups":["test"],"development":true},{"name":"ae","groups":["test"],"development":true},{"name":"detroit","groups":["build"],"development":true},{"name":"reap","groups":["build"],"development":true}],"dependencies":[],"alternatives":[],"conflicts":[],"repositories":[{"uri":"git://github.com/rubyworks/rdoc-shomen.git","scm":"git","name":"upstream"}],"resources":{"home":"http://rubyworks.github.com/rdoc-shomen","docs":"http://rubydoc.info/gems/rdoc-shoment","code":"http://github.com/rubyworks/rdoc-shomen","bugs":"http://github.com/rubyworks/rdoc-shomen/issues","mail":"http://groups.google.com/groups/rubyworks-mailinglist"},"extra":{},"load_path":["lib"],"revision":0,"created":"2010-07-01","summary":"RDoc Generator for Shomen Documentation Format","title":"RDoc Shomen","version":"0.1.0","name":"rdoc-shomen","description":"RDoc-Shomen is an RDoc generator plugin that can be used to generate Shomen\ndocumentation. This is an alternative to the shomen command line tool which\nuse the `.rdoc` cache to generate a shomen document. In contrast the rdoc-shomen\ngenerator operates as a traditional rdoc plugin.","organization":"rubyworks","date":"2012-03-31","path":"(metadata)","markup":"rdoc"},"RDoc::Generator::Shomen::DESCRIPTION":{"!":"constant","path":"RDoc::Generator::Shomen::DESCRIPTION","name":"DESCRIPTION","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","value":"'Shomen documentation format'","files":["/lib/rdoc/generator/shomen.rb"]},"RDoc":{"!":"module","path":"RDoc","name":"RDoc","namespace":"","includes":[],"extensions":[],"comment":"","format":"rdoc","constants":[],"modules":["RDoc::SourceCodeAccess","RDoc::Generator"],"classes":["RDoc::Options","RDoc::TopLevel","RDoc::ClassModule","RDoc::AnyMethod","RDoc::Attr"],"methods":[],"accessors":[],"files":[]},"RDoc::AnyMethod":{"!":"class","path":"RDoc::AnyMethod","name":"AnyMethod","namespace":"RDoc","includes":["RDoc::SourceCodeAccess"],"extensions":[],"comment":"#<RDoc::Comment:0x00000002e56120>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":[],"accessors":[],"files":["/lib/rdoc/generator/shomen_extensions.rb"],"superclass":"Object"},"RDoc::Attr":{"!":"class","path":"RDoc::Attr","name":"Attr","namespace":"RDoc","includes":["RDoc::SourceCodeAccess"],"extensions":[],"comment":"#<RDoc::Comment:0x00000002dd7898>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":[],"accessors":[],"files":["/lib/rdoc/generator/shomen_extensions.rb"],"superclass":"Object"},"RDoc::ClassModule":{"!":"class","path":"RDoc::ClassModule","name":"ClassModule","namespace":"RDoc","includes":[],"extensions":[],"comment":"#<RDoc::Comment:0x00000002fb7168>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":["RDoc::ClassModule#with_documentation?","RDoc::ClassModule#document_self_or_methods"],"accessors":[],"files":["/lib/rdoc/generator/shomen_extensions.rb"],"superclass":"Object"},"RDoc::Generator":{"!":"module","path":"RDoc::Generator","name":"Generator","namespace":"RDoc","includes":[],"extensions":[],"comment":"","format":"rdoc","constants":[],"modules":[],"classes":["RDoc::Generator::Shomen"],"methods":[],"accessors":[],"files":[]},"RDoc::Generator::Shomen":{"!":"class","path":"RDoc::Generator::Shomen","name":"Shomen","namespace":"RDoc::Generator","includes":[],"extensions":[],"comment":"#<RDoc::Comment:0x00000002a01d40>","format":"rdoc","constants":["RDoc::Generator::Shomen::DESCRIPTION"],"modules":[],"classes":[],"methods":["RDoc::Generator::Shomen.for","RDoc::Generator::Shomen.setup_options","RDoc::Generator::Shomen#classes","RDoc::Generator::Shomen#classes_toplevel","RDoc::Generator::Shomen#files","RDoc::Generator::Shomen#files_toplevel","RDoc::Generator::Shomen#files_hash","RDoc::Generator::Shomen#methods_all","RDoc::Generator::Shomen#attributes_all","RDoc::Generator::Shomen#constants_all","RDoc::Generator::Shomen#class_dir","RDoc::Generator::Shomen#file_dir","RDoc::Generator::Shomen#shomen","RDoc::Generator::Shomen#generate","RDoc::Generator::Shomen#output_file","RDoc::Generator::Shomen.new","RDoc::Generator::Shomen#path_output_relative","RDoc::Generator::Shomen#project_metadata","RDoc::Generator::Shomen#generate_metadata","RDoc::Generator::Shomen#generate_constants","RDoc::Generator::Shomen#generate_classes","RDoc::Generator::Shomen#generate_methods","RDoc::Generator::Shomen#generate_documents","RDoc::Generator::Shomen#generate_scripts","RDoc::Generator::Shomen#complete_name","RDoc::Generator::Shomen#collect_methods","RDoc::Generator::Shomen#collect_attributes","RDoc::Generator::Shomen#method_name","RDoc::Generator::Shomen#mime_type","RDoc::Generator::Shomen#debug_msg"],"accessors":["RDoc::Generator::Shomen#options","RDoc::Generator::Shomen#path_base","RDoc::Generator::Shomen#path_output"],"files":["/lib/rdoc/generator/shomen.rb"],"superclass":"Object"},"RDoc::Options":{"!":"class","path":"RDoc::Options","name":"Options","namespace":"RDoc","includes":[],"extensions":[],"comment":"#<RDoc::Comment:0x000000030d3600>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":[],"accessors":["RDoc::Options#source","RDoc::Options#yaml"],"files":["/lib/rdoc/generator/shomen_extensions.rb"],"superclass":"Object"},"RDoc::SourceCodeAccess":{"!":"module","path":"RDoc::SourceCodeAccess","name":"SourceCodeAccess","namespace":"RDoc","includes":[],"extensions":[],"comment":"#<RDoc::Comment:0x00000002f26a78>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":["RDoc::SourceCodeAccess#source_code_raw","RDoc::SourceCodeAccess#source_code_location"],"accessors":[],"files":["/lib/rdoc/generator/shomen_extensions.rb"]},"RDoc::TopLevel":{"!":"class","path":"RDoc::TopLevel","name":"TopLevel","namespace":"RDoc","includes":[],"extensions":[],"comment":"#<RDoc::Comment:0x00000003066c30>","format":"rdoc","constants":[],"modules":[],"classes":[],"methods":["RDoc::TopLevel#to_h"],"accessors":[],"files":["/lib/rdoc/generator/shomen_extensions.rb"],"superclass":"Object"},"RDoc::Generator::Shomen.for":{"!":"method","declarations":["class","public"],"path":"RDoc::Generator::Shomen.for","name":"for","namespace":"RDoc::Generator::Shomen","comment":"Standard generator factory method.\n\noptions - Generator options.\n\nReturns new RDoc::Generator::Shomen instance.","format":"rdoc","aliases":[],"alias_for":null,"singleton":true,"interfaces":[{"signature":"for(options)","arguments":[{"name":"options"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":36,"source":"# File lib/rdoc/generator/shomen.rb, line 36\n def self.for(options)\n new(options)\n end","language":"ruby"},"RDoc::Generator::Shomen.new":{"!":"method","declarations":["class","public"],"path":"RDoc::Generator::Shomen.new","name":"new","namespace":"RDoc::Generator::Shomen","comment":"Initialize new generator.\n\noptions - Generator options.\n\nReturns new RDoc::Generator::Shomen instance.","format":"rdoc","aliases":[],"alias_for":null,"singleton":true,"interfaces":[{"signature":"new(options)","arguments":[{"name":"options"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":192,"source":"# File lib/rdoc/generator/shomen.rb, line 192\n def initialize(options)\n @options = options\n #@options.diagram = false # why?\n\n @path_base = Pathname.pwd.expand_path\n\n # TODO: This is probably not needed any more.\n @path_output = Pathname.new(@options.op_dir).expand_path(@path_base)\n end","language":"ruby"},"RDoc::Generator::Shomen.setup_options":{"!":"method","declarations":["class","public"],"path":"RDoc::Generator::Shomen.setup_options","name":"setup_options","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":true,"interfaces":[{"signature":"setup_options(options)","arguments":[{"name":"options"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":44,"source":"# File lib/rdoc/generator/shomen.rb, line 44\n def self.setup_options(options)\n options.source = false\n options.yaml = false\n\n opt = options.option_parser\n\n opt.separator nil\n opt.separator \"Shomen generator options:\"\n opt.separator nil\n opt.on(\"--yaml\", \"Generate YAML document instead of JSON.\") do |value|\n options.yaml = true\n end\n opt.separator nil\n opt.on(\"--source\", \"Include full source code for scripts.\") do |value|\n options.github = true\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#attributes_all":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#attributes_all","name":"attributes_all","namespace":"RDoc::Generator::Shomen","comment":"List of all attributes in all classes and modules.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"attributes_all()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":105,"source":"# File lib/rdoc/generator/shomen.rb, line 105\n def attributes_all\n @attributes_all ||= classes.map{ |m| m.attributes }.flatten.sort\n end","language":"ruby"},"RDoc::Generator::Shomen#class_dir":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#class_dir","name":"class_dir","namespace":"RDoc::Generator::Shomen","comment":"RDoc needs this to function.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"class_dir()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":120,"source":"# File lib/rdoc/generator/shomen.rb, line 120\n def class_dir ; nil ; end","language":"ruby"},"RDoc::Generator::Shomen#classes":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#classes","name":"classes","namespace":"RDoc::Generator::Shomen","comment":"In the world of the RDoc Generators #classes is the same\nas #all_classes_and_modules. Well, except that its sorted \ntoo. For classes sans modules, see #types.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"classes()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":71,"source":"# File lib/rdoc/generator/shomen.rb, line 71\n def classes\n @classes ||= RDoc::TopLevel.all_classes_and_modules.sort\n end","language":"ruby"},"RDoc::Generator::Shomen#classes_toplevel":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#classes_toplevel","name":"classes_toplevel","namespace":"RDoc::Generator::Shomen","comment":"Only toplevel classes and modules.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"classes_toplevel()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":76,"source":"# File lib/rdoc/generator/shomen.rb, line 76\n def classes_toplevel\n @classes_toplevel ||= classes.select {|klass| !(RDoc::ClassModule === klass.parent) }\n end","language":"ruby"},"RDoc::Generator::Shomen#collect_attributes":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#collect_attributes","name":"collect_attributes","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"collect_attributes(class_module, singleton=false)","arguments":[{"name":"class_module"},{"name":"singleton","default":"false"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":532,"source":"# File lib/rdoc/generator/shomen.rb, line 532\n def collect_attributes(class_module, singleton=false)\n list = []\n class_module.attributes.each do |a|\n next if singleton ^ a.singleton\n #p a.rw\n #case a.rw\n #when :write, 'W'\n # list << \"#{method_name(a)}=\"\n #else\n list << method_name(a)\n #end\n end\n list.uniq\n end","language":"ruby"},"RDoc::Generator::Shomen#collect_methods":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#collect_methods","name":"collect_methods","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"collect_methods(class_module, singleton=false)","arguments":[{"name":"class_module"},{"name":"singleton","default":"false"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":522,"source":"# File lib/rdoc/generator/shomen.rb, line 522\n def collect_methods(class_module, singleton=false)\n list = []\n class_module.method_list.each do |m|\n next if singleton ^ m.singleton\n list << method_name(m)\n end\n list.uniq\n end","language":"ruby"},"RDoc::Generator::Shomen#complete_name":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#complete_name","name":"complete_name","namespace":"RDoc::Generator::Shomen","comment":"Returns String of fully qualified name.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"complete_name(name, namespace)","arguments":[{"name":"name"},{"name":"namespace"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":513,"source":"# File lib/rdoc/generator/shomen.rb, line 513\n def complete_name(name, namespace)\n if name !~ %r^#{namespace}/\n \"#{namespace}::#{name}\"\n else\n name\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#constants_all":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#constants_all","name":"constants_all","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"constants_all()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":110,"source":"# File lib/rdoc/generator/shomen.rb, line 110\n def constants_all\n @constants_all ||= classes.map{ |c| c.constants }.flatten\n end","language":"ruby"},"RDoc::Generator::Shomen#debug_msg":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#debug_msg","name":"debug_msg","namespace":"RDoc::Generator::Shomen","comment":"Output progress information if rdoc debugging is enabled","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"debug_msg(msg)","arguments":[{"name":"msg"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":571,"source":"# File lib/rdoc/generator/shomen.rb, line 571\n def debug_msg(msg)\n return unless $DEBUG_RDOC\n case msg[-1,1]\n when '.' then tab = \"= \"\n when ':' then tab = \"== \"\n else tab = \"* \"\n end\n $stderr.puts(tab + msg)\n end","language":"ruby"},"RDoc::ClassModule#document_self_or_methods":{"!":"method","declarations":["instance","public"],"path":"RDoc::ClassModule#document_self_or_methods","name":"document_self_or_methods","namespace":"RDoc::ClassModule","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"document_self_or_methods()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen_extensions.rb","line":35,"source":"# File lib/rdoc/generator/shomen_extensions.rb, line 35\n def document_self_or_methods\n document_self || method_list.any?{ |m| m.document_self }\n end","language":"ruby"},"RDoc::Generator::Shomen#file_dir":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#file_dir","name":"file_dir","namespace":"RDoc::Generator::Shomen","comment":"RDoc needs this to function.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"file_dir()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":123,"source":"# File lib/rdoc/generator/shomen.rb, line 123\n def file_dir ; nil ; end","language":"ruby"},"RDoc::Generator::Shomen#files":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#files","name":"files","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"files()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":81,"source":"# File lib/rdoc/generator/shomen.rb, line 81\n def files\n @files ||= (\n @files_rdoc.select{ |f| f.parser != RDoc::Parser::Simple }\n )\n end","language":"ruby"},"RDoc::Generator::Shomen#files_hash":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#files_hash","name":"files_hash","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"files_hash()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":95,"source":"# File lib/rdoc/generator/shomen.rb, line 95\n def files_hash\n @files ||= RDoc::TopLevel.files_hash\n end","language":"ruby"},"RDoc::Generator::Shomen#files_toplevel":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#files_toplevel","name":"files_toplevel","namespace":"RDoc::Generator::Shomen","comment":"List of toplevel files. RDoc supplies this via the #generate method.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"files_toplevel()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":88,"source":"# File lib/rdoc/generator/shomen.rb, line 88\n def files_toplevel\n @files_toplevel ||= (\n @files_rdoc.select{ |f| f.parser == RDoc::Parser::Simple }\n )\n end","language":"ruby"},"RDoc::Generator::Shomen#generate":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#generate","name":"generate","namespace":"RDoc::Generator::Shomen","comment":"Build the initial indices and output objects based on an array of\ntop level objects containing the extracted information.\n\nfiles - Files to document.\n\nReturns nothing.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate(files)","arguments":[{"name":"files"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":136,"source":"# File lib/rdoc/generator/shomen.rb, line 136\n def generate(files)\n @files_rdoc = files.sort\n\n @table = {}\n\n generate_metadata\n generate_constants\n generate_classes\n #generate_attributes\n generate_methods\n generate_documents\n generate_scripts # must be last b/c it depends on the others\n\n # TODO: method accessor fields need to be handled\n\n # THINK: Internal referencing model, YAML and JSYNC ?\n #ref_table = reference_table(@table)\n\n if options.yaml\n out = @table.to_yaml\n else\n out = JSON.generate(@table)\n end\n\n if options.op_dir == '-'\n puts out\n else\n File.open(output_file, 'w') do |f|\n f << out\n end unless $dryrun\n end\n\n #rescue StandardError => err\n # debug_msg \"%s: %s\\n %s\" % [ err.class.name, err.message, err.backtrace.join(\"\\n \") ]\n # raise err\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_classes":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_classes","name":"generate_classes","namespace":"RDoc::Generator::Shomen","comment":"Add classes (and modules) to table.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_classes()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":246,"source":"# File lib/rdoc/generator/shomen.rb, line 246\n def generate_classes\n debug_msg \"Generating class/module documentation:\"\n\n classes.each do |rdoc_class|\n debug_msg \"%s (%s)\" % [ rdoc_class.full_name, rdoc_class.path ]\n\n if rdoc_class.type=='class'\n model = Shomen::Model::Class.new\n else\n model = Shomen::Model::Module.new\n end\n\n model.path = rdoc_class.full_name\n model.name = rdoc_class.name\n model.namespace = rdoc_class.full_name.split('::')[0...-1].join('::')\n model.includes = rdoc_class.includes.map{ |x| x.name } # FIXME: How to \"lookup\" full name?\n model.extensions = [] # TODO: How to get extensions?\n model.comment = rdoc_class.comment.to_s #text\n model.format = 'rdoc'\n model.constants = rdoc_class.constants.map{ |x| complete_name(x.name, rdoc_class.full_name) }\n model.modules = rdoc_class.modules.map{ |x| complete_name(x.name, rdoc_class.full_name) }\n model.classes = rdoc_class.classes.map{ |x| complete_name(x.name, rdoc_class.full_name) }\n model.methods = rdoc_class.method_list.map{ |m| method_name(m) }.uniq\n model.accessors = rdoc_class.attributes.map{ |a| method_name(a) }.uniq #+ \":#{a.rw}\" }.uniq\n model.files = rdoc_class.in_files.map{ |x| \"/#{x.full_name}\" }\n\n if rdoc_class.type == 'class'\n # HACK: No idea why RDoc is returning some weird superclass:\n # <RDoc::NormalClass:0xd924d4 class Object < BasicObject includes: []\n # attributes: [] methods: [#<RDoc::AnyMethod:0xd92b8c Object#fileutils\n # (public)>] aliases: []>\n # Maybe it has something to do with #fileutils?\n model.superclass = (\n case rdoc_class.superclass\n when nil\n when String\n rdoc_class.superclass\n else\n rdoc_class.superclass.full_name\n end\n )\n end\n\n @table[model.path] = model.to_h\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_constants":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_constants","name":"generate_constants","namespace":"RDoc::Generator::Shomen","comment":"Add constants to table.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_constants()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":228,"source":"# File lib/rdoc/generator/shomen.rb, line 228\n def generate_constants\n debug_msg \"Generating constant documentation:\"\n constants_all.each do |rdoc|\n model = Shomen::Model::Constant.new\n\n model.path = rdoc.parent.full_name + '::' + rdoc.name\n model.name = rdoc.name\n model.namespace = rdoc.parent.full_name\n model.comment = rdoc.comment.text\n model.format = 'rdoc'\n model.value = rdoc.value\n model.files = [\"/#{rdoc.file.full_name}\"]\n\n @table[model.path] = model.to_h\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_documents":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_documents","name":"generate_documents","namespace":"RDoc::Generator::Shomen","comment":"Generate entries for information files, e.g. `README.rdoc`.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_documents()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":432,"source":"# File lib/rdoc/generator/shomen.rb, line 432\n def generate_documents\n files_toplevel.each do |rdoc_document|\n absolute_path = File.join(path_base, rdoc_document.full_name)\n\n model = Shomen::Model::Document.new\n\n model.path = rdoc_document.full_name\n model.name = File.basename(absolute_path)\n model.created = File.mtime(absolute_path)\n model.modified = File.mtime(absolute_path)\n model.text = File.read(absolute_path) #file.comment\n model.format = mime_type(absolute_path)\n\n @table['/'+model.path] = model.to_h\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_metadata":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_metadata","name":"generate_metadata","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_metadata()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":223,"source":"# File lib/rdoc/generator/shomen.rb, line 223\n def generate_metadata\n @table['(metadata)'] = project_metadata.to_h\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_methods":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_methods","name":"generate_methods","namespace":"RDoc::Generator::Shomen","comment":"Transform RDoc methods to Shomen model and add to table.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_methods()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":296,"source":"# File lib/rdoc/generator/shomen.rb, line 296\n def generate_methods\n debug_msg \"Generating method documentation:\"\n\n list = methods_all + attributes_all\n\n list.each do |rdoc_method|\n #debug_msg \"%s\" % [rdoc_method.full_name]\n\n #full_name = method_name(m)\n #'prettyname' => m.pretty_name,\n #'type' => m.type, # class or instance\n\n model = Shomen::Model::Method.new\n\n model.path = method_name(rdoc_method)\n model.name = rdoc_method.name\n model.namespace = rdoc_method.parent_name\n model.comment = rdoc_method.comment.text\n model.format = 'rdoc'\n model.aliases = rdoc_method.aliases.map{ |a| method_name(a) }\n model.alias_for = method_name(rdoc_method.is_alias_for)\n model.singleton = rdoc_method.singleton\n\n model.declarations << rdoc_method.type.to_s #singleton ? 'class' : 'instance'\n model.declarations << rdoc_method.visibility.to_s\n\n model.interfaces = []\n if rdoc_method.call_seq\n rdoc_method.call_seq.split(\"\\n\").each do |cs|\n cs = cs.to_s.strip\n model.interfaces << parse_interface(cs) unless cs == ''\n end\n end\n model.interfaces << parse_interface(\"#{rdoc_method.name}#{rdoc_method.params}\")\n\n model.returns = [] # RDoc doesn't support specifying return values\n model.file = '/'+rdoc_method.source_code_location.first\n model.line = rdoc_method.source_code_location.last.to_i\n model.source = rdoc_method.source_code_raw\n\n if rdoc_method.respond_to?(:c_function)\n model.language = rdoc_method.c_function ? 'c' : 'ruby'\n else\n model.language = 'ruby'\n end\n\n @table[model.path] = model.to_h\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#generate_scripts":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#generate_scripts","name":"generate_scripts","namespace":"RDoc::Generator::Shomen","comment":"Generate script entries.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"generate_scripts()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":452,"source":"# File lib/rdoc/generator/shomen.rb, line 452\n def generate_scripts\n #debug_msg \"Generating file documentation in #{path_output_relative}:\"\n #templatefile = self.path_template + 'file.rhtml'\n\n files.each do |rdoc_file|\n debug_msg \"%s\" % [rdoc_file.full_name]\n\n absolute_path = File.join(path_base, rdoc_file.full_name)\n #rel_prefix = self.path_output.relative_path_from(outfile.dirname)\n\n model = Shomen::Model::Script.new\n\n model.path = rdoc_file.full_name\n model.name = File.basename(rdoc_file.full_name)\n model.created = File.ctime(absolute_path)\n model.modified = File.mtime(absolute_path)\n\n # http://github.com/rubyworks/qed/blob/master/ lib/qed.rb\n\n # TODO: Add option to rdoc command line tool instead of using ENV.\n\n if ENV['source']\n model.source = File.read(absolute_path) #file.comment\n model.language = mime_type(absolute_path)\n end\n\n webcvs = options.webcvs || project_metadata['webcvs']\n if webcvs\n model.uri = File.join(webcvs, model.path) # TODO: use open-uri ?\n model.language = mime_type(absolute_path)\n end\n\n #model.header =\n #model.footer =\n model.requires = rdoc_file.requires.map{ |r| r.name }\n model.constants = rdoc_file.constants.map{ |c| c.full_name }\n\n # note that this utilizes the table we are building\n # so it needs to be the last thing done.\n @table.each do |k, h|\n case h['!']\n when 'module'\n model.modules ||= []\n model.modules << k if h['files'].include?(rdoc_file.full_name)\n when 'class'\n model.classes ||= []\n model.classes << k if h['files'].include?(rdoc_file.full_name)\n when 'method'\n model.methods ||= []\n model.methods << k if h['file'] == rdoc_file.full_name\n when 'class-method'\n model.class_methods ||= []\n model.class_methods << k if h['file'] == rdoc_file.full_name\n end\n end\n\n @table['/'+model.path] = model.to_h\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#method_name":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#method_name","name":"method_name","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"method_name(method)","arguments":[{"name":"method"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":548,"source":"# File lib/rdoc/generator/shomen.rb, line 548\n def method_name(method)\n return nil if method.nil?\n if method.singleton\n i = method.full_name.rindex('::') \n method.full_name[0...i] + '.' + method.full_name[i+2..-1]\n else\n method.full_name\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#methods_all":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#methods_all","name":"methods_all","namespace":"RDoc::Generator::Shomen","comment":"List of all methods in all classes and modules.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"methods_all()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":100,"source":"# File lib/rdoc/generator/shomen.rb, line 100\n def methods_all\n @methods_all ||= classes.map{ |m| m.method_list }.flatten.sort\n end","language":"ruby"},"RDoc::Generator::Shomen#mime_type":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#mime_type","name":"mime_type","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"mime_type(path)","arguments":[{"name":"path"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":559,"source":"# File lib/rdoc/generator/shomen.rb, line 559\n def mime_type(path)\n case File.extname(path)\n when '.rb', '.rbx' then 'text/ruby'\n when '.c' then 'text/c-source'\n when '.rdoc' then 'text/rdoc'\n when '.md', '.markdown' then 'text/markdown'\n else 'text/plain'\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#output_file":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#output_file","name":"output_file","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"output_file()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":174,"source":"# File lib/rdoc/generator/shomen.rb, line 174\n def output_file\n name = project_metadata['name']\n vers = project_metadata['version']\n\n if name && vers\n \"#{name}-#{vers}.json\"\n else\n 'doc.json'\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#path_output_relative":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#path_output_relative","name":"path_output_relative","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"path_output_relative(path=nil)","arguments":[{"name":"path","default":"nil"}]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":209,"source":"# File lib/rdoc/generator/shomen.rb, line 209\n def path_output_relative(path=nil)\n if path\n path.to_s.sub(path_base.to_s+'/', '')\n else\n @path_output_relative ||= path_output.to_s.sub(path_base.to_s+'/', '')\n end\n end","language":"ruby"},"RDoc::Generator::Shomen#project_metadata":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#project_metadata","name":"project_metadata","namespace":"RDoc::Generator::Shomen","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"project_metadata()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":218,"source":"# File lib/rdoc/generator/shomen.rb, line 218\n def project_metadata\n @project_metadata ||= Shomen::Metadata.new\n end","language":"ruby"},"RDoc::Generator::Shomen#shomen":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#shomen","name":"shomen","namespace":"RDoc::Generator::Shomen","comment":"TODO: Rename ?","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"shomen()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen.rb","line":126,"source":"# File lib/rdoc/generator/shomen.rb, line 126\n def shomen\n @table || {}\n end","language":"ruby"},"RDoc::SourceCodeAccess#source_code_location":{"!":"method","declarations":["instance","public"],"path":"RDoc::SourceCodeAccess#source_code_location","name":"source_code_location","namespace":"RDoc::SourceCodeAccess","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"source_code_location()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen_extensions.rb","line":71,"source":"# File lib/rdoc/generator/shomen_extensions.rb, line 71\n def source_code_location\n src = source_code_raw\n if md = %rFile (.*?), line (\\d+)/.match(src)\n file = md[1]\n line = md[2]\n else\n file = \"(unknown)\"\n line = 0\n end\n return file, line\n end","language":"ruby"},"RDoc::SourceCodeAccess#source_code_raw":{"!":"method","declarations":["instance","public"],"path":"RDoc::SourceCodeAccess#source_code_raw","name":"source_code_raw","namespace":"RDoc::SourceCodeAccess","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"source_code_raw()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen_extensions.rb","line":59,"source":"# File lib/rdoc/generator/shomen_extensions.rb, line 59\n def source_code_raw\n return '' unless @token_stream\n src = \"\"\n @token_stream.each do |t|\n next unless t\n src << t.text\n end\n #add_line_numbers(src)\n src\n end","language":"ruby"},"RDoc::TopLevel#to_h":{"!":"method","declarations":["instance","public"],"path":"RDoc::TopLevel#to_h","name":"to_h","namespace":"RDoc::TopLevel","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"to_h()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen_extensions.rb","line":10,"source":"# File lib/rdoc/generator/shomen_extensions.rb, line 10\n def to_h\n {\n :path => path,\n :name => base_name,\n :fullname => full_name,\n :rootname => absolute_name,\n :modified => last_modified,\n :diagram => diagram\n }\n end","language":"ruby"},"RDoc::ClassModule#with_documentation?":{"!":"method","declarations":["instance","public"],"path":"RDoc::ClassModule#with_documentation?","name":"with_documentation?","namespace":"RDoc::ClassModule","comment":"","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"with_documentation?()","arguments":[]}],"returns":[],"file":"/lib/rdoc/generator/shomen_extensions.rb","line":30,"source":"# File lib/rdoc/generator/shomen_extensions.rb, line 30\n def with_documentation?\n document_self_or_methods || classes_and_modules.any?{ |c| c.with_documentation? }\n end","language":"ruby"},"RDoc::Generator::Shomen#options":{"!":"method","declarations":["instance","public"],"path":"RDoc::Generator::Shomen#options","name":"options","namespace":"RDoc::Generator::Shomen","comment":"User options from the command line.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"options","arguments":[{"name":"options"}]}],"returns":[],"file":"/(unknown)","line":0,"source":"","language":"ruby"},"RDoc::Generator::Shomen#path_base":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#path_base","name":"path_base","namespace":"RDoc::Generator::Shomen","comment":"Current pathname.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"path_base","arguments":[{"name":"path_base"}]}],"returns":[],"file":"/(unknown)","line":0,"source":"","language":"ruby"},"RDoc::Generator::Shomen#path_output":{"!":"method","declarations":["instance","protected"],"path":"RDoc::Generator::Shomen#path_output","name":"path_output","namespace":"RDoc::Generator::Shomen","comment":"The output path.","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"path_output","arguments":[{"name":"path_output"}]}],"returns":[],"file":"/(unknown)","line":0,"source":"","language":"ruby"},"RDoc::Options#source":{"!":"method","declarations":["instance","public"],"path":"RDoc::Options#source","name":"source","namespace":"RDoc::Options","comment":"true/false to include full source","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"source","arguments":[{"name":"source"}]}],"returns":[],"file":"/(unknown)","line":0,"source":"","language":"ruby"},"RDoc::Options#yaml":{"!":"method","declarations":["instance","public"],"path":"RDoc::Options#yaml","name":"yaml","namespace":"RDoc::Options","comment":"true/false to use YAML instead of JSON","format":"rdoc","aliases":[],"alias_for":null,"singleton":false,"interfaces":[{"signature":"yaml","arguments":[{"name":"yaml"}]}],"returns":[],"file":"/(unknown)","line":0,"source":"","language":"ruby"},"/lib/rdoc/discover.rb":{"!":"script","path":"lib/rdoc/discover.rb","name":"discover.rb","created":"2012-03-31 09:43:25 -0400","modified":"2012-03-31 09:43:25 -0400","requires":["rubygems"],"constants":[],"modules":[],"classes":[],"methods":[]},"/lib/rdoc/generator/shomen.rb":{"!":"script","path":"lib/rdoc/generator/shomen.rb","name":"shomen.rb","created":"2012-03-31 11:17:02 -0400","modified":"2012-03-31 11:17:02 -0400","requires":["fileutils","pathname","yaml","json","rdoc/rdoc","rdoc/generator","rdoc/generator/markup","shomen/metadata","shomen/model","rdoc/generator/shomen_extensions"],"constants":[],"modules":[],"classes":[],"methods":[]},"/lib/rdoc/generator/shomen_extensions.rb":{"!":"script","path":"lib/rdoc/generator/shomen_extensions.rb","name":"shomen_extensions.rb","created":"2012-03-31 10:50:09 -0400","modified":"2012-03-31 10:50:09 -0400","requires":[],"constants":[],"modules":[],"classes":[],"methods":[]}}
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rdoc-shomen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- trans
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-04-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: shomen-model
|
16
|
+
requirement: &22833980 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *22833980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: citron
|
27
|
+
requirement: &22833060 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *22833060
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: detroit
|
38
|
+
requirement: &22831420 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *22831420
|
47
|
+
description: ! 'RDoc-Shomen is an RDoc generator plugin that can be used to generate
|
48
|
+
Shomen
|
49
|
+
|
50
|
+
documentation. This is an alternative to the shomen command line tool which
|
51
|
+
|
52
|
+
use the `.rdoc` cache to generate a shomen document. In contrast the rdoc-shomen
|
53
|
+
|
54
|
+
generator operates as a traditional rdoc plugin.'
|
55
|
+
email:
|
56
|
+
- transfire@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files:
|
60
|
+
- LICENSE.txt
|
61
|
+
- HISTORY.rdoc
|
62
|
+
- README.rdoc
|
63
|
+
files:
|
64
|
+
- .ruby
|
65
|
+
- lib/rdoc/discover.rb
|
66
|
+
- lib/rdoc/generator/shomen.rb
|
67
|
+
- lib/rdoc/generator/shomen_extensions.rb
|
68
|
+
- test/case_specification.rb
|
69
|
+
- test/fixture/doc/doc.json
|
70
|
+
- HISTORY.rdoc
|
71
|
+
- LICENSE.txt
|
72
|
+
- README.rdoc
|
73
|
+
- Confile.rb
|
74
|
+
homepage: http://rubyworks.github.com/rdoc-shomen
|
75
|
+
licenses:
|
76
|
+
- BSD-2-Clause
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
requirements: []
|
94
|
+
rubyforge_project:
|
95
|
+
rubygems_version: 1.8.11
|
96
|
+
signing_key:
|
97
|
+
specification_version: 3
|
98
|
+
summary: RDoc Generator for Shomen Documentation Format
|
99
|
+
test_files: []
|