rdoc 3.1 → 6.3.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (247) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.rdoc +220 -0
  3. data/CVE-2013-0256.rdoc +49 -0
  4. data/ExampleMarkdown.md +37 -0
  5. data/ExampleRDoc.rdoc +208 -0
  6. data/Gemfile +12 -0
  7. data/History.rdoc +1666 -0
  8. data/LEGAL.rdoc +50 -0
  9. data/LICENSE.rdoc +57 -0
  10. data/README.rdoc +129 -0
  11. data/RI.rdoc +57 -0
  12. data/Rakefile +84 -81
  13. data/TODO.rdoc +59 -0
  14. data/bin/console +7 -0
  15. data/bin/setup +6 -0
  16. data/{bin → exe}/rdoc +11 -2
  17. data/exe/ri +12 -0
  18. data/lib/rdoc/alias.rb +1 -2
  19. data/lib/rdoc/anon_class.rb +3 -2
  20. data/lib/rdoc/any_method.rb +234 -40
  21. data/lib/rdoc/attr.rb +79 -11
  22. data/lib/rdoc/class_module.rb +443 -71
  23. data/lib/rdoc/code_object.rb +216 -20
  24. data/lib/rdoc/code_objects.rb +4 -21
  25. data/lib/rdoc/comment.rb +250 -0
  26. data/lib/rdoc/constant.rb +110 -9
  27. data/lib/rdoc/context/section.rb +232 -0
  28. data/lib/rdoc/context.rb +392 -172
  29. data/lib/rdoc/cross_reference.rb +202 -0
  30. data/lib/rdoc/encoding.rb +83 -28
  31. data/lib/rdoc/erb_partial.rb +19 -0
  32. data/lib/rdoc/erbio.rb +8 -3
  33. data/lib/rdoc/extend.rb +10 -0
  34. data/lib/rdoc/generator/darkfish.rb +507 -84
  35. data/lib/rdoc/generator/json_index.rb +300 -0
  36. data/lib/rdoc/generator/markup.rb +27 -74
  37. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  38. data/lib/rdoc/generator/pot/po.rb +84 -0
  39. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  40. data/lib/rdoc/generator/pot.rb +98 -0
  41. data/lib/rdoc/generator/ri.rb +8 -62
  42. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  43. data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
  44. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
  57. data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
  58. data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  59. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
  60. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  61. data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  64. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  65. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  66. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  67. data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  68. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  69. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  70. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  71. data/lib/rdoc/generator/template/darkfish/index.rhtml +18 -60
  72. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -83
  73. data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  74. data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  75. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
  76. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
  77. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
  78. data/lib/rdoc/generator/template/json_index/.document +1 -0
  79. data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  80. data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  81. data/lib/rdoc/generator.rb +24 -13
  82. data/lib/rdoc/ghost_method.rb +1 -2
  83. data/lib/rdoc/i18n/locale.rb +102 -0
  84. data/lib/rdoc/i18n/text.rb +126 -0
  85. data/lib/rdoc/i18n.rb +10 -0
  86. data/lib/rdoc/include.rb +5 -95
  87. data/lib/rdoc/known_classes.rb +5 -2
  88. data/lib/rdoc/markdown/entities.rb +2132 -0
  89. data/lib/rdoc/markdown/literals.kpeg +23 -0
  90. data/lib/rdoc/markdown/literals.rb +416 -0
  91. data/lib/rdoc/markdown.kpeg +1237 -0
  92. data/lib/rdoc/markdown.rb +16684 -0
  93. data/lib/rdoc/markup/attr_changer.rb +23 -0
  94. data/lib/rdoc/markup/attr_span.rb +36 -0
  95. data/lib/rdoc/markup/attribute_manager.rb +135 -62
  96. data/lib/rdoc/markup/attributes.rb +71 -0
  97. data/lib/rdoc/markup/blank_line.rb +1 -0
  98. data/lib/rdoc/markup/block_quote.rb +15 -0
  99. data/lib/rdoc/markup/document.rb +96 -9
  100. data/lib/rdoc/markup/formatter.rb +138 -25
  101. data/lib/rdoc/markup/hard_break.rb +32 -0
  102. data/lib/rdoc/markup/heading.rb +61 -2
  103. data/lib/rdoc/markup/include.rb +43 -0
  104. data/lib/rdoc/markup/indented_paragraph.rb +48 -0
  105. data/lib/rdoc/markup/list.rb +25 -4
  106. data/lib/rdoc/markup/list_item.rb +18 -4
  107. data/lib/rdoc/markup/paragraph.rb +15 -0
  108. data/lib/rdoc/markup/parser.rb +180 -88
  109. data/lib/rdoc/markup/pre_process.rb +183 -38
  110. data/lib/rdoc/markup/raw.rb +6 -5
  111. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  112. data/lib/rdoc/markup/rule.rb +1 -0
  113. data/lib/rdoc/markup/table.rb +47 -0
  114. data/lib/rdoc/markup/to_ansi.rb +17 -7
  115. data/lib/rdoc/markup/to_bs.rb +5 -8
  116. data/lib/rdoc/markup/to_html.rb +238 -137
  117. data/lib/rdoc/markup/to_html_crossref.rb +125 -152
  118. data/lib/rdoc/markup/to_html_snippet.rb +285 -0
  119. data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
  120. data/lib/rdoc/markup/to_label.rb +75 -0
  121. data/lib/rdoc/markup/to_markdown.rb +192 -0
  122. data/lib/rdoc/markup/to_rdoc.rb +85 -15
  123. data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
  124. data/lib/rdoc/markup/to_test.rb +2 -4
  125. data/lib/rdoc/markup/to_tt_only.rb +121 -0
  126. data/lib/rdoc/markup/verbatim.rb +39 -0
  127. data/lib/rdoc/markup.rb +388 -110
  128. data/lib/rdoc/meta_method.rb +1 -2
  129. data/lib/rdoc/method_attr.rb +87 -21
  130. data/lib/rdoc/mixin.rb +121 -0
  131. data/lib/rdoc/normal_class.rb +39 -10
  132. data/lib/rdoc/normal_module.rb +22 -7
  133. data/lib/rdoc/options.rb +613 -73
  134. data/lib/rdoc/parser/c.rb +621 -287
  135. data/lib/rdoc/parser/changelog.rb +335 -0
  136. data/lib/rdoc/parser/markdown.rb +24 -0
  137. data/lib/rdoc/parser/rd.rb +23 -0
  138. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  139. data/lib/rdoc/parser/ruby.rb +1368 -762
  140. data/lib/rdoc/parser/ruby_tools.rb +42 -35
  141. data/lib/rdoc/parser/simple.rb +23 -11
  142. data/lib/rdoc/parser/text.rb +12 -0
  143. data/lib/rdoc/parser.rb +162 -89
  144. data/lib/rdoc/rd/block_parser.rb +1056 -0
  145. data/lib/rdoc/rd/block_parser.ry +639 -0
  146. data/lib/rdoc/rd/inline.rb +72 -0
  147. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  148. data/lib/rdoc/rd/inline_parser.ry +593 -0
  149. data/lib/rdoc/rd.rb +100 -0
  150. data/lib/rdoc/rdoc.rb +208 -115
  151. data/lib/rdoc/require.rb +1 -2
  152. data/lib/rdoc/ri/driver.rb +734 -239
  153. data/lib/rdoc/ri/formatter.rb +1 -0
  154. data/lib/rdoc/ri/paths.rb +91 -48
  155. data/lib/rdoc/ri/store.rb +3 -261
  156. data/lib/rdoc/ri/task.rb +71 -0
  157. data/lib/rdoc/ri.rb +5 -2
  158. data/lib/rdoc/rubygems_hook.rb +246 -0
  159. data/lib/rdoc/servlet.rb +451 -0
  160. data/lib/rdoc/single_class.rb +14 -2
  161. data/lib/rdoc/stats/normal.rb +19 -12
  162. data/lib/rdoc/stats/quiet.rb +1 -0
  163. data/lib/rdoc/stats/verbose.rb +1 -0
  164. data/lib/rdoc/stats.rb +262 -104
  165. data/lib/rdoc/store.rb +979 -0
  166. data/lib/rdoc/task.rb +84 -44
  167. data/lib/rdoc/text.rb +117 -72
  168. data/lib/rdoc/token_stream.rb +73 -4
  169. data/lib/rdoc/tom_doc.rb +263 -0
  170. data/lib/rdoc/top_level.rb +111 -261
  171. data/lib/rdoc/version.rb +8 -0
  172. data/lib/rdoc.rb +127 -64
  173. data/man/ri.1 +247 -0
  174. data/rdoc.gemspec +249 -0
  175. metadata +171 -291
  176. data/.autotest +0 -16
  177. data/.document +0 -5
  178. data/History.txt +0 -594
  179. data/LICENSE.txt +0 -57
  180. data/Manifest.txt +0 -158
  181. data/README.txt +0 -45
  182. data/RI.txt +0 -58
  183. data/bin/ri +0 -5
  184. data/lib/rdoc/gauntlet.rb +0 -52
  185. data/lib/rdoc/generator/template/darkfish/classpage.rhtml +0 -296
  186. data/lib/rdoc/generator/template/darkfish/filepage.rhtml +0 -124
  187. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -32
  188. data/lib/rdoc/generator/template/darkfish/js/quicksearch.js +0 -114
  189. data/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js +0 -10
  190. data/lib/rdoc/generator/template/darkfish/rdoc.css +0 -706
  191. data/lib/rdoc/markup/formatter_test_case.rb +0 -689
  192. data/lib/rdoc/markup/inline.rb +0 -137
  193. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -116
  194. data/lib/rdoc/ruby_lex.rb +0 -1291
  195. data/lib/rdoc/ruby_token.rb +0 -416
  196. data/test/README +0 -1
  197. data/test/binary.dat +0 -0
  198. data/test/hidden.zip.txt +0 -1
  199. data/test/test.ja.rdoc +0 -10
  200. data/test/test.ja.txt +0 -8
  201. data/test/test.txt +0 -1
  202. data/test/test_attribute_manager.rb +0 -120
  203. data/test/test_rdoc_alias.rb +0 -13
  204. data/test/test_rdoc_any_method.rb +0 -126
  205. data/test/test_rdoc_attr.rb +0 -61
  206. data/test/test_rdoc_class_module.rb +0 -233
  207. data/test/test_rdoc_code_object.rb +0 -165
  208. data/test/test_rdoc_constant.rb +0 -15
  209. data/test/test_rdoc_context.rb +0 -370
  210. data/test/test_rdoc_encoding.rb +0 -166
  211. data/test/test_rdoc_generator_darkfish.rb +0 -119
  212. data/test/test_rdoc_generator_ri.rb +0 -76
  213. data/test/test_rdoc_include.rb +0 -96
  214. data/test/test_rdoc_markup.rb +0 -37
  215. data/test/test_rdoc_markup_attribute_manager.rb +0 -240
  216. data/test/test_rdoc_markup_document.rb +0 -51
  217. data/test/test_rdoc_markup_paragraph.rb +0 -9
  218. data/test/test_rdoc_markup_parser.rb +0 -1395
  219. data/test/test_rdoc_markup_pre_process.rb +0 -185
  220. data/test/test_rdoc_markup_raw.rb +0 -27
  221. data/test/test_rdoc_markup_to_ansi.rb +0 -328
  222. data/test/test_rdoc_markup_to_bs.rb +0 -341
  223. data/test/test_rdoc_markup_to_html.rb +0 -335
  224. data/test/test_rdoc_markup_to_html_crossref.rb +0 -169
  225. data/test/test_rdoc_markup_to_rdoc.rb +0 -327
  226. data/test/test_rdoc_method_attr.rb +0 -122
  227. data/test/test_rdoc_normal_class.rb +0 -17
  228. data/test/test_rdoc_normal_module.rb +0 -31
  229. data/test/test_rdoc_options.rb +0 -342
  230. data/test/test_rdoc_parser.rb +0 -83
  231. data/test/test_rdoc_parser_c.rb +0 -912
  232. data/test/test_rdoc_parser_ruby.rb +0 -1754
  233. data/test/test_rdoc_parser_simple.rb +0 -99
  234. data/test/test_rdoc_rdoc.rb +0 -164
  235. data/test/test_rdoc_require.rb +0 -25
  236. data/test/test_rdoc_ri_driver.rb +0 -846
  237. data/test/test_rdoc_ri_paths.rb +0 -43
  238. data/test/test_rdoc_ri_store.rb +0 -352
  239. data/test/test_rdoc_ruby_lex.rb +0 -23
  240. data/test/test_rdoc_stats.rb +0 -38
  241. data/test/test_rdoc_task.rb +0 -92
  242. data/test/test_rdoc_text.rb +0 -251
  243. data/test/test_rdoc_top_level.rb +0 -120
  244. data/test/xref_data.rb +0 -62
  245. data/test/xref_test_case.rb +0 -61
  246. data.tar.gz.sig +0 -3
  247. metadata.gz.sig +0 -0
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  ##
2
3
  # For RubyGems backwards compatibility
