yard 0.7.5 → 0.8.0

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

Potentially problematic release.


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

Files changed (339) hide show
  1. data/.yardopts +10 -2
  2. data/ChangeLog +1263 -38
  3. data/LEGAL +5 -5
  4. data/LICENSE +1 -1
  5. data/README.md +91 -82
  6. data/Rakefile +6 -6
  7. data/benchmarks/builtins_vs_eval.rb +1 -1
  8. data/benchmarks/erb_vs_erubis.rb +4 -4
  9. data/benchmarks/generation.rb +5 -5
  10. data/benchmarks/parsing.rb +2 -2
  11. data/benchmarks/registry_store_types.rb +48 -0
  12. data/bin/yard +9 -1
  13. data/bin/yardoc +9 -1
  14. data/bin/yri +10 -2
  15. data/docs/CodeObjects.md +10 -10
  16. data/docs/GettingStarted.md +85 -83
  17. data/docs/Handlers.md +21 -21
  18. data/docs/Overview.md +7 -7
  19. data/docs/Parser.md +30 -30
  20. data/docs/Tags.md +250 -554
  21. data/docs/TagsArch.md +123 -0
  22. data/docs/Templates.md +58 -80
  23. data/docs/WhatsNew.md +378 -133
  24. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  25. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  26. data/docs/templates/default/layout/html/setup.rb +8 -0
  27. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  28. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  29. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  30. data/docs/templates/plugin.rb +65 -0
  31. data/lib/yard.rb +1 -10
  32. data/lib/yard/autoload.rb +75 -27
  33. data/lib/yard/cli/command.rb +5 -2
  34. data/lib/yard/cli/command_parser.rb +3 -2
  35. data/lib/yard/cli/diff.rb +1 -1
  36. data/lib/yard/cli/i18n.rb +69 -0
  37. data/lib/yard/cli/list.rb +1 -1
  38. data/lib/yard/cli/server.rb +30 -7
  39. data/lib/yard/cli/stats.rb +5 -6
  40. data/lib/yard/cli/yardoc.rb +95 -45
  41. data/lib/yard/cli/yri.rb +24 -3
  42. data/lib/yard/code_objects/base.rb +35 -4
  43. data/lib/yard/code_objects/extra_file_object.rb +1 -1
  44. data/lib/yard/code_objects/macro_object.rb +56 -99
  45. data/lib/yard/code_objects/method_object.rb +44 -6
  46. data/lib/yard/config.rb +18 -8
  47. data/lib/yard/core_ext/symbol_hash.rb +1 -1
  48. data/lib/yard/docstring.rb +45 -85
  49. data/lib/yard/docstring_parser.rb +269 -0
  50. data/lib/yard/handlers/base.rb +129 -118
  51. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  52. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  53. data/lib/yard/handlers/c/base.rb +110 -0
  54. data/lib/yard/handlers/c/class_handler.rb +26 -0
  55. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  56. data/lib/yard/handlers/c/handler_methods.rb +165 -0
  57. data/lib/yard/handlers/c/init_handler.rb +16 -0
  58. data/lib/yard/handlers/c/method_handler.rb +35 -0
  59. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  60. data/lib/yard/handlers/c/module_handler.rb +16 -0
  61. data/lib/yard/handlers/c/override_comment_handler.rb +22 -0
  62. data/lib/yard/handlers/c/path_handler.rb +10 -0
  63. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  64. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  65. data/lib/yard/handlers/processor.rb +41 -30
  66. data/lib/yard/handlers/ruby/alias_handler.rb +0 -2
  67. data/lib/yard/handlers/ruby/attribute_handler.rb +16 -17
  68. data/lib/yard/handlers/ruby/base.rb +10 -6
  69. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  70. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  71. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +71 -0
  72. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +0 -3
  73. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +16 -17
  74. data/lib/yard/handlers/ruby/legacy/base.rb +28 -6
  75. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  76. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  77. data/lib/yard/handlers/ruby/legacy/method_handler.rb +0 -2
  78. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +1 -1
  79. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  80. data/lib/yard/handlers/ruby/method_handler.rb +10 -15
  81. data/lib/yard/handlers/ruby/mixin_handler.rb +1 -1
  82. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  83. data/lib/yard/handlers/ruby/struct_handler_methods.rb +3 -2
  84. data/lib/yard/i18n/pot_generator.rb +281 -0
  85. data/lib/yard/i18n/text.rb +72 -0
  86. data/lib/yard/logging.rb +3 -7
  87. data/lib/yard/options.rb +216 -0
  88. data/lib/yard/parser/c/c_parser.rb +225 -0
  89. data/lib/yard/parser/c/comment_parser.rb +131 -0
  90. data/lib/yard/parser/c/statement.rb +63 -0
  91. data/lib/yard/parser/ruby/ast_node.rb +91 -1
  92. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +1 -0
  93. data/lib/yard/parser/ruby/legacy/statement.rb +7 -2
  94. data/lib/yard/parser/ruby/legacy/statement_list.rb +13 -22
  95. data/lib/yard/parser/ruby/ruby_parser.rb +87 -26
  96. data/lib/yard/parser/source_parser.rb +89 -88
  97. data/lib/yard/rake/yardoc_task.rb +1 -1
  98. data/lib/yard/registry.rb +21 -10
  99. data/lib/yard/registry_store.rb +48 -0
  100. data/lib/yard/serializers/file_system_serializer.rb +18 -20
  101. data/lib/yard/serializers/yardoc_serializer.rb +1 -0
  102. data/lib/yard/server/adapter.rb +2 -2
  103. data/lib/yard/server/commands/base.rb +1 -1
  104. data/lib/yard/server/commands/display_object_command.rb +13 -6
  105. data/lib/yard/server/commands/frames_command.rb +4 -21
  106. data/lib/yard/server/commands/library_command.rb +57 -11
  107. data/lib/yard/server/commands/list_command.rb +10 -34
  108. data/lib/yard/server/commands/search_command.rb +8 -2
  109. data/lib/yard/server/doc_server_helper.rb +34 -0
  110. data/lib/yard/server/rack_adapter.rb +5 -1
  111. data/lib/yard/server/router.rb +4 -10
  112. data/lib/yard/server/static_caching.rb +2 -2
  113. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +2 -2
  114. data/lib/yard/server/templates/default/fulldoc/html/js/live.js +0 -15
  115. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +3 -3
  116. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  117. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +1 -1
  118. data/lib/yard/server/templates/doc_server/search/html/setup.rb +1 -1
  119. data/lib/yard/tags/default_factory.rb +31 -4
  120. data/lib/yard/tags/directives.rb +593 -0
  121. data/lib/yard/tags/library.rb +437 -35
  122. data/lib/yard/templates/engine.rb +17 -12
  123. data/lib/yard/templates/helpers/base_helper.rb +8 -2
  124. data/lib/yard/templates/helpers/html_helper.rb +57 -14
  125. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +1 -1
  126. data/lib/yard/templates/helpers/markup_helper.rb +9 -9
  127. data/lib/yard/templates/helpers/text_helper.rb +2 -2
  128. data/lib/yard/templates/template.rb +42 -13
  129. data/lib/yard/templates/template_options.rb +81 -0
  130. data/spec/cli/command_parser_spec.rb +4 -4
  131. data/spec/cli/command_spec.rb +3 -3
  132. data/spec/cli/config_spec.rb +13 -13
  133. data/spec/cli/diff_spec.rb +13 -10
  134. data/spec/cli/gems_spec.rb +12 -12
  135. data/spec/cli/help_spec.rb +2 -2
  136. data/spec/cli/i18n_spec.rb +111 -0
  137. data/spec/cli/server_spec.rb +66 -18
  138. data/spec/cli/stats_spec.rb +15 -15
  139. data/spec/cli/yardoc_spec.rb +124 -97
  140. data/spec/cli/yri_spec.rb +14 -12
  141. data/spec/code_objects/base_spec.rb +104 -46
  142. data/spec/code_objects/class_object_spec.rb +33 -33
  143. data/spec/code_objects/code_object_list_spec.rb +5 -5
  144. data/spec/code_objects/constants_spec.rb +4 -3
  145. data/spec/code_objects/extra_file_object_spec.rb +19 -19
  146. data/spec/code_objects/macro_object_spec.rb +31 -37
  147. data/spec/code_objects/method_object_spec.rb +46 -23
  148. data/spec/code_objects/module_object_spec.rb +16 -16
  149. data/spec/code_objects/namespace_object_spec.rb +6 -6
  150. data/spec/code_objects/proxy_spec.rb +19 -19
  151. data/spec/config_spec.rb +33 -24
  152. data/spec/core_ext/array_spec.rb +1 -1
  153. data/spec/core_ext/file_spec.rb +8 -8
  154. data/spec/core_ext/hash_spec.rb +1 -1
  155. data/spec/core_ext/insertion_spec.rb +3 -3
  156. data/spec/core_ext/module_spec.rb +1 -1
  157. data/spec/core_ext/string_spec.rb +6 -6
  158. data/spec/core_ext/symbol_hash_spec.rb +11 -11
  159. data/spec/docstring_parser_spec.rb +207 -0
  160. data/spec/docstring_spec.rb +33 -146
  161. data/spec/handlers/alias_handler_spec.rb +14 -14
  162. data/spec/handlers/attribute_handler_spec.rb +20 -20
  163. data/spec/handlers/base_spec.rb +16 -16
  164. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  165. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  166. data/spec/handlers/c/class_handler_spec.rb +64 -0
  167. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  168. data/spec/handlers/c/init_handler_spec.rb +36 -0
  169. data/spec/handlers/c/method_handler_spec.rb +228 -0
  170. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  171. data/spec/handlers/c/module_handler_spec.rb +38 -0
  172. data/spec/handlers/c/override_comment_handler_spec.rb +43 -0
  173. data/spec/handlers/c/path_handler_spec.rb +35 -0
  174. data/spec/handlers/c/spec_helper.rb +11 -0
  175. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  176. data/spec/handlers/class_condition_handler_spec.rb +10 -10
  177. data/spec/handlers/class_handler_spec.rb +38 -38
  178. data/spec/handlers/class_variable_handler_spec.rb +1 -1
  179. data/spec/handlers/constant_handler_spec.rb +7 -7
  180. data/spec/handlers/{macro_handler_spec.rb → dsl_handler_spec.rb} +72 -53
  181. data/spec/handlers/examples/alias_handler_001.rb.txt +5 -5
  182. data/spec/handlers/examples/class_condition_handler_001.rb.txt +9 -9
  183. data/spec/handlers/examples/class_handler_001.rb.txt +1 -1
  184. data/spec/handlers/examples/dsl_handler_001.rb.txt +110 -0
  185. data/spec/handlers/examples/exception_handler_001.rb.txt +14 -14
  186. data/spec/handlers/examples/method_condition_handler_001.rb.txt +2 -2
  187. data/spec/handlers/examples/method_handler_001.rb.txt +16 -16
  188. data/spec/handlers/examples/mixin_handler_001.rb.txt +8 -4
  189. data/spec/handlers/examples/private_constant_handler_001.rb.txt +1 -1
  190. data/spec/handlers/examples/visibility_handler_001.rb.txt +3 -3
  191. data/spec/handlers/examples/yield_handler_001.rb.txt +13 -14
  192. data/spec/handlers/exception_handler_spec.rb +9 -9
  193. data/spec/handlers/extend_handler_spec.rb +2 -2
  194. data/spec/handlers/legacy_base_spec.rb +34 -34
  195. data/spec/handlers/method_condition_handler_spec.rb +2 -2
  196. data/spec/handlers/method_handler_spec.rb +33 -33
  197. data/spec/handlers/mixin_handler_spec.rb +13 -9
  198. data/spec/handlers/module_function_handler_spec.rb +82 -0
  199. data/spec/handlers/module_handler_spec.rb +6 -6
  200. data/spec/handlers/private_constant_handler_spec.rb +3 -3
  201. data/spec/handlers/processor_spec.rb +5 -5
  202. data/spec/handlers/ruby/base_spec.rb +10 -6
  203. data/spec/handlers/ruby/legacy/base_spec.rb +11 -7
  204. data/spec/handlers/spec_helper.rb +2 -3
  205. data/spec/handlers/visibility_handler_spec.rb +6 -6
  206. data/spec/handlers/yield_handler_spec.rb +8 -8
  207. data/spec/i18n/pot_generator_spec.rb +244 -0
  208. data/spec/i18n/text_spec.rb +69 -0
  209. data/spec/options_spec.rb +160 -0
  210. data/spec/parser/base_spec.rb +3 -3
  211. data/spec/parser/c_parser_spec.rb +31 -257
  212. data/spec/parser/examples/array.c.txt +187 -187
  213. data/spec/parser/examples/extrafile.c.txt +1 -1
  214. data/spec/parser/examples/override.c.txt +1 -1
  215. data/spec/parser/ruby/ast_node_spec.rb +1 -1
  216. data/spec/parser/ruby/legacy/statement_list_spec.rb +24 -24
  217. data/spec/parser/ruby/legacy/token_list_spec.rb +7 -7
  218. data/spec/parser/ruby/ruby_parser_spec.rb +56 -34
  219. data/spec/parser/source_parser_spec.rb +125 -65
  220. data/spec/parser/tag_parsing_spec.rb +4 -4
  221. data/spec/rake/yardoc_task_spec.rb +10 -8
  222. data/spec/registry_spec.rb +65 -36
  223. data/spec/registry_store_spec.rb +90 -40
  224. data/spec/serializers/file_system_serializer_spec.rb +12 -12
  225. data/spec/serializers/yardoc_serializer_spec.rb +2 -2
  226. data/spec/server/adapter_spec.rb +3 -3
  227. data/spec/server/commands/base_spec.rb +8 -8
  228. data/spec/server/commands/library_command_spec.rb +3 -3
  229. data/spec/server/commands/static_file_command_spec.rb +7 -7
  230. data/spec/server/doc_server_helper_spec.rb +1 -1
  231. data/spec/server/doc_server_serializer_spec.rb +6 -6
  232. data/spec/server/rack_adapter_spec.rb +3 -3
  233. data/spec/server/router_spec.rb +19 -19
  234. data/spec/server/static_caching_spec.rb +4 -4
  235. data/spec/spec_helper.rb +7 -7
  236. data/spec/tags/default_factory_spec.rb +24 -16
  237. data/spec/tags/directives_spec.rb +422 -0
  238. data/spec/tags/library_spec.rb +15 -4
  239. data/spec/tags/overload_tag_spec.rb +6 -6
  240. data/spec/tags/ref_tag_list_spec.rb +8 -8
  241. data/spec/templates/class_spec.rb +7 -7
  242. data/spec/templates/constant_spec.rb +7 -7
  243. data/spec/templates/engine_spec.rb +28 -36
  244. data/spec/templates/examples/class001.html +108 -108
  245. data/spec/templates/examples/class002.html +17 -17
  246. data/spec/templates/examples/constant001.txt +1 -1
  247. data/spec/templates/examples/method001.html +45 -45
  248. data/spec/templates/examples/method002.html +25 -25
  249. data/spec/templates/examples/method003.html +60 -60
  250. data/spec/templates/examples/method004.html +7 -7
  251. data/spec/templates/examples/method005.html +28 -28
  252. data/spec/templates/examples/module001.html +321 -321
  253. data/spec/templates/examples/module001.txt +1 -1
  254. data/spec/templates/examples/module002.html +130 -130
  255. data/spec/templates/examples/module003.html +74 -74
  256. data/spec/templates/examples/module004.html +388 -0
  257. data/spec/templates/helpers/base_helper_spec.rb +32 -32
  258. data/spec/templates/helpers/html_helper_spec.rb +87 -68
  259. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +9 -9
  260. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +16 -16
  261. data/spec/templates/helpers/markup_helper_spec.rb +31 -28
  262. data/spec/templates/helpers/method_helper_spec.rb +7 -7
  263. data/spec/templates/helpers/shared_signature_examples.rb +9 -7
  264. data/spec/templates/helpers/text_helper_spec.rb +3 -3
  265. data/spec/templates/method_spec.rb +13 -13
  266. data/spec/templates/module_spec.rb +70 -24
  267. data/spec/templates/onefile_spec.rb +32 -15
  268. data/spec/templates/section_spec.rb +23 -23
  269. data/spec/templates/spec_helper.rb +31 -1
  270. data/spec/templates/tag_spec.rb +5 -5
  271. data/spec/templates/template_spec.rb +54 -46
  272. data/spec/verifier_spec.rb +5 -5
  273. data/templates/default/class/setup.rb +2 -2
  274. data/templates/default/docstring/html/abstract.erb +1 -1
  275. data/templates/default/docstring/html/note.erb +1 -1
  276. data/templates/default/docstring/html/private.erb +1 -1
  277. data/templates/default/docstring/html/todo.erb +1 -1
  278. data/templates/default/docstring/setup.rb +2 -2
  279. data/templates/default/fulldoc/html/css/full_list.css +4 -2
  280. data/templates/default/fulldoc/html/css/style.css +50 -44
  281. data/templates/default/fulldoc/html/frames.erb +21 -6
  282. data/templates/default/fulldoc/html/full_list.erb +5 -3
  283. data/templates/default/fulldoc/html/{full_list_files.erb → full_list_file.erb} +0 -0
  284. data/templates/default/fulldoc/html/js/app.js +29 -26
  285. data/templates/default/fulldoc/html/js/full_list.js +9 -9
  286. data/templates/default/fulldoc/html/js/jquery.js +4 -16
  287. data/templates/default/fulldoc/html/setup.rb +42 -38
  288. data/templates/default/layout/dot/header.erb +1 -1
  289. data/templates/default/layout/html/breadcrumb.erb +6 -6
  290. data/templates/default/layout/html/files.erb +1 -1
  291. data/templates/default/layout/html/footer.erb +1 -1
  292. data/templates/default/layout/html/headers.erb +3 -6
  293. data/templates/default/layout/html/index.erb +1 -1
  294. data/templates/default/layout/html/layout.erb +3 -7
  295. data/templates/default/layout/html/objects.erb +1 -1
  296. data/templates/default/layout/html/script_setup.erb +5 -0
  297. data/templates/default/layout/html/search.erb +4 -1
  298. data/templates/default/layout/html/setup.rb +8 -8
  299. data/templates/default/method_details/html/method_signature.erb +10 -3
  300. data/templates/default/method_details/setup.rb +1 -0
  301. data/templates/default/module/dot/info.erb +1 -1
  302. data/templates/default/module/dot/setup.rb +2 -2
  303. data/templates/default/module/html/attribute_details.erb +1 -1
  304. data/templates/default/module/html/children.erb +1 -1
  305. data/templates/default/module/html/defines.erb +1 -1
  306. data/templates/default/module/html/inherited_methods.erb +5 -4
  307. data/templates/default/module/html/item_summary.erb +15 -5
  308. data/templates/default/module/html/method_details_list.erb +2 -2
  309. data/templates/default/module/setup.rb +25 -12
  310. data/templates/default/module/text/setup.rb +1 -1
  311. data/templates/default/onefile/html/layout.erb +1 -1
  312. data/templates/default/onefile/html/setup.rb +2 -2
  313. data/templates/default/tags/html/example.erb +4 -2
  314. data/templates/default/tags/html/option.erb +1 -1
  315. data/templates/default/tags/html/overload.erb +1 -1
  316. data/templates/default/tags/html/see.erb +1 -1
  317. data/templates/default/tags/html/tag.erb +1 -1
  318. data/templates/default/tags/setup.rb +4 -3
  319. data/templates/guide/fulldoc/html/css/style.css +8 -8
  320. data/templates/guide/fulldoc/html/js/app.js +6 -6
  321. data/templates/guide/fulldoc/html/setup.rb +12 -12
  322. data/templates/guide/layout/html/layout.erb +11 -11
  323. data/templates/guide/layout/html/setup.rb +9 -9
  324. data/templates/guide/method/html/header.erb +2 -2
  325. data/templates/guide/method/html/setup.rb +1 -1
  326. metadata +68 -18
  327. data/bin/yard-graph +0 -4
  328. data/bin/yard-server +0 -4
  329. data/docs/Glossary.md +0 -12
  330. data/lib/yard/handlers/ruby/legacy/macro_handler.rb +0 -39
  331. data/lib/yard/handlers/ruby/macro_handler.rb +0 -40
  332. data/lib/yard/handlers/ruby/macro_handler_methods.rb +0 -131
  333. data/lib/yard/parser/c_parser.rb +0 -497
  334. data/lib/yard/server/templates/default/layout/html/headers.erb +0 -16
  335. data/lib/yard/server/templates/doc_server/frames/html/frames.erb +0 -13
  336. data/lib/yard/server/templates/doc_server/frames/html/setup.rb +0 -3
  337. data/lib/yard/server/templates/doc_server/full_list/html/full_list.erb +0 -34
  338. data/lib/yard/server/templates/doc_server/full_list/html/setup.rb +0 -20
  339. data/spec/handlers/examples/macro_handler_001.rb.txt +0 -83
