yard 0.9.17 → 0.9.22

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 (590) hide show
  1. checksums.yaml +4 -4
  2. data/.dockerignore +2 -0
  3. data/.github/ISSUE_TEMPLATE.md +33 -0
  4. data/.github/PULL_REQUEST_TEMPLATE.md +12 -0
  5. data/.gitignore +14 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +99 -0
  8. data/.travis.yml +52 -0
  9. data/.yardopts +26 -26
  10. data/.yardopts_guide +19 -0
  11. data/.yardopts_i18n +23 -0
  12. data/CHANGELOG.md +774 -728
  13. data/CODE_OF_CONDUCT.md +15 -0
  14. data/CONTRIBUTING.md +140 -0
  15. data/Dockerfile.samus +28 -0
  16. data/Gemfile +32 -0
  17. data/LEGAL +66 -66
  18. data/LICENSE +22 -22
  19. data/README.md +330 -328
  20. data/Rakefile +37 -53
  21. data/SECURITY.md +26 -0
  22. data/benchmarks/builtins_vs_eval.rb +24 -24
  23. data/benchmarks/concat_vs_join.rb +13 -13
  24. data/benchmarks/erb_vs_erubis.rb +54 -54
  25. data/benchmarks/format_args.rb +47 -47
  26. data/benchmarks/generation.rb +38 -38
  27. data/benchmarks/marshal_vs_dbm.rb +64 -64
  28. data/benchmarks/parsing.rb +46 -46
  29. data/benchmarks/pathname_vs_string.rb +50 -50
  30. data/benchmarks/rdoc_vs_yardoc.rb +11 -11
  31. data/benchmarks/registry_store_types.rb +49 -49
  32. data/benchmarks/ri_vs_yri.rb +19 -19
  33. data/benchmarks/ripper_parser.rb +13 -13
  34. data/benchmarks/splat_vs_flatten.rb +13 -13
  35. data/benchmarks/template_erb.rb +23 -23
  36. data/benchmarks/template_format.rb +7 -7
  37. data/benchmarks/template_profile.rb +18 -18
  38. data/benchmarks/yri_cache.rb +20 -20
  39. data/bin/yard +13 -13
  40. data/bin/yardoc +13 -13
  41. data/bin/yri +13 -13
  42. data/docs/CodeObjects.md +115 -115
  43. data/docs/GettingStarted.md +679 -679
  44. data/docs/Handlers.md +152 -152
  45. data/docs/Overview.md +61 -61
  46. data/docs/Parser.md +191 -191
  47. data/docs/Tags.md +283 -283
  48. data/docs/TagsArch.md +123 -123
  49. data/docs/Templates.md +496 -496
  50. data/docs/WhatsNew.md +1245 -1245
  51. data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
  52. data/docs/templates/default/fulldoc/html/setup.rb +6 -6
  53. data/docs/templates/default/layout/html/setup.rb +9 -9
  54. data/docs/templates/default/layout/html/tag_list.erb +11 -11
  55. data/docs/templates/default/yard_tags/html/list.erb +18 -18
  56. data/docs/templates/default/yard_tags/html/setup.rb +26 -26
  57. data/docs/templates/plugin.rb +70 -70
  58. data/lib/rubygems_plugin.rb +9 -9
  59. data/lib/yard.rb +69 -69
  60. data/lib/yard/autoload.rb +308 -303
  61. data/lib/yard/cli/command.rb +85 -85
  62. data/lib/yard/cli/command_parser.rb +93 -93
  63. data/lib/yard/cli/config.rb +198 -198
  64. data/lib/yard/cli/diff.rb +270 -270
  65. data/lib/yard/cli/display.rb +69 -69
  66. data/lib/yard/cli/gems.rb +84 -84
  67. data/lib/yard/cli/graph.rb +125 -125
  68. data/lib/yard/cli/help.rb +20 -20
  69. data/lib/yard/cli/i18n.rb +70 -70
  70. data/lib/yard/cli/list.rb +23 -23
  71. data/lib/yard/cli/markup_types.rb +32 -32
  72. data/lib/yard/cli/server.rb +257 -257
  73. data/lib/yard/cli/stats.rb +231 -231
  74. data/lib/yard/cli/yardoc.rb +789 -788
  75. data/lib/yard/cli/yardopts_command.rb +110 -110
  76. data/lib/yard/cli/yri.rb +215 -215
  77. data/lib/yard/code_objects/base.rb +622 -615
  78. data/lib/yard/code_objects/class_object.rb +146 -146
  79. data/lib/yard/code_objects/class_variable_object.rb +11 -11
  80. data/lib/yard/code_objects/constant_object.rb +16 -16
  81. data/lib/yard/code_objects/extended_method_object.rb +24 -24
  82. data/lib/yard/code_objects/extra_file_object.rb +134 -131
  83. data/lib/yard/code_objects/macro_object.rb +172 -172
  84. data/lib/yard/code_objects/method_object.rb +196 -196
  85. data/lib/yard/code_objects/module_object.rb +21 -21
  86. data/lib/yard/code_objects/namespace_mapper.rb +114 -114
  87. data/lib/yard/code_objects/namespace_object.rb +200 -200
  88. data/lib/yard/code_objects/proxy.rb +244 -240
  89. data/lib/yard/code_objects/root_object.rb +19 -19
  90. data/lib/yard/config.rb +270 -270
  91. data/lib/yard/core_ext/array.rb +16 -16
  92. data/lib/yard/core_ext/file.rb +69 -69
  93. data/lib/yard/core_ext/hash.rb +16 -16
  94. data/lib/yard/core_ext/insertion.rb +63 -63
  95. data/lib/yard/core_ext/module.rb +11 -20
  96. data/lib/yard/core_ext/string.rb +68 -68
  97. data/lib/yard/core_ext/symbol_hash.rb +75 -75
  98. data/lib/yard/docstring.rb +386 -386
  99. data/lib/yard/docstring_parser.rb +345 -345
  100. data/lib/yard/gem_index.rb +29 -29
  101. data/lib/yard/globals.rb +22 -22
  102. data/lib/yard/handlers/base.rb +595 -595
  103. data/lib/yard/handlers/c/alias_handler.rb +16 -16
  104. data/lib/yard/handlers/c/attribute_handler.rb +13 -13
  105. data/lib/yard/handlers/c/base.rb +129 -129
  106. data/lib/yard/handlers/c/class_handler.rb +27 -27
  107. data/lib/yard/handlers/c/constant_handler.rb +13 -13
  108. data/lib/yard/handlers/c/handler_methods.rb +212 -211
  109. data/lib/yard/handlers/c/init_handler.rb +20 -20
  110. data/lib/yard/handlers/c/method_handler.rb +45 -45
  111. data/lib/yard/handlers/c/mixin_handler.rb +21 -21
  112. data/lib/yard/handlers/c/module_handler.rb +17 -17
  113. data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
  114. data/lib/yard/handlers/c/path_handler.rb +11 -11
  115. data/lib/yard/handlers/c/struct_handler.rb +13 -13
  116. data/lib/yard/handlers/c/symbol_handler.rb +8 -8
  117. data/lib/yard/handlers/common/method_handler.rb +19 -0
  118. data/lib/yard/handlers/processor.rb +200 -200
  119. data/lib/yard/handlers/ruby/alias_handler.rb +45 -44
  120. data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
  121. data/lib/yard/handlers/ruby/base.rb +165 -165
  122. data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
  123. data/lib/yard/handlers/ruby/class_handler.rb +119 -119
  124. data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
  125. data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
  126. data/lib/yard/handlers/ruby/constant_handler.rb +55 -59
  127. data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
  128. data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
  129. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -96
  130. data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
  131. data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
  132. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
  133. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
  134. data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
  135. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
  136. data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
  137. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
  138. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
  139. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
  140. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
  141. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
  142. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
  143. data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
  144. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
  145. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
  146. data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
  147. data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
  148. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
  149. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
  150. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
  151. data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
  152. data/lib/yard/handlers/ruby/method_handler.rb +104 -118
  153. data/lib/yard/handlers/ruby/mixin_handler.rb +49 -37
  154. data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
  155. data/lib/yard/handlers/ruby/module_handler.rb +12 -12
  156. data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
  157. data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
  158. data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
  159. data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
  160. data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
  161. data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
  162. data/lib/yard/i18n/locale.rb +67 -67
  163. data/lib/yard/i18n/message.rb +57 -57
  164. data/lib/yard/i18n/messages.rb +56 -56
  165. data/lib/yard/i18n/po_parser.rb +61 -61
  166. data/lib/yard/i18n/pot_generator.rb +290 -290
  167. data/lib/yard/i18n/text.rb +173 -173
  168. data/lib/yard/logging.rb +205 -205
  169. data/lib/yard/options.rb +217 -217
  170. data/lib/yard/parser/base.rb +57 -57
  171. data/lib/yard/parser/c/c_parser.rb +235 -235
  172. data/lib/yard/parser/c/comment_parser.rb +134 -134
  173. data/lib/yard/parser/c/statement.rb +66 -64
  174. data/lib/yard/parser/ruby/ast_node.rb +551 -540
  175. data/lib/yard/parser/ruby/legacy/irb/slex.rb +276 -0
  176. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1345 -1354
  177. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
  178. data/lib/yard/parser/ruby/legacy/statement.rb +68 -66
  179. data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
  180. data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
  181. data/lib/yard/parser/ruby/ruby_parser.rb +699 -687
  182. data/lib/yard/parser/ruby/token_resolver.rb +156 -156
  183. data/lib/yard/parser/source_parser.rb +526 -526
  184. data/lib/yard/rake/yardoc_task.rb +81 -81
  185. data/lib/yard/registry.rb +439 -439
  186. data/lib/yard/registry_resolver.rb +231 -189
  187. data/lib/yard/registry_store.rb +342 -337
  188. data/lib/yard/rubygems/backports.rb +10 -10
  189. data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
  190. data/lib/yard/rubygems/backports/MIT.txt +20 -20
  191. data/lib/yard/rubygems/backports/gem.rb +10 -10
  192. data/lib/yard/rubygems/backports/source_index.rb +365 -365
  193. data/lib/yard/rubygems/doc_manager.rb +90 -90
  194. data/lib/yard/rubygems/hook.rb +197 -197
  195. data/lib/yard/rubygems/specification.rb +50 -50
  196. data/lib/yard/serializers/base.rb +83 -83
  197. data/lib/yard/serializers/file_system_serializer.rb +123 -123
  198. data/lib/yard/serializers/process_serializer.rb +24 -24
  199. data/lib/yard/serializers/stdout_serializer.rb +34 -34
  200. data/lib/yard/serializers/yardoc_serializer.rb +152 -152
  201. data/lib/yard/server.rb +13 -13
  202. data/lib/yard/server/adapter.rb +100 -100
  203. data/lib/yard/server/commands/base.rb +209 -209
  204. data/lib/yard/server/commands/display_file_command.rb +29 -29
  205. data/lib/yard/server/commands/display_object_command.rb +65 -65
  206. data/lib/yard/server/commands/frames_command.rb +16 -16
  207. data/lib/yard/server/commands/library_command.rb +187 -187
  208. data/lib/yard/server/commands/library_index_command.rb +28 -28
  209. data/lib/yard/server/commands/list_command.rb +25 -25
  210. data/lib/yard/server/commands/root_request_command.rb +15 -15
  211. data/lib/yard/server/commands/search_command.rb +79 -79
  212. data/lib/yard/server/commands/static_file_command.rb +23 -23
  213. data/lib/yard/server/commands/static_file_helpers.rb +61 -62
  214. data/lib/yard/server/doc_server_helper.rb +91 -91
  215. data/lib/yard/server/doc_server_serializer.rb +39 -39
  216. data/lib/yard/server/library_version.rb +277 -277
  217. data/lib/yard/server/rack_adapter.rb +89 -89
  218. data/lib/yard/server/router.rb +187 -187
  219. data/lib/yard/server/static_caching.rb +46 -46
  220. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
  221. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
  222. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
  223. data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
  224. data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
  225. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
  226. data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
  227. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
  228. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
  229. data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
  230. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
  231. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
  232. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
  233. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
  234. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
  235. data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
  236. data/lib/yard/server/webrick_adapter.rb +45 -45
  237. data/lib/yard/tags/default_factory.rb +191 -191
  238. data/lib/yard/tags/default_tag.rb +13 -13
  239. data/lib/yard/tags/directives.rb +616 -616
  240. data/lib/yard/tags/library.rb +633 -633
  241. data/lib/yard/tags/option_tag.rb +13 -13
  242. data/lib/yard/tags/overload_tag.rb +71 -71
  243. data/lib/yard/tags/ref_tag.rb +8 -8
  244. data/lib/yard/tags/ref_tag_list.rb +28 -28
  245. data/lib/yard/tags/tag.rb +71 -71
  246. data/lib/yard/tags/tag_format_error.rb +7 -7
  247. data/lib/yard/tags/types_explainer.rb +162 -162
  248. data/lib/yard/templates/engine.rb +186 -186
  249. data/lib/yard/templates/erb_cache.rb +23 -23
  250. data/lib/yard/templates/helpers/base_helper.rb +215 -215
  251. data/lib/yard/templates/helpers/filter_helper.rb +27 -27
  252. data/lib/yard/templates/helpers/html_helper.rb +663 -646
  253. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
  254. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
  255. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
  256. data/lib/yard/templates/helpers/markup_helper.rb +172 -172
  257. data/lib/yard/templates/helpers/method_helper.rb +75 -75
  258. data/lib/yard/templates/helpers/module_helper.rb +21 -21
  259. data/lib/yard/templates/helpers/text_helper.rb +112 -112
  260. data/lib/yard/templates/helpers/uml_helper.rb +47 -47
  261. data/lib/yard/templates/section.rb +105 -105
  262. data/lib/yard/templates/template.rb +418 -418
  263. data/lib/yard/templates/template_options.rb +92 -92
  264. data/lib/yard/verifier.rb +151 -151
  265. data/lib/yard/version.rb +6 -6
  266. data/po/ja.po +31108 -0
  267. data/samus.json +80 -0
  268. data/spec/cli/command_parser_spec.rb +43 -43
  269. data/spec/cli/command_spec.rb +36 -36
  270. data/spec/cli/config_spec.rb +148 -148
  271. data/spec/cli/diff_spec.rb +254 -254
  272. data/spec/cli/display_spec.rb +30 -30
  273. data/spec/cli/gems_spec.rb +81 -81
  274. data/spec/cli/graph_spec.rb +18 -18
  275. data/spec/cli/help_spec.rb +22 -22
  276. data/spec/cli/i18n_spec.rb +107 -107
  277. data/spec/cli/list_spec.rb +8 -8
  278. data/spec/cli/markup_types_spec.rb +22 -22
  279. data/spec/cli/server_spec.rb +324 -324
  280. data/spec/cli/stats_spec.rb +96 -96
  281. data/spec/cli/yard_on_yard_spec.rb +38 -38
  282. data/spec/cli/yardoc_spec.rb +896 -862
  283. data/spec/cli/yri_spec.rb +101 -101
  284. data/spec/code_objects/base_spec.rb +485 -470
  285. data/spec/code_objects/class_object_spec.rb +226 -226
  286. data/spec/code_objects/code_object_list_spec.rb +36 -36
  287. data/spec/code_objects/constants_spec.rb +116 -116
  288. data/spec/code_objects/extra_file_object_spec.rb +161 -160
  289. data/spec/code_objects/macro_object_spec.rb +150 -150
  290. data/spec/code_objects/method_object_spec.rb +184 -184
  291. data/spec/code_objects/module_object_spec.rb +142 -142
  292. data/spec/code_objects/namespace_object_spec.rb +171 -171
  293. data/spec/code_objects/proxy_spec.rb +147 -141
  294. data/spec/code_objects/spec_helper.rb +3 -3
  295. data/spec/config_spec.rb +171 -171
  296. data/spec/core_ext/array_spec.rb +13 -13
  297. data/spec/core_ext/file_spec.rb +72 -72
  298. data/spec/core_ext/hash_spec.rb +14 -14
  299. data/spec/core_ext/insertion_spec.rb +37 -37
  300. data/spec/core_ext/module_spec.rb +9 -15
  301. data/spec/core_ext/string_spec.rb +42 -42
  302. data/spec/core_ext/symbol_hash_spec.rb +89 -89
  303. data/spec/docstring_parser_spec.rb +280 -280
  304. data/spec/docstring_spec.rb +373 -373
  305. data/spec/handlers/alias_handler_spec.rb +82 -82
  306. data/spec/handlers/attribute_handler_spec.rb +96 -96
  307. data/spec/handlers/base_spec.rb +216 -216
  308. data/spec/handlers/c/alias_handler_spec.rb +34 -34
  309. data/spec/handlers/c/attribute_handler_spec.rb +41 -41
  310. data/spec/handlers/c/class_handler_spec.rb +78 -78
  311. data/spec/handlers/c/constant_handler_spec.rb +71 -71
  312. data/spec/handlers/c/init_handler_spec.rb +48 -48
  313. data/spec/handlers/c/method_handler_spec.rb +327 -325
  314. data/spec/handlers/c/mixin_handler_spec.rb +44 -44
  315. data/spec/handlers/c/module_handler_spec.rb +71 -71
  316. data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
  317. data/spec/handlers/c/path_handler_spec.rb +36 -36
  318. data/spec/handlers/c/spec_helper.rb +23 -23
  319. data/spec/handlers/c/struct_handler_spec.rb +16 -16
  320. data/spec/handlers/class_condition_handler_spec.rb +87 -87
  321. data/spec/handlers/class_handler_spec.rb +247 -247
  322. data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
  323. data/spec/handlers/class_variable_handler_spec.rb +12 -12
  324. data/spec/handlers/constant_handler_spec.rb +112 -112
  325. data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
  326. data/spec/handlers/dsl_handler_spec.rb +226 -219
  327. data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
  328. data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
  329. data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
  330. data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
  331. data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
  332. data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
  333. data/spec/handlers/examples/dsl_handler_001.rb.txt +156 -154
  334. data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
  335. data/spec/handlers/examples/extend_handler_001.rb.txt +19 -16
  336. data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
  337. data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
  338. data/spec/handlers/examples/mixin_handler_001.rb.txt +40 -37
  339. data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
  340. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
  341. data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
  342. data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
  343. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
  344. data/spec/handlers/exception_handler_spec.rb +49 -49
  345. data/spec/handlers/extend_handler_spec.rb +28 -24
  346. data/spec/handlers/legacy_base_spec.rb +128 -128
  347. data/spec/handlers/method_condition_handler_spec.rb +15 -15
  348. data/spec/handlers/method_handler_spec.rb +214 -190
  349. data/spec/handlers/mixin_handler_spec.rb +60 -56
  350. data/spec/handlers/module_function_handler_spec.rb +106 -106
  351. data/spec/handlers/module_handler_spec.rb +35 -35
  352. data/spec/handlers/private_class_method_handler_spec.rb +11 -11
  353. data/spec/handlers/private_constant_handler_spec.rb +25 -25
  354. data/spec/handlers/processor_spec.rb +35 -35
  355. data/spec/handlers/public_class_method_handler_spec.rb +11 -11
  356. data/spec/handlers/ruby/base_spec.rb +95 -95
  357. data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
  358. data/spec/handlers/spec_helper.rb +33 -33
  359. data/spec/handlers/visibility_handler_spec.rb +44 -44
  360. data/spec/handlers/yield_handler_spec.rb +52 -52
  361. data/spec/i18n/locale_spec.rb +81 -81
  362. data/spec/i18n/message_spec.rb +52 -52
  363. data/spec/i18n/messages_spec.rb +67 -67
  364. data/spec/i18n/pot_generator_spec.rb +295 -295
  365. data/spec/i18n/text_spec.rb +184 -184
  366. data/spec/logging_spec.rb +44 -44
  367. data/spec/options_spec.rb +171 -171
  368. data/spec/parser/base_spec.rb +24 -24
  369. data/spec/parser/c_parser_spec.rb +236 -236
  370. data/spec/parser/examples/array.c.txt +6267 -6267
  371. data/spec/parser/examples/example1.rb.txt +7 -7
  372. data/spec/parser/examples/extrafile.c.txt +8 -8
  373. data/spec/parser/examples/file.c.txt +28 -28
  374. data/spec/parser/examples/multifile.c.txt +22 -22
  375. data/spec/parser/examples/namespace.cpp.txt +68 -68
  376. data/spec/parser/examples/override.c.txt +424 -424
  377. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
  378. data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
  379. data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
  380. data/spec/parser/ruby/ast_node_spec.rb +33 -33
  381. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
  382. data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
  383. data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
  384. data/spec/parser/ruby/token_resolver_spec.rb +165 -165
  385. data/spec/parser/source_parser_spec.rb +727 -727
  386. data/spec/parser/tag_parsing_spec.rb +17 -17
  387. data/spec/rake/yardoc_task_spec.rb +118 -118
  388. data/spec/registry_spec.rb +463 -463
  389. data/spec/registry_store_spec.rb +327 -316
  390. data/spec/rubygems/doc_manager_spec.rb +112 -112
  391. data/spec/serializers/data/serialized_yardoc/checksums +1 -1
  392. data/spec/serializers/file_system_serializer_spec.rb +145 -145
  393. data/spec/serializers/spec_helper.rb +2 -2
  394. data/spec/serializers/yardoc_serializer_spec.rb +78 -78
  395. data/spec/server/adapter_spec.rb +39 -39
  396. data/spec/server/commands/base_spec.rb +91 -91
  397. data/spec/server/commands/library_command_spec.rb +39 -39
  398. data/spec/server/doc_server_helper_spec.rb +72 -72
  399. data/spec/server/doc_server_serializer_spec.rb +60 -60
  400. data/spec/server/rack_adapter_spec.rb +21 -21
  401. data/spec/server/router_spec.rb +123 -123
  402. data/spec/server/spec_helper.rb +22 -22
  403. data/spec/server/static_caching_spec.rb +47 -47
  404. data/spec/server/webrick_servlet_spec.rb +20 -20
  405. data/spec/server_spec.rb +19 -19
  406. data/spec/spec_helper.rb +212 -212
  407. data/spec/tags/default_factory_spec.rb +168 -168
  408. data/spec/tags/default_tag_spec.rb +11 -11
  409. data/spec/tags/directives_spec.rb +463 -463
  410. data/spec/tags/library_spec.rb +48 -48
  411. data/spec/tags/overload_tag_spec.rb +53 -53
  412. data/spec/tags/ref_tag_list_spec.rb +53 -53
  413. data/spec/tags/types_explainer_spec.rb +203 -203
  414. data/spec/templates/class_spec.rb +45 -45
  415. data/spec/templates/constant_spec.rb +41 -41
  416. data/spec/templates/engine_spec.rb +131 -131
  417. data/spec/templates/examples/class001.html +308 -308
  418. data/spec/templates/examples/class001.txt +36 -36
  419. data/spec/templates/examples/class002.html +39 -39
  420. data/spec/templates/examples/constant001.txt +24 -24
  421. data/spec/templates/examples/constant002.txt +6 -6
  422. data/spec/templates/examples/constant003.txt +10 -10
  423. data/spec/templates/examples/method001.html +137 -137
  424. data/spec/templates/examples/method001.txt +35 -35
  425. data/spec/templates/examples/method002.html +91 -91
  426. data/spec/templates/examples/method002.txt +20 -20
  427. data/spec/templates/examples/method003.html +165 -165
  428. data/spec/templates/examples/method003.txt +45 -45
  429. data/spec/templates/examples/method004.html +48 -48
  430. data/spec/templates/examples/method004.txt +10 -10
  431. data/spec/templates/examples/method005.html +105 -105
  432. data/spec/templates/examples/method005.txt +33 -33
  433. data/spec/templates/examples/method006.html +107 -107
  434. data/spec/templates/examples/method006.txt +20 -20
  435. data/spec/templates/examples/module001.dot +33 -33
  436. data/spec/templates/examples/module001.html +833 -833
  437. data/spec/templates/examples/module001.txt +33 -33
  438. data/spec/templates/examples/module002.html +341 -341
  439. data/spec/templates/examples/module003.html +202 -202
  440. data/spec/templates/examples/module004.html +394 -394
  441. data/spec/templates/examples/module005.html +81 -81
  442. data/spec/templates/examples/tag001.txt +82 -82
  443. data/spec/templates/helpers/base_helper_spec.rb +171 -171
  444. data/spec/templates/helpers/html_helper_spec.rb +687 -668
  445. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
  446. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
  447. data/spec/templates/helpers/markup_helper_spec.rb +136 -136
  448. data/spec/templates/helpers/method_helper_spec.rb +107 -107
  449. data/spec/templates/helpers/module_helper_spec.rb +35 -35
  450. data/spec/templates/helpers/shared_signature_examples.rb +126 -126
  451. data/spec/templates/helpers/text_helper_spec.rb +65 -65
  452. data/spec/templates/markup_processor_integrations/asciidoctor_spec.rb +60 -0
  453. data/spec/templates/markup_processor_integrations/integration_spec_helper.rb +46 -0
  454. data/spec/templates/markup_processor_integrations/rdoc_markdown_spec.rb +59 -0
  455. data/spec/templates/markup_processor_integrations/rdoc_spec.rb +39 -0
  456. data/spec/templates/markup_processor_integrations/redcarpet_spec.rb +59 -0
  457. data/spec/templates/markup_processor_integrations/redcloth_spec.rb +48 -0
  458. data/spec/templates/method_spec.rb +118 -118
  459. data/spec/templates/module_spec.rb +203 -203
  460. data/spec/templates/onefile_spec.rb +66 -66
  461. data/spec/templates/section_spec.rb +144 -144
  462. data/spec/templates/spec_helper.rb +76 -76
  463. data/spec/templates/tag_spec.rb +52 -52
  464. data/spec/templates/template_spec.rb +410 -410
  465. data/spec/verifier_spec.rb +106 -106
  466. data/templates/default/class/dot/setup.rb +7 -7
  467. data/templates/default/class/dot/superklass.erb +2 -2
  468. data/templates/default/class/html/constructor_details.erb +8 -8
  469. data/templates/default/class/html/setup.rb +2 -2
  470. data/templates/default/class/html/subclasses.erb +4 -4
  471. data/templates/default/class/setup.rb +36 -36
  472. data/templates/default/class/text/setup.rb +12 -12
  473. data/templates/default/class/text/subclasses.erb +5 -5
  474. data/templates/default/constant/text/header.erb +11 -11
  475. data/templates/default/constant/text/setup.rb +4 -4
  476. data/templates/default/docstring/html/abstract.erb +4 -4
  477. data/templates/default/docstring/html/deprecated.erb +1 -1
  478. data/templates/default/docstring/html/index.erb +5 -5
  479. data/templates/default/docstring/html/note.erb +6 -6
  480. data/templates/default/docstring/html/private.erb +4 -4
  481. data/templates/default/docstring/html/text.erb +1 -1
  482. data/templates/default/docstring/html/todo.erb +6 -6
  483. data/templates/default/docstring/setup.rb +52 -52
  484. data/templates/default/docstring/text/abstract.erb +2 -2
  485. data/templates/default/docstring/text/deprecated.erb +2 -2
  486. data/templates/default/docstring/text/index.erb +2 -2
  487. data/templates/default/docstring/text/note.erb +3 -3
  488. data/templates/default/docstring/text/private.erb +2 -2
  489. data/templates/default/docstring/text/text.erb +1 -1
  490. data/templates/default/docstring/text/todo.erb +3 -3
  491. data/templates/default/fulldoc/html/css/full_list.css +58 -58
  492. data/templates/default/fulldoc/html/css/style.css +496 -496
  493. data/templates/default/fulldoc/html/frames.erb +17 -17
  494. data/templates/default/fulldoc/html/full_list.erb +37 -37
  495. data/templates/default/fulldoc/html/full_list_class.erb +2 -2
  496. data/templates/default/fulldoc/html/full_list_file.erb +7 -7
  497. data/templates/default/fulldoc/html/full_list_method.erb +10 -10
  498. data/templates/default/fulldoc/html/js/app.js +314 -292
  499. data/templates/default/fulldoc/html/js/full_list.js +216 -216
  500. data/templates/default/fulldoc/html/js/jquery.js +3 -3
  501. data/templates/default/fulldoc/html/setup.rb +241 -241
  502. data/templates/default/layout/dot/header.erb +5 -5
  503. data/templates/default/layout/dot/setup.rb +15 -15
  504. data/templates/default/layout/html/breadcrumb.erb +11 -11
  505. data/templates/default/layout/html/files.erb +11 -11
  506. data/templates/default/layout/html/footer.erb +5 -5
  507. data/templates/default/layout/html/headers.erb +15 -15
  508. data/templates/default/layout/html/index.erb +2 -2
  509. data/templates/default/layout/html/layout.erb +23 -23
  510. data/templates/default/layout/html/listing.erb +4 -4
  511. data/templates/default/layout/html/objects.erb +32 -32
  512. data/templates/default/layout/html/script_setup.erb +4 -4
  513. data/templates/default/layout/html/search.erb +12 -12
  514. data/templates/default/layout/html/setup.rb +89 -89
  515. data/templates/default/method/html/header.erb +16 -16
  516. data/templates/default/method/setup.rb +4 -4
  517. data/templates/default/method_details/html/header.erb +2 -2
  518. data/templates/default/method_details/html/method_signature.erb +24 -24
  519. data/templates/default/method_details/html/source.erb +9 -9
  520. data/templates/default/method_details/setup.rb +11 -11
  521. data/templates/default/method_details/text/header.erb +10 -10
  522. data/templates/default/method_details/text/method_signature.erb +12 -12
  523. data/templates/default/method_details/text/setup.rb +11 -11
  524. data/templates/default/module/dot/child.erb +1 -1
  525. data/templates/default/module/dot/dependencies.erb +2 -2
  526. data/templates/default/module/dot/header.erb +6 -6
  527. data/templates/default/module/dot/info.erb +13 -13
  528. data/templates/default/module/dot/setup.rb +15 -15
  529. data/templates/default/module/html/attribute_details.erb +10 -10
  530. data/templates/default/module/html/attribute_summary.erb +8 -8
  531. data/templates/default/module/html/box_info.erb +43 -43
  532. data/templates/default/module/html/children.erb +8 -8
  533. data/templates/default/module/html/constant_summary.erb +17 -17
  534. data/templates/default/module/html/defines.erb +2 -2
  535. data/templates/default/module/html/header.erb +5 -5
  536. data/templates/default/module/html/inherited_attributes.erb +14 -14
  537. data/templates/default/module/html/inherited_constants.erb +8 -8
  538. data/templates/default/module/html/inherited_methods.erb +18 -18
  539. data/templates/default/module/html/item_summary.erb +40 -40
  540. data/templates/default/module/html/method_details_list.erb +9 -9
  541. data/templates/default/module/html/method_summary.erb +13 -13
  542. data/templates/default/module/html/methodmissing.erb +12 -12
  543. data/templates/default/module/setup.rb +167 -167
  544. data/templates/default/module/text/children.erb +9 -9
  545. data/templates/default/module/text/class_meths_list.erb +7 -7
  546. data/templates/default/module/text/extends.erb +7 -7
  547. data/templates/default/module/text/header.erb +7 -7
  548. data/templates/default/module/text/includes.erb +7 -7
  549. data/templates/default/module/text/instance_meths_list.erb +7 -7
  550. data/templates/default/module/text/setup.rb +13 -13
  551. data/templates/default/onefile/html/files.erb +4 -4
  552. data/templates/default/onefile/html/headers.erb +6 -6
  553. data/templates/default/onefile/html/layout.erb +17 -17
  554. data/templates/default/onefile/html/readme.erb +2 -2
  555. data/templates/default/onefile/html/setup.rb +62 -62
  556. data/templates/default/root/dot/child.erb +2 -2
  557. data/templates/default/root/dot/setup.rb +6 -6
  558. data/templates/default/root/html/setup.rb +2 -2
  559. data/templates/default/tags/html/example.erb +10 -10
  560. data/templates/default/tags/html/index.erb +2 -2
  561. data/templates/default/tags/html/option.erb +24 -24
  562. data/templates/default/tags/html/overload.erb +13 -13
  563. data/templates/default/tags/html/see.erb +7 -7
  564. data/templates/default/tags/html/tag.erb +20 -20
  565. data/templates/default/tags/setup.rb +57 -57
  566. data/templates/default/tags/text/example.erb +12 -12
  567. data/templates/default/tags/text/index.erb +1 -1
  568. data/templates/default/tags/text/option.erb +20 -20
  569. data/templates/default/tags/text/overload.erb +19 -19
  570. data/templates/default/tags/text/see.erb +11 -11
  571. data/templates/default/tags/text/tag.erb +13 -13
  572. data/templates/guide/class/html/setup.rb +2 -2
  573. data/templates/guide/docstring/html/setup.rb +2 -2
  574. data/templates/guide/fulldoc/html/css/style.css +108 -108
  575. data/templates/guide/fulldoc/html/js/app.js +33 -33
  576. data/templates/guide/fulldoc/html/setup.rb +74 -74
  577. data/templates/guide/layout/html/layout.erb +81 -81
  578. data/templates/guide/layout/html/setup.rb +25 -25
  579. data/templates/guide/method/html/header.erb +17 -17
  580. data/templates/guide/method/html/setup.rb +22 -22
  581. data/templates/guide/module/html/header.erb +6 -6
  582. data/templates/guide/module/html/method_list.erb +4 -4
  583. data/templates/guide/module/html/setup.rb +27 -27
  584. data/templates/guide/onefile/html/files.erb +4 -4
  585. data/templates/guide/onefile/html/setup.rb +6 -6
  586. data/templates/guide/onefile/html/toc.erb +3 -3
  587. data/templates/guide/tags/html/setup.rb +9 -9
  588. data/yard.gemspec +24 -43
  589. metadata +28 -21
  590. data/spec/examples.txt +0 -1878