3
4
 
data/lib/rdoc/ri/paths.rb CHANGED
@@ -1,7 +1,9 @@
1
- require 'rdoc/ri'
1
+ # frozen_string_literal: true
2
+ require_relative '../rdoc'
2
3
 
3
4
  ##
4
- # The directories where ri data lives.
5
+ # The directories where ri data lives. Paths can be enumerated via ::each, or
6
+ # queried individually via ::system_dir, ::site_dir, ::home_dir and ::gem_dir.
5
7
 
6
8
  module RDoc::RI::Paths
7
9
 
@@ -10,30 +12,11 @@ module RDoc::RI::Paths
10
12
 
11
13
  version = RbConfig::CONFIG['ruby_version']
12
14
 
13
- base = if RbConfig::CONFIG.key? 'ridir' then
14
- File.join RbConfig::CONFIG['ridir'], version
15
- else
16
- File.join RbConfig::CONFIG['datadir'], 'ri', version
17
- end
15
+ BASE = File.join RbConfig::CONFIG['ridir'], version
18
16
 
19
- SYSDIR = File.join base, "system"
20
- SITEDIR = File.join base, "site"
21
-
22
- homedir = begin
23
- File.expand_path('~')
24
- rescue ArgumentError
25
- end
26
-
27
- homedir ||= ENV['HOME'] ||
28
- ENV['USERPROFILE'] || ENV['HOMEPATH'] # for 1.8 compatibility
29
-
30
- HOMEDIR = if homedir then
31
- File.join homedir, ".rdoc"
32
- end
17
+ HOMEDIR = RDoc.home
33
18
  #:startdoc:
34
19
 
35
- @gemdirs = nil
36
-
37
20
  ##
38
21
  # Iterates over each selected path yielding the directory and type.
39
22
  #
@@ -47,16 +30,19 @@ module RDoc::RI::Paths
47
30
  # :extra:: ri data directory from the command line. Yielded for each
48
31
  # entry in +extra_dirs+
49
32
 
50
- def self.each system, site, home, gems, *extra_dirs # :yields: directory, type
33
+ def self.each system = true, site = true, home = true, gems = :latest, *extra_dirs # :yields: directory, type
34
+ return enum_for __method__, system, site, home, gems, *extra_dirs unless
35
+ block_given?
36
+
51
37
  extra_dirs.each do |dir|
52
38
  yield dir, :extra
53
39
  end
54
40
 
55
- yield SYSDIR, :system if system
56
- yield SITEDIR, :site if site
57
- yield HOMEDIR, :home if home and HOMEDIR
41
+ yield system_dir, :system if system
42
+ yield site_dir, :site if site
43
+ yield home_dir, :home if home and HOMEDIR
58
44
 
59
- gemdirs.each do |dir|
45
+ gemdirs(gems).each do |dir|
60
46
  yield dir, :gem
61
47
  end if gems
62
48
 
@@ -64,36 +50,70 @@ module RDoc::RI::Paths
64
50
  end
