deg-yard 0.8.7.1

Sign up to get free protection for your applications and to get access to all the features.
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,407 @@
1
+ require 'erb'
2
+
3
+ module YARD
4
+ module Templates
5
+ module Template
6
+ attr_accessor :class, :section
7
+ attr_reader :options
8
+
9
+ class << self
10
+ # Extra includes are mixins that are included after a template is created. These
11
+ # mixins can be registered by plugins to operate on templates and override behaviour.
12
+ #
13
+ # Note that this array can be filled with modules or proc objects. If a proc object
14
+ # is given, the proc will be called with the {Template#options} hash containing
15
+ # relevant template information like the object, format, and more. The proc should
16
+ # return a module or nil if there is none.
17
+ #
18
+ # @example Adding in extra mixins to include on a template
19
+ # Template.extra_includes << MyHelper
20
+ # @example Conditionally including a mixin if the format is html
21
+ # Template.extra_includes << proc {|opts| MyHelper if opts.format == :html }
22
+ # @return [Array<Module, Proc>] a list of modules to be automatically included
23
+ # into any new template module
24
+ attr_accessor :extra_includes
25
+
26
+ # @!parse extend ClassMethods
27
+ # @private
28
+ def included(klass)
29
+ klass.extend(ClassMethods)
30
+ end
31
+
32
+ # Includes the {extra_includes} modules into the template object.
33
+ #
34
+ # @param [Template] template the template object to mixin the extra includes.
35
+ # @param [SymbolHash] options the options hash containing all template information
36
+ # @return [void]
37
+ def include_extra(template, options)
38
+ extra_includes.each do |mod|
39
+ mod = mod.call(options) if mod.is_a?(Proc)
40
+ next unless mod.is_a?(Module)
41
+ template.extend(mod)
42
+ end
43
+ end
44
+ end
45
+
46
+ self.extra_includes = [
47
+ proc {|options|
48
+ { :html => Helpers::HtmlHelper,
49
+ :text => Helpers::TextHelper,
50
+ :dot => Helpers::UMLHelper }[options.format]
51
+ }
52
+ ]
53
+
54
+ include ErbCache
55
+ include Helpers::BaseHelper
56
+ include Helpers::MethodHelper
57
+
58
+ module ClassMethods
59
+ attr_accessor :path, :full_path
60
+
61
+ # @return [Array<String>] a list of full paths
62
+ # @note This method caches path results. Paths should not be modified
63
+ # after this method is called; call {#reset_full_paths} to reset cache.
64
+ def full_paths
65
+ reset_full_paths unless defined? @cached_included_modules
66
+ return @full_paths if included_modules == @cached_included_modules
67
+
68
+ @cached_included_modules = included_modules
69
+ @full_paths = included_modules.inject([full_path]) do |paths, mod|
70
+ paths |= mod.full_paths if mod.respond_to?(:full_paths)
71
+ paths
72
+ end
73
+ end
74
+
75
+ # Resets cache for {#full_paths}
76
+ def reset_full_paths
77
+ @cached_included_modules = nil
78
+ end
79
+
80
+ def initialize(path, full_paths)
81
+ full_path = full_paths.shift
82
+ self.path = path
83
+ self.full_path = full_path
84
+ include_inherited(full_paths)
85
+ include_parent
86
+ load_setup_rb
87
+ end
88
+
89
+ # Searches for a file identified by +basename+ in the template's
90
+ # path as well as any mixed in template paths. Equivalent to calling
91
+ # {ClassMethods#find_nth_file} with index of 1.
92
+ #
93
+ # @param [String] basename the filename to search for
94
+ # @return [String] the full path of a file on disk with filename
95
+ # +basename+ in one of the template's paths.
96
+ # @see find_nth_file
97
+ def find_file(basename)
98
+ find_nth_file(basename)
99
+ end
100
+
101
+ # Searches for the nth file (where n = +index+) identified
102
+ # by basename in the template's path and any mixed in template paths.
103
+ #
104
+ # @param [String] basename the filename to search for
105
+ # @param [Fixnum] index the nth existing file to return
106
+ # @return [String] the full path of the nth file on disk with
107
+ # filename +basename+ in one of the template paths
108
+ def find_nth_file(basename, index = 1)
109
+ n = 1
110
+ full_paths.each do |path|
111
+ file = File.join(path, basename)
112
+ if File.file?(file)
113
+ return file if index == n
114
+ n += 1
115
+ end
116
+ end
117
+
118
+ nil
119
+ end
120
+
121
+ def is_a?(klass)
122
+ return true if klass == Template
123
+ super(klass)
124
+ end
125
+
126
+ # Creates a new template object to be rendered with {Template#run}
127
+ def new(*args)
128
+ obj = Object.new.extend(self)
129
+ obj.class = self
130
+ obj.send(:initialize, *args)
131
+ obj
132
+ end
133
+
134
+ def run(*args)
135
+ new(*args).run
136
+ end
137
+
138
+ def T(*path)
139
+ Engine.template(*path)
140
+ end
141
+
142
+ # Alias for creating a {Section} with arguments
143
+ # @see Section#initialize
144
+ # @since 0.6.0
145
+ def S(*args)
146
+ Section.new(*args)
147
+ end
148
+
149
+ private
150
+
151
+ def include_parent
152
+ pc = path.to_s.split('/')
153
+ if pc.size > 1
154
+ pc.pop
155
+ pc = pc.join('/')
156
+ begin
157
+ include Engine.template(pc)
158
+ rescue ArgumentError
159
+ include Engine.template!(pc, full_path.gsub(%r{/[^/]+$}, ''))
160
+ end
161
+ end
162
+ end
163
+
164
+ def include_inherited(full_paths)
165
+ full_paths.reverse.each do |full_path|
166
+ include Engine.template!(path, full_path)
167
+ end
168
+ end
169
+
170
+ def load_setup_rb
171
+ setup_file = File.join(full_path, 'setup.rb')
172
+ if File.file? setup_file
173
+ module_eval(File.read(setup_file).taint, setup_file, 1)
174
+ end
175
+ end
176
+ end
177
+
178
+ def initialize(opts = TemplateOptions.new)
179
+ opts_class = opts.class
180
+ opts_class = TemplateOptions if opts_class == Hash
181
+ @cache, @cache_filename = {}, {}
182
+ @sections, @options = [], opts_class.new
183
+ add_options(opts)
184
+ Template.include_extra(self, options)
185
+ init
186
+ end
187
+
188
+ # Loads a template specified by path. If +:template+ or +:format+ is
189
+ # specified in the {#options} hash, they are prepended and appended
190
+ # to the path respectively.
191
+ #
192
+ # @param [Array<String, Symbol>] path the path of the template
193
+ # @return [Template] the loaded template module
194
+ def T(*path)
195
+ path.unshift(options.template) if options.template
196
+ path.push(options.format) if options.format
197
+ self.class.T(*path)
198
+ end
199
+
200
+ # Sets the sections (and subsections) to be rendered for the template
201
+ #
202
+ # @example Sets a set of erb sections
203
+ # sections :a, :b, :c # searches for a.erb, b.erb, c.erb
204
+ # @example Sets a set of method and erb sections
205
+ # sections :a, :b, :c # a is a method, the rest are erb files
206
+ # @example Sections with subsections
207
+ # sections :header, [:name, :children]
208
+ # # the above will call header.erb and only renders the subsections
209
+ # # if they are yielded by the template (see #yieldall)
210
+ # @param [Array<Symbol, String, Template, Array>] args the sections
211
+ # to use to render the template. For symbols and strings, the
212
+ # section will be executed as a method (if one exists), or rendered
213
+ # from the file "name.erb" where name is the section name. For
214
+ # templates, they will have {Template::ClassMethods#run} called on them.
215
+ # Any subsections can be yielded to using yield or {#yieldall}
216
+ def sections(*args)
217
+ @sections = Section.new(nil, *args) if args.size > 0
218
+ @sections
219
+ end
220
+
221
+ # Initialization called on the template. Override this in a 'setup.rb'
222
+ # file in the template's path to implement a template
223
+ #
224
+ # @example A default set of sections
225
+ # def init
226
+ # sections :section1, :section2, [:subsection1, :etc]
227
+ # end
228
+ # @see #sections
229
+ def init
230
+ end
231
+
232
+ # Runs a template on +sects+ using extra options. This method should
233
+ # not be called directly. Instead, call the class method {ClassMethods#run}
234
+ #
235
+ # @param [Hash, nil] opts any extra options to apply to sections
236
+ # @param [Section, Array] sects a section list of sections to render
237
+ # @param [Fixnum] start_at the index in the section list to start from
238
+ # @param [Boolean] break_first if true, renders only the first section
239
+ # @yield [opts] calls for the subsections to be rendered
240
+ # @yieldparam [Hash] opts any extra options to yield
241
+ # @return [String] the rendered sections joined together
242
+ def run(opts = nil, sects = sections, start_at = 0, break_first = false, &block)
243
+ out = ""
244
+ return out if sects.nil?
245
+ sects = sects[start_at..-1] if start_at > 0
246
+ sects = Section.new(nil, sects) unless sects.is_a?(Section)
247
+ add_options(opts) do
248
+ sects.each do |s|
249
+ self.section = s
250
+ subsection_index = 0
251
+ value = render_section(section) do |*args|
252
+ value = with_section do
253
+ run(args.first, section, subsection_index, true, &block)
254
+ end
255
+ subsection_index += 1
256
+ value
257
+ end
258
+ out << (value || "")
259
+ break if break_first
260
+ end
261
+ end
262
+ out
263
+ end
264
+
265
+ # Yields all subsections with any extra options
266
+ #
267
+ # @param [Hash] opts extra options to be applied to subsections
268
+ def yieldall(opts = nil, &block)
269
+ with_section { run(opts, section, &block) }
270
+ end
271
+
272
+ # @param [String, Symbol] section the section name
273
+ # @yield calls subsections to be rendered
274
+ # @return [String] the contents of the ERB rendered section
275
+ def erb(section, &block)
276
+ method_name = ErbCache.method_for(cache_filename(section)) do
277
+ erb_with(cache(section), cache_filename(section))
278
+ end
279
+ send(method_name, &block)
280
+ end
281
+
282
+ # Returns the contents of a file. If +allow_inherited+ is set to +true+,
283
+ # use +{{{__super__}}}+ inside the file contents to insert the contents
284
+ # of the file from an inherited template. For instance, if +templates/b+
285
+ # inherits from +templates/a+ and file "test.css" exists in both directories,
286
+ # both file contents can be retrieved by having +templates/b/test.css+ look
287
+ # like:
288
+ #
289
+ # {{{__super__}}}
290
+ # ...
291
+ # body { css styles here }
292
+ # p.class { other styles }
293
+ #
294
+ # @param [String] basename the name of the file
295
+ # @param [Boolean] allow_inherited whether inherited templates can
296
+ # be inserted with +{{{__super__}}}+
297
+ # @return [String] the contents of a file identified by +basename+. All
298
+ # template paths (including any mixed in templates) are searched for
299
+ # the file
300
+ # @see ClassMethods#find_file
301
+ # @see ClassMethods#find_nth_file
302
+ def file(basename, allow_inherited = false)
303
+ file = self.class.find_file(basename)
304
+ raise ArgumentError, "no file for '#{basename}' in #{self.class.path}" unless file
305
+
306
+ data = IO.read(file)
307
+ if allow_inherited
308
+ superfile = self.class.find_nth_file(basename, 2)
309
+ data.gsub!('{{{__super__}}}', superfile ? IO.read(superfile) : "")
310
+ end
311
+
312
+ data
313
+ end
314
+
315
+ # Calls the ERB file from the last inherited template with {#section}.erb
316
+ #
317
+ # @param [Symbol, String] section if provided, uses a specific section name
318
+ # @return [String] the rendered ERB file in any of the inherited template
319
+ # paths.
320
+ def superb(section = section, &block)
321
+ filename = self.class.find_nth_file(erb_file_for(section), 2)
322
+ return "" unless filename
323
+ method_name = ErbCache.method_for(filename) { erb_with(IO.read(filename), filename) }
324
+ send(method_name, &block)
325
+ end
326
+
327
+ def options=(value)
328
+ @options = value
329
+ set_ivars
330
+ end
331
+
332
+ def inspect
333
+ "Template(#{self.class.path}) [section=#{section.name}]"
334
+ end
335
+
336
+ protected
337
+
338
+ def erb_file_for(section)
339
+ "#{section}.erb"
340
+ end
341
+
342
+ def erb_with(content, filename = nil)
343
+ erb = ERB.new(content, nil, options.format == :text ? '<>' : nil)
344
+ erb.filename = filename if filename
345
+ erb
346
+ end
347
+
348
+ private
349
+
350
+ def render_section(section, &block)
351
+ section = section.name if section.is_a?(Section)
352
+ case section
353
+ when Section, String, Symbol
354
+ if respond_to?(section)
355
+ send(section, &block)
356
+ else
357
+ erb(section, &block)
358
+ end
359
+ when Module, Template
360
+ section.run(options, &block) if section.is_a?(Template)
361
+ end || ""
362
+ end
363
+
364
+ def cache(section)
365
+ content = @cache[section.to_sym]
366
+ return content if content
367
+
368
+ file = cache_filename(section)
369
+ @cache_filename[section.to_sym] = file
370
+ raise ArgumentError, "no template for section '#{section}' in #{self.class.path}" unless file
371
+ @cache[section.to_sym] = IO.read(file)
372
+ end
373
+
374
+ def cache_filename(section)
375
+ @cache_filename[section.to_sym] ||=
376
+ self.class.find_file(erb_file_for(section))
377
+ end
378
+
379
+ def set_ivars
380
+ options.each do |k, v|
381
+ instance_variable_set("@#{k}", v)
382
+ end
383
+ end
384
+
385
+ def add_options(opts = nil)
386
+ return(yield) if opts.nil? && block_given?
387
+ cur_opts = options if block_given?
388
+
389
+ self.options = options.merge(opts)
390
+
391
+ if block_given?
392
+ value = yield
393
+ self.options = cur_opts
394
+ value
395
+ end
396
+ end
397
+
398
+ def with_section(&block)
399
+ sect = section
400
+ value = yield
401
+ self.section = sect
402
+ value
403
+ end
404
+ end
405
+ end
406
+ end
407
+
@@ -0,0 +1,88 @@
1
+ require 'ostruct'
2
+
3
+ module YARD
4
+ module Templates
5
+ # An Options class containing default options for base template rendering. For
6
+ # options specific to generation of HTML output, see {CLI::YardocOptions}.
7
+ #
8
+ # @see CLI::YardocOptions
9
+ class TemplateOptions < YARD::Options
10
+ # @return [Symbol] the template output format
11
+ default_attr :format, :text
12
+
13
+ # @return [Symbol] the template name used to render output
14
+ default_attr :template, :default
15
+
16
+ # @return [Symbol] the markup format to use when parsing docstrings
17
+ default_attr :markup, :rdoc # default is :rdoc but falls back on :none
18
+
19
+ # @return [String] the default return type for a method with no return tags
20
+ default_attr :default_return, "Object"
21
+
22
+ # @return [Boolean] whether void methods should show "void" in their signature
23
+ default_attr :hide_void_return, false
24
+
25
+ # @return [Boolean] whether code blocks should be syntax highlighted
26
+ default_attr :highlight, true
27
+
28
+ # @return [Class] the markup provider class for the markup format
29
+ attr_accessor :markup_provider
30
+
31
+ # @return [OpenStruct] an open struct containing any global state across all
32
+ # generated objects in a template.
33
+ default_attr :globals, lambda { OpenStruct.new }
34
+ alias __globals globals
35
+
36
+ # @return [CodeObjects::Base] the main object being generated in the template
37
+ attr_accessor :object
38
+
39
+ # @return [CodeObjects::Base] the owner of the generated object
40
+ attr_accessor :owner
41
+
42
+ # @return [Symbol] the template type used to generate output
43
+ attr_accessor :type
44
+
45
+ # @return [Boolean] whether serialization should be performed
46
+ default_attr :serialize, true
47
+
48
+ # @return [Serializers::Base] the serializer used to generate links and serialize
49
+ # output. Serialization output only occurs if {#serialize} is +true+.
50
+ attr_accessor :serializer
51
+
52
+ # @deprecated use {#highlight} instead.
53
+ # @return [Boolean] whether highlighting should be ignored
54
+ attr_reader :no_highlight
55
+ undef no_highlight
56
+ def no_highlight; !highlight end
57
+ def no_highlight=(value) self.highlight = !value end
58
+
59
+ # @return [String] the title of a given page
60
+ attr_accessor :page_title
61
+
62
+ # @example A list of mixin path names (including wildcards)
63
+ # opts.embed_mixins #=> ['ClassMethods', '*Helper', 'YARD::*']
64
+ # @return [Array<String>] an array of module name wildcards to embed into
65
+ # class documentation as if their methods were defined directly in the class.
66
+ # Useful for modules like ClassMethods. If the name contains '::', the module
67
+ # is matched against the full mixin path, otherwise only the module name is used.
68
+ default_attr :embed_mixins, lambda { [] }
69
+
70
+ # @param [CodeObjects::Base] mixin accepts any code object, but returns
71
+ # nil unless the object is a module.
72
+ # @return [Boolean] whether a mixin matches the embed_mixins list
73
+ # @return [nil] if the mixin is not a module object
74
+ def embed_mixins_match?(mixin)
75
+ return nil unless mixin.is_a?(CodeObjects::ModuleObject)
76
+ return nil if mixin == object # the method is not inherited
77
+ embed_mixins.any? do |embed_mixin|
78
+ re = /\A#{Regexp.quote(embed_mixin).gsub('\*', '.*')}\Z/
79
+ matchstr = embed_mixin.include?("::") ? mixin.path : mixin.name
80
+ re.match(matchstr.to_s)
81
+ end
82
+ end
83
+
84
+ # @return [Verifier] the verifier object
85
+ attr_accessor :verifier
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,148 @@
1
+ module YARD
2
+ # Similar to a Proc, but runs a set of Ruby expressions using a small
3
+ # DSL to make tag lookups easier.
4
+ #
5
+ # The syntax is as follows:
6
+ # * All syntax is Ruby compatible
7
+ # * +object+ (+o+ for short) exist to access the object being verified
8
+ # * +@TAGNAME+ is translated into +object.tag('TAGNAME')+
9
+ # * +@@TAGNAME+ is translated into +object.tags('TAGNAME')+
10
+ # * +object+ can be omitted as target for method calls (it is implied)
11
+ #
12
+ # @example Create a verifier to check for objects that don't have @private tags
13
+ # verifier = Verifier.new('!@private')
14
+ # verifier.call(object) # => true (no @private tag)
15
+ # @example Create a verifier to find any return tag with an empty description
16
+ # Verifier.new('@return.text.empty?')
17
+ # # Equivalent to:
18
+ # Verifier.new('object.tag(:return).text.empty?')
19
+ # @example Check if there are any @param tags
20
+ # Verifier.new('@@param.empty?')
21
+ # # Equivalent to:
22
+ # Verifier.new('object.tags(:param).empty?')
23
+ # @example Using +object+ or +o+ to look up object attributes directly
24
+ # Verifier.new('object.docstring == "hello world"')
25
+ # # Equivalent to:
26
+ # Verifier.new('o.docstring == "hello world"')
27
+ # @example Without using +object+ or +o+
28
+ # Verifier.new('tag(:return).size == 1 || has_tag?(:author)')
29
+ # @example Specifying multiple expressions
30
+ # Verifier.new('@return', '@param', '@yield')
31
+ # # Equivalent to:
32
+ # Verifier.new('@return && @param && @yield')
33
+ class Verifier
34
+ # @return [Array<String>] a list of all expressions the verifier checks for
35
+ # @since 0.5.6
36
+ attr_reader :expressions
37
+
38
+ def expressions=(value)
39
+ @expressions = value
40
+ create_method_from_expressions
41
+ end
42
+
43
+ # Creates a verifier from a set of expressions
44
+ #
45
+ # @param [Array<String>] expressions a list of Ruby expressions to
46
+ # parse.
47
+ def initialize(*expressions)
48
+ @expressions = []
49
+ add_expressions(*expressions)
50
+ end
51
+
52
+ # Adds a set of expressions and recompiles the verifier
53
+ #
54
+ # @param [Array<String>] expressions a list of expressions
55
+ # @return [void]
56
+ # @since 0.5.6
57
+ def add_expressions(*expressions)
58
+ self.expressions += expressions.flatten
59
+ end
60
+
61
+ # Passes any method calls to the object from the {#call}
62
+ def method_missing(sym, *args, &block)
63
+ if object.respond_to?(sym)
64
+ object.send(sym, *args, &block)
65
+ else
66
+ super
67
+ end
68
+ end
69
+
70
+ # Tests the expressions on the object.
71
+ #
72
+ # @note If the object is a {CodeObjects::Proxy} the result will always be true.
73
+ # @param [CodeObjects::Base] object the object to verify
74
+ # @return [Boolean] the result of the expressions
75
+ def call(object)
76
+ return true if object.is_a?(CodeObjects::Proxy)
77
+ modify_nilclass
78
+ @object = object
79
+ retval = __execute ? true : false
80
+ unmodify_nilclass
81
+ retval
82
+ end
83
+
84
+ # Runs a list of objects against the verifier and returns the subset
85
+ # of verified objects.
86
+ #
87
+ # @param [Array<CodeObjects::Base>] list a list of code objects
88
+ # @return [Array<CodeObjects::Base>] a list of code objects that match
89
+ # the verifier.
90
+ def run(list)
91
+ list.reject {|item| call(item).is_a?(FalseClass) }
92
+ end
93
+
94
+ protected
95
+
96
+ # @return [CodeObjects::Base] the current object being tested
97
+ attr_reader :object
98
+ alias o object
99
+
100
+ private
101
+
102
+ # @private
103
+ NILCLASS_METHODS = [:type, :method_missing]
104
+
105
+ # Modifies nil to not throw NoMethodErrors. This allows
106
+ # syntax like object.tag(:return).text to work if the #tag
107
+ # call returns nil, which means users don't need to perform
108
+ # stringent nil checking
109
+ #
110
+ # @return [void]
111
+ def modify_nilclass
112
+ NILCLASS_METHODS.each do |meth|
113
+ NilClass.send(:define_method, meth) {|*args| }
114
+ end
115
+ end
116
+
117
+ # Returns the state of NilClass back to normal
118
+ # @return [void]
119
+ def unmodify_nilclass
120
+ NILCLASS_METHODS.each do |meth|
121
+ NilClass.send(:remove_method, meth)
122
+ end
123
+ end
124
+
125
+ # Creates the +__execute+ method by evaluating the expressions
126
+ # as Ruby code
127
+ # @return [void]
128
+ def create_method_from_expressions
129
+ expr = expressions.map {|e| "(#{parse_expression(e)})" }.join(" && ")
130
+
131
+ instance_eval(<<-eof, __FILE__, __LINE__ + 1)
132
+ def __execute; #{expr}; end
133
+ eof
134
+ end
135
+
136
+ # Parses a single expression, handling some of the DSL syntax.
137
+ #
138
+ # The syntax "@tag" should be turned into object.tag(:tag),
139
+ # and "@@tag" should be turned into object.tags(:tag)
140
+ #
141
+ # @return [String] the parsed expression
142
+ def parse_expression(expr)
143
+ expr = expr.gsub(/@@(?:(\w+)|\{([\w\.]+)\})/, 'object.tags("\1\2")')
144
+ expr = expr.gsub(/@(?:(\w+)|\{([\w\.]+)\})/, 'object.tag("\1\2")')
145
+ expr
146
+ end
147
+ end
148
+ end
@@ -0,0 +1,3 @@
1
+ module YARD
2
+ VERSION = "0.8.7.1"
3
+ end