data/spec/cli/yri_spec.rb CHANGED
@@ -4,41 +4,43 @@ class YARD::CLI::YRI
4
4
  public :optparse, :find_object, :cache_object
5
5
  end
6
6
 
7
- describe YARD::CLI::Yardoc do
7
+ describe YARD::CLI::YRI do
8
8
  before do
9
9
  @yri = YARD::CLI::YRI.new
10
10
  Registry.stub!(:load)
11
11
  end
12
-
12
+
13
13
  describe '#find_object' do
14
14
  it "should use cache if available" do
15
15
  @yri.stub!(:cache_object)
16
16
  File.should_receive(:exist?).with('.yardoc').and_return(false)
17
17
  File.should_receive(:exist?).with('bar.yardoc').and_return(true)
18
18
  Registry.should_receive(:load).with('bar.yardoc')
19
- Registry.should_receive(:at).with('Foo').and_return('OBJ')
19
+ Registry.should_receive(:at).ordered.with('Foo').and_return(nil)
20
+ Registry.should_receive(:at).ordered.with('Foo').and_return('OBJ')
20
21
  @yri.instance_variable_set("@cache", {'Foo' => 'bar.yardoc'})
21
22
  @yri.find_object('Foo').should == 'OBJ'
22
23
  end
23
-
24
+
24
25
  it "should never use cache ahead of current directory's .yardoc" do