65
51
 
66
52
  ##
67
- # The latest installed gems' ri directories
53
+ # The ri directory for the gem with +gem_name+.
68
54
 
69
- def self.gemdirs
70
- return @gemdirs if @gemdirs
55
+ def self.gem_dir name, version
56
+ req = Gem::Requirement.new "= #{version}"
71
57
 
72
- require 'rubygems' unless defined?(Gem)
58
+ spec = Gem::Specification.find_by_name name, req
73
59
 
74
- # HACK dup'd from Gem.latest_partials and friends
75
- all_paths = []
60
+ File.join spec.doc_dir, 'ri'
61
+ end
76
62
 
77
- all_paths = Gem.path.map do |dir|
78
- Dir[File.join(dir, 'doc', '*', 'ri')]
79
- end.flatten
63
+ ##
64
+ # The latest installed gems' ri directories. +filter+ can be :all or
65
+ # :latest.
66
+ #
67
+ # A +filter+ :all includes all versions of gems and includes gems without
68
+ # ri documentation.
80
69
 
70
+ def self.gemdirs filter = :latest
81
71
  ri_paths = {}
82
72
 
83
- all_paths.each do |dir|
84
- base = File.basename File.dirname(dir)
85
- if base =~ /(.*)-((\d+\.)*\d+)/ then
86
- name, version = $1, $2
87
- ver = Gem::Version.new version
88
- if ri_paths[name].nil? or ver > ri_paths[name][0] then
89
- ri_paths[name] = [ver, dir]
73
+ all = Gem::Specification.map do |spec|
74
+ [File.join(spec.doc_dir, 'ri'), spec.name, spec.version]
75
+ end
76
+
77
+ if filter == :all then
78
+ gemdirs = []
79
+
80
+ all.group_by do |_, name, _|
81
+ name
82
+ end.sort_by do |group, _|
83
+ group
84
+ end.map do |group, items|
85
+ items.sort_by do |_, _, version|
86
+ version
87
+ end.reverse_each do |dir,|
88
+ gemdirs << dir
90
89
  end
