rdoc 6.9.1 → 6.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -0
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +6 -0
- data/lib/rdoc/markup/formatter.rb +19 -12
- data/lib/rdoc/markup/to_html_crossref.rb +63 -12
- data/lib/rdoc/markup/to_rdoc.rb +1 -1
- data/lib/rdoc/options.rb +56 -7
- data/lib/rdoc/parser/c.rb +5 -0
- data/lib/rdoc/parser/prism_ruby.rb +4 -2
- data/lib/rdoc/rubygems_hook.rb +18 -2
- data/lib/rdoc/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 870fa0cb431cb2be4520001d6bceb293d36475e2d96e090d749a2ee7b91bb979
|
4
|
+
data.tar.gz: ea650e35d6b2fe0a33a031e8df70be62742d9046cf9ad9aca8d7ead3cac67038
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3cc3a1797ce0a7538620e71b04f5db77eea9af380b6c8db05b283cc17f4b0504d096c33fac55f06c7004100a1d18217e154dcf4f24a7538167292746be9a16c
|
7
|
+
data.tar.gz: 0f52da54649752c27b2b330e6cda90aa9c478b8f4fd068b291666771d55e84db67a6c57f5261b4678260b93726eb4ec21c2728e706be0bfb37d1ad3277188330
|
@@ -18,6 +18,7 @@
|
|
18
18
|
solo = top.one? {|klass| klass.display?}
|
19
19
|
traverse = proc do |klasses| -%>
|
20
20
|
<ul class="link-list">
|
21
|
+
<%- klasses.uniq!(&:full_name) -%>
|
21
22
|
<%- klasses.each do |index_klass| -%>
|
22
23
|
<%- if children = all_classes[index_klass.full_name] -%>
|
23
24
|
<li><details<% if solo; solo = false %> open<% end %>><summary><% link.call(index_klass) %></summary>
|
@@ -103,6 +103,12 @@ function hookSidebar() {
|
|
103
103
|
if (isSmallViewport) {
|
104
104
|
navigation.hidden = true;
|
105
105
|
navigationToggle.ariaExpanded = false;
|
106
|
+
document.addEventListener('click', (e) => {
|
107
|
+
if (e.target.closest('#navigation a')) {
|
108
|
+
navigation.hidden = true;
|
109
|
+
navigationToggle.ariaExpanded = false;
|
110
|
+
}
|
111
|
+
});
|
106
112
|
}
|
107
113
|
}
|
108
114
|
|
@@ -195,18 +195,20 @@ class RDoc::Markup::Formatter
|
|
195
195
|
@in_tt > 0
|
196
196
|
end
|
197
197
|
|
198
|
+
def tt_tag? attr_mask, reverse = false
|
199
|
+
each_attr_tag(attr_mask, reverse) do |tag|
|
200
|
+
return true if tt? tag
|
201
|
+
end
|
202
|
+
false
|
203
|
+
end
|
204
|
+
|
198
205
|
##
|
199
206
|
# Turns on tags for +item+ on +res+
|
200
207
|
|
201
208
|
def on_tags res, item
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
@attr_tags.each do |tag|
|
206
|
-
if attr_mask & tag.bit != 0 then
|
207
|
-
res << annotate(tag.on)
|
208
|
-
@in_tt += 1 if tt? tag
|
209
|
-
end
|
209
|
+
each_attr_tag(item.turn_on) do |tag|
|
210
|
+
res << annotate(tag.on)
|
211
|
+
@in_tt += 1 if tt? tag
|
210
212
|
end
|
211
213
|
end
|
212
214
|
|
@@ -214,13 +216,18 @@ class RDoc::Markup::Formatter
|
|
214
216
|
# Turns off tags for +item+ on +res+
|
215
217
|
|
216
218
|
def off_tags res, item
|
217
|
-
|
219
|
+
each_attr_tag(item.turn_off, true) do |tag|
|
220
|
+
@in_tt -= 1 if tt? tag
|
221
|
+
res << annotate(tag.off)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def each_attr_tag attr_mask, reverse = false
|
218
226
|
return if attr_mask.zero?
|
219
227
|
|
220
|
-
@attr_tags.reverse_each do |tag|
|
228
|
+
@attr_tags.public_send(reverse ? :reverse_each : :each) do |tag|
|
221
229
|
if attr_mask & tag.bit != 0 then
|
222
|
-
|
223
|
-
res << annotate(tag.off)
|
230
|
+
yield tag
|
224
231
|
end
|
225
232
|
end
|
226
233
|
end
|
@@ -58,7 +58,7 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
58
58
|
# Creates a link to the reference +name+ if the name exists. If +text+ is
|
59
59
|
# given it is used as the link text, otherwise +name+ is used.
|
60
60
|
|
61
|
-
def cross_reference name, text = nil, code = true
|
61
|
+
def cross_reference name, text = nil, code = true, rdoc_ref: false
|
62
62
|
lookup = name
|
63
63
|
|
64
64
|
name = name[1..-1] unless @show_hash if name[0, 1] == '#'
|
@@ -70,7 +70,7 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
70
70
|
text ||= name
|
71
71
|
end
|
72
72
|
|
73
|
-
link lookup, text, code
|
73
|
+
link lookup, text, code, rdoc_ref: rdoc_ref
|
74
74
|
end
|
75
75
|
|
76
76
|
##
|
@@ -83,6 +83,8 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
83
83
|
def handle_regexp_CROSSREF(target)
|
84
84
|
name = target.text
|
85
85
|
|
86
|
+
return name if @options.autolink_excluded_words&.include?(name)
|
87
|
+
|
86
88
|
return name if name =~ /@[\w-]+\.[\w-]/ # labels that look like emails
|
87
89
|
|
88
90
|
unless @hyperlink_all then
|
@@ -92,7 +94,7 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
92
94
|
return name if name =~ /\A[a-z]*\z/
|
93
95
|
end
|
94
96
|
|
95
|
-
cross_reference name
|
97
|
+
cross_reference name, rdoc_ref: false
|
96
98
|
end
|
97
99
|
|
98
100
|
##
|
@@ -100,9 +102,14 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
100
102
|
# handle other schemes.
|
101
103
|
|
102
104
|
def handle_regexp_HYPERLINK target
|
103
|
-
|
105
|
+
url = target.text
|
104
106
|
|
105
|
-
|
107
|
+
case url
|
108
|
+
when /\Ardoc-ref:/
|
109
|
+
cross_reference $', rdoc_ref: true
|
110
|
+
else
|
111
|
+
super
|
112
|
+
end
|
106
113
|
end
|
107
114
|
|
108
115
|
##
|
@@ -117,8 +124,8 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
117
124
|
url = target.text
|
118
125
|
|
119
126
|
case url
|
120
|
-
when /\Ardoc-ref:/
|
121
|
-
cross_reference $'
|
127
|
+
when /\Ardoc-ref:/
|
128
|
+
cross_reference $', rdoc_ref: true
|
122
129
|
else
|
123
130
|
super
|
124
131
|
end
|
@@ -129,16 +136,18 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
129
136
|
# RDoc::Markup::ToHtml to handle other schemes.
|
130
137
|
|
131
138
|
def gen_url url, text
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
139
|
+
if url =~ /\Ardoc-ref:/
|
140
|
+
name = $'
|
141
|
+
cross_reference name, text, name == text, rdoc_ref: true
|
142
|
+
else
|
143
|
+
super
|
144
|
+
end
|
136
145
|
end
|
137
146
|
|
138
147
|
##
|
139
148
|
# Creates an HTML link to +name+ with the given +text+.
|
140
149
|
|
141
|
-
def link name, text, code = true
|
150
|
+
def link name, text, code = true, rdoc_ref: false
|
142
151
|
if !(name.end_with?('+@', '-@')) and name =~ /(.*[^#:])?@/
|
143
152
|
name = $1
|
144
153
|
label = $'
|
@@ -148,6 +157,9 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
148
157
|
|
149
158
|
case ref
|
150
159
|
when String then
|
160
|
+
if rdoc_ref && @options.warn_missing_rdoc_ref
|
161
|
+
puts "#{@from_path}: `rdoc-ref:#{name}` can't be resolved for `#{text}`"
|
162
|
+
end
|
151
163
|
ref
|
152
164
|
else
|
153
165
|
path = ref ? ref.as_href(@from_path) : +""
|
@@ -172,4 +184,43 @@ class RDoc::Markup::ToHtmlCrossref < RDoc::Markup::ToHtml
|
|
172
184
|
end
|
173
185
|
end
|
174
186
|
|
187
|
+
def convert_flow(flow)
|
188
|
+
res = []
|
189
|
+
|
190
|
+
i = 0
|
191
|
+
while i < flow.size
|
192
|
+
item = flow[i]
|
193
|
+
i += 1
|
194
|
+
case item
|
195
|
+
when RDoc::Markup::AttrChanger then
|
196
|
+
# Make "+Class#method+" a cross reference
|
197
|
+
if tt_tag?(item.turn_on) and
|
198
|
+
String === (str = flow[i]) and
|
199
|
+
RDoc::Markup::AttrChanger === flow[i+1] and
|
200
|
+
tt_tag?(flow[i+1].turn_off, true) and
|
201
|
+
(@options.hyperlink_all ? ALL_CROSSREF_REGEXP : CROSSREF_REGEXP).match?(str) and
|
202
|
+
(text = cross_reference str) != str
|
203
|
+
then
|
204
|
+
text = yield text, res if defined?(yield)
|
205
|
+
res << text
|
206
|
+
i += 2
|
207
|
+
next
|
208
|
+
end
|
209
|
+
off_tags res, item
|
210
|
+
on_tags res, item
|
211
|
+
when String then
|
212
|
+
text = convert_string(item)
|
213
|
+
text = yield text, res if defined?(yield)
|
214
|
+
res << text
|
215
|
+
when RDoc::Markup::RegexpHandling then
|
216
|
+
text = convert_regexp_handling(item)
|
217
|
+
text = yield text, res if defined?(yield)
|
218
|
+
res << text
|
219
|
+
else
|
220
|
+
raise "Unknown flow element: #{item.inspect}"
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
res.join('')
|
225
|
+
end
|
175
226
|
end
|
data/lib/rdoc/markup/to_rdoc.rb
CHANGED
data/lib/rdoc/options.rb
CHANGED
@@ -325,6 +325,12 @@ class RDoc::Options
|
|
325
325
|
|
326
326
|
attr_accessor :verbosity
|
327
327
|
|
328
|
+
##
|
329
|
+
# Warn if rdoc-ref links can't be resolved
|
330
|
+
# Default is +false+
|
331
|
+
|
332
|
+
attr_accessor :warn_missing_rdoc_ref
|
333
|
+
|
328
334
|
##
|
329
335
|
# URL of web cvs frontend
|
330
336
|
|
@@ -349,18 +355,29 @@ class RDoc::Options
|
|
349
355
|
# +--[no-]embed-mixins+ (Default is +false+.)
|
350
356
|
attr_accessor :embed_mixins
|
351
357
|
|
358
|
+
##
|
359
|
+
# Exclude the default patterns as well if true.
|
360
|
+
attr_reader :apply_default_exclude
|
361
|
+
|
362
|
+
##
|
363
|
+
# Words to be ignored in autolink cross-references
|
364
|
+
attr_accessor :autolink_excluded_words
|
365
|
+
|
352
366
|
def initialize loaded_options = nil # :nodoc:
|
353
367
|
init_ivars
|
354
368
|
override loaded_options if loaded_options
|
355
369
|
end
|
356
370
|
|
371
|
+
DEFAULT_EXCLUDE = %w[
|
372
|
+
~\z \.orig\z \.rej\z \.bak\z
|
373
|
+
\.gemspec\z
|
374
|
+
]
|
375
|
+
|
357
376
|
def init_ivars # :nodoc:
|
377
|
+
@autolink_excluded_words = []
|
358
378
|
@dry_run = false
|
359
379
|
@embed_mixins = false
|
360
|
-
@exclude =
|
361
|
-
~\z \.orig\z \.rej\z \.bak\z
|
362
|
-
\.gemspec\z
|
363
|
-
]
|
380
|
+
@exclude = []
|
364
381
|
@files = nil
|
365
382
|
@force_output = false
|
366
383
|
@force_update = true
|
@@ -393,11 +410,13 @@ class RDoc::Options
|
|
393
410
|
@update_output_dir = true
|
394
411
|
@verbosity = 1
|
395
412
|
@visibility = :protected
|
413
|
+
@warn_missing_rdoc_ref = true
|
396
414
|
@webcvs = nil
|
397
415
|
@write_options = false
|
398
416
|
@encoding = Encoding::UTF_8
|
399
417
|
@charset = @encoding.name
|
400
418
|
@skip_tests = true
|
419
|
+
@apply_default_exclude = true
|
401
420
|
end
|
402
421
|
|
403
422
|
def init_with map # :nodoc:
|
@@ -424,6 +443,9 @@ class RDoc::Options
|
|
424
443
|
@visibility = map['visibility']
|
425
444
|
@webcvs = map['webcvs']
|
426
445
|
|
446
|
+
@apply_default_exclude = map['apply_default_exclude']
|
447
|
+
@autolink_excluded_words = map['autolink_excluded_words']
|
448
|
+
|
427
449
|
@rdoc_include = sanitize_path map['rdoc_include']
|
428
450
|
@static_path = sanitize_path map['static_path']
|
429
451
|
end
|
@@ -456,6 +478,10 @@ class RDoc::Options
|
|
456
478
|
@title = map['title'] if map.has_key?('title')
|
457
479
|
@visibility = map['visibility'] if map.has_key?('visibility')
|
458
480
|
@webcvs = map['webcvs'] if map.has_key?('webcvs')
|
481
|
+
@autolink_excluded_words = map['autolink_excluded_words'] if map.has_key?('autolink_excluded_words')
|
482
|
+
@apply_default_exclude = map['apply_default_exclude'] if map.has_key?('apply_default_exclude')
|
483
|
+
|
484
|
+
@warn_missing_rdoc_ref = map['warn_missing_rdoc_ref'] if map.has_key?('warn_missing_rdoc_ref')
|
459
485
|
|
460
486
|
if map.has_key?('rdoc_include')
|
461
487
|
@rdoc_include = sanitize_path map['rdoc_include']
|
@@ -484,7 +510,9 @@ class RDoc::Options
|
|
484
510
|
@template == other.template and
|
485
511
|
@title == other.title and
|
486
512
|
@visibility == other.visibility and
|
487
|
-
@webcvs == other.webcvs
|
513
|
+
@webcvs == other.webcvs and
|
514
|
+
@apply_default_exclude == other.apply_default_exclude and
|
515
|
+
@autolink_excluded_words == other.autolink_excluded_words
|
488
516
|
end
|
489
517
|
|
490
518
|
##
|
@@ -555,10 +583,12 @@ class RDoc::Options
|
|
555
583
|
if @exclude.nil? or Regexp === @exclude then
|
556
584
|
# done, #finish is being re-run
|
557
585
|
@exclude
|
558
|
-
elsif @exclude.empty? then
|
586
|
+
elsif !@apply_default_exclude and @exclude.empty? then
|
559
587
|
nil
|
560
588
|
else
|
561
|
-
|
589
|
+
exclude = @exclude
|
590
|
+
exclude |= DEFAULT_EXCLUDE if @apply_default_exclude
|
591
|
+
Regexp.new(exclude.join("|"))
|
562
592
|
end
|
563
593
|
end
|
564
594
|
|
@@ -792,6 +822,11 @@ Usage: #{opt.program_name} [options] [names...]
|
|
792
822
|
@exclude << value
|
793
823
|
end
|
794
824
|
|
825
|
+
opt.on("--[no-]apply-default-exclude",
|
826
|
+
"Use default PATTERN to exclude.") do |value|
|
827
|
+
@apply_default_exclude = value
|
828
|
+
end
|
829
|
+
|
795
830
|
opt.separator nil
|
796
831
|
|
797
832
|
opt.on("--no-skipping-tests", nil,
|
@@ -963,6 +998,13 @@ Usage: #{opt.program_name} [options] [names...]
|
|
963
998
|
|
964
999
|
opt.separator nil
|
965
1000
|
|
1001
|
+
opt.on("--autolink-excluded-words=WORDS", Array,
|
1002
|
+
"Words to be ignored in autolink cross-references") do |value|
|
1003
|
+
@autolink_excluded_words.concat value
|
1004
|
+
end
|
1005
|
+
|
1006
|
+
opt.separator nil
|
1007
|
+
|
966
1008
|
opt.on("--hyperlink-all", "-A",
|
967
1009
|
"Generate hyperlinks for all words that",
|
968
1010
|
"correspond to known methods, even if they",
|
@@ -1104,6 +1146,13 @@ Usage: #{opt.program_name} [options] [names...]
|
|
1104
1146
|
|
1105
1147
|
opt.separator nil
|
1106
1148
|
|
1149
|
+
opt.on("--warn-missing-rdoc-ref",
|
1150
|
+
"Warn if rdoc-ref links can't be resolved") do |value|
|
1151
|
+
@warn_missing_rdoc_ref = value
|
1152
|
+
end
|
1153
|
+
|
1154
|
+
opt.separator nil
|
1155
|
+
|
1107
1156
|
opt.on("--[no-]ignore-invalid",
|
1108
1157
|
"Ignore invalid options and continue",
|
1109
1158
|
"(default true).") do |value|
|
data/lib/rdoc/parser/c.rb
CHANGED
@@ -405,6 +405,7 @@ class RDoc::Parser::C < RDoc::Parser
|
|
405
405
|
\s*(.*?)\s*\)\s*;
|
406
406
|
%xm) do |type, var_name, const_name, definition|
|
407
407
|
var_name = "rb_cObject" if !var_name or var_name == "rb_mKernel"
|
408
|
+
type = "const" if type == "global_const"
|
408
409
|
handle_constants type, var_name, const_name, definition
|
409
410
|
end
|
410
411
|
|
@@ -760,6 +761,10 @@ class RDoc::Parser::C < RDoc::Parser
|
|
760
761
|
rb_define_(?<type>\w+)\(\s*(?:\w+),\s*
|
761
762
|
"(?<name>\w+)"\s*,
|
762
763
|
.*?\)\s*;
|
764
|
+
| (?<doc>(?>^\s*/\*.*?\*/\s+))
|
765
|
+
rb_define_global_(?<type>const)\(\s*
|
766
|
+
"(?<name>\w+)"\s*,
|
767
|
+
.*?\)\s*;
|
763
768
|
| (?<doc>(?>^\s*/\*.*?\*/\s+))
|
764
769
|
rb_file_(?<type>const)\(\s*
|
765
770
|
"(?<name>\w+)"\s*,
|
@@ -642,14 +642,16 @@ class RDoc::Parser::PrismRuby < RDoc::Parser
|
|
642
642
|
|
643
643
|
owner, name = find_or_create_constant_owner_name(module_name)
|
644
644
|
if is_class
|
645
|
-
mod = owner.classes_hash[name] || owner.add_class(RDoc::NormalClass, name, superclass_name || '::Object')
|
646
|
-
|
647
645
|
# RDoc::NormalClass resolves superclass name despite of the lack of module nesting information.
|
648
646
|
# We need to fix it when RDoc::NormalClass resolved to a wrong constant name
|
649
647
|
if superclass_name
|
650
648
|
superclass_full_path = resolve_constant_path(superclass_name)
|
651
649
|
superclass = @store.find_class_or_module(superclass_full_path) if superclass_full_path
|
652
650
|
superclass_full_path ||= superclass_name
|
651
|
+
end
|
652
|
+
# add_class should be done after resolving superclass
|
653
|
+
mod = owner.classes_hash[name] || owner.add_class(RDoc::NormalClass, name, superclass_name || '::Object')
|
654
|
+
if superclass_name
|
653
655
|
if superclass
|
654
656
|
mod.superclass = superclass
|
655
657
|
elsif mod.superclass.is_a?(String) && mod.superclass != superclass_full_path
|
data/lib/rdoc/rubygems_hook.rb
CHANGED
@@ -181,10 +181,10 @@ class RDoc::RubyGemsHook
|
|
181
181
|
options = ::RDoc::Options.new
|
182
182
|
options.default_title = "#{@spec.full_name} Documentation"
|
183
183
|
options.parse args
|
184
|
+
options.quiet = !Gem.configuration.really_verbose
|
185
|
+
options.finish
|
184
186
|
end
|
185
187
|
|
186
|
-
options.quiet = !Gem.configuration.really_verbose
|
187
|
-
|
188
188
|
@rdoc = new_rdoc
|
189
189
|
@rdoc.options = options
|
190
190
|
|
@@ -310,5 +310,21 @@ module RDoc
|
|
310
310
|
# Generate document for compatibility if this is a default gem.
|
311
311
|
RubyGemsHook.generate(installer, specs)
|
312
312
|
end
|
313
|
+
|
314
|
+
def self.load_rdoc
|
315
|
+
RubyGemsHook.load_rdoc
|
316
|
+
end
|
317
|
+
|
318
|
+
def self.rdoc_version
|
319
|
+
RubyGemsHook.rdoc_version
|
320
|
+
end
|
321
|
+
|
322
|
+
def rdoc_installed?
|
323
|
+
RubyGemsHook.new(@spec).rdoc_installed?
|
324
|
+
end
|
325
|
+
|
326
|
+
def ri_installed?
|
327
|
+
RubyGemsHook.new(@spec).ri_installed?
|
328
|
+
end
|
313
329
|
end
|
314
330
|
end
|
data/lib/rdoc/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eric Hodel
|
@@ -11,10 +11,9 @@ authors:
|
|
11
11
|
- Zachary Scott
|
12
12
|
- Hiroshi SHIBATA
|
13
13
|
- ITOYANAGI Sakura
|
14
|
-
autorequire:
|
15
14
|
bindir: exe
|
16
15
|
cert_chain: []
|
17
|
-
date:
|
16
|
+
date: 2025-01-16 00:00:00.000000000 Z
|
18
17
|
dependencies:
|
19
18
|
- !ruby/object:Gem::Dependency
|
20
19
|
name: psych
|
@@ -254,7 +253,6 @@ metadata:
|
|
254
253
|
homepage_uri: https://ruby.github.io/rdoc
|
255
254
|
source_code_uri: https://github.com/ruby/rdoc
|
256
255
|
changelog_uri: https://github.com/ruby/rdoc/releases
|
257
|
-
post_install_message:
|
258
256
|
rdoc_options:
|
259
257
|
- "--main"
|
260
258
|
- README.rdoc
|
@@ -271,8 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
269
|
- !ruby/object:Gem::Version
|
272
270
|
version: '2.2'
|
273
271
|
requirements: []
|
274
|
-
rubygems_version: 3.
|
275
|
-
signing_key:
|
272
|
+
rubygems_version: 3.6.2
|
276
273
|
specification_version: 4
|
277
274
|
summary: RDoc produces HTML and command-line documentation for Ruby projects
|
278
275
|
test_files: []
|