25
26
  @yri.stub!(:cache_object)
26
27
  File.should_receive(:exist?).with('.yardoc').and_return(true)
27
28
  Registry.should_receive(:load).with('.yardoc')
28
- Registry.should_receive(:at).with('Foo').and_return('OBJ')
29
+ Registry.should_receive(:at).ordered.with('Foo').and_return(nil)
30
+ Registry.should_receive(:at).ordered.with('Foo').and_return('OBJ')
29
31
  @yri.instance_variable_set("@cache", {'Foo' => 'bar.yardoc'})
30
32
  @yri.find_object('Foo').should == 'OBJ'
31
33
  @yri.instance_variable_get("@search_paths")[0].should == '.yardoc'
32
34
  end
33
35
  end
34
-
36
+
35
37
  describe '#cache_object' do
36
38
  it "should skip caching for Registry.yardoc_file" do
37
39
  File.should_not_receive(:open).with(CLI::YRI::CACHE_FILE, 'w')
38
40
  @yri.cache_object('Foo', Registry.yardoc_file)
39
41
  end
40
42
  end
41
-
43
+
42
44
  describe '#initialize' do
43
45
  it "should load search paths" do
44
46
  path = %r{/\.yard/yri_search_paths$}
@@ -50,7 +52,7 @@ describe YARD::CLI::Yardoc do
50
52
  spaths.should include('line1')