91
90
  end
91
+
92
+ return gemdirs
93
+ end
94
+
95
+ all.each do |dir, name, ver|
96
+ next unless File.exist? dir
97
+
98
+ if ri_paths[name].nil? or ver > ri_paths[name].first then
99
+ ri_paths[name] = [ver, name, dir]
100
+ end
92
101
  end
93
102
 
94
- @gemdirs = ri_paths.map { |k,v| v.last }.sort
103
+ ri_paths.sort_by { |_, (_, name, _)| name }.map { |k, v| v.last }
95
104
  rescue LoadError
96
- @gemdirs = []
105
+ []
106
+ end
107
+
108
+ ##
109
+ # The location of the rdoc data in the user's home directory.
110
+ #
111
+ # Like ::system, ri data in the user's home directory is rare and predates
112
+ # libraries distributed via RubyGems. ri data is rarely generated into this
113
+ # directory.
114
+
115
+ def self.home_dir
116
+ HOMEDIR
97
117
  end
98
118
 
99
119
  ##
@@ -102,7 +122,7 @@ module RDoc::RI::Paths
102
122
  #
103
123
  # See also ::each
104
124
 
105
- def self.path(system, site, home, gems, *extra_dirs)
125
+ def self.path(system = true, site = true, home = true, gems = :latest, *extra_dirs)
106
126
  path = raw_path system, site, home, gems, *extra_dirs
107
127
 
