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,99 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ class TestYRI < YARD::CLI::YRI
4
+ public :optparse, :find_object, :cache_object
5
+ def test_stub; end
6
+ def print_object(*args) test_stub; super end
7
+ end
8
+
9
+ describe YARD::CLI::YRI do
10
+ before do
11
+ @yri = TestYRI.new
12
+ Registry.stub!(:load)
13
+ end
14
+
15
+ describe '#find_object' do
16
+ it "should use cache if available" do
17
+ @yri.stub!(:cache_object)
18
+ File.should_receive(:exist?).with('.yardoc').and_return(false)
19
+ File.should_receive(:exist?).with('bar.yardoc').and_return(true)
20
+ Registry.should_receive(:load).with('bar.yardoc')
21
+ Registry.should_receive(:at).ordered.with('Foo').and_return(nil)
22
+ Registry.should_receive(:at).ordered.with('Foo').and_return('OBJ')
23
+ @yri.instance_variable_set("@cache", {'Foo' => 'bar.yardoc'})
24
+ @yri.find_object('Foo').should == 'OBJ'
25
+ end
26
+
27
+ it "should never use cache ahead of current directory's .yardoc" do
28
+ @yri.stub!(:cache_object)
29
+ File.should_receive(:exist?).with('.yardoc').and_return(true)
30
+ Registry.should_receive(:load).with('.yardoc')
31
+ Registry.should_receive(:at).ordered.with('Foo').and_return(nil)
32
+ Registry.should_receive(:at).ordered.with('Foo').and_return('OBJ')
33
+ @yri.instance_variable_set("@cache", {'Foo' => 'bar.yardoc'})
34
+ @yri.find_object('Foo').should == 'OBJ'
35
+ @yri.instance_variable_get("@search_paths")[0].should == '.yardoc'
36
+ end
37
+ end
38
+
39
+ describe '#cache_object' do
40
+ it "should skip caching for Registry.yardoc_file" do
41
+ File.should_not_receive(:open).with(CLI::YRI::CACHE_FILE, 'w')
42
+ @yri.cache_object('Foo', Registry.yardoc_file)
43
+ end
44
+ end
45
+
46
+ describe '#initialize' do
47
+ it "should load search paths" do
48
+ path = %r{/\.yard/yri_search_paths$}
49
+ File.should_receive(:file?).with(%r{/\.yard/yri_cache$}).and_return(false)
50
+ File.should_receive(:file?).with(path).and_return(true)
51
+ File.should_receive(:readlines).with(path).and_return(%w(line1 line2))
52
+ @yri = YARD::CLI::YRI.new
53
+ spaths = @yri.instance_variable_get("@search_paths")
54
+ spaths.should include('line1')
55
+ spaths.should include('line2')
56
+ end
57
+
58
+ it "should use DEFAULT_SEARCH_PATHS prior to other paths" do
59
+ YARD::CLI::YRI::DEFAULT_SEARCH_PATHS.push('foo', 'bar')
60
+ path = %r{/\.yard/yri_search_paths$}
61
+ File.should_receive(:file?).with(%r{/\.yard/yri_cache$}).and_return(false)
62
+ File.should_receive(:file?).with(path).and_return(true)
63
+ File.should_receive(:readlines).with(path).and_return(%w(line1 line2))
64
+ @yri = YARD::CLI::YRI.new
65
+ spaths = @yri.instance_variable_get("@search_paths")
66
+ spaths[0,4].should == %w(foo bar line1 line2)
67
+ YARD::CLI::YRI::DEFAULT_SEARCH_PATHS.replace([])
68
+ end
69
+ end
70
+
71
+ describe '#run' do
72
+ it "should search for objects and print their documentation" do
73
+ obj = YARD::CodeObjects::ClassObject.new(:root, 'Foo')
74
+ @yri.should_receive(:print_object).with(obj)
75
+ @yri.run('Foo')
76
+ Registry.clear
77
+ end
78
+
79
+ it "should print usage if no object is provided" do
80
+ @yri.should_receive(:print_usage)
81
+ @yri.should_receive(:exit).with(1)
82
+ @yri.run('')
83
+ end
84
+
85
+ it "should print no documentation exists for object if object is not found" do
86
+ STDERR.should_receive(:puts).with("No documentation for `Foo'")
87
+ @yri.should_receive(:exit).with(1)
88
+ @yri.run('Foo')
89
+ end
90
+
91
+ it "should ensure output is serialized" do
92
+ obj = YARD::CodeObjects::ClassObject.new(:root, 'Foo')
93
+ class << @yri
94
+ def test_stub; @serializer.should_receive(:serialize).once end
95
+ end
96
+ @yri.run('Foo')
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,438 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe YARD::CodeObjects::Base do
4
+ before { Registry.clear }
5
+
6
+ # Fix this
7
+ # it "should not allow empty object name" do
8
+ # lambda { Base.new(:root, '') }.should raise_error(ArgumentError)
9
+ # end
10
+
11
+ it "should return a unique instance of any registered object" do
12
+ obj = ClassObject.new(:root, :Me)
13
+ obj2 = ClassObject.new(:root, :Me)
14
+ obj.object_id.should == obj2.object_id
15
+
16
+ obj3 = ModuleObject.new(obj, :Too)
17
+ obj4 = CodeObjects::Base.new(obj3, :Hello)
18
+ obj4.parent = obj
19
+
20
+ obj5 = CodeObjects::Base.new(obj3, :hello)
21
+ obj4.object_id.should_not == obj5.object_id
22
+ end
23
+
24
+ it "should create a new object if cached object is not of the same class" do
25
+ ConstantObject.new(:root, "MYMODULE").should be_instance_of(ConstantObject)
26
+ ModuleObject.new(:root, "MYMODULE").should be_instance_of(ModuleObject)
27
+ ClassObject.new(:root, "MYMODULE").should be_instance_of(ClassObject)
28
+ YARD::Registry.at("MYMODULE").should be_instance_of(ClassObject)
29
+ end
30
+
31
+ it "should simplify complex namespace paths" do
32
+ obj = ClassObject.new(:root, "A::B::C::D")
33
+ obj.name.should == :D
34
+ obj.path.should == "A::B::C::D"
35
+ obj.namespace.should == P("A::B::C")
36
+ end
37
+
38
+ # @bug gh-552
39
+ it "should simplify complex namespace paths when path starts with ::" do
40
+ obj = ClassObject.new(:root, "::A::B::C::D")
41
+ obj.name.should == :D
42
+ obj.path.should == "A::B::C::D"
43
+ obj.namespace.should == P("A::B::C")
44
+ end
45
+
46
+ it "should recall the block if #new is called on an existing object" do
47
+ o1 = ClassObject.new(:root, :Me) do |o|
48
+ o.docstring = "DOCSTRING"
49
+ end
50
+
51
+ o2 = ClassObject.new(:root, :Me) do |o|
52
+ o.docstring = "NOT_DOCSTRING"
53
+ end
54
+
55
+ o1.object_id.should == o2.object_id
56
+ o1.docstring.should == "NOT_DOCSTRING"
57
+ o2.docstring.should == "NOT_DOCSTRING"
58
+ end
59
+
60
+ it "should allow complex name and convert that to namespace" do
61
+ obj = CodeObjects::Base.new(nil, "A::B")
62
+ obj.namespace.path.should == "A"
63
+ obj.name.should == :B
64
+ end
65
+
66
+ it "should allow namespace to be nil and not register in the Registry" do
67
+ obj = CodeObjects::Base.new(nil, :Me)
68
+ obj.namespace.should == nil
69
+ Registry.at(:Me).should == nil
70
+ end
71
+
72
+ it "should allow namespace to be a NamespaceObject" do
73
+ ns = ModuleObject.new(:root, :Name)
74
+ obj = CodeObjects::Base.new(ns, :Me)
75
+ obj.namespace.should == ns
76
+ end
77
+
78
+ it "should allow :root to be the shorthand namespace of `Registry.root`" do
79
+ obj = CodeObjects::Base.new(:root, :Me)
80
+ obj.namespace.should == Registry.root
81
+ end
82
+
83
+ it "should not allow any other types as namespace" do
84
+ lambda { CodeObjects::Base.new("ROOT!", :Me) }.should raise_error(ArgumentError)
85
+ end
86
+
87
+ it "should register itself in the registry if namespace is supplied" do
88
+ obj = ModuleObject.new(:root, :Me)
89
+ Registry.at(:Me).should == obj
90
+
91
+ obj2 = ModuleObject.new(obj, :Too)
92
+ Registry.at(:"Me::Too").should == obj2
93
+ end
94
+
95
+ it "should set any attribute using #[]=" do
96
+ obj = ModuleObject.new(:root, :YARD)
97
+ obj[:some_attr] = "hello"
98
+ obj[:some_attr].should == "hello"
99
+ end
100
+
101
+ it "#[]= should use the accessor method if available" do
102
+ obj = CodeObjects::Base.new(:root, :YARD)
103
+ obj[:source] = "hello"
104
+ obj.source.should == "hello"
105
+ obj.source = "unhello"
106
+ obj[:source].should == "unhello"
107
+ end
108
+
109
+ it "should set attributes via attr= through method_missing" do
110
+ obj = CodeObjects::Base.new(:root, :YARD)
111
+ obj.something = 2
112
+ obj.something.should == 2
113
+ obj[:something].should == 2
114
+ end
115
+
116
+ it "should exist in the parent's #children after creation" do
117
+ obj = ModuleObject.new(:root, :YARD)
118
+ obj2 = MethodObject.new(obj, :testing)
119
+ obj.children.should include(obj2)
120
+ end
121
+
122
+ it "should properly re-indent source starting from 0 indentation" do
123
+ obj = CodeObjects::Base.new(nil, :test)
124
+ obj.source = <<-eof
125
+ def mymethod
126
+ if x == 2 &&
127
+ 5 == 5
128
+ 3
129
+ else
130
+ 1
131
+ end
132
+ end
133
+ eof
134
+ obj.source.should == "def mymethod\n if x == 2 &&\n 5 == 5\n 3\n else\n 1\n end\nend"
135
+
136
+ Registry.clear
137
+ Parser::SourceParser.parse_string <<-eof
138
+ def key?(key)
139
+ super(key)
140
+ end
141
+ eof
142
+ Registry.at('#key?').source.should == "def key?(key)\n super(key)\nend"
143
+
144
+ Registry.clear
145
+ Parser::SourceParser.parse_string <<-eof
146
+ def key?(key)
147
+ if x == 2
148
+ puts key
149
+ else
150
+ exit
151
+ end
152
+ end
153
+ eof
154
+ Registry.at('#key?').source.should == "def key?(key)\n if x == 2\n puts key\n else\n exit\n end\nend"
155
+ end
156
+
157
+ it "should not add newlines to source when parsing sub blocks" do
158
+ Parser::SourceParser.parse_string <<-eof
159
+ module XYZ
160
+ module ZYX
161
+ class ABC
162
+ def msg
163
+ hello_world
164
+ end
165
+ end
166
+ end
167
+ end
168
+ eof
169
+ Registry.at('XYZ::ZYX::ABC#msg').source.should == "def msg\n hello_world\nend"
170
+ end
171
+
172
+ it "should handle source for 'def x; end'" do
173
+ Registry.clear
174
+ Parser::SourceParser.parse_string "def x; 2 end"
175
+ Registry.at('#x').source.should == "def x; 2 end"
176
+ end
177
+
178
+ it "should set file and line information" do
179
+ Parser::SourceParser.parse_string <<-eof
180
+ class X; end
181
+ eof
182
+ Registry.at(:X).file.should == '(stdin)'
183
+ Registry.at(:X).line.should == 1
184
+ end
185
+
186
+ it "should maintain all file associations when objects are defined multiple times in one file" do
187
+ Parser::SourceParser.parse_string <<-eof
188
+ class X; end
189
+ class X; end
190
+ class X; end
191
+ eof
192
+
193
+ Registry.at(:X).file.should == '(stdin)'
194
+ Registry.at(:X).line.should == 1
195
+ Registry.at(:X).files.should == [['(stdin)', 1], ['(stdin)', 2], ['(stdin)', 3]]
196
+ end
197
+
198
+ it "should maintain all file associations when objects are defined multiple times in multiple files" do
199
+ 3.times do |i|
200
+ File.stub!(:read_binary).and_return("class X; end")
201
+ Parser::SourceParser.new.parse("file#{i+1}.rb")
202
+ end
203
+
204
+ Registry.at(:X).file.should == 'file1.rb'
205
+ Registry.at(:X).line.should == 1
206
+ Registry.at(:X).files.should == [['file1.rb', 1], ['file2.rb', 1], ['file3.rb', 1]]
207
+ end
208
+
209
+ it "should prioritize the definition with a docstring when returning #file" do
210
+ Parser::SourceParser.parse_string <<-eof
211
+ class X; end
212
+ class X; end
213
+ # docstring
214
+ class X; end
215
+ eof
216
+
217
+ Registry.at(:X).file.should == '(stdin)'
218
+ Registry.at(:X).line.should == 4
219
+ Registry.at(:X).files.should == [['(stdin)', 4], ['(stdin)', 1], ['(stdin)', 2]]
220
+ end
221
+
222
+ describe '#format' do
223
+ it "should send to Templates.render" do
224
+ object = MethodObject.new(:root, :method)
225
+ Templates::Engine.should_receive(:render).with(:x => 1, :object => object)
226
+ object.format :x => 1
227
+ end
228
+ end
229
+
230
+ describe '#source_type' do
231
+ it "should default source_type to :ruby" do
232
+ object = MethodObject.new(:root, :method)
233
+ object.source_type.should == :ruby
234
+ end
235
+ end
236
+
237
+ describe '#relative_path' do
238
+ it "should accept a string" do
239
+ YARD.parse_string "module A; class B; end; class C; end; end"
240
+ Registry.at('A::B').relative_path(Registry.at('A::C')).should ==
241
+ Registry.at('A::B').relative_path('A::C')
242
+ end
243
+
244
+ it "should return full class name when objects share a common class prefix" do
245
+ YARD.parse_string "module User; end; module UserManager; end"
246
+ Registry.at('User').relative_path('UserManager').should == 'UserManager'
247
+ Registry.at('User').relative_path(Registry.at('UserManager')).should == 'UserManager'
248
+ end
249
+
250
+ it "should return the relative path when they share a common namespace" do
251
+ YARD.parse_string "module A; class B; end; class C; end; end"
252
+ Registry.at('A::B').relative_path(Registry.at('A::C')).should == 'C'
253
+ YARD.parse_string "module Foo; module A; end; module B; def foo; end end end"
254
+ Registry.at('Foo::A').relative_path(Registry.at('Foo::B#foo')).should == 'B#foo'
255
+ end
256
+
257
+ it "should return the full path if they don't have a common namespace" do
258
+ YARD.parse_string "module A; class B; end; end; module D; class C; end; end"
259
+ Registry.at('A::B').relative_path('D::C').should == 'D::C'
260
+ YARD.parse_string 'module C::B::C; module Apple; end; module Ant; end end'
261
+ Registry.at('C::B::C::Apple').relative_path('C::B::C::Ant').should == 'Ant'
262
+ YARD.parse_string 'module OMG::ABC; end; class Object; end'
263
+ Registry.at('OMG::ABC').relative_path('Object').should == "Object"
264
+ YARD.parse_string("class YARD::Config; MYCONST = 1; end")
265
+ Registry.at('YARD::Config').relative_path('YARD::Config::MYCONST').should == "MYCONST"
266
+ end
267
+
268
+ it "should return a relative path for class methods" do
269
+ YARD.parse_string "module A; def self.b; end; def self.c; end; end"
270
+ Registry.at('A.b').relative_path('A.c').should == 'c'
271
+ Registry.at('A').relative_path('A.c').should == 'c'
272
+ end
273
+
274
+ it "should return a relative path for instance methods" do
275
+ YARD.parse_string "module A; def b; end; def c; end; end"
276
+ Registry.at('A#b').relative_path('A#c').should == '#c'
277
+ Registry.at('A').relative_path('A#c').should == '#c'
278
+ end
279
+
280
+ it "should return full path if relative path is to parent namespace" do
281
+ YARD.parse_string "module A; module B; end end"
282
+ Registry.at('A::B').relative_path('A').should == 'A'
283
+ end
284
+
285
+ it "should only return name for relative path to self" do
286
+ YARD.parse_string("class A::B::C; def foo; end end")
287
+ Registry.at('A::B::C').relative_path('A::B::C').should == 'C'
288
+ Registry.at('A::B::C#foo').relative_path('A::B::C#foo').should == '#foo'
289
+ end
290
+ end
291
+
292
+ describe '#docstring=' do
293
+ it "should convert string into Docstring when #docstring= is set" do
294
+ o = ClassObject.new(:root, :Me)
295
+ o.docstring = "DOCSTRING"
296
+ o.docstring.should be_instance_of(Docstring)
297
+ end
298
+
299
+ it "should set docstring to docstring of other object if docstring is '(see Path)'" do
300
+ ClassObject.new(:root, :AnotherObject) {|x| x.docstring = "FOO" }
301
+ o = ClassObject.new(:root, :Me)
302
+ o.docstring = '(see AnotherObject)'
303
+ o.docstring.should == "FOO"
304
+ end
305
+
306
+ it "should not copy docstring mid-docstring" do
307
+ doc = "Hello.\n(see file.rb)\nmore documentation"
308
+ o = ClassObject.new(:root, :Me)
309
+ o.docstring = doc
310
+ o.docstring.should == doc
311
+ end
312
+
313
+ it "should allow extra docstring after (see Path)" do
314
+ ClassObject.new(:root, :AnotherObject) {|x| x.docstring = "FOO" }
315
+ o = ClassObject.new(:root, :Me)
316
+ o.docstring = Docstring.new("(see AnotherObject)\n\nEXTRA\n@api private", o)
317
+ o.docstring.should == "FOO\n\nEXTRA"
318
+ o.docstring.should have_tag(:api)
319
+ end
320
+ end
321
+
322
+ describe '#docstring' do
323
+ it "should return empty string if docstring was '(see Path)' and Path is not resolved" do
324
+ o = ClassObject.new(:root, :Me)
325
+ o.docstring = '(see AnotherObject)'
326
+ o.docstring.should == ""
327
+ end
328
+
329
+ it "should return docstring when object is resolved" do
330
+ o = ClassObject.new(:root, :Me)
331
+ o.docstring = '(see AnotherObject)'
332
+ o.docstring.should == ""
333
+ ClassObject.new(:root, :AnotherObject) {|x| x.docstring = "FOO" }
334
+ o.docstring.should == "FOO"
335
+ end
336
+
337
+ describe 'localization' do
338
+ it "should return localized docstring" do
339
+ fr_locale = YARD::I18n::Locale.new('fr')
340
+ fr_locale.stub!(:translate).with('Hello').and_return('Bonjour')
341
+
342
+ o = ClassObject.new(:root, :Me)
343
+ o.docstring = 'Hello'
344
+ o.docstring.should == 'Hello'
345
+
346
+ Registry.stub!(:locale).with('fr').and_return(fr_locale)
347
+ o.docstring('fr').should == "Bonjour"
348
+ end
349
+
350
+ it "should return updated localized docstring" do
351
+ fr_locale = YARD::I18n::Locale.new('fr')
352
+ Registry.stub!(:locale).with('fr').and_return(fr_locale)
353
+
354
+ o = ClassObject.new(:root, :Me)
355
+ o.docstring = 'Hello'
356
+ o.docstring.should == 'Hello'
357
+
358
+ fr_locale.stub!(:translate).with('Hello').and_return('Bonjour')
359
+ o.docstring('fr').should == "Bonjour"
360
+
361
+ o.docstring = 'World'
362
+ fr_locale.stub!(:translate).with('World').and_return('Monde')
363
+ o.docstring('fr').should == "Monde"
364
+ o.docstring.should == 'World'
365
+ end
366
+ end
367
+ end
368
+
369
+ describe '#add_file' do
370
+ it "should only add a file/line combination once" do
371
+ o = ClassObject.new(:root, :Me)
372
+ o.add_file('filename', 12)
373
+ o.files.should == [['filename', 12]]
374
+ o.add_file('filename', 12)
375
+ o.files.should == [['filename', 12]]
376
+ o.add_file('filename', 40) # different line
377
+ o.files.should == [['filename', 12], ['filename', 40]]
378
+ end
379
+ end
380
+
381
+ describe '#copy_to' do
382
+ it "should copy all data to new object" do
383
+ YARD.parse_string <<-eof
384
+ private
385
+ # A docstring
386
+ # @return [String] a tag
387
+ def foo(a, b, c)
388
+ source_code_here
389
+ end
390
+ eof
391
+ foo_c = MethodObject.new(:root, :foo, :class)
392
+ Registry.at('#foo').copy_to(foo_c)
393
+ foo_c.scope.should == :class
394
+ foo_c.visibility.should == :private
395
+ foo_c.type.should == :method
396
+ foo_c.class.should == MethodObject
397
+ foo_c.path.should == '::foo'
398
+ foo_c.docstring.should == "A docstring"
399
+ foo_c.tag(:return).types.should == ['String']
400
+ foo_c.file.should == '(stdin)'
401
+ foo_c.line.should == 4
402
+ foo_c.source.should =~ /source_code_here/
403
+ foo_c.signature.should == 'def foo(a, b, c)'
404
+ foo_c.parameters.should == [['a', nil], ['b', nil], ['c', nil]]
405
+ end
406
+
407
+ it "should return copied object" do
408
+ YARD.parse_string 'def foo; end'
409
+ foo_c = MethodObject.new(:root, :foo, :class)
410
+ Registry.at('#foo').copy_to(foo_c).should == foo_c
411
+ end
412
+
413
+ it "should copy docstring and rewrite tags for new object" do
414
+ YARD.parse_string <<-eof
415
+ # @return [String] a tag
416
+ def foo; end
417
+ eof
418
+ foo_c = MethodObject.new(:root, :foo, :class)
419
+ foo_i = Registry.at('#foo')
420
+ foo_i.copy_to(foo_c)
421
+ foo_i.tags.should_not == foo_c.tags
422
+ foo_c.tags.first.object.should == foo_c
423
+ end
424
+
425
+ it "should only copy #copyable_attributes" do
426
+ foo = MethodObject.new(:root, :foo)
427
+ foo.should_receive(:copyable_attributes).and_return %w(a b c)
428
+ foo.should_receive(:instance_variable_get).with('@a').and_return(1)
429
+ foo.should_receive(:instance_variable_get).with('@b').and_return(2)
430
+ foo.should_receive(:instance_variable_get).with('@c').and_return(3)
431
+ bar = MethodObject.new(:root, :bar)
432
+ bar.should_receive(:instance_variable_set).with('@a', 1)
433
+ bar.should_receive(:instance_variable_set).with('@b', 2)
434
+ bar.should_receive(:instance_variable_set).with('@c', 3)
435
+ foo.copy_to(bar)
436
+ end
437
+ end
438
+ end