51
53
  spaths.should include('line2')
52
54
  end
53
-
55
+
54
56
  it "should use DEFAULT_SEARCH_PATHS prior to other paths" do
55
57
  YARD::CLI::YRI::DEFAULT_SEARCH_PATHS.push('foo', 'bar')
56
58
  path = %r{/\.yard/yri_search_paths$}
@@ -63,21 +65,21 @@ describe YARD::CLI::Yardoc do
63
65
  YARD::CLI::YRI::DEFAULT_SEARCH_PATHS.replace([])
64
66
  end
65
67
  end
66
-
68
+
67
69
  describe '#run' do
68
70
  it "should search for objects and print their documentation" do
69
71
  obj = YARD::CodeObjects::ClassObject.new(:root, 'Foo')
70
72
  @yri.should_receive(:print_object).with(obj)
71
73
  @yri.run('Foo')
72
74
  Registry.clear
73
- end unless ENV['CI'] # FIXME make this work on Travis CI
74
-
75
+ end
76
+
75
77
  it "should print usage if no object is provided" do
76
78
  @yri.should_receive(:print_usage)
77
79
  @yri.should_receive(:exit).with(1)
78
80
  @yri.run('')
79
81
  end
80
-
82
+
81
83
  it "should print no documentation exists for object if object is not found" do