108
128
  path.select { |directory| File.directory? directory }
@@ -124,5 +144,28 @@ module RDoc::RI::Paths
124
144
  path.compact
125
145
  end
126
146
 
127
- end
147
+ ##
148
+ # The location of ri data installed into the site dir.
149
+ #
150
+ # Historically this was available for documentation installed by Ruby
151
+ # libraries predating RubyGems. It is unlikely to contain any content for
152
+ # modern Ruby installations.
128
153
 
154
+ def self.site_dir
155
+ File.join BASE, 'site'
156
+ end
157
+
158
+ ##
159
+ # The location of the built-in ri data.
160
+ #
161
+ # This data is built automatically when `make` is run when Ruby is
162
+ # installed. If you did not install Ruby by hand you may need to install
163
+ # the documentation yourself. Please consult the documentation for your
164
+ # package manager or Ruby installer for details. You can also use the
165
+ # rdoc-data gem to install system ri data for common versions of Ruby.
166
+
167
+ def self.system_dir
168
+ File.join BASE, 'system'
169
+ end
170
+
171
+ end
data/lib/rdoc/ri/store.rb CHANGED
@@ -1,265 +1,7 @@
1
- require 'rdoc/code_objects'
2
- require 'fileutils'
1
+ # frozen_string_literal: true
2
+ module RDoc::RI
3
3
 
