deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,32 @@
1
+ module YARD
2
+ module Serializers
3
+ # A serializer that writes data to standard output.
4
+ class StdoutSerializer < Base
5
+ # Creates a serializer to print text to stdout
6
+ #
7
+ # @param [Fixnum, nil] wrap if wrap is a number, wraps text to +wrap+
8
+ # columns, otherwise no wrapping is done.
9
+ def initialize(wrap = nil)
10
+ @wrap = wrap
11
+ end
12
+
13
+ # Overrides serialize behaviour to write data to standard output
14
+ def serialize(object, data)
15
+ print(@wrap ? word_wrap(data, @wrap) : data)
16
+ end
17
+
18
+ private
19
+
20
+ # Wraps text to a specific column length
21
+ #
22
+ # @param [String] text the text to wrap
23
+ # @param [Fixnum] length the column length to wrap to
24
+ # @return [String] the wrapped text
25
+ def word_wrap(text, length = 80)
26
+ # See ruby-talk/10655 / Ernest Ellingson
27
+ text.gsub(/\t/," ").gsub(/.{1,50}(?:\s|\Z)/){($& +
28
+ 5.chr).gsub(/\n\005/,"\n").gsub(/\005/,"\n")}
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,124 @@
1
+ module YARD
2
+ # Stubs marshal dumps and acts a delegate class for an object by path
3
+ #
4
+ # @private
5
+ class StubProxy
6
+ instance_methods.each {|m| undef_method(m) unless m.to_s =~ /^__|^object_id$/ }
7
+
8
+ def _dump(depth) @path end
9
+ def self._load(str) new(str) end
10
+ def hash; @path.hash end
11
+
12
+ def initialize(path, transient = false)
13
+ @path = path
14
+ @transient = transient
15
+ end
16
+
17
+ def method_missing(meth, *args, &block)
18
+ return true if meth == :respond_to? && args.first == :_dump
19
+ @object = nil if @transient
20
+ @object ||= Registry.at(@path)
21
+ @object.send(meth, *args, &block)
22
+ rescue NoMethodError => e
23
+ e.backtrace.delete_if {|l| l[0, __FILE__.size] == __FILE__ }
24
+ raise
25
+ end
26
+ end
27
+
28
+ module Serializers
29
+ class YardocSerializer < FileSystemSerializer
30
+ def initialize(yfile)
31
+ super(:basepath => yfile, :extension => 'dat')
32
+ end
33
+
34
+ def objects_path; File.join(basepath, 'objects') end
35
+ # @deprecated The registry no longer tracks proxy types
36
+ def proxy_types_path; File.join(basepath, 'proxy_types') end
37
+ def checksums_path; File.join(basepath, 'checksums') end
38
+ def object_types_path; File.join(basepath, 'object_types') end
39
+
40
+ def serialized_path(object)
41
+ path = case object
42
+ when String, Symbol
43
+ object = object.to_s
44
+ if object =~ /#/
45
+ object += '_i'
46
+ elsif object =~ /\./
47
+ object += '_c'
48
+ end
49
+ object.split(/::|\.|#/).map do |p|
50
+ p.gsub(/[^\w\.-]/) do |x|
51
+ encoded = '_'
52
+
53
+ x.each_byte { |b| encoded << ("%X" % b) }
54
+ encoded
55
+ end
56
+ end.join('/') + '.' + extension
57
+ when YARD::CodeObjects::RootObject
58
+ 'root.dat'
59
+ else
60
+ super(object)
61
+ end
62
+ File.join('objects', path)
63
+ end
64
+
65
+ def serialize(object)
66
+ if Hash === object
67
+ super(object[:root], dump(object)) if object[:root]
68
+ else
69
+ super(object, dump(object))
70
+ end
71
+ end
72
+
73
+ def deserialize(path, is_path = false)
74
+ path = File.join(basepath, serialized_path(path)) unless is_path
75
+ if File.file?(path)
76
+ log.debug "Deserializing #{path}..."
77
+ Marshal.load(File.read_binary(path))
78
+ else
79
+ log.debug "Could not find #{path}"
80
+ nil
81
+ end
82
+ end
83
+
84
+ private
85
+
86
+ def dump(object)
87
+ object = internal_dump(object, true) unless object.is_a?(Hash)
88
+ Marshal.dump(object)
89
+ end
90
+
91
+ def internal_dump(object, first_object = false)
92
+ if !first_object && object.is_a?(CodeObjects::Base) &&
93
+ !(Tags::OverloadTag === object)
94
+ return StubProxy.new(object.path)
95
+ end
96
+
97
+ if object.is_a?(Hash) || object.is_a?(Array) ||
98
+ object.is_a?(CodeObjects::Base) ||
99
+ object.instance_variables.size > 0
100
+ object = object.dup
101
+ end
102
+
103
+ object.instance_variables.each do |ivar|
104
+ ivar_obj = object.instance_variable_get(ivar)
105
+ ivar_obj_dump = internal_dump(ivar_obj)
106
+ object.instance_variable_set(ivar, ivar_obj_dump)
107
+ end
108
+
109
+ case object
110
+ when Hash
111
+ list = object.map do |k, v|
112
+ [k, v].map {|item| internal_dump(item) }
113
+ end
114
+ object.replace(Hash[list])
115
+ when Array
116
+ list = object.map {|item| internal_dump(item) }
117
+ object.replace(list)
118
+ end
119
+
120
+ object
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,100 @@
1
+ module YARD
2
+ module Server
3
+
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
@@ -0,0 +1,192 @@
1
+ require 'fileutils'
2
+
3
+ module YARD
4
+ module Server
5
+ module Commands
6
+ # This is the base command class used to implement custom commands for
7
+ # a server. A command will be routed to by the {Router} class and return
8
+ # a Rack-style response.
9
+ #
10
+ # == Attribute Initializers
11
+ # All attributes can be initialized via options passed into the {#initialize}
12
+ # method. When creating a custom command, the {Adapter#options} will
13
+ # automatically be mapped to attributes by the same name on your class.
14
+ #
15
+ # class MyCommand < Base
16
+ # attr_accessor :myattr
17
+ # end
18
+ #
19
+ # Adapter.new(libs, {:myattr => 'foo'}).start
20
+ #
21
+ # # when a request comes in, cmd.myattr == 'foo'
22
+ #
23
+ # == Subclassing Notes
24
+ # To implement a custom command, override the {#run} method, not {#call}.
25
+ # In your implementation, you should set the body and status for requests.
26
+ # See details in the +#run+ method documentation.
27
+ #
28
+ # Note that if your command deals directly with libraries, you should
29
+ # consider subclassing the more specific {LibraryCommand} class instead.
30
+ #
31
+ # @abstract
32
+ # @see #run
33
+ class Base
34
+ # @group Basic Command and Adapter Options
35
+
36
+ # @return [Hash] the options passed to the command's constructor
37
+ attr_accessor :command_options
38
+
39
+ # @return [Adapter] the server adapter
40
+ attr_accessor :adapter
41
+
42
+ # @return [Boolean] whether to cache
43
+ attr_accessor :caching
44
+
45
+ # @group Attributes Set Per Request
46
+
47
+ # @return [Request] request object
48
+ attr_accessor :request
49
+
50
+ # @return [String] the path after the command base URI
51
+ attr_accessor :path
52
+
53
+ # @return [Hash{String => String}] response headers
54
+ attr_accessor :headers
55
+
56
+ # @return [Numeric] status code. Defaults to 200 per request
57
+ attr_accessor :status
58
+
59
+ # @return [String] the response body. Defaults to empty string.
60
+ attr_accessor :body
61
+
62
+ # @group Instance Method Summary
63
+
64
+ # Creates a new command object, setting attributes named by keys
65
+ # in the options hash. After initialization, the options hash
66
+ # is saved in {#command_options} for further inspection.
67
+ #
68
+ # @example Creating a Command
69
+ # cmd = DisplayObjectCommand.new(:caching => true, :library => mylib)
70
+ # cmd.library # => mylib
71
+ # cmd.command_options # => {:caching => true, :library => mylib}
72
+ # @param [Hash] opts the options hash, saved to {#command_options}
73
+ # after initialization.
74
+ def initialize(opts = {})
75
+ opts.each do |key, value|
76
+ send("#{key}=", value) if respond_to?("#{key}=")
77
+ end
78
+ self.command_options = opts
79
+ end
80
+
81
+ # The main method called by a router with a request object.
82
+ #
83
+ # @note This command should not be overridden by subclasses. Implement
84
+ # the callback method {#run} instead.
85
+ # @param [Adapter Dependent] request the request object
86
+ # @return [Array(Numeric,Hash,Array<String>)] a Rack-style response
87
+ # of status, headers, and body wrapped in an array.
88
+ def call(request)
89
+ self.request = request
90
+ self.path ||= request.path[1..-1]
91
+ self.headers = {'Content-Type' => 'text/html'}
92
+ self.body = ''
93
+ self.status = 200
94
+ begin
95
+ run
96
+ rescue FinishRequest
97
+ rescue NotFoundError => e
98
+ self.body = e.message if e.message != e.class.to_s
99
+ self.status = 404
100
+ end
101
+ not_found if status == 404
102
+ [status, headers, body.is_a?(Array) ? body : [body]]
103
+ end
104
+
105
+ # @group Abstract Methods
106
+
107
+ # Subclass this method to implement a custom command. This method
108
+ # should set the {#status} and {#body}, and optionally modify the
109
+ # {#headers}. Note that +#status+ defaults to 200.
110
+ #
111
+ # @example A custom command
112
+ # class ErrorCommand < Base
113
+ # def run
114
+ # self.body = 'ERROR! The System is down!'
115
+ # self.status = 500
116
+ # self.headers['Conten-Type'] = 'text/plain'
117
+ # end
118
+ # end
119
+ #
120
+ # @abstract
121
+ # @return [void]
122
+ def run
123
+ raise NotImplementedError
124
+ end
125
+
126
+ protected
127
+
128
+ # @group Helper Methods
129
+
130
+ # Renders a specific object if provided, or a regular template rendering
131
+ # if object is not provided.
132
+ #
133
+ # @todo This method is dependent on +#options+, it should be in {LibraryCommand}.
134
+ # @param [CodeObjects::Base, nil] object calls {CodeObjects::Base#format} if
135
+ # an object is provided, or {Templates::Engine.render} if object is nil. Both
136
+ # receive +#options+ as an argument.
137
+ # @return [String] the resulting output to display
138
+ def render(object = nil)
139
+ case object
140
+ when CodeObjects::Base
141
+ cache object.format(options)
142
+ when nil
143
+ cache Templates::Engine.render(options)
144
+ else
145
+ cache object
146
+ end
147
+ end
148
+
149
+ # Override this method to implement custom caching mechanisms for
150
+ #
151
+ # @example Caching to memory
152
+ # $memory_cache = {}
153
+ # def cache(data)
154
+ # $memory_cache[path] = data
155
+ # end
156
+ # @param [String] data the data to cache
157
+ # @return [String] the same cached data (for chaining)
158
+ # @see StaticCaching
159
+ def cache(data)
160
+ if caching && adapter.document_root
161
+ path = File.join(adapter.document_root, request.path.sub(/\.html$/, '') + '.html')
162
+ path = path.sub(%r{/\.html$}, '.html')
163
+ FileUtils.mkdir_p(File.dirname(path))
164
+ log.debug "Caching data to #{path}"
165
+ File.open(path, 'wb') {|f| f.write(data) }
166
+ end
167
+ self.body = data
168
+ end
169
+
170
+ # Sets the body and headers (but not status) for a 404 response. Does
171
+ # nothing if the body is already set.
172
+ #
173
+ # @return [void]
174
+ def not_found
175
+ return unless body.empty?
176
+ self.body = "Not found: #{request.path}"
177
+ self.headers['Content-Type'] = 'text/plain'
178
+ self.headers['X-Cascade'] = 'pass'
179
+ end
180
+
181
+ # Sets the headers and status code for a redirection to a given URL
182
+ # @param [String] url the URL to redirect to
183
+ # @raise [FinishRequest] causes the request to terminate.
184
+ def redirect(url)
185
+ headers['Location'] = url
186
+ self.status = 302
187
+ raise FinishRequest
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,24 @@
1
+ module YARD
2
+ module Server
3
+ module Commands
4
+ # Displays a README or extra file.
5
+ #
6
+ # @todo Implement better support for detecting binary (image) filetypes
7
+ class DisplayFileCommand < LibraryCommand
8
+ def run
9
+ ppath = library.source_path
10
+ filename = File.cleanpath(File.join(library.source_path, path))
11
+ raise NotFoundError if !File.file?(filename)
12
+ if filename =~ /\.(jpe?g|gif|png|bmp)$/i
13
+ headers['Content-Type'] = StaticFileCommand::DefaultMimeTypes[$1.downcase] || 'text/html'
14
+ render IO.read(filename)
15
+ else
16
+ file = CodeObjects::ExtraFileObject.new(filename)
17
+ options.update(:object => Registry.root, :type => :layout, :file => file)
18
+ render
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,58 @@
1
+ module YARD
2
+ module Server
3
+ module Commands
4
+ # Displays documentation for a specific object identified by the path
5
+ class DisplayObjectCommand < LibraryCommand
6
+ include DocServerHelper
7
+
8
+ def run
9
+ if path.empty?
10
+ if options.readme
11
+ url = url_for_file(options.readme)
12
+ self.status, self.headers, self.body = *router.send(:route, url)
13
+ cache(body.first)
14
+ return
15
+ else
16
+ self.path = 'index'
17
+ end
18
+ end
19
+ return index if path == 'index'
20
+
21
+ if object = Registry.at(object_path)
22
+ options.update(:type => :layout)
23
+ render(object)
24
+ else
25
+ self.status = 404
26
+ end
27
+ end
28
+
29
+ def index
30
+ Registry.load_all
31
+
32
+ options.update(
33
+ :object => '_index.html',
34
+ :objects => Registry.all(:module, :class),
35
+ :type => :layout
36
+ )
37
+ render
38
+ end
39
+
40
+ def not_found
41
+ super
42
+ self.body = "Could not find object: #{object_path}"
43
+ end
44
+
45
+ private
46
+
47
+ def object_path
48
+ return @object_path if @object_path
49
+ if path == "toplevel"
50
+ @object_path = :root
51
+ else
52
+ @object_path = path.sub(':', '#').gsub('/', '::').sub(/^toplevel\b/, '').sub(/\.html$/, '')
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,15 @@
1
+ module YARD
2
+ module Server
3
+ module Commands
4
+ # Displays an object wrapped in frames
5
+ class FramesCommand < DisplayObjectCommand
6
+ def run
7
+ options.update(:frames => true, :type => :fulldoc)
8
+ tpl = fulldoc_template
9
+ tpl.generate_frameset
10
+ cache(tpl.contents)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,148 @@
1
+ require 'thread'
2
+
3
+ module YARD
4
+ module Server
5
+ module Commands
6
+ class LibraryOptions < CLI::YardocOptions
7
+ def adapter; @command.adapter end
8
+ def library; @command.library end
9
+ def single_library; @command.single_library end
10
+ def serializer; @command.serializer end
11
+ def serialize; false end
12
+
13
+ attr_accessor :command
14
+ attr_accessor :frames
15
+
16
+ def each(&block)
17
+ super(&block)
18
+ yield(:adapter, adapter)
19
+ yield(:library, library)
20
+ yield(:single_library, single_library)
21
+ yield(:serializer, serializer)
22
+ end
23
+ end
24
+
25
+ # This is the base command for all commands that deal directly with libraries.
26
+ # Some commands do not, but most (like {DisplayObjectCommand}) do. If your
27
+ # command deals with libraries directly, subclass this class instead.
28
+ # See {Base} for notes on how to subclass a command.
29
+ #
30
+ # @abstract
31
+ class LibraryCommand < Base
32
+ # @return [LibraryVersion] the object containing library information
33
+ attr_accessor :library
34
+
35
+ # @return [LibraryOptions] default options for the library
36
+ attr_accessor :options
37
+
38
+ # @return [Serializers::Base] the serializer used to perform file linking
39
+ attr_accessor :serializer
40
+
41
+ # @return [Boolean] whether router should route for multiple libraries
42
+ attr_accessor :single_library
43
+
44
+ # @return [Boolean] whether to reparse data
45
+ attr_accessor :incremental
46
+
47
+ # Needed to synchronize threads in {#setup_yardopts}
48
+ # @private
49
+ @@library_chdir_lock = Mutex.new
50
+
51
+ def initialize(opts = {})
52
+ super
53
+ self.serializer = DocServerSerializer.new
54
+ end
55
+
56
+ def call(request)
57
+ save_default_template_info
58
+ self.request = request
59
+ self.options = LibraryOptions.new
60
+ self.options.reset_defaults
61
+ self.options.command = self
62
+ setup_library
63
+ self.options.title = "Documentation for #{library.name} " +
64
+ (library.version ? '(' + library.version + ')' : '')
65
+ super
66
+ rescue LibraryNotPreparedError
67
+ not_prepared
68
+ ensure
69
+ restore_template_info
70
+ end
71
+
72
+ private
73
+
74
+ def save_default_template_info
75
+ @old_template_paths = Templates::Engine.template_paths.dup
76
+ @old_extra_includes = Templates::Template.extra_includes.dup
77
+ end
78
+
79
+ def restore_template_info
80
+ Templates::Engine.template_paths = @old_template_paths
81
+ Templates::Template.extra_includes = @old_extra_includes
82
+ end
83
+
84
+ def setup_library
85
+ library.prepare! if request.xhr? && request.query['process']
86
+ load_yardoc
87
+ setup_yardopts
88
+ true
89
+ end
90
+
91
+ def setup_yardopts
92
+ @@library_chdir_lock.synchronize do
93
+ Dir.chdir(library.source_path) do
94
+ yardoc = CLI::Yardoc.new
95
+ if incremental
96
+ yardoc.run('-c', '-n', '--no-stats')
97
+ else
98
+ yardoc.parse_arguments
99
+ end
100
+ yardoc.send(:verify_markup_options)
101
+ yardoc.options.delete(:serializer)
102
+ yardoc.options.delete(:serialize)
103
+ options.update(yardoc.options.to_hash)
104
+ end
105
+ end
106
+ end
107
+
108
+ def load_yardoc
109
+ raise LibraryNotPreparedError unless library.yardoc_file
110
+ if Thread.current[:__yard_last_yardoc__] == library.yardoc_file
111
+ log.debug "Reusing yardoc file: #{library.yardoc_file}"
112
+ return
113
+ end
114
+ Registry.clear
115
+ Templates::ErbCache.clear!
116
+ Registry.load_yardoc(library.yardoc_file)
117
+ Thread.current[:__yard_last_yardoc__] = library.yardoc_file
118
+ end
119
+
120
+ def not_prepared
121
+ self.caching = false
122
+ options.update(:template => :doc_server, :type => :processing)
123
+ [202, {'Content-Type' => 'text/html'}, [render]]
124
+ end
125
+
126
+ # Hack to load a custom fulldoc template object that does
127
+ # not do any rendering/generation. We need this to access the
128
+ # generate_*_list methods.
129
+ def fulldoc_template
130
+ tplopts = [options.template, :fulldoc, options.format]
131
+ tplclass = Templates::Engine.template(*tplopts)
132
+ obj = Object.new.extend(tplclass)
133
+ class << obj; def init; end end
134
+ obj.class = tplclass
135
+ obj.send(:initialize, options)
136
+ class << obj
137
+ attr_reader :contents
138
+ def asset(file, contents) @contents = contents end
139
+ end
140
+ obj
141
+ end
142
+
143
+ # @private
144
+ @@last_yardoc = nil
145
+ end
146
+ end
147
+ end
148
+ end