82
84
  STDERR.should_receive(:puts).with("No documentation for `Foo'")
83
85
  @yri.should_receive(:exit).with(1)
@@ -7,16 +7,16 @@ describe YARD::CodeObjects::Base do
7
7
  # it "should not allow empty object name" do
8
8
  # lambda { Base.new(:root, '') }.should raise_error(ArgumentError)
9
9
  # end
10
-
10
+
11
11
  it "should return a unique instance of any registered object" do
12
12
  obj = ClassObject.new(:root, :Me)
13
13
  obj2 = ClassObject.new(:root, :Me)
14
14
  obj.object_id.should == obj2.object_id
15
-
15
+
16
16
  obj3 = ModuleObject.new(obj, :Too)
17
17
  obj4 = CodeObjects::Base.new(obj3, :Hello)
18
18
  obj4.parent = obj
19
-
19
+
20
20
  obj5 = CodeObjects::Base.new(obj3, :hello)
21
21
  obj4.object_id.should_not == obj5.object_id
22
22
  end
@@ -27,62 +27,62 @@ describe YARD::CodeObjects::Base do
27
27
  ClassObject.new(:root, "MYMODULE").should be_instance_of(ClassObject)
28
28
  YARD::Registry.at("MYMODULE").should be_instance_of(ClassObject)