4
- ##
5
- # A set of ri data.
6
- #
7
- # The store manages reading and writing ri data for a project (gem, path,
8
- # etc.) and maintains a cache of methods, classes and ancestors in the
9
- # store.
10
-
11
- class RDoc::RI::Store
12
-
13
- ##
14
- # If true this Store will not write any files
15
-
16
- attr_accessor :dry_run
17
-
18
- ##
19
- # Path this store reads or writes
20
-
21
- attr_accessor :path
22
-
23
- ##
24
- # Type of ri datastore this was loaded from. See RDoc::RI::Driver,
25
- # RDoc::RI::Paths.
26
-
27
- attr_accessor :type
28
-
29
- ##
30
- # The contents of the Store
31
-
32
- attr_reader :cache
33
-
34
- ##
35
- # Creates a new Store of +type+ that will load or save to +path+
36
-
37
- def initialize path, type = nil
38
- @dry_run = false
39
- @type = type
40
- @path = path
41
-
42
- @cache = {
43
- :class_methods => {},
44
- :instance_methods => {},
45
- :attributes => {},
46
- :modules => [],
47
- :ancestors => {},
48
- }
49
- end
50
-
51
- ##
52
- # Ancestors cache accessor. Maps a klass name to an Array of its ancestors
53
- # in this store. If Foo in this store inherits from Object, Kernel won't be
54
- # listed (it will be included from ruby's ri store).
55
-
56
- def ancestors
57
- @cache[:ancestors]
58
- end
59
-
60
- ##
61
- # Attributes cache accessor. Maps a class to an Array of its attributes.
62
-
63
- def attributes
64
- @cache[:attributes]
65
- end
66
-
67
- ##
68
- # Path to the cache file
69
-
70
- def cache_path
71
- File.join @path, 'cache.ri'
72
- end
73
-
74
- ##
75
- # Path to the ri data for +klass_name+
76
-
77
- def class_file klass_name
78
- name = klass_name.split('::').last
79
- File.join class_path(klass_name), "cdesc-#{name}.ri"
80
- end
81
-
82
- ##
83
- # Class methods cache accessor. Maps a class to an Array of its class
84
- # methods (not full name).
85
-
86
- def class_methods
87
- @cache[:class_methods]
88
- end
89
-
90
- ##
91
- # Path where data for +klass_name+ will be stored (methods or class data)
92
-
93
- def class_path klass_name
94
- File.join @path, *klass_name.split('::')
95
- end
96
-
97
- ##
98
- # Friendly rendition of #path
99
-
100
- def friendly_path
101
- case type
102
- when :gem then
103
- sep = Regexp.union(*['/', File::ALT_SEPARATOR].compact)
104
- @path =~ /#{sep}doc#{sep}(.*?)#{sep}ri$/
105
- "gem #{$1}"
106
- when :home then '~/.ri'
107
- when :site then 'ruby site'
108
- when :system then 'ruby core'
109
- else @path
110
- end
111
- end
112
-
113
- def inspect # :nodoc:
114
- "#<%s:0x%x %s %p>" % [self.class, object_id, @path, modules.sort]
115
- end
116
-
117
- ##
118
- # Instance methods cache accessor. Maps a class to an Array of its
119
- # instance methods (not full name).
120
-
121
- def instance_methods
122
- @cache[:instance_methods]
123
- end
124
-
125
- ##
126
- # Loads cache file for this store
127
-
128
- def load_cache
129
- open cache_path, 'rb' do |io|
130
- @cache = Marshal.load io.read
131
- end
132
- rescue Errno::ENOENT
133
- end
134
-
135
- ##
136
- # Loads ri data for +klass_name+
137
-
138
- def load_class klass_name
139
- open class_file(klass_name), 'rb' do |io|
140
- Marshal.load io.read
141
- end
142
- end
143
-
144
- ##
145
- # Loads ri data for +method_name+ in +klass_name+
146
-
147
- def load_method klass_name, method_name
148
- open method_file(klass_name, method_name), 'rb' do |io|
149
- Marshal.load io.read
150
- end
151
- end
152
-
153
- ##
154
- # Path to the ri data for +method_name+ in +klass_name+
155
-
156
- def method_file klass_name, method_name
157
- method_name = method_name.split('::').last
158
- method_name =~ /#(.*)/
159
- method_type = $1 ? 'i' : 'c'
160
- method_name = $1 if $1
161
-
162
- method_name = if ''.respond_to? :ord then
163
- method_name.gsub(/\W/) { "%%%02x" % $&[0].ord }
164
- else
165
- method_name.gsub(/\W/) { "%%%02x" % $&[0] }
166
- end
167
-
168
- File.join class_path(klass_name), "#{method_name}-#{method_type}.ri"
169
- end
170
-
171
- ##
172
- # Modules cache accessor. An Array of all the modules (and classes) in the
173
- # store.
174
-
175
- def modules
176
- @cache[:modules]
177
- end
178
-
179
- ##
180
- # Writes the cache file for this store
181
-
182
- def save_cache
183
- # HACK mongrel-1.1.5 documents its files twice
184
- @cache[:ancestors]. each do |_, m| m.uniq!; m.sort! end
185
- @cache[:attributes]. each do |_, m| m.uniq!; m.sort! end
186
- @cache[:class_methods]. each do |_, m| m.uniq!; m.sort! end
187
- @cache[:instance_methods].each do |_, m| m.uniq!; m.sort! end
188
- @cache[:modules].uniq!; @cache[:modules].sort!
189
-
190
- return if @dry_run
191
-
192
- open cache_path, 'wb' do |io|
193
- Marshal.dump @cache, io
194
- end
195
- end
196
-
197
- ##
198
- # Writes the ri data for +klass+
199
-
200
- def save_class klass
201
- FileUtils.mkdir_p class_path(klass.full_name) unless @dry_run
202
-
203
- @cache[:modules] << klass.full_name
204
-
205
- path = class_file klass.full_name
206
-
207
- begin
208
- disk_klass = nil
209
-
210
- open path, 'rb' do |io|
211
- disk_klass = Marshal.load io.read
212
- end
213
-
214
- klass.merge disk_klass
215
- rescue Errno::ENOENT
216
- end
217
-
218
- # BasicObject has no ancestors
219
- ancestors = klass.ancestors.compact.map do |ancestor|
220
- # HACK for classes we don't know about (class X < RuntimeError)
221
- String === ancestor ? ancestor : ancestor.full_name
222
- end
223
-
224
- @cache[:ancestors][klass.full_name] ||= []
225
- @cache[:ancestors][klass.full_name].push(*ancestors)
226
-
227
- attributes = klass.attributes.map do |attribute|
228
- "#{attribute.definition} #{attribute.name}"
229
- end
230
-
231
- unless attributes.empty? then
232
- @cache[:attributes][klass.full_name] ||= []
233
- @cache[:attributes][klass.full_name].push(*attributes)
234
- end
235
-
236
- return if @dry_run
237
-
238
- open path, 'wb' do |io|
239
- Marshal.dump klass, io
240
- end
241
- end
242
-
243
- ##
244
- # Writes the ri data for +method+ on +klass+
245
-
246
- def save_method klass, method
247
- FileUtils.mkdir_p class_path(klass.full_name) unless @dry_run
248
-
249
- cache = if method.singleton then
250
- @cache[:class_methods]
251
- else
252
- @cache[:instance_methods]
253
- end
254
- cache[klass.full_name] ||= []
255
- cache[klass.full_name] << method.name
256
-
257
- return if @dry_run
258
-
259
- open method_file(klass.full_name, method.full_name), 'wb' do |io|
260
- Marshal.dump method, io
261
- end
262
- end
4
+ Store = RDoc::Store # :nodoc:
263
5
 
