yard 0.9.18 → 0.9.19

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

Potentially problematic release.


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

Files changed (567) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +26 -26
  3. data/CHANGELOG.md +742 -728
  4. data/LEGAL +66 -66
  5. data/LICENSE +22 -22
  6. data/README.md +328 -328
  7. data/Rakefile +42 -53
  8. data/benchmarks/builtins_vs_eval.rb +24 -24
  9. data/benchmarks/concat_vs_join.rb +13 -13
  10. data/benchmarks/erb_vs_erubis.rb +54 -54
  11. data/benchmarks/format_args.rb +47 -47
  12. data/benchmarks/generation.rb +38 -38
  13. data/benchmarks/marshal_vs_dbm.rb +64 -64
  14. data/benchmarks/parsing.rb +46 -46
  15. data/benchmarks/pathname_vs_string.rb +50 -50
  16. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  17. data/benchmarks/registry_store_types.rb +49 -49
  18. data/benchmarks/ri_vs_yri.rb +19 -19
  19. data/benchmarks/ripper_parser.rb +13 -13
  20. data/benchmarks/splat_vs_flatten.rb +13 -13
  21. data/benchmarks/template_erb.rb +23 -23
  22. data/benchmarks/template_format.rb +7 -7
  23. data/benchmarks/template_profile.rb +18 -18
  24. data/benchmarks/yri_cache.rb +20 -20
  25. data/bin/yard +13 -13
  26. data/bin/yardoc +13 -13
  27. data/bin/yri +13 -13
  28. data/docs/CodeObjects.md +115 -115
  29. data/docs/GettingStarted.md +679 -679
  30. data/docs/Handlers.md +152 -152
  31. data/docs/Overview.md +61 -61
  32. data/docs/Parser.md +191 -191
  33. data/docs/Tags.md +283 -283
  34. data/docs/TagsArch.md +123 -123
  35. data/docs/Templates.md +496 -496
  36. data/docs/WhatsNew.md +1245 -1245
  37. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  38. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  39. data/docs/templates/default/layout/html/setup.rb +9 -9
  40. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  41. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  42. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  43. data/docs/templates/plugin.rb +70 -70
  44. data/lib/rubygems_plugin.rb +9 -9
  45. data/lib/yard.rb +69 -69
  46. data/lib/yard/autoload.rb +308 -303
  47. data/lib/yard/cli/command.rb +85 -85
  48. data/lib/yard/cli/command_parser.rb +93 -93
  49. data/lib/yard/cli/config.rb +198 -198
  50. data/lib/yard/cli/diff.rb +270 -270
  51. data/lib/yard/cli/display.rb +69 -69
  52. data/lib/yard/cli/gems.rb +84 -84
  53. data/lib/yard/cli/graph.rb +125 -125
  54. data/lib/yard/cli/help.rb +20 -20
  55. data/lib/yard/cli/i18n.rb +70 -70
  56. data/lib/yard/cli/list.rb +23 -23
  57. data/lib/yard/cli/markup_types.rb +32 -32
  58. data/lib/yard/cli/server.rb +257 -257
  59. data/lib/yard/cli/stats.rb +231 -231
  60. data/lib/yard/cli/yardoc.rb +789 -788
  61. data/lib/yard/cli/yardopts_command.rb +110 -110
  62. data/lib/yard/cli/yri.rb +215 -215
  63. data/lib/yard/code_objects/base.rb +615 -615
  64. data/lib/yard/code_objects/class_object.rb +146 -146
  65. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  66. data/lib/yard/code_objects/constant_object.rb +16 -16
  67. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  68. data/lib/yard/code_objects/extra_file_object.rb +134 -131
  69. data/lib/yard/code_objects/macro_object.rb +172 -172
  70. data/lib/yard/code_objects/method_object.rb +196 -196
  71. data/lib/yard/code_objects/module_object.rb +21 -21
  72. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  73. data/lib/yard/code_objects/namespace_object.rb +200 -200
  74. data/lib/yard/code_objects/proxy.rb +240 -240
  75. data/lib/yard/code_objects/root_object.rb +19 -19
  76. data/lib/yard/config.rb +270 -270
  77. data/lib/yard/core_ext/array.rb +16 -16
  78. data/lib/yard/core_ext/file.rb +69 -69
  79. data/lib/yard/core_ext/hash.rb +16 -16
  80. data/lib/yard/core_ext/insertion.rb +63 -63
  81. data/lib/yard/core_ext/module.rb +11 -20
  82. data/lib/yard/core_ext/string.rb +68 -68
  83. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  84. data/lib/yard/docstring.rb +386 -386
  85. data/lib/yard/docstring_parser.rb +345 -345
  86. data/lib/yard/gem_index.rb +29 -29
  87. data/lib/yard/globals.rb +22 -22
  88. data/lib/yard/handlers/base.rb +595 -595
  89. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  90. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  91. data/lib/yard/handlers/c/base.rb +129 -129
  92. data/lib/yard/handlers/c/class_handler.rb +27 -27
  93. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  94. data/lib/yard/handlers/c/handler_methods.rb +212 -211
  95. data/lib/yard/handlers/c/init_handler.rb +20 -20
  96. data/lib/yard/handlers/c/method_handler.rb +45 -45
  97. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  98. data/lib/yard/handlers/c/module_handler.rb +17 -17
  99. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  100. data/lib/yard/handlers/c/path_handler.rb +11 -11
  101. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  102. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  103. data/lib/yard/handlers/common/method_handler.rb +19 -0
  104. data/lib/yard/handlers/processor.rb +200 -200
  105. data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
  106. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  107. data/lib/yard/handlers/ruby/base.rb +165 -165
  108. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  109. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  110. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  111. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  112. data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
  113. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  114. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  115. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -96
  116. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  117. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  118. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  119. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  120. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  121. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  122. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  123. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  124. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  125. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  126. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  127. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  128. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  129. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  130. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  131. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  132. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  133. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  134. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  135. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  136. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  137. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  138. data/lib/yard/handlers/ruby/method_handler.rb +114 -118
  139. data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
  140. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  141. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  142. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  144. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  145. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  146. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  147. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  148. data/lib/yard/i18n/locale.rb +67 -67
  149. data/lib/yard/i18n/message.rb +57 -57
  150. data/lib/yard/i18n/messages.rb +56 -56
  151. data/lib/yard/i18n/po_parser.rb +61 -61
  152. data/lib/yard/i18n/pot_generator.rb +290 -290
  153. data/lib/yard/i18n/text.rb +173 -173
  154. data/lib/yard/logging.rb +205 -205
  155. data/lib/yard/options.rb +217 -217
  156. data/lib/yard/parser/base.rb +57 -57
  157. data/lib/yard/parser/c/c_parser.rb +235 -235
  158. data/lib/yard/parser/c/comment_parser.rb +134 -134
  159. data/lib/yard/parser/c/statement.rb +64 -64
  160. data/lib/yard/parser/ruby/ast_node.rb +540 -540
  161. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
  162. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  163. data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
  164. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  165. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  166. data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
  167. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  168. data/lib/yard/parser/source_parser.rb +526 -526
  169. data/lib/yard/rake/yardoc_task.rb +81 -81
  170. data/lib/yard/registry.rb +439 -439
  171. data/lib/yard/registry_resolver.rb +189 -189
  172. data/lib/yard/registry_store.rb +337 -337
  173. data/lib/yard/rubygems/backports.rb +10 -10
  174. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  175. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  176. data/lib/yard/rubygems/backports/gem.rb +10 -10
  177. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  178. data/lib/yard/rubygems/doc_manager.rb +90 -90
  179. data/lib/yard/rubygems/hook.rb +197 -197
  180. data/lib/yard/rubygems/specification.rb +50 -50
  181. data/lib/yard/serializers/base.rb +83 -83
  182. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  183. data/lib/yard/serializers/process_serializer.rb +24 -24
  184. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  185. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  186. data/lib/yard/server.rb +13 -13
  187. data/lib/yard/server/adapter.rb +100 -100
  188. data/lib/yard/server/commands/base.rb +209 -209
  189. data/lib/yard/server/commands/display_file_command.rb +29 -29
  190. data/lib/yard/server/commands/display_object_command.rb +65 -65
  191. data/lib/yard/server/commands/frames_command.rb +16 -16
  192. data/lib/yard/server/commands/library_command.rb +187 -187
  193. data/lib/yard/server/commands/library_index_command.rb +28 -28
  194. data/lib/yard/server/commands/list_command.rb +25 -25
  195. data/lib/yard/server/commands/root_request_command.rb +15 -15
  196. data/lib/yard/server/commands/search_command.rb +79 -79
  197. data/lib/yard/server/commands/static_file_command.rb +23 -23
  198. data/lib/yard/server/commands/static_file_helpers.rb +62 -62
  199. data/lib/yard/server/doc_server_helper.rb +91 -91
  200. data/lib/yard/server/doc_server_serializer.rb +39 -39
  201. data/lib/yard/server/library_version.rb +277 -277
  202. data/lib/yard/server/rack_adapter.rb +89 -89
  203. data/lib/yard/server/router.rb +187 -187
  204. data/lib/yard/server/static_caching.rb +46 -46
  205. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  206. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  207. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  208. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  209. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  210. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  211. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  212. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  213. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  214. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  215. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  216. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  217. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  218. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  219. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  220. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  221. data/lib/yard/server/webrick_adapter.rb +45 -45
  222. data/lib/yard/tags/default_factory.rb +191 -191
  223. data/lib/yard/tags/default_tag.rb +13 -13
  224. data/lib/yard/tags/directives.rb +616 -616
  225. data/lib/yard/tags/library.rb +633 -633
  226. data/lib/yard/tags/option_tag.rb +13 -13
  227. data/lib/yard/tags/overload_tag.rb +71 -71
  228. data/lib/yard/tags/ref_tag.rb +8 -8
  229. data/lib/yard/tags/ref_tag_list.rb +28 -28
  230. data/lib/yard/tags/tag.rb +71 -71
  231. data/lib/yard/tags/tag_format_error.rb +7 -7
  232. data/lib/yard/tags/types_explainer.rb +162 -162
  233. data/lib/yard/templates/engine.rb +186 -186
  234. data/lib/yard/templates/erb_cache.rb +23 -23
  235. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  236. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  237. data/lib/yard/templates/helpers/html_helper.rb +646 -646
  238. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  239. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  240. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  241. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  242. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  243. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  244. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  245. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  246. data/lib/yard/templates/section.rb +105 -105
  247. data/lib/yard/templates/template.rb +418 -418
  248. data/lib/yard/templates/template_options.rb +92 -92
  249. data/lib/yard/verifier.rb +151 -151
  250. data/lib/yard/version.rb +6 -6
  251. data/spec/cli/command_parser_spec.rb +43 -43
  252. data/spec/cli/command_spec.rb +36 -36
  253. data/spec/cli/config_spec.rb +148 -148
  254. data/spec/cli/diff_spec.rb +254 -254
  255. data/spec/cli/display_spec.rb +30 -30
  256. data/spec/cli/gems_spec.rb +81 -81
  257. data/spec/cli/graph_spec.rb +18 -18
  258. data/spec/cli/help_spec.rb +22 -22
  259. data/spec/cli/i18n_spec.rb +107 -107
  260. data/spec/cli/list_spec.rb +8 -8
  261. data/spec/cli/markup_types_spec.rb +22 -22
  262. data/spec/cli/server_spec.rb +324 -324
  263. data/spec/cli/stats_spec.rb +96 -96
  264. data/spec/cli/yard_on_yard_spec.rb +38 -38
  265. data/spec/cli/yardoc_spec.rb +896 -862
  266. data/spec/cli/yri_spec.rb +101 -101
  267. data/spec/code_objects/base_spec.rb +470 -470
  268. data/spec/code_objects/class_object_spec.rb +226 -226
  269. data/spec/code_objects/code_object_list_spec.rb +36 -36
  270. data/spec/code_objects/constants_spec.rb +116 -116
  271. data/spec/code_objects/extra_file_object_spec.rb +160 -160
  272. data/spec/code_objects/macro_object_spec.rb +150 -150
  273. data/spec/code_objects/method_object_spec.rb +184 -184
  274. data/spec/code_objects/module_object_spec.rb +142 -142
  275. data/spec/code_objects/namespace_object_spec.rb +171 -171
  276. data/spec/code_objects/proxy_spec.rb +141 -141
  277. data/spec/code_objects/spec_helper.rb +3 -3
  278. data/spec/config_spec.rb +171 -171
  279. data/spec/core_ext/array_spec.rb +13 -13
  280. data/spec/core_ext/file_spec.rb +72 -72
  281. data/spec/core_ext/hash_spec.rb +14 -14
  282. data/spec/core_ext/insertion_spec.rb +37 -37
  283. data/spec/core_ext/module_spec.rb +9 -15
  284. data/spec/core_ext/string_spec.rb +42 -42
  285. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  286. data/spec/docstring_parser_spec.rb +280 -280
  287. data/spec/docstring_spec.rb +373 -373
  288. data/spec/examples.txt +1883 -1875
  289. data/spec/handlers/alias_handler_spec.rb +82 -82
  290. data/spec/handlers/attribute_handler_spec.rb +96 -96
  291. data/spec/handlers/base_spec.rb +216 -216
  292. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  293. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  294. data/spec/handlers/c/class_handler_spec.rb +78 -78
  295. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  296. data/spec/handlers/c/init_handler_spec.rb +48 -48
  297. data/spec/handlers/c/method_handler_spec.rb +327 -325
  298. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  299. data/spec/handlers/c/module_handler_spec.rb +71 -71
  300. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  301. data/spec/handlers/c/path_handler_spec.rb +36 -36
  302. data/spec/handlers/c/spec_helper.rb +23 -23
  303. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  304. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  305. data/spec/handlers/class_handler_spec.rb +247 -247
  306. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  307. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  308. data/spec/handlers/constant_handler_spec.rb +112 -112
  309. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  310. data/spec/handlers/dsl_handler_spec.rb +219 -219
  311. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  312. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  313. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  314. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  315. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  316. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  317. data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
  318. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  319. data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
  320. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  321. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  322. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
  323. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  324. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  325. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  326. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  327. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  328. data/spec/handlers/exception_handler_spec.rb +49 -49
  329. data/spec/handlers/extend_handler_spec.rb +24 -24
  330. data/spec/handlers/legacy_base_spec.rb +128 -128
  331. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  332. data/spec/handlers/method_handler_spec.rb +190 -190
  333. data/spec/handlers/mixin_handler_spec.rb +56 -56
  334. data/spec/handlers/module_function_handler_spec.rb +106 -106
  335. data/spec/handlers/module_handler_spec.rb +35 -35
  336. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  337. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  338. data/spec/handlers/processor_spec.rb +35 -35
  339. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  340. data/spec/handlers/ruby/base_spec.rb +95 -95
  341. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  342. data/spec/handlers/spec_helper.rb +33 -33
  343. data/spec/handlers/visibility_handler_spec.rb +44 -44
  344. data/spec/handlers/yield_handler_spec.rb +52 -52
  345. data/spec/i18n/locale_spec.rb +81 -81
  346. data/spec/i18n/message_spec.rb +52 -52
  347. data/spec/i18n/messages_spec.rb +67 -67
  348. data/spec/i18n/pot_generator_spec.rb +295 -295
  349. data/spec/i18n/text_spec.rb +184 -184
  350. data/spec/logging_spec.rb +44 -44
  351. data/spec/options_spec.rb +171 -171
  352. data/spec/parser/base_spec.rb +24 -24
  353. data/spec/parser/c_parser_spec.rb +236 -236
  354. data/spec/parser/examples/array.c.txt +6267 -6267
  355. data/spec/parser/examples/example1.rb.txt +7 -7
  356. data/spec/parser/examples/extrafile.c.txt +8 -8
  357. data/spec/parser/examples/file.c.txt +28 -28
  358. data/spec/parser/examples/multifile.c.txt +22 -22
  359. data/spec/parser/examples/namespace.cpp.txt +68 -68
  360. data/spec/parser/examples/override.c.txt +424 -424
  361. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  362. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  363. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  364. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  365. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  366. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  367. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  368. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  369. data/spec/parser/source_parser_spec.rb +727 -727
  370. data/spec/parser/tag_parsing_spec.rb +17 -17
  371. data/spec/rake/yardoc_task_spec.rb +118 -118
  372. data/spec/registry_spec.rb +463 -463
  373. data/spec/registry_store_spec.rb +316 -316
  374. data/spec/rubygems/doc_manager_spec.rb +112 -112
  375. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  376. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  377. data/spec/serializers/spec_helper.rb +2 -2
  378. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  379. data/spec/server/adapter_spec.rb +39 -39
  380. data/spec/server/commands/base_spec.rb +91 -91
  381. data/spec/server/commands/library_command_spec.rb +39 -39
  382. data/spec/server/doc_server_helper_spec.rb +72 -72
  383. data/spec/server/doc_server_serializer_spec.rb +60 -60
  384. data/spec/server/rack_adapter_spec.rb +21 -21
  385. data/spec/server/router_spec.rb +123 -123
  386. data/spec/server/spec_helper.rb +22 -22
  387. data/spec/server/static_caching_spec.rb +47 -47
  388. data/spec/server/webrick_servlet_spec.rb +20 -20
  389. data/spec/server_spec.rb +19 -19
  390. data/spec/spec_helper.rb +212 -212
  391. data/spec/tags/default_factory_spec.rb +168 -168
  392. data/spec/tags/default_tag_spec.rb +11 -11
  393. data/spec/tags/directives_spec.rb +463 -463
  394. data/spec/tags/library_spec.rb +48 -48
  395. data/spec/tags/overload_tag_spec.rb +53 -53
  396. data/spec/tags/ref_tag_list_spec.rb +53 -53
  397. data/spec/tags/types_explainer_spec.rb +203 -203
  398. data/spec/templates/class_spec.rb +45 -45
  399. data/spec/templates/constant_spec.rb +41 -41
  400. data/spec/templates/engine_spec.rb +131 -131
  401. data/spec/templates/examples/class001.html +308 -308
  402. data/spec/templates/examples/class001.txt +36 -36
  403. data/spec/templates/examples/class002.html +39 -39
  404. data/spec/templates/examples/constant001.txt +24 -24
  405. data/spec/templates/examples/constant002.txt +6 -6
  406. data/spec/templates/examples/constant003.txt +10 -10
  407. data/spec/templates/examples/method001.html +137 -137
  408. data/spec/templates/examples/method001.txt +35 -35
  409. data/spec/templates/examples/method002.html +91 -91
  410. data/spec/templates/examples/method002.txt +20 -20
  411. data/spec/templates/examples/method003.html +165 -165
  412. data/spec/templates/examples/method003.txt +45 -45
  413. data/spec/templates/examples/method004.html +48 -48
  414. data/spec/templates/examples/method004.txt +10 -10
  415. data/spec/templates/examples/method005.html +105 -105
  416. data/spec/templates/examples/method005.txt +33 -33
  417. data/spec/templates/examples/method006.html +107 -107
  418. data/spec/templates/examples/method006.txt +20 -20
  419. data/spec/templates/examples/module001.dot +33 -33
  420. data/spec/templates/examples/module001.html +833 -833
  421. data/spec/templates/examples/module001.txt +33 -33
  422. data/spec/templates/examples/module002.html +341 -341
  423. data/spec/templates/examples/module003.html +202 -202
  424. data/spec/templates/examples/module004.html +394 -394
  425. data/spec/templates/examples/module005.html +81 -81
  426. data/spec/templates/examples/tag001.txt +82 -82
  427. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  428. data/spec/templates/helpers/html_helper_spec.rb +687 -668
  429. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  430. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  431. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  432. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  433. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  434. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  435. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  436. data/spec/templates/method_spec.rb +118 -118
  437. data/spec/templates/module_spec.rb +203 -203
  438. data/spec/templates/onefile_spec.rb +66 -66
  439. data/spec/templates/section_spec.rb +144 -144
  440. data/spec/templates/spec_helper.rb +76 -76
  441. data/spec/templates/tag_spec.rb +52 -52
  442. data/spec/templates/template_spec.rb +410 -410
  443. data/spec/verifier_spec.rb +106 -106
  444. data/templates/default/class/dot/setup.rb +7 -7
  445. data/templates/default/class/dot/superklass.erb +2 -2
  446. data/templates/default/class/html/constructor_details.erb +8 -8
  447. data/templates/default/class/html/setup.rb +2 -2
  448. data/templates/default/class/html/subclasses.erb +4 -4
  449. data/templates/default/class/setup.rb +36 -36
  450. data/templates/default/class/text/setup.rb +12 -12
  451. data/templates/default/class/text/subclasses.erb +5 -5
  452. data/templates/default/constant/text/header.erb +11 -11
  453. data/templates/default/constant/text/setup.rb +4 -4
  454. data/templates/default/docstring/html/abstract.erb +4 -4
  455. data/templates/default/docstring/html/deprecated.erb +1 -1
  456. data/templates/default/docstring/html/index.erb +5 -5
  457. data/templates/default/docstring/html/note.erb +6 -6
  458. data/templates/default/docstring/html/private.erb +4 -4
  459. data/templates/default/docstring/html/text.erb +1 -1
  460. data/templates/default/docstring/html/todo.erb +6 -6
  461. data/templates/default/docstring/setup.rb +52 -52
  462. data/templates/default/docstring/text/abstract.erb +2 -2
  463. data/templates/default/docstring/text/deprecated.erb +2 -2
  464. data/templates/default/docstring/text/index.erb +2 -2
  465. data/templates/default/docstring/text/note.erb +3 -3
  466. data/templates/default/docstring/text/private.erb +2 -2
  467. data/templates/default/docstring/text/text.erb +1 -1
  468. data/templates/default/docstring/text/todo.erb +3 -3
  469. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  470. data/templates/default/fulldoc/html/css/style.css +496 -496
  471. data/templates/default/fulldoc/html/frames.erb +17 -17
  472. data/templates/default/fulldoc/html/full_list.erb +37 -37
  473. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  474. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  475. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  476. data/templates/default/fulldoc/html/js/app.js +303 -292
  477. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  478. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  479. data/templates/default/fulldoc/html/setup.rb +241 -241
  480. data/templates/default/layout/dot/header.erb +5 -5
  481. data/templates/default/layout/dot/setup.rb +15 -15
  482. data/templates/default/layout/html/breadcrumb.erb +11 -11
  483. data/templates/default/layout/html/files.erb +11 -11
  484. data/templates/default/layout/html/footer.erb +5 -5
  485. data/templates/default/layout/html/headers.erb +15 -15
  486. data/templates/default/layout/html/index.erb +2 -2
  487. data/templates/default/layout/html/layout.erb +23 -23
  488. data/templates/default/layout/html/listing.erb +4 -4
  489. data/templates/default/layout/html/objects.erb +32 -32
  490. data/templates/default/layout/html/script_setup.erb +4 -4
  491. data/templates/default/layout/html/search.erb +12 -12
  492. data/templates/default/layout/html/setup.rb +89 -89
  493. data/templates/default/method/html/header.erb +16 -16
  494. data/templates/default/method/setup.rb +4 -4
  495. data/templates/default/method_details/html/header.erb +2 -2
  496. data/templates/default/method_details/html/method_signature.erb +24 -24
  497. data/templates/default/method_details/html/source.erb +9 -9
  498. data/templates/default/method_details/setup.rb +11 -11
  499. data/templates/default/method_details/text/header.erb +10 -10
  500. data/templates/default/method_details/text/method_signature.erb +12 -12
  501. data/templates/default/method_details/text/setup.rb +11 -11
  502. data/templates/default/module/dot/child.erb +1 -1
  503. data/templates/default/module/dot/dependencies.erb +2 -2
  504. data/templates/default/module/dot/header.erb +6 -6
  505. data/templates/default/module/dot/info.erb +13 -13
  506. data/templates/default/module/dot/setup.rb +15 -15
  507. data/templates/default/module/html/attribute_details.erb +10 -10
  508. data/templates/default/module/html/attribute_summary.erb +8 -8
  509. data/templates/default/module/html/box_info.erb +43 -43
  510. data/templates/default/module/html/children.erb +8 -8
  511. data/templates/default/module/html/constant_summary.erb +17 -17
  512. data/templates/default/module/html/defines.erb +2 -2
  513. data/templates/default/module/html/header.erb +5 -5
  514. data/templates/default/module/html/inherited_attributes.erb +14 -14
  515. data/templates/default/module/html/inherited_constants.erb +8 -8
  516. data/templates/default/module/html/inherited_methods.erb +18 -18
  517. data/templates/default/module/html/item_summary.erb +40 -40
  518. data/templates/default/module/html/method_details_list.erb +9 -9
  519. data/templates/default/module/html/method_summary.erb +13 -13
  520. data/templates/default/module/html/methodmissing.erb +12 -12
  521. data/templates/default/module/setup.rb +167 -167
  522. data/templates/default/module/text/children.erb +9 -9
  523. data/templates/default/module/text/class_meths_list.erb +7 -7
  524. data/templates/default/module/text/extends.erb +7 -7
  525. data/templates/default/module/text/header.erb +7 -7
  526. data/templates/default/module/text/includes.erb +7 -7
  527. data/templates/default/module/text/instance_meths_list.erb +7 -7
  528. data/templates/default/module/text/setup.rb +13 -13
  529. data/templates/default/onefile/html/files.erb +4 -4
  530. data/templates/default/onefile/html/headers.erb +6 -6
  531. data/templates/default/onefile/html/layout.erb +17 -17
  532. data/templates/default/onefile/html/readme.erb +2 -2
  533. data/templates/default/onefile/html/setup.rb +62 -62
  534. data/templates/default/root/dot/child.erb +2 -2
  535. data/templates/default/root/dot/setup.rb +6 -6
  536. data/templates/default/root/html/setup.rb +2 -2
  537. data/templates/default/tags/html/example.erb +10 -10
  538. data/templates/default/tags/html/index.erb +2 -2
  539. data/templates/default/tags/html/option.erb +24 -24
  540. data/templates/default/tags/html/overload.erb +13 -13
  541. data/templates/default/tags/html/see.erb +7 -7
  542. data/templates/default/tags/html/tag.erb +20 -20
  543. data/templates/default/tags/setup.rb +57 -57
  544. data/templates/default/tags/text/example.erb +12 -12
  545. data/templates/default/tags/text/index.erb +1 -1
  546. data/templates/default/tags/text/option.erb +20 -20
  547. data/templates/default/tags/text/overload.erb +19 -19
  548. data/templates/default/tags/text/see.erb +11 -11
  549. data/templates/default/tags/text/tag.erb +13 -13
  550. data/templates/guide/class/html/setup.rb +2 -2
  551. data/templates/guide/docstring/html/setup.rb +2 -2
  552. data/templates/guide/fulldoc/html/css/style.css +108 -108
  553. data/templates/guide/fulldoc/html/js/app.js +33 -33
  554. data/templates/guide/fulldoc/html/setup.rb +74 -74
  555. data/templates/guide/layout/html/layout.erb +81 -81
  556. data/templates/guide/layout/html/setup.rb +25 -25
  557. data/templates/guide/method/html/header.erb +17 -17
  558. data/templates/guide/method/html/setup.rb +22 -22
  559. data/templates/guide/module/html/header.erb +6 -6
  560. data/templates/guide/module/html/method_list.erb +4 -4
  561. data/templates/guide/module/html/setup.rb +27 -27
  562. data/templates/guide/onefile/html/files.erb +4 -4
  563. data/templates/guide/onefile/html/setup.rb +6 -6
  564. data/templates/guide/onefile/html/toc.erb +3 -3
  565. data/templates/guide/tags/html/setup.rb +9 -9
  566. data/yard.gemspec +43 -43
  567. metadata +4 -3