29
29
  end
30
-
30
+
31
31
  it "should recall the block if #new is called on an existing object" do
32
32
  o1 = ClassObject.new(:root, :Me) do |o|
33
33
  o.docstring = "DOCSTRING"
34
34
  end
35
-
35
+
36
36
  o2 = ClassObject.new(:root, :Me) do |o|
37
37
  o.docstring = "NOT_DOCSTRING"
38
38
  end
39
-
39
+
40
40
  o1.object_id.should == o2.object_id
41
41
  o1.docstring.should == "NOT_DOCSTRING"
42
42
  o2.docstring.should == "NOT_DOCSTRING"
43
43
  end
44
-
44
+
45
45
  it "should allow complex name and convert that to namespace" do
46
46
  obj = CodeObjects::Base.new(nil, "A::B")
47
47
  obj.namespace.path.should == "A"
48
48
  obj.name.should == :B
49
49
  end
50
-
50
+
51
51
  it "should allow namespace to be nil and not register in the Registry" do
52
52
  obj = CodeObjects::Base.new(nil, :Me)
53
53
  obj.namespace.should == nil
54
54
  Registry.at(:Me).should == nil
55
55
  end
56
-
56
+
57
57
  it "should allow namespace to be a NamespaceObject" do
58
58
  ns = ModuleObject.new(:root, :Name)
59
59
  obj = CodeObjects::Base.new(ns, :Me)
60
60
  obj.namespace.should == ns
61
61
  end
62
-
62
+
63
63
  it "should allow :root to be the shorthand namespace of `Registry.root`" do
64
64
  obj = CodeObjects::Base.new(:root, :Me)
65
65
  obj.namespace.should == Registry.root
66
66
  end
67
-
67
+
68
68
  it "should not allow any other types as namespace" do
69
69
  lambda { CodeObjects::Base.new("ROOT!", :Me) }.should raise_error(ArgumentError)
70
70
  end
71
-
71
+
72
72
  it "should register itself in the registry if namespace is supplied" do
73
73
  obj = ModuleObject.new(:root, :Me)
74
74
  Registry.at(:Me).should == obj
75
-
75
+
76
76
  obj2 = ModuleObject.new(obj, :Too)
77
77
  Registry.at(:"Me::Too").should == obj2
78
78
  end
79
-
79
+
80
80
  it "should set any attribute using #[]=" do
81
81
  obj = ModuleObject.new(:root, :YARD)
82
82
  obj[:some_attr] = "hello"
83
83
  obj[:some_attr].should == "hello"
84
84
  end
85
-
85
+
86
86
  it "#[]= should use the accessor method if available" do
87
87
  obj = CodeObjects::Base.new(:root, :YARD)
88
88
  obj[:source] = "hello"
@@ -90,34 +90,34 @@ describe YARD::CodeObjects::Base do
90
90
  obj.source = "unhello"
91
91
  obj[:source].should == "unhello"
92
92
  end
93
-
93
+
94
94
  it "should set attributes via attr= through method_missing" do
95
95
  obj = CodeObjects::Base.new(:root, :YARD)
96
96
  obj.something = 2
97
97
  obj.something.should == 2
98
98
  obj[:something].should == 2
99
99
  end
100
-
100
+
101
101
  it "should exist in the parent's #children after creation" do
102
102
  obj = ModuleObject.new(:root, :YARD)
103
103
  obj2 = MethodObject.new(obj, :testing)
104
104
  obj.children.should include(obj2)
105
105
  end
106
-
106
+
107
107
  it "should properly re-indent source starting from 0 indentation" do
108
108
  obj = CodeObjects::Base.new(nil, :test)
109
109
  obj.source = <<-eof
110
110
  def mymethod
111
111
  if x == 2 &&
112
112
  5 == 5
113
- 3
113
+ 3
114
114
  else
115
115
  1
116
116
  end
117
117
  end
118
118
  eof
119
- obj.source.should == "def mymethod\n if x == 2 &&\n 5 == 5\n 3 \n else\n 1\n end\nend"
120
-
119
+ obj.source.should == "def mymethod\n if x == 2 &&\n 5 == 5\n 3\n else\n 1\n end\nend"
120
+
121
121
  Registry.clear
122
122
  Parser::SourceParser.parse_string <<-eof
123
123
  def key?(key)
@@ -138,7 +138,7 @@ describe YARD::CodeObjects::Base do
138
138
  eof
139
139
  Registry.at('#key?').source.should == "def key?(key)\n if x == 2\n puts key\n else\n exit\n end\nend"
140
140
  end
141
-
141
+
142
142
  it "should not add newlines to source when parsing sub blocks" do
143
143
  Parser::SourceParser.parse_string <<-eof
144
144
  module XYZ
@@ -151,15 +151,15 @@ describe YARD::CodeObjects::Base do
151
151
  end
152
152
  end
153
153
  eof
154
- Registry.at('XYZ::ZYX::ABC#msg').source.should == "def msg\n hello_world\nend"
154
+ Registry.at('XYZ::ZYX::ABC#msg').source.should == "def msg\n hello_world\nend"
155
155
  end