264
6
  end
265
7
 
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ begin
3
+ gem 'rdoc'
4
+ rescue Gem::LoadError
5
+ end unless defined?(RDoc)
6
+
7
+ require_relative '../task'
8
+
9
+ ##
10
+ # RDoc::RI::Task creates ri data in <code>./.rdoc</code> for your project.
11
+ #
12
+ # It contains the following tasks:
13
+ #
14
+ # [ri]
15
+ # Build ri data
16
+ #
17
+ # [clobber_ri]
18
+ # Delete ri data files. This target is automatically added to the main
19
+ # clobber target.
20
+ #
21
+ # [reri]
22
+ # Rebuild the ri data from scratch even if they are not out of date.
23
+ #
24
+ # Simple example:
25
+ #
26
+ # require 'rdoc/ri/task'
27
+ #
28
+ # RDoc::RI::Task.new do |ri|
29
+ # ri.main = 'README.rdoc'
30
+ # ri.rdoc_files.include 'README.rdoc', 'lib/**/*.rb'
31
+ # end
32
+ #
33
+ # For further configuration details see RDoc::Task.
34
+
35
+ class RDoc::RI::Task < RDoc::Task
36
+
37
+ DEFAULT_NAMES = { # :nodoc:
38
+ :clobber_rdoc => :clobber_ri,
39
+ :rdoc => :ri,
40
+ :rerdoc => :reri,
41
+ }
42
+
43
+ ##
44
+ # Create an ri task with the given name. See RDoc::Task for documentation on
45
+ # setting names.
46
+
47
+ def initialize name = DEFAULT_NAMES # :yield: self
48
+ super
49
+ end
50
+
51
+ def clobber_task_description # :nodoc:
52
+ "Remove RI data files"
53
+ end
54
+
55
+ ##
56
+ # Sets default task values
57
+
58
+ def defaults
59
+ super
60
+
61
+ @rdoc_dir = '.rdoc'
62
+ end
63
+
64
+ def rdoc_task_description # :nodoc:
65
+ 'Build RI data files'
66
+ end
67
+
68
+ def rerdoc_task_description # :nodoc:
69
+ 'Rebuild RI data files'
70
+ end
71
+ end
data/lib/rdoc/ri.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rdoc'
2
3
 
3
4
  ##
@@ -12,7 +13,9 @@ module RDoc::RI
12
13
 
13
14
  class Error < RDoc::Error; end
14
15
 
15
- end
16
+ autoload :Driver, 'rdoc/ri/driver'
17
+ autoload :Paths, 'rdoc/ri/paths'
18
+ autoload :Store, 'rdoc/ri/store'
16
19
 
17
- require 'rdoc/ri/store'
20
+ end
18
21