@@ -1,100 +1,100 @@
1
- # frozen_string_literal: true
2
- module YARD
3
- module Server
4
- # Short circuits a request by raising an error. This exception is caught
5
- # by {Commands::Base#call} to immediately end a request and return a response.
6
- class FinishRequest < RuntimeError; end
7
-
8
- # Raises an error if a resource is not found. This exception is caught by
9
- # {Commands::Base#call} to immediately end a request and return a 404 response
10
- # code. If a message is provided, the body is set to the exception message.
11
- class NotFoundError < RuntimeError; end
12
-
13
- # This class implements the bridge between the {Router} and the server
14
- # backend for a specific server type. YARD implements concrete adapters
15
- # for WEBrick and Rack respectively, though other adapters can be made
16
- # for other server architectures.
17
- #
18
- # == Subclassing Notes
19
- # To create a concrete adapter class, implement the {#start} method to
20
- # initiate the server backend.
21
- #
22
- # @abstract
23
- class Adapter
24
- # @return [String] the location where static files are located, if any.
25
- # To set this field on initialization, pass +:DocumentRoot+ to the
26
- # +server_opts+ argument in {#initialize}
27
- attr_accessor :document_root
28
-
29
- # @return [Hash{String=>Array<LibraryVersion>}] a map of libraries.
30
- # @see LibraryVersion LibraryVersion for information on building a list of libraries
31
- # @see #add_library
32
- attr_accessor :libraries
33
-
34
- # @return [Hash] options passed and processed by adapters. The actual
35
- # options mostly depend on the adapters themselves.
36
- attr_accessor :options
37
-
38
- # @return [Hash] a set of options to pass to the server backend. Note
39
- # that +:DocumentRoot+ also sets the {#document_root}.
40
- attr_accessor :server_options
41
-
42
- # @return [Router] the router object used to route URLs to commands
43
- attr_accessor :router
44
-
45
- # Performs any global initialization for the adapter.
46
- # @note If you subclass this method, make sure to call +super+.
47
- # @return [void]
48
- def self.setup
49
- Templates::Template.extra_includes |= [YARD::Server::DocServerHelper]
50
- Templates::Engine.template_paths |= [File.dirname(__FILE__) + '/templates']
51
- end
52
-
53
- # Performs any global shutdown procedures for the adapter.
54
- # @note If you subclass this method, make sure to call +super+.
55
- # @return [void]
56
- def self.shutdown
57
- Templates::Template.extra_includes -= [YARD::Server::DocServerHelper]
58
- Templates::Engine.template_paths -= [File.dirname(__FILE__) + '/templates']
59
- end
60
-
61
- # Creates a new adapter object
62
- #
63
- # @param [Hash{String=>Array<LibraryVersion>}] libs a list of libraries,
64
- # see {#libraries} for formulating this list.
65
- # @param [Hash] opts extra options to pass to the adapter
66
- # @option opts [Class] :router (Router) the router class to initialize as the
67
- # adapter's router.
68
- # @option opts [Boolean] :caching (false) whether or not caching is enabled
69
- # @option opts [Boolean] :single_library (false) whether to server documentation
70
- # for a single or multiple libraries (changes URL structure)
71
- def initialize(libs, opts = {}, server_opts = {})
72
- self.class.setup
73
- self.libraries = libs
74
- self.options = opts
75
- self.server_options = server_opts
76
- self.document_root = server_options[:DocumentRoot]
77
- self.router = (options[:router] || Router).new(self)
78
- options[:adapter] = self
79
- log.debug "Serving libraries using #{self.class}: #{libraries.keys.join(', ')}"
80
- log.debug "Caching on" if options[:caching]
81
- log.debug "Document root: #{document_root}" if document_root
82
- end
83
-
84
- # Adds a library to the {#libraries} mapping for a given library object.
85
- # @example Adding a new library to an adapter
86
- # adapter.add_library LibraryVersion.new('mylib', '1.0', '/path/to/.yardoc')
87
- # @param [LibraryVersion] library a library to add
88
- def add_library(library)
89
- libraries[library.name] ||= []
90
- libraries[library.name] |= [library]
91
- end
92
-
93
- # Implement this method to connect your adapter to your server.
94
- # @abstract
95
- def start
96
- raise NotImplementedError
97
- end
98
- end
99
- end
100
- end
1
+ # frozen_string_literal: true
2
+ module YARD
3
+ module Server
4
+ # Short circuits a request by raising an error. This exception is caught
5
+ # by {Commands::Base#call} to immediately end a request and return a response.
6
+ class FinishRequest < RuntimeError; end
7
+
8
+ # Raises an error if a resource is not found. This exception is caught by
9
+ # {Commands::Base#call} to immediately end a request and return a 404 response
10
+ # code. If a message is provided, the body is set to the exception message.
11
+ class NotFoundError < RuntimeError; end
12
+
13
+ # This class implements the bridge between the {Router} and the server
14
+ # backend for a specific server type. YARD implements concrete adapters
15
+ # for WEBrick and Rack respectively, though other adapters can be made
16
+ # for other server architectures.
17
+ #
18
+ # == Subclassing Notes
19
+ # To create a concrete adapter class, implement the {#start} method to
20
+ # initiate the server backend.
21
+ #
22
+ # @abstract
23
+ class Adapter
24
+ # @return [String] the location where static files are located, if any.
25
+ # To set this field on initialization, pass +:DocumentRoot+ to the
26
+ # +server_opts+ argument in {#initialize}
27
+ attr_accessor :document_root
28
+
29
+ # @return [Hash{String=>Array<LibraryVersion>}] a map of libraries.
30
+ # @see LibraryVersion LibraryVersion for information on building a list of libraries
31
+ # @see #add_library
32
+ attr_accessor :libraries
33
+
34
+ # @return [Hash] options passed and processed by adapters. The actual
35
+ # options mostly depend on the adapters themselves.
36
+ attr_accessor :options
37
+
38
+ # @return [Hash] a set of options to pass to the server backend. Note
39
+ # that +:DocumentRoot+ also sets the {#document_root}.
40
+ attr_accessor :server_options
41
+
42
+ # @return [Router] the router object used to route URLs to commands
43
+ attr_accessor :router
44
+
45
+ # Performs any global initialization for the adapter.
46
+ # @note If you subclass this method, make sure to call +super+.
47
+ # @return [void]
48
+ def self.setup
49
+ Templates::Template.extra_includes |= [YARD::Server::DocServerHelper]
50
+ Templates::Engine.template_paths |= [File.dirname(__FILE__) + '/templates']
51
+ end
52
+
53
+ # Performs any global shutdown procedures for the adapter.
54
+ # @note If you subclass this method, make sure to call +super+.
55
+ # @return [void]
56
+ def self.shutdown
57
+ Templates::Template.extra_includes -= [YARD::Server::DocServerHelper]
58
+ Templates::Engine.template_paths -= [File.dirname(__FILE__) + '/templates']
59
+ end
60
+
61
+ # Creates a new adapter object
62
+ #
63
+ # @param [Hash{String=>Array<LibraryVersion>}] libs a list of libraries,
64
+ # see {#libraries} for formulating this list.
65
+ # @param [Hash] opts extra options to pass to the adapter
66
+ # @option opts [Class] :router (Router) the router class to initialize as the
67
+ # adapter's router.
68
+ # @option opts [Boolean] :caching (false) whether or not caching is enabled
69
+ # @option opts [Boolean] :single_library (false) whether to server documentation
70
+ # for a single or multiple libraries (changes URL structure)
71
+ def initialize(libs, opts = {}, server_opts = {})
72
+ self.class.setup
73
+ self.libraries = libs
74
+ self.options = opts
75
+ self.server_options = server_opts
76
+ self.document_root = server_options[:DocumentRoot]
77
+ self.router = (options[:router] || Router).new(self)
78
+ options[:adapter] = self
79
+ log.debug "Serving libraries using #{self.class}: #{libraries.keys.join(', ')}"
80
+ log.debug "Caching on" if options[:caching]
81
+ log.debug "Document root: #{document_root}" if document_root
82
+ end
83
+
84
+ # Adds a library to the {#libraries} mapping for a given library object.
85
+ # @example Adding a new library to an adapter
86
+ # adapter.add_library LibraryVersion.new('mylib', '1.0', '/path/to/.yardoc')
87
+ # @param [LibraryVersion] library a library to add
88
+ def add_library(library)
89
+ libraries[library.name] ||= []
90
+ libraries[library.name] |= [library]
91
+ end
92
+
93
+ # Implement this method to connect your adapter to your server.
94
+ # @abstract
95
+ def start
96
+ raise NotImplementedError
97
+ end
98
+ end
99
+ end
100
+ end
@@ -1,209 +1,209 @@
1
- # frozen_string_literal: true
2
- require 'fileutils'
3
-
4
- module YARD
5
- module Server
6
- module Commands
7
- # This is the base command class used to implement custom commands for
8
- # a server. A command will be routed to by the {Router} class and return
9
- # a Rack-style response.
10
- #
11
- # == Attribute Initializers
12
- # All attributes can be initialized via options passed into the {#initialize}
13
- # method. When creating a custom command, the {Adapter#options} will
14
- # automatically be mapped to attributes by the same name on your class.
15
- #
16
- # class MyCommand < Base
17
- # attr_accessor :myattr
18
- # end
19
- #
20
- # Adapter.new(libs, {:myattr => 'foo'}).start
21
- #
22
- # # when a request comes in, cmd.myattr == 'foo'
23
- #
24
- # == Subclassing Notes
25
- # To implement a custom command, override the {#run} method, not {#call}.
26
- # In your implementation, you should set the body and status for requests.
27
- # See details in the +#run+ method documentation.
28
- #
29
- # Note that if your command deals directly with libraries, you should
30
- # consider subclassing the more specific {LibraryCommand} class instead.
31
- #
32
- # @abstract
33
- # @see #run
34
- class Base
35
- # @group Basic Command and Adapter Options
36
-
37
- # @return [Hash] the options passed to the command's constructor
38
- attr_accessor :command_options
39
-
40
- # @return [Adapter] the server adapter
41
- attr_accessor :adapter
42
-
43
- # @return [Boolean] whether to cache
44
- attr_accessor :caching
45
-
46
- # @group Attributes Set Per Request
47
-
48
- # @return [Rack::Request] request object
49
- attr_accessor :request
50
-
51
- # @return [String] the path after the command base URI
52
- attr_accessor :path
53
-
54
- # @return [Hash{String => String}] response headers
55
- attr_accessor :headers
56
-
57
- # @return [Numeric] status code. Defaults to 200 per request
58
- attr_accessor :status
59
-
60
- # @return [String] the response body. Defaults to empty string.
61
- attr_accessor :body
62
-
63
- # @group Instance Method Summary
64
-
65
- # Creates a new command object, setting attributes named by keys
66
- # in the options hash. After initialization, the options hash
67
- # is saved in {#command_options} for further inspection.
68
- #
69
- # @example Creating a Command
70
- # cmd = DisplayObjectCommand.new(:caching => true, :library => mylib)
71
- # cmd.library # => mylib
72
- # cmd.command_options # => {:caching => true, :library => mylib}
73
- # @param [Hash] opts the options hash, saved to {#command_options}
74
- # after initialization.
75
- def initialize(opts = {})
76
- opts.each do |key, value|
77
- send("#{key}=", value) if respond_to?("#{key}=")
78
- end
79
- self.command_options = opts
80
- end
81
-
82
- # The main method called by a router with a request object.
83
- #
84
- # @note This command should not be overridden by subclasses. Implement
85
- # the callback method {#run} instead.
86
- # @param [Adapter Dependent] request the request object
87
- # @return [Array(Numeric,Hash,Array<String>)] a Rack-style response
88
- # of status, headers, and body wrapped in an array.
89
- def call(request)
90
- self.request = request
91
- self.path ||= request.path_info[1..-1]
92
- self.headers = {'Content-Type' => 'text/html'}
93
- self.body = ''
94
- self.status = 200
95
- add_cache_control
96
- begin
97
- run
98
- rescue FinishRequest
99
- nil # noop
100
- rescue NotFoundError => e
101
- self.body = e.message if e.message != e.class.to_s
102
- not_found
103
- end
104
-
105
- # keep this to support commands setting status manually.
106
- not_found if status == 404
107
-
108
- [status, headers, body.is_a?(Array) ? body : [body]]
109
- end
110
-
111
- # @group Abstract Methods
112
-
113
- # Subclass this method to implement a custom command. This method
114
- # should set the {#status} and {#body}, and optionally modify the
115
- # {#headers}. Note that +#status+ defaults to 200.
116
- #
117
- # @example A custom command
118
- # class ErrorCommand < Base
119
- # def run
120
- # self.body = 'ERROR! The System is down!'
121
- # self.status = 500
122
- # self.headers['Conten-Type'] = 'text/plain'
123
- # end
124
- # end
125
- #
126
- # @abstract
127
- # @return [void]
128
- def run
129
- raise NotImplementedError
130
- end
131
-
132
- protected
133
-
134
- # @group Helper Methods
135
-
136
- # Renders a specific object if provided, or a regular template rendering
137
- # if object is not provided.
138
- #
139
- # @todo This method is dependent on +#options+, it should be in {LibraryCommand}.
140
- # @param [CodeObjects::Base, nil] object calls {CodeObjects::Base#format} if
141
- # an object is provided, or {Templates::Engine.render} if object is nil. Both
142
- # receive +#options+ as an argument.
143
- # @return [String] the resulting output to display
144
- def render(object = nil)
145
- case object
146
- when CodeObjects::Base
147
- cache object.format(options)
148
- when nil
149
- cache Templates::Engine.render(options)
150
- else
151
- cache object
152
- end
153
- end
154
-
155
- # Override this method to implement custom caching mechanisms for
156
- #
157
- # @example Caching to memory
158
- # $memory_cache = {}
159
- # def cache(data)
160
- # $memory_cache[path] = data
161
- # end
162
- # @param [String] data the data to cache
163
- # @return [String] the same cached data (for chaining)
164
- # @see StaticCaching
165
- def cache(data)
166
- if caching && adapter.document_root
167
- path = File.join(adapter.document_root, request.path_info.sub(/\.html$/, '') + '.html')
168
- path = path.sub(%r{/\.html$}, '.html')
169
- FileUtils.mkdir_p(File.dirname(path))
170
- log.debug "Caching data to #{path}"
171
- File.open(path, 'wb') {|f| f.write(data) }
172
- end
173
- self.body = data
174
- end
175
-
176
- # Sets the body and headers for a 404 response. Does not modify the
177
- # body if already set.
178
- #
179
- # @return [void]
180
- def not_found
181
- self.status = 404
182
- return unless body.empty?
183
- self.body = "Not found: #{request.path}"
184
- headers['Content-Type'] = 'text/plain'
185
- headers['X-Cascade'] = 'pass'
186
- headers.delete('Cache-Control')
187
- end
188
-
189
- # Sets the headers and status code for a redirection to a given URL
190
- # @param [String] url the URL to redirect to
191
- # @raise [FinishRequest] causes the request to terminate.
192
- def redirect(url)
193
- headers['Location'] = url
194
- self.status = 302
195
- raise FinishRequest
196
- end
197
-
198
- private
199
-
200
- # Add a conservative cache control policy to reduce load on
201
- # requests served with "?1234567890" style timestamp query strings.
202
- def add_cache_control
203
- return if request.query_string.to_i == 0
204
- headers['Cache-Control'] = 'private, max-age=300'
205
- end
206
- end
207
- end
208
- end
209
- end
1
+ # frozen_string_literal: true
2
+ require 'fileutils'
3
+
4
+ module YARD
5
+ module Server
6
+ module Commands
7
+ # This is the base command class used to implement custom commands for
8
+ # a server. A command will be routed to by the {Router} class and return
9
+ # a Rack-style response.
10
+ #
11
+ # == Attribute Initializers
12
+ # All attributes can be initialized via options passed into the {#initialize}
13
+ # method. When creating a custom command, the {Adapter#options} will
14
+ # automatically be mapped to attributes by the same name on your class.
15
+ #
16
+ # class MyCommand < Base
17
+ # attr_accessor :myattr
18
+ # end
19
+ #
20
+ # Adapter.new(libs, {:myattr => 'foo'}).start
21
+ #
22
+ # # when a request comes in, cmd.myattr == 'foo'
23
+ #
24
+ # == Subclassing Notes
25
+ # To implement a custom command, override the {#run} method, not {#call}.
26
+ # In your implementation, you should set the body and status for requests.
27
+ # See details in the +#run+ method documentation.
28
+ #
29
+ # Note that if your command deals directly with libraries, you should
30
+ # consider subclassing the more specific {LibraryCommand} class instead.
31
+ #
32
+ # @abstract
33
+ # @see #run
34
+ class Base
35
+ # @group Basic Command and Adapter Options
36
+
37
+ # @return [Hash] the options passed to the command's constructor
38
+ attr_accessor :command_options
39
+
40
+ # @return [Adapter] the server adapter
41
+ attr_accessor :adapter
42
+
43
+ # @return [Boolean] whether to cache
44
+ attr_accessor :caching
45
+
46
+ # @group Attributes Set Per Request
47
+
48
+ # @return [Rack::Request] request object
49
+ attr_accessor :request
50
+
51
+ # @return [String] the path after the command base URI
52
+ attr_accessor :path
53
+
54
+ # @return [Hash{String => String}] response headers
55
+ attr_accessor :headers
56
+
57
+ # @return [Numeric] status code. Defaults to 200 per request
58
+ attr_accessor :status
59
+
60
+ # @return [String] the response body. Defaults to empty string.
61
+ attr_accessor :body
62
+
63
+ # @group Instance Method Summary
64
+
65
+ # Creates a new command object, setting attributes named by keys
66
+ # in the options hash. After initialization, the options hash
67
+ # is saved in {#command_options} for further inspection.
68
+ #
69
+ # @example Creating a Command
70
+ # cmd = DisplayObjectCommand.new(:caching => true, :library => mylib)
71
+ # cmd.library # => mylib
72
+ # cmd.command_options # => {:caching => true, :library => mylib}
73
+ # @param [Hash] opts the options hash, saved to {#command_options}
74
+ # after initialization.
75
+ def initialize(opts = {})
76
+ opts.each do |key, value|
77
+ send("#{key}=", value) if respond_to?("#{key}=")
78
+ end
79
+ self.command_options = opts
80
+ end
81
+
82
+ # The main method called by a router with a request object.
83
+ #
84
+ # @note This command should not be overridden by subclasses. Implement
85
+ # the callback method {#run} instead.
86
+ # @param [Adapter Dependent] request the request object
87
+ # @return [Array(Numeric,Hash,Array<String>)] a Rack-style response
88
+ # of status, headers, and body wrapped in an array.
89
+ def call(request)
90
+ self.request = request
91
+ self.path ||= request.path_info[1..-1]
92
+ self.headers = {'Content-Type' => 'text/html'}
93
+ self.body = ''
94
+ self.status = 200
95
+ add_cache_control
96
+ begin
97
+ run
98
+ rescue FinishRequest
99
+ nil # noop
100
+ rescue NotFoundError => e
101
+ self.body = e.message if e.message != e.class.to_s
102
+ not_found
103
+ end
104
+
105
+ # keep this to support commands setting status manually.
106
+ not_found if status == 404
107
+
108
+ [status, headers, body.is_a?(Array) ? body : [body]]
109
+ end
110
+
111
+ # @group Abstract Methods
112
+
113
+ # Subclass this method to implement a custom command. This method
114
+ # should set the {#status} and {#body}, and optionally modify the
115
+ # {#headers}. Note that +#status+ defaults to 200.
116
+ #
117
+ # @example A custom command
118
+ # class ErrorCommand < Base
119
+ # def run
120
+ # self.body = 'ERROR! The System is down!'
121
+ # self.status = 500
122
+ # self.headers['Conten-Type'] = 'text/plain'
123
+ # end
124
+ # end
125
+ #
126
+ # @abstract
127
+ # @return [void]
128
+ def run
129
+ raise NotImplementedError
130
+ end
131
+
132
+ protected
133
+
134
+ # @group Helper Methods
135
+
136
+ # Renders a specific object if provided, or a regular template rendering
137
+ # if object is not provided.
138
+ #
139
+ # @todo This method is dependent on +#options+, it should be in {LibraryCommand}.
140
+ # @param [CodeObjects::Base, nil] object calls {CodeObjects::Base#format} if
141
+ # an object is provided, or {Templates::Engine.render} if object is nil. Both
142
+ # receive +#options+ as an argument.
143
+ # @return [String] the resulting output to display
144
+ def render(object = nil)
145
+ case object
146
+ when CodeObjects::Base
147
+ cache object.format(options)
148
+ when nil
149
+ cache Templates::Engine.render(options)
150
+ else
151
+ cache object
152
+ end
153
+ end
154
+
155
+ # Override this method to implement custom caching mechanisms for
156
+ #
157
+ # @example Caching to memory
158
+ # $memory_cache = {}
159
+ # def cache(data)
160
+ # $memory_cache[path] = data
161
+ # end
162
+ # @param [String] data the data to cache
163
+ # @return [String] the same cached data (for chaining)
164
+ # @see StaticCaching
165
+ def cache(data)
166
+ if caching && adapter.document_root
167
+ path = File.join(adapter.document_root, request.path_info.sub(/\.html$/, '') + '.html')
168
+ path = path.sub(%r{/\.html$}, '.html')
169
+ FileUtils.mkdir_p(File.dirname(path))
170
+ log.debug "Caching data to #{path}"
171
+ File.open(path, 'wb') {|f| f.write(data) }
172
+ end
173
+ self.body = data
174
+ end
175
+
176
+ # Sets the body and headers for a 404 response. Does not modify the
177
+ # body if already set.
178
+ #
179
+ # @return [void]
180
+ def not_found
181
+ self.status = 404
182
+ return unless body.empty?
183
+ self.body = "Not found: #{request.path}"
184
+ headers['Content-Type'] = 'text/plain'
185
+ headers['X-Cascade'] = 'pass'
186
+ headers.delete('Cache-Control')
187
+ end
188
+
189
+ # Sets the headers and status code for a redirection to a given URL
190
+ # @param [String] url the URL to redirect to
191
+ # @raise [FinishRequest] causes the request to terminate.
192
+ def redirect(url)
193
+ headers['Location'] = url
194
+ self.status = 302
195
+ raise FinishRequest
196
+ end
197
+
198
+ private
199
+
200
+ # Add a conservative cache control policy to reduce load on
201
+ # requests served with "?1234567890" style timestamp query strings.
202
+ def add_cache_control
203
+ return if request.query_string.to_i == 0
204
+ headers['Cache-Control'] = 'private, max-age=300'
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end