156
-
156
+
157
157
  it "should handle source for 'def x; end'" do
158
158
  Registry.clear
159
159
  Parser::SourceParser.parse_string "def x; 2 end"
160
160
  Registry.at('#x').source.should == "def x; 2 end"
161
161
  end
162
-
162
+
163
163
  it "should set file and line information" do
164
164
  Parser::SourceParser.parse_string <<-eof
165
165
  class X; end
@@ -167,14 +167,14 @@ describe YARD::CodeObjects::Base do
167
167
  Registry.at(:X).file.should == '(stdin)'
168
168
  Registry.at(:X).line.should == 1
169
169
  end
170
-
170
+
171
171
  it "should maintain all file associations when objects are defined multiple times in one file" do
172
172
  Parser::SourceParser.parse_string <<-eof
173
173
  class X; end
174
174
  class X; end
175
175
  class X; end
176
176
  eof
177
-
177
+
178
178
  Registry.at(:X).file.should == '(stdin)'
179
179
  Registry.at(:X).line.should == 1
180
180
  Registry.at(:X).files.should == [['(stdin)', 1], ['(stdin)', 2], ['(stdin)', 3]]
@@ -185,7 +185,7 @@ describe YARD::CodeObjects::Base do
185
185
  File.stub!(:read_binary).and_return("class X; end")
186
186
  Parser::SourceParser.new.parse("file#{i+1}.rb")
187
187
  end
188
-
188
+
189
189
  Registry.at(:X).file.should == 'file1.rb'
190
190
  Registry.at(:X).line.should == 1
191
191
  Registry.at(:X).files.should == [['file1.rb', 1], ['file2.rb', 1], ['file3.rb', 1]]
@@ -198,12 +198,12 @@ describe YARD::CodeObjects::Base do
198
198
  # docstring
199
199
  class X; end
200
200
  eof
201
-
201
+
202
202
  Registry.at(:X).file.should == '(stdin)'
203
203
  Registry.at(:X).line.should == 4
204
204
  Registry.at(:X).files.should == [['(stdin)', 4], ['(stdin)', 1], ['(stdin)', 2]]
205
205
  end
206
-
206
+
207
207
  describe '#format' do
208
208
  it "should send to Templates.render" do
209
209
  object = MethodObject.new(:root, :method)
@@ -211,34 +211,34 @@ describe YARD::CodeObjects::Base do
211
211
  object.format :x => 1
212
212
  end
213
213
  end
214
-
214
+
215
215
  describe '#source_type' do
216
216
  it "should default source_type to :ruby" do
217
217
  object = MethodObject.new(:root, :method)
218
218
  object.source_type.should == :ruby
219
219
  end
220
220
  end
221
-
221
+
222
222
  describe '#relative_path' do
223
223
  it "should accept a string" do
224
224
  YARD.parse_string "module A; class B; end; class C; end; end"
225
- Registry.at('A::B').relative_path(Registry.at('A::C')).should ==
225
+ Registry.at('A::B').relative_path(Registry.at('A::C')).should ==
226
226
  Registry.at('A::B').relative_path('A::C')
227
227
  end
228
-
228
+
229
229
  it "should return full class name when objects share a common class prefix" do
230
230
  YARD.parse_string "module User; end; module UserManager; end"
231
231
  Registry.at('User').relative_path('UserManager').should == 'UserManager'
232
232
  Registry.at('User').relative_path(Registry.at('UserManager')).should == 'UserManager'
233
233
  end
234
-
234
+
235
235
  it "should return the relative path when they share a common namespace" do
236
236
  YARD.parse_string "module A; class B; end; class C; end; end"
237
237
  Registry.at('A::B').relative_path(Registry.at('A::C')).should == 'C'
238
238
  YARD.parse_string "module Foo; module A; end; module B; def foo; end end end"
239
239
  Registry.at('Foo::A').relative_path(Registry.at('Foo::B#foo')).should == 'B#foo'
240
240
  end
241
-
241
+
242
242
  it "should return the full path if they don't have a common namespace" do
243
243
  YARD.parse_string "module A; class B; end; end; module D; class C; end; end"
244
244
  Registry.at('A::B').relative_path('D::C').should == 'D::C'
@@ -249,7 +249,7 @@ describe YARD::CodeObjects::Base do
249
249
  YARD.parse_string("class YARD::Config; MYCONST = 1; end")
250
250
  Registry.at('YARD::Config').relative_path('YARD::Config::MYCONST').should == "MYCONST"
251
251
  end
252
-
252
+
253
253
  it "should return a relative path for class methods" do
254
254
  YARD.parse_string "module A; def self.b; end; def self.c; end; end"
255
255
  Registry.at('A.b').relative_path('A.c').should == 'c'
@@ -261,26 +261,26 @@ describe YARD::CodeObjects::Base do
261
261
  Registry.at('A#b').relative_path('A#c').should == '#c'
262
262
  Registry.at('A').relative_path('A#c').should == '#c'
263
263
  end
264
-
264
+
265
265
  it "should return full path if relative path is to parent namespace" do
266
266
  YARD.parse_string "module A; module B; end end"
267
267
  Registry.at('A::B').relative_path('A').should == 'A'
268
268
  end