@@ -1,91 +1,91 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Server
4
- # A module that is mixed into {Templates::Template} in order to customize
5
- # certain template methods.
6
- module DocServerHelper
7
- # Modifies {Templates::Helpers::HtmlHelper#url_for} to return a URL instead
8
- # of a disk location.
9
- # @param (see Templates::Helpers::HtmlHelper#url_for)
10
- # @return (see Templates::Helpers::HtmlHelper#url_for)
11
- def url_for(obj, anchor = nil, relative = false) # rubocop:disable Lint/UnusedMethodArgument
12
- return '' if obj.nil?
13
- return url_for_index if obj == '_index.html'
14
- return abs_url(base_path(router.static_prefix), obj) if String === obj
15
- url = super(obj, anchor, false)
16
- return unless url
17
- abs_url(base_path(router.docs_prefix), url)
18
- end
19
-
20
- # Modifies {Templates::Helpers::HtmlHelper#url_for_file} to return a URL instead
21
- # of a disk location.
22
- # @param (see Templates::Helpers::HtmlHelper#url_for_file)
23
- # @return (see Templates::Helpers::HtmlHelper#url_for_file)
24
- def url_for_file(filename, anchor = nil)
25
- if filename.is_a?(CodeObjects::ExtraFileObject)
26
- filename = filename.filename
27
- end
28
- fname = filename.sub(%r{^#{@library.source_path.to_s}/}, '')
29
- fname += "##{anchor}" if anchor && !anchor.empty?
30
- abs_url(base_path(router.docs_prefix), 'file', fname)
31
- end
32
-
33
- # Modifies {Templates::Helpers::HtmlHelper#url_for_list} to return a URL
34
- # based on the list prefix instead of a HTML filename.
35
- # @param (see Templates::Helpers::HtmlHelper#url_for_list)
36
- # @return (see Templates::Helpers::HtmlHelper#url_for_list)
37
- def url_for_list(type)
38
- abs_url(base_path(router.list_prefix), type.to_s)
39
- end
40
-
41
- # Returns the frames URL for the page
42
- # @return (see Templates::Helpers::HtmlHelper#url_for_frameset)
43
- def url_for_frameset
44
- options.file ? url_for_file(options.file) : url_for(object)
45
- end
46
-
47
- # Returns the main URL, first checking a readme and then linking to the index
48
- # @return (see Templates::Helpers::HtmlHelper#url_for_main)
49
- def url_for_main
50
- options.readme ? url_for_file(options.readme) : url_for_index
51
- end
52
-
53
- # Returns the URL for the alphabetic index page
54
- # @return (see Templates::Helpers::HtmlHelper#url_for_index)
55
- def url_for_index
56
- abs_url(base_path(router.docs_prefix), 'index')
57
- end
58
-
59
- # @param path_components [Array<String>] components of a URL
60
- # @return [String] the absolute path from any mounted base URI.
61
- def abs_url(*path_components)
62
- File.join(router.request.script_name, *path_components)
63
- end
64
-
65
- # @example The base path for a library 'foo'
66
- # base_path('docs') # => 'docs/foo'
67
- # @param [String] path the path prefix for a base path URI
68
- # @return [String] the base URI for a library with an extra +path+ prefix
69
- def base_path(path)
70
- libname = router.request.version_supplied ? @library.to_s : @library.name
71
- path + (@single_library ? '' : "/#{libname}")
72
- end
73
-
74
- # @return [Router] convenience method for accessing the router
75
- def router; @adapter.router end
76
-
77
- # @return [String] a timestamp for a given file
78
- def mtime(file)
79
- file = YARD::Server::Commands::StaticFileHelpers.find_file(@adapter, file)
80
- file ? File.mtime(file).to_i : nil
81
- end
82
-
83
- # @return [String] a URL for a file with a timestamp
84
- def mtime_url(file)
85
- url = url_for(file)
86
- time = mtime(file)
87
- url + (time ? "?#{time}" : "")
88
- end
89
- end
90
- end
91
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Server
4
+ # A module that is mixed into {Templates::Template} in order to customize
5
+ # certain template methods.
6
+ module DocServerHelper
7
+ # Modifies {Templates::Helpers::HtmlHelper#url_for} to return a URL instead
8
+ # of a disk location.
9
+ # @param (see Templates::Helpers::HtmlHelper#url_for)
10
+ # @return (see Templates::Helpers::HtmlHelper#url_for)
11
+ def url_for(obj, anchor = nil, relative = false) # rubocop:disable Lint/UnusedMethodArgument
12
+ return '' if obj.nil?
13
+ return url_for_index if obj == '_index.html'
14
+ return abs_url(base_path(router.static_prefix), obj) if String === obj
15
+ url = super(obj, anchor, false)
16
+ return unless url
17
+ abs_url(base_path(router.docs_prefix), url)
18
+ end
19
+
20
+ # Modifies {Templates::Helpers::HtmlHelper#url_for_file} to return a URL instead
21
+ # of a disk location.
22
+ # @param (see Templates::Helpers::HtmlHelper#url_for_file)
23
+ # @return (see Templates::Helpers::HtmlHelper#url_for_file)
24
+ def url_for_file(filename, anchor = nil)
25
+ if filename.is_a?(CodeObjects::ExtraFileObject)
26
+ filename = filename.filename
27
+ end
28
+ fname = filename.sub(%r{^#{@library.source_path.to_s}/}, '')
29
+ fname += "##{anchor}" if anchor && !anchor.empty?
30
+ abs_url(base_path(router.docs_prefix), 'file', fname)
31
+ end
32
+
33
+ # Modifies {Templates::Helpers::HtmlHelper#url_for_list} to return a URL
34
+ # based on the list prefix instead of a HTML filename.
35
+ # @param (see Templates::Helpers::HtmlHelper#url_for_list)
36
+ # @return (see Templates::Helpers::HtmlHelper#url_for_list)
37
+ def url_for_list(type)
38
+ abs_url(base_path(router.list_prefix), type.to_s)
39
+ end
40
+
41
+ # Returns the frames URL for the page
42
+ # @return (see Templates::Helpers::HtmlHelper#url_for_frameset)
43
+ def url_for_frameset
44
+ options.file ? url_for_file(options.file) : url_for(object)
45
+ end
46
+
47
+ # Returns the main URL, first checking a readme and then linking to the index
48
+ # @return (see Templates::Helpers::HtmlHelper#url_for_main)
49
+ def url_for_main
50
+ options.readme ? url_for_file(options.readme) : url_for_index
51
+ end
52
+
53
+ # Returns the URL for the alphabetic index page
54
+ # @return (see Templates::Helpers::HtmlHelper#url_for_index)
55
+ def url_for_index
56
+ abs_url(base_path(router.docs_prefix), 'index')
57
+ end
58
+
59
+ # @param path_components [Array<String>] components of a URL
60
+ # @return [String] the absolute path from any mounted base URI.
61
+ def abs_url(*path_components)
62
+ File.join(router.request.script_name, *path_components)
63
+ end
64
+
65
+ # @example The base path for a library 'foo'
66
+ # base_path('docs') # => 'docs/foo'
67
+ # @param [String] path the path prefix for a base path URI
68
+ # @return [String] the base URI for a library with an extra +path+ prefix
69
+ def base_path(path)
70
+ libname = router.request.version_supplied ? @library.to_s : @library.name
71
+ path + (@single_library ? '' : "/#{libname}")
72
+ end
73
+
74
+ # @return [Router] convenience method for accessing the router
75
+ def router; @adapter.router end
76
+
77
+ # @return [String] a timestamp for a given file
78
+ def mtime(file)
79
+ file = YARD::Server::Commands::StaticFileHelpers.find_file(@adapter, file)
80
+ file ? File.mtime(file).to_i : nil
81
+ end
82
+
83
+ # @return [String] a URL for a file with a timestamp
84
+ def mtime_url(file)
85
+ url = url_for(file)
86
+ time = mtime(file)
87
+ url + (time ? "?#{time}" : "")
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,39 +1,39 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Server
4
- # A custom {Serializers::Base serializer} which returns resource URLs instead of
5
- # static relative paths to files on disk.
6
- class DocServerSerializer < Serializers::FileSystemSerializer
7
- def initialize(_command = nil)
8
- super(:basepath => '', :extension => '')
9
- end
10
-
11
- def serialized_path(object)
12
- case object
13
- when CodeObjects::RootObject
14
- "toplevel"
15
- when CodeObjects::ExtendedMethodObject
16
- serialized_path(object.namespace) + ':' + urlencode(object.name.to_s)
17
- when CodeObjects::MethodObject
18
- serialized_path(object.namespace) +
19
- (object.scope == :instance ? ":" : ".") + urlencode(object.name.to_s)
20
- when CodeObjects::ConstantObject, CodeObjects::ClassVariableObject
21
- serialized_path(object.namespace) + "##{object.name}-#{object.type}"
22
- when CodeObjects::ExtraFileObject
23
- super(object).gsub(/^file\./, 'file/')
24
- else
25
- super(object)
26
- end
27
- end
28
-
29
- private
30
-
31
- def urlencode(name)
32
- if name.respond_to?(:force_encoding)
33
- name = name.dup.force_encoding('binary')
34
- end
35
- Templates::Helpers::HtmlHelper.urlencode(name)
36
- end
37
- end
38
- end
39
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Server
4
+ # A custom {Serializers::Base serializer} which returns resource URLs instead of
5
+ # static relative paths to files on disk.
6
+ class DocServerSerializer < Serializers::FileSystemSerializer
7
+ def initialize(_command = nil)
8
+ super(:basepath => '', :extension => '')
9
+ end
10
+
11
+ def serialized_path(object)
12
+ case object
13
+ when CodeObjects::RootObject
14
+ "toplevel"
15
+ when CodeObjects::ExtendedMethodObject
16
+ serialized_path(object.namespace) + ':' + urlencode(object.name.to_s)
17
+ when CodeObjects::MethodObject
18
+ serialized_path(object.namespace) +
19
+ (object.scope == :instance ? ":" : ".") + urlencode(object.name.to_s)
20
+ when CodeObjects::ConstantObject, CodeObjects::ClassVariableObject
21
+ serialized_path(object.namespace) + "##{object.name}-#{object.type}"
22
+ when CodeObjects::ExtraFileObject
23
+ super(object).gsub(/^file\./, 'file/')
24
+ else
25
+ super(object)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def urlencode(name)
32
+ if name.respond_to?(:force_encoding)
33
+ name = name.dup.force_encoding('binary')
34
+ end
35
+ Templates::Helpers::HtmlHelper.urlencode(name)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,277 +1,277 @@
1
- # frozen_string_literal: true
2
- require 'fileutils'
3
- require 'thread'
4
-
5
- module YARD
6
- module Server
7
- # This exception is raised when {LibraryVersion#prepare!} fails, or discovers
8
- # that the library is not "prepared" to be served by
9
- class LibraryNotPreparedError < RuntimeError; end
10
-
11
- # A library version encapsulates a library's documentation at a specific version.
12
- # Although the version is optional, this allows for creating multiple documentation
13
- # points for a specific library, each representing a unique version. The term
14
- # "library" used in other parts of the YARD::Server documentation refers to
15
- # objects of this class unless otherwise noted.
16
- #
17
- # A library points to a location where a {#yardoc_file} is located so that
18
- # its documentation may be loaded and served. Optionally, a {#source_path} is
19
- # given to point to a location where any extra files (and {YARD::CLI::Yardoc .yardopts})
20
- # should be loaded from. Both of these methods may not be known immediately,
21
- # since the yardoc file may not be built until later. Resolving the yardoc
22
- # file and source path are dependent on the specific library "source type" used.
23
- # Source types (known as "library source") are discussed in detail below.
24
- #
25
- # == Using with Adapters
26
- # A list of libraries need to be passed into adapters upon creation. In
27
- # most cases, you will never do this manually, but if you use a {RackMiddleware},
28
- # you will need to pass in this list yourself. To build this list of libraries,
29
- # you should create a hash of library names mapped to an *Array* of LibraryVersion
30
- # objects. For example:
31
- #
32
- # {'mylib' => [LibraryVersion.new('mylib', '1.0', ...),
33
- # LibraryVersion.new('mylib', '2.0', ...)]}
34
- #
35
- # Note that you can also use {Adapter#add_library} for convenience.
36
- #
37
- # The "array" part is required, even for just one library version.
38
- #
39
- # == Library Sources
40
- # The {#source} method represents the library source type, ie. where the
41
- # library "comes from". It might come from "disk", or it might come from a
42
- # "gem" (technically the disk, but a separate type nonetheless). In these
43
- # two cases, the yardoc file sits somewhere on your filesystem, though
44
- # it may also be built dynamically if it does not yet exist. This behaviour
45
- # is controlled through the {#prepare!} method, which prepares the yardoc file
46
- # given a specific library source. We will see how this works in detail in
47
- # the following section.
48
- #
49
- # == Implementing a Custom Library Source
50
- # YARD can be extended to support custom library sources in order to
51
- # build or retrieve a yardoc file at runtime from many different locations.
52
- #
53
- # To implement this behaviour, 3 methods can be added to the +LibraryVersion+
54
- # class, +#load_yardoc_from_SOURCE+, +#yardoc_file_for_SOURCE+, and
55
- # +#source_path_for_SOURCE+. In all cases, "SOURCE" represents the source
56
- # type used in {#source} when creating the library object. The
57
- # +#yardoc_file_for_SOURCE+ and +#source_path_for_SOURCE+ methods are called upon
58
- # creation and should return the location where the source code for the library
59
- # lives. The load method is called from {#prepare!} if there is no yardoc file
60
- # and should set {#yardoc_file}. Below is a full example for
61
- # implementing a custom library source, +:http+, which reads packaged .yardoc
62
- # databases from zipped archives off of an HTTP server.
63
- #
64
- # Note that only +#load_yardoc_from_SOURCE+ is required. The other two
65
- # methods are optional and can be set manually (via {#source_path=} and
66
- # {#yardoc_file=}) on the object at any time.
67
- #
68
- # @example Implementing a Custom Library Source
69
- # # Adds the source type "http" for .yardoc files zipped on HTTP servers
70
- # class LibraryVersion
71
- # def load_yardoc_from_http
72
- # Thread.new do
73
- # # zip/unzip method implementations are not shown
74
- # download_zip_file("http://mysite.com/yardocs/#{self}.zip")
75
- # unzip_file_to("/path/to/yardocs/#{self}")
76
- # end
77
- #
78
- # # tell the server it's not ready yet (but it might be next time)
79
- # raise LibraryNotPreparedError
80
- # end
81
- #
82
- # def yardoc_file_for_http
83
- # "/path/to/yardocs/#{self}/.yardoc"
84
- # end
85
- #
86
- # def source_path_for_http
87
- # File.dirname(yardoc_file)
88
- # end
89
- # end
90
- #
91
- # # Creating a library of this source type:
92
- # LibraryVersion.new('name', '1.0', nil, :http)
93
- #
94
- class LibraryVersion
95
- # @return [String] the name of the library
96
- attr_accessor :name
97
-
98
- # @return [String] the version of the specific library
99
- attr_accessor :version
100
-
101
- # @return [String] the location of the yardoc file used to load the object
102
- # information from.
103
- # @return [nil] if no yardoc file exists yet. In this case, {#prepare!} will
104
- # be called on this library to build the yardoc file.
105
- # @note To implement a custom yardoc file getter, implement
106
- def yardoc_file
107
- @yardoc_file ||= load_yardoc_file
108
- end
109
- attr_writer :yardoc_file
110
-
111
- # @return [Symbol] the source type representing where the yardoc should be
112
- # loaded from. Defaults are +:disk+ and +:gem+, though custom sources
113
- # may be implemented. This value is used to inform {#prepare!} about how
114
- # to load the necessary data in order to display documentation for an object.
115
- # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
116
- attr_accessor :source
117
-
118
- # @return [String] the location of the source code for a library. This
119
- # value is filled by calling +#source_path_for_SOURCE+ on this class.
120
- # @return [nil] if there is no source code
121
- # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
122
- def source_path
123
- @source_path ||= load_source_path
124
- end
125
- attr_writer :source_path
126
-
127
- # @param [String] name the name of the library
128
- # @param [String] version the specific (usually, but not always, numeric) library
129
- # version
130
- # @param [String] yardoc the location of the yardoc file, or nil if it is
131
- # generated later
132
- # @param [Symbol] source the location of the files used to build the yardoc.
133
- # Builtin source types are +:disk+ or +:gem+.
134
- def initialize(name, version = nil, yardoc = nil, source = :disk)
135
- self.name = name
136
- self.yardoc_file = yardoc
137
- self.version = version
138
- self.source = source
139
- end
140
-
141
- # @param [Boolean] url_format if true, returns the string in a URI-compatible
142
- # format (for appending to a URL). Otherwise, it is given in a more human
143
- # readable format.
144
- # @return [String] the string representation of the library.
145
- def to_s(url_format = true)
146
- version ? "#{name}#{url_format ? '/' : '-'}#{version}" : name.to_s
147
- end
148
-
149
- # @return [Fixnum] used for Hash mapping.
150
- def hash; to_s.hash end
151
-
152
- # @return [Boolean] whether another LibraryVersion is equal to this one
153
- def eql?(other)
154
- other.is_a?(LibraryVersion) && other.name == name &&
155
- other.version == version && other.yardoc_file == yardoc_file
156
- end
157
- alias == eql?
158
- alias equal? eql?
159
-
160
- # @return [Boolean] whether the library has been completely processed
161
- # and is ready to be served
162
- def ready?
163
- return false if yardoc_file.nil?
164
- serializer.complete?
165
- end
166
-
167
- # @note You should not directly override this method. Instead, implement
168
- # +load_yardoc_from_SOURCENAME+ when implementing loading for a specific
169
- # source type. See the {LibraryVersion} documentation for "Implementing
170
- # a Custom Library Source"
171
- #
172
- # Prepares a library to be displayed by the server. This callback is
173
- # performed before each request on a library to ensure that it is loaded
174
- # and ready to be viewed. If any steps need to be performed prior to loading,
175
- # they are performed through this method (though they should be implemented
176
- # through the +load_yardoc_from_SOURCE+ method).
177
- #
178
- # @raise [LibraryNotPreparedError] if the library is not ready to be
179
- # displayed. Usually when raising this error, you would simultaneously
180
- # begin preparing the library for subsequent requests, although this
181
- # is not necessary.
182
- def prepare!
183
- return if ready?
184
- meth = "load_yardoc_from_#{source}"
185
- send(meth) if respond_to?(meth, true)
186
- end
187
-
188
- # @return [Gem::Specification] a gemspec object for a given library. Used
189
- # for :gem source types.
190
- # @return [nil] if there is no installed gem for the library
191
- def gemspec
192
- ver = version ? "= #{version}" : ">= 0"
193
- YARD::GemIndex.find_all_by_name(name, ver).last
194
- end
195
-
196
- protected
197
-
198
- @@chdir_mutex = Mutex.new
199
-
200
- # Called when a library of source type "disk" is to be prepared. In this
201
- # case, the {#yardoc_file} should already be set, but the library may not
202
- # be prepared. Run preparation if not done.
203
- #
204
- # @raise [LibraryNotPreparedError] if the yardoc file has not been
205
- # prepared.
206
- def load_yardoc_from_disk
207
- return if ready?
208
-
209
- @@chdir_mutex.synchronize do
210
- Dir.chdir(source_path_for_disk) do
211
- Thread.new do
212
- CLI::Yardoc.run('--no-stats', '-n', '-b', yardoc_file)
213
- end
214
- end
215
- end
216
-
217
- raise LibraryNotPreparedError
218
- end
219
-
220
- # Called when a library of source type "gem" is to be prepared. In this
221
- # case, the {#yardoc_file} needs to point to the correct location for
222
- # the installed gem. The yardoc file is built if it has not been done.
223
- #
224
- # @raise [LibraryNotPreparedError] if the gem does not have an existing
225
- # yardoc file.
226
- def load_yardoc_from_gem
227
- return if ready?
228
- ver = version ? "= #{version}" : ">= 0"
229
-
230
- @@chdir_mutex.synchronize do
231
- Thread.new do
232
- # Build gem docs on demand
233
- log.debug "Building gem docs for #{to_s(false)}"
234
- CLI::Gems.run(name, ver)
235
- log.debug "Done building gem docs for #{to_s(false)}"
236
- end
237
- end
238
-
239
- raise LibraryNotPreparedError
240
- end
241
-
242
- # @return [String] the source path for a disk source
243
- def source_path_for_disk
244
- File.dirname(yardoc_file) if yardoc_file
245
- end
246
-
247
- # @return [String] the source path for a gem source
248
- def source_path_for_gem
249
- gemspec.full_gem_path if gemspec
250
- end
251
-
252
- # @return [String] the yardoc file for a gem source
253
- def yardoc_file_for_gem
254
- require 'rubygems'
255
- ver = version ? "= #{version}" : ">= 0"
256
- Registry.yardoc_file_for_gem(name, ver)
257
- end
258
-
259
- private
260
-
261
- def load_source_path
262
- meth = "source_path_for_#{source}"
263
- send(meth) if respond_to?(meth, true)
264
- end
265
-
266
- def load_yardoc_file
267
- meth = "yardoc_file_for_#{source}"
268
- send(meth) if respond_to?(meth, true)
269
- end
270
-
271
- def serializer
272
- return if yardoc_file.nil?
273
- Serializers::YardocSerializer.new(yardoc_file)
274
- end
275
- end
276
- end
277
- end
1
+ # frozen_string_literal: true
2
+ require 'fileutils'
3
+ require 'thread'
4
+
5
+ module YARD
6
+ module Server
7
+ # This exception is raised when {LibraryVersion#prepare!} fails, or discovers
8
+ # that the library is not "prepared" to be served by
9
+ class LibraryNotPreparedError < RuntimeError; end
10
+
11
+ # A library version encapsulates a library's documentation at a specific version.
12
+ # Although the version is optional, this allows for creating multiple documentation
13
+ # points for a specific library, each representing a unique version. The term
14
+ # "library" used in other parts of the YARD::Server documentation refers to
15
+ # objects of this class unless otherwise noted.
16
+ #
17
+ # A library points to a location where a {#yardoc_file} is located so that
18
+ # its documentation may be loaded and served. Optionally, a {#source_path} is
19
+ # given to point to a location where any extra files (and {YARD::CLI::Yardoc .yardopts})
20
+ # should be loaded from. Both of these methods may not be known immediately,
21
+ # since the yardoc file may not be built until later. Resolving the yardoc
22
+ # file and source path are dependent on the specific library "source type" used.
23
+ # Source types (known as "library source") are discussed in detail below.
24
+ #
25
+ # == Using with Adapters
26
+ # A list of libraries need to be passed into adapters upon creation. In
27
+ # most cases, you will never do this manually, but if you use a {RackMiddleware},
28
+ # you will need to pass in this list yourself. To build this list of libraries,
29
+ # you should create a hash of library names mapped to an *Array* of LibraryVersion
30
+ # objects. For example:
31
+ #
32
+ # {'mylib' => [LibraryVersion.new('mylib', '1.0', ...),
33
+ # LibraryVersion.new('mylib', '2.0', ...)]}
34
+ #
35
+ # Note that you can also use {Adapter#add_library} for convenience.
36
+ #
37
+ # The "array" part is required, even for just one library version.
38
+ #
39
+ # == Library Sources
40
+ # The {#source} method represents the library source type, ie. where the
41
+ # library "comes from". It might come from "disk", or it might come from a
42
+ # "gem" (technically the disk, but a separate type nonetheless). In these
43
+ # two cases, the yardoc file sits somewhere on your filesystem, though
44
+ # it may also be built dynamically if it does not yet exist. This behaviour
45
+ # is controlled through the {#prepare!} method, which prepares the yardoc file
46
+ # given a specific library source. We will see how this works in detail in
47
+ # the following section.
48
+ #
49
+ # == Implementing a Custom Library Source
50
+ # YARD can be extended to support custom library sources in order to
51
+ # build or retrieve a yardoc file at runtime from many different locations.
52
+ #
53
+ # To implement this behaviour, 3 methods can be added to the +LibraryVersion+
54
+ # class, +#load_yardoc_from_SOURCE+, +#yardoc_file_for_SOURCE+, and
55
+ # +#source_path_for_SOURCE+. In all cases, "SOURCE" represents the source
56
+ # type used in {#source} when creating the library object. The
57
+ # +#yardoc_file_for_SOURCE+ and +#source_path_for_SOURCE+ methods are called upon
58
+ # creation and should return the location where the source code for the library
59
+ # lives. The load method is called from {#prepare!} if there is no yardoc file
60
+ # and should set {#yardoc_file}. Below is a full example for
61
+ # implementing a custom library source, +:http+, which reads packaged .yardoc
62
+ # databases from zipped archives off of an HTTP server.
63
+ #
64
+ # Note that only +#load_yardoc_from_SOURCE+ is required. The other two
65
+ # methods are optional and can be set manually (via {#source_path=} and
66
+ # {#yardoc_file=}) on the object at any time.
67
+ #
68
+ # @example Implementing a Custom Library Source
69
+ # # Adds the source type "http" for .yardoc files zipped on HTTP servers
70
+ # class LibraryVersion
71
+ # def load_yardoc_from_http
72
+ # Thread.new do
73
+ # # zip/unzip method implementations are not shown
74
+ # download_zip_file("http://mysite.com/yardocs/#{self}.zip")
75
+ # unzip_file_to("/path/to/yardocs/#{self}")
76
+ # end
77
+ #
78
+ # # tell the server it's not ready yet (but it might be next time)
79
+ # raise LibraryNotPreparedError
80
+ # end
81
+ #
82
+ # def yardoc_file_for_http
83
+ # "/path/to/yardocs/#{self}/.yardoc"
84
+ # end
85
+ #
86
+ # def source_path_for_http
87
+ # File.dirname(yardoc_file)
88
+ # end
89
+ # end
90
+ #
91
+ # # Creating a library of this source type:
92
+ # LibraryVersion.new('name', '1.0', nil, :http)
93
+ #
94
+ class LibraryVersion
95
+ # @return [String] the name of the library
96
+ attr_accessor :name
97
+
98
+ # @return [String] the version of the specific library
99
+ attr_accessor :version
100
+
101
+ # @return [String] the location of the yardoc file used to load the object
102
+ # information from.
103
+ # @return [nil] if no yardoc file exists yet. In this case, {#prepare!} will
104
+ # be called on this library to build the yardoc file.
105
+ # @note To implement a custom yardoc file getter, implement
106
+ def yardoc_file
107
+ @yardoc_file ||= load_yardoc_file
108
+ end
109
+ attr_writer :yardoc_file
110
+
111
+ # @return [Symbol] the source type representing where the yardoc should be
112
+ # loaded from. Defaults are +:disk+ and +:gem+, though custom sources
113
+ # may be implemented. This value is used to inform {#prepare!} about how
114
+ # to load the necessary data in order to display documentation for an object.
115
+ # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
116
+ attr_accessor :source
117
+
118
+ # @return [String] the location of the source code for a library. This
119
+ # value is filled by calling +#source_path_for_SOURCE+ on this class.
120
+ # @return [nil] if there is no source code
121
+ # @see LibraryVersion LibraryVersion documentation for "Implementing a Custom Library Source"
122
+ def source_path
123
+ @source_path ||= load_source_path
124
+ end
125
+ attr_writer :source_path
126
+
127
+ # @param [String] name the name of the library
128
+ # @param [String] version the specific (usually, but not always, numeric) library
129
+ # version
130
+ # @param [String] yardoc the location of the yardoc file, or nil if it is
131
+ # generated later
132
+ # @param [Symbol] source the location of the files used to build the yardoc.
133
+ # Builtin source types are +:disk+ or +:gem+.
134
+ def initialize(name, version = nil, yardoc = nil, source = :disk)
135
+ self.name = name
136
+ self.yardoc_file = yardoc
137
+ self.version = version
138
+ self.source = source
139
+ end
140
+
141
+ # @param [Boolean] url_format if true, returns the string in a URI-compatible
142
+ # format (for appending to a URL). Otherwise, it is given in a more human
143
+ # readable format.
144
+ # @return [String] the string representation of the library.
145
+ def to_s(url_format = true)
146
+ version ? "#{name}#{url_format ? '/' : '-'}#{version}" : name.to_s
147
+ end
148
+
149
+ # @return [Fixnum] used for Hash mapping.
150
+ def hash; to_s.hash end
151
+
152
+ # @return [Boolean] whether another LibraryVersion is equal to this one
153
+ def eql?(other)
154
+ other.is_a?(LibraryVersion) && other.name == name &&
155
+ other.version == version && other.yardoc_file == yardoc_file
156
+ end
157
+ alias == eql?
158
+ alias equal? eql?
159
+
160
+ # @return [Boolean] whether the library has been completely processed
161
+ # and is ready to be served
162
+ def ready?
163
+ return false if yardoc_file.nil?
164
+ serializer.complete?
165
+ end
166
+
167
+ # @note You should not directly override this method. Instead, implement
168
+ # +load_yardoc_from_SOURCENAME+ when implementing loading for a specific
169
+ # source type. See the {LibraryVersion} documentation for "Implementing
170
+ # a Custom Library Source"
171
+ #
172
+ # Prepares a library to be displayed by the server. This callback is
173
+ # performed before each request on a library to ensure that it is loaded
174
+ # and ready to be viewed. If any steps need to be performed prior to loading,
175
+ # they are performed through this method (though they should be implemented
176
+ # through the +load_yardoc_from_SOURCE+ method).
177
+ #
178
+ # @raise [LibraryNotPreparedError] if the library is not ready to be
179
+ # displayed. Usually when raising this error, you would simultaneously
180
+ # begin preparing the library for subsequent requests, although this
181
+ # is not necessary.
182
+ def prepare!
183
+ return if ready?
184
+ meth = "load_yardoc_from_#{source}"
185
+ send(meth) if respond_to?(meth, true)
186
+ end
187
+
188
+ # @return [Gem::Specification] a gemspec object for a given library. Used
189
+ # for :gem source types.
190
+ # @return [nil] if there is no installed gem for the library
191
+ def gemspec
192
+ ver = version ? "= #{version}" : ">= 0"
193
+ YARD::GemIndex.find_all_by_name(name, ver).last
194
+ end
195
+
196
+ protected
197
+
198
+ @@chdir_mutex = Mutex.new
199
+
200
+ # Called when a library of source type "disk" is to be prepared. In this
201
+ # case, the {#yardoc_file} should already be set, but the library may not
202
+ # be prepared. Run preparation if not done.
203
+ #
204
+ # @raise [LibraryNotPreparedError] if the yardoc file has not been
205
+ # prepared.
206
+ def load_yardoc_from_disk
207
+ return if ready?
208
+
209
+ @@chdir_mutex.synchronize do
210
+ Dir.chdir(source_path_for_disk) do
211
+ Thread.new do
212
+ CLI::Yardoc.run('--no-stats', '-n', '-b', yardoc_file)
213
+ end
214
+ end
215
+ end
216
+
217
+ raise LibraryNotPreparedError
218
+ end
219
+
220
+ # Called when a library of source type "gem" is to be prepared. In this
221
+ # case, the {#yardoc_file} needs to point to the correct location for
222
+ # the installed gem. The yardoc file is built if it has not been done.
223
+ #
224
+ # @raise [LibraryNotPreparedError] if the gem does not have an existing
225
+ # yardoc file.
226
+ def load_yardoc_from_gem
227
+ return if ready?
228
+ ver = version ? "= #{version}" : ">= 0"
229
+
230
+ @@chdir_mutex.synchronize do
231
+ Thread.new do
232
+ # Build gem docs on demand
233
+ log.debug "Building gem docs for #{to_s(false)}"
234
+ CLI::Gems.run(name, ver)
235
+ log.debug "Done building gem docs for #{to_s(false)}"
236
+ end
237
+ end
238
+
239
+ raise LibraryNotPreparedError
240
+ end
241
+
242
+ # @return [String] the source path for a disk source
243
+ def source_path_for_disk
244
+ File.dirname(yardoc_file) if yardoc_file
245
+ end
246
+
247
+ # @return [String] the source path for a gem source
248
+ def source_path_for_gem
249
+ gemspec.full_gem_path if gemspec
250
+ end
251
+
252
+ # @return [String] the yardoc file for a gem source
253
+ def yardoc_file_for_gem
254
+ require 'rubygems'
255
+ ver = version ? "= #{version}" : ">= 0"
256
+ Registry.yardoc_file_for_gem(name, ver)
257
+ end
258
+
259
+ private
260
+
261
+ def load_source_path
262
+ meth = "source_path_for_#{source}"
263
+ send(meth) if respond_to?(meth, true)
264
+ end
265
+
266
+ def load_yardoc_file
267
+ meth = "yardoc_file_for_#{source}"
268
+ send(meth) if respond_to?(meth, true)
269
+ end
270
+
271
+ def serializer
272
+ return if yardoc_file.nil?
273
+ Serializers::YardocSerializer.new(yardoc_file)
274
+ end
275
+ end
276
+ end
277
+ end