269
-
269
+
270
270
  it "should only return name for relative path to self" do
271
271
  YARD.parse_string("class A::B::C; def foo; end end")
272
272
  Registry.at('A::B::C').relative_path('A::B::C').should == 'C'
273
273
  Registry.at('A::B::C#foo').relative_path('A::B::C#foo').should == '#foo'
274
274
  end
275
275
  end
276
-
276
+
277
277
  describe '#docstring=' do
278
278
  it "should convert string into Docstring when #docstring= is set" do
279
- o = ClassObject.new(:root, :Me)
279
+ o = ClassObject.new(:root, :Me)
280
280
  o.docstring = "DOCSTRING"
281
281
  o.docstring.should be_instance_of(Docstring)
282
282
  end
283
-
283
+
284
284
  it "should set docstring to docstring of other object if docstring is '(see Path)'" do
285
285
  ClassObject.new(:root, :AnotherObject) {|x| x.docstring = "FOO" }
286
286
  o = ClassObject.new(:root, :Me)
@@ -294,7 +294,7 @@ describe YARD::CodeObjects::Base do
294
294
  o.docstring = doc
295
295
  o.docstring.should == doc
296
296
  end
297
-
297
+
298
298
  it "should allow extra docstring after (see Path)" do
299
299
  ClassObject.new(:root, :AnotherObject) {|x| x.docstring = "FOO" }
300
300
  o = ClassObject.new(:root, :Me)
@@ -303,14 +303,14 @@ describe YARD::CodeObjects::Base do
303
303
  o.docstring.should have_tag(:api)
304
304
  end
305
305
  end
306
-
306
+
307
307
  describe '#docstring' do
308
308
  it "should return empty string if docstring was '(see Path)' and Path is not resolved" do
309
309
  o = ClassObject.new(:root, :Me)
310
310
  o.docstring = '(see AnotherObject)'
311
311
  o.docstring.should == ""
312
312
  end
313
-
313
+
314
314
  it "should return docstring when object is resolved" do
315
315
  o = ClassObject.new(:root, :Me)
316
316
  o.docstring = '(see AnotherObject)'
@@ -319,7 +319,7 @@ describe YARD::CodeObjects::Base do
319
319
  o.docstring.should == "FOO"
320
320
  end
321
321
  end
322
-
322
+
323
323
  describe '#add_file' do
324
324
  it "should only add a file/line combination once" do
325
325
  o = ClassObject.new(:root, :Me)
@@ -331,4 +331,62 @@ describe YARD::CodeObjects::Base do
331
331
  o.files.should == [['filename', 12], ['filename', 40]]
332
332
  end
333
333
  end
334
+
335
+ describe '#copy_to' do
336
+ it "should copy all data to new object" do
337
+ YARD.parse_string <<-eof
338
+ private
339
+ # A docstring
340
+ # @return [String] a tag
341
+ def foo(a, b, c)
342
+ source_code_here
343
+ end
344
+ eof
345
+ foo_c = MethodObject.new(:root, :foo, :class)
346
+ Registry.at('#foo').copy_to(foo_c)
347
+ foo_c.scope.should == :class
348
+ foo_c.visibility.should == :private
349
+ foo_c.type.should == :method
350
+ foo_c.class.should == MethodObject
351
+ foo_c.path.should == '::foo'
352
+ foo_c.docstring.should == "A docstring"
353
+ foo_c.tag(:return).types.should == ['String']
354
+ foo_c.file.should == '(stdin)'
355
+ foo_c.line.should == 4
356
+ foo_c.source.should =~ /source_code_here/
357
+ foo_c.signature.should == 'def foo(a, b, c)'
358
+ foo_c.parameters.should == [['a', nil], ['b', nil], ['c', nil]]
359
+ end
360
+
361
+ it "should return copied object" do
362
+ YARD.parse_string 'def foo; end'
363
+ foo_c = MethodObject.new(:root, :foo, :class)
364
+ Registry.at('#foo').copy_to(foo_c).should == foo_c
365
+ end
366
+
367
+ it "should copy docstring and rewrite tags for new object" do
368
+ YARD.parse_string <<-eof
369
+ # @return [String] a tag
370
+ def foo; end
371
+ eof
372
+ foo_c = MethodObject.new(:root, :foo, :class)
373
+ foo_i = Registry.at('#foo')
374
+ foo_i.copy_to(foo_c)
375
+ foo_i.tags.should_not == foo_c.tags
376
+ foo_c.tags.first.object.should == foo_c
377
+ end
378
+
379
+ it "should only copy #copyable_attributes" do
380
+ foo = MethodObject.new(:root, :foo)
381
+ foo.should_receive(:copyable_attributes).and_return %w(a b c)
382
+ foo.should_receive(:instance_variable_get).with('@a').and_return(1)
383
+ foo.should_receive(:instance_variable_get).with('@b').and_return(2)
384
+ foo.should_receive(:instance_variable_get).with('@c').and_return(3)
385
+ bar = MethodObject.new(:root, :bar)
386
+ bar.should_receive(:instance_variable_set).with('@a', 1)
387
+ bar.should_receive(:instance_variable_set).with('@b', 2)
388
+ bar.should_receive(:instance_variable_set).with('@c', 3)
389
+ foo.copy_to(bar)
390
+ end
391
+ end
334
392
  end