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
@@ -6,7 +6,7 @@ class StringSerializer < YARD::Serializers::Base
6
6
  @files = files
7
7
  @string = string
8
8
  end
9
-
9
+
10
10
  def serialize(object, data)
11
11
  files << object
12
12
  string << data
@@ -14,34 +14,51 @@ class StringSerializer < YARD::Serializers::Base
14
14
  end
15
15
 
16
16
  describe YARD::Templates::Engine.template(:default, :onefile) do
17
- before { Registry.clear }
17
+ before do
18
+ Registry.clear
19
+ if defined?(::Encoding)
20
+ @eenc, Encoding.default_external = Encoding.default_external, 'ascii-8bit'
21
+ @ienc, Encoding.default_internal = Encoding.default_internal, 'ascii-8bit'
22
+ end
23
+ end
18
24
 
19
- it "should render html" do
20
- files = []
21
- string = ''
25
+ after do
26
+ if defined?(::Encoding)
27
+ Encoding.default_internal = @ienc
28
+ Encoding.default_external = @eenc
29
+ end
30
+ end
31
+
32
+ def render
33
+ @files = []
34
+ @output = ''
22
35
  YARD.parse_string <<-eof
23
36
  class A
24
37
  # Foo method
25
38
  # @return [String]
26
39
  def foo; end
27
-
40
+
28
41
  # Bar method
29
42
  # @return [Numeric]
30
43
  def bar; end
31
44
  end
32
45
  eof
33
- readme = CodeObjects::ExtraFileObject.new('README',
46
+ readme = CodeObjects::ExtraFileObject.new('README',
34
47
  "# This is a code comment\n\n# Top of file\n\n\nclass C; end")
35
- Templates::Engine.generate Registry.all(:class),
36
- :serializer => StringSerializer.new(files, string),
48
+ Templates::Engine.generate Registry.all(:class),
49
+ :serializer => StringSerializer.new(@files, @output),
37
50
  :onefile => true, :format => :html, :readme => readme, :files => [readme,
38
51
  CodeObjects::ExtraFileObject.new('LICENSE', 'This is a license!')
39
52
  ]
40
- files.should == ['index.html']
41
- string.should include("This is a code comment")
42
- string.should include("This is a license!")
43
- string.should include("Class: A")
44
- string.should include("Foo method")
45
- string.should include("Bar method")
53
+ end
54
+
55
+ it "should render html" do
56
+ render
57
+ @files.should == ['index.html']
58
+ @output.should include("This is a code comment")
59
+ @output.should include("This is a license!")
60
+ @output.should include("Class: A")
61
+ @output.should include("Foo method")
62
+ @output.should include("Bar method")
46
63
  end
47
64
  end
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe YARD::Templates::Section do
4
4
  include YARD::Templates
5
-
5
+
6
6
  describe '#initialize' do
7
7
  it "should convert first argument to splat if it is array" do
8
8
  s = Section.new(:name, [:foo, :bar])
@@ -10,7 +10,7 @@ describe YARD::Templates::Section do
10
10
  s[0].name.should == :foo
11
11
  s[1].name.should == :bar
12
12
  end
13
-
13
+
14
14
  it "should allow initialization with Section objects" do
15
15
  s = Section.new(:name, [:foo, Section.new(:bar)])
16
16
  s.name.should == :name
@@ -23,67 +23,67 @@ describe YARD::Templates::Section do
23
23
  s.should == Section.new(:name, Section.new(:foo, Section.new(:bar)))
24
24
  end
25
25
  end
26
-
26
+
27
27
  describe '#[]' do
28
28
  it "should use Array#[] if argument is integer" do
29
29
  Section.new(:name, [:foo, :bar])[0].name.should == :foo
30
30
  end
31
-
31
+
32
32
  it "should return new Section object if more than one argument" do
33
33
  Section.new(:name, :foo, :bar, :baz)[1, 2].should ==
34
34
  Section.new(:name, :bar, :baz)
35
35
  end
36
-
36
+
37
37
  it "should return new Section object if arg is Range" do
38
38
  Section.new(:name, :foo, :bar, :baz)[1..2].should ==
39
39
  Section.new(:name, :bar, :baz)
40
40
  end
41
-
41
+
42
42
  it "should look for section by name if arg is object" do
43
43
  Section.new(:name, :foo, :bar, [:baz])[:bar][:baz].should ==
44
44
  Section.new(:baz)
45
45
  end
46
46
  end
47
-
47
+
48
48
  describe '#eql?' do
49
49
  it "should check for equality of two equal sections" do
50
50
  Section.new(:foo, [:a, :b]).should be_eql(Section.new(:foo, :a, :b))
51
51
  Section.new(:foo, [:a, :b]).should == Section.new(:foo, :a, :b)
52
52
  end
53
-
53
+
54
54
  it "should not be equal if section names are different" do
55
55
  Section.new(:foo, [:a, :b]).should_not be_eql(Section.new(:bar, :a, :b))
56
56
  Section.new(:foo, [:a, :b]).should_not == Section.new(:bar, :a, :b)
57
57
  end
58
58
  end
59
-
59
+
60
60
  describe '#==' do
61
61
  it "should allow comparison to Symbol" do
62
62
  Section.new(:foo, 2, 3).should == :foo
63
63
  end
64
-
64
+
65
65
  it "should allow comparison to String" do
66
66
  Section.new("foo", 2, 3).should == "foo"
67
67
  end
68
-
68
+
69
69
  it "should allow comparison to Template" do
70
70
  t = YARD::Templates::Engine.template!(:xyzzy, '/full/path/xyzzy')
71
71
  Section.new(t, 2, 3).should == t
72
72
  end
73
-
73
+
74
74
  it "should allow comparison to Section" do
75
75
  Section.new(1, [2, 3]).should == Section.new(1, 2, 3)
76
76
  end
77
-
77
+
78
78
  it "should allow comparison to Object" do
79
79
  Section.new(1, [2, 3]).should == 1
80
80
  end
81
-
81
+
82
82
  it "should allow comparison to Array" do
83
83
  Section.new(1, 2, [3]).should == [1, [2, [3]]]
84
84
  end
85
85
  end
86
-
86
+
87
87
  describe '#to_a' do
88
88
  it "should convert Section to regular Array list" do
89
89
  arr = Section.new(1, 2, [3, [4]]).to_a
@@ -91,37 +91,37 @@ describe YARD::Templates::Section do
91
91
  arr.should == [1, [2, [3, [4]]]]
92
92
  end
93
93
  end
94
-
94
+
95
95
  describe '#place' do
96
96
  it "should place objects as Sections" do
97
97
  Section.new(1, 2, 3).place(4).before(3).should == [1, [2, 4, 3]]
98
98
  end
99
-
99
+
100
100
  it "should place objects anywhere inside Section with before/after_any" do
101
101
  Section.new(1, 2, [3, [4]]).place(5).after_any(4).should == [1, [2, [3, [4, 5]]]]
102
102
  Section.new(1, 2, [3, [4]]).place(5).before_any(4).should == [1, [2, [3, [5, 4]]]]
103
103
  end
104
-
104
+
105
105
  it "should allow multiple sections to be placed" do
106
106
  Section.new(1, 2, 3).place(4, 5).after(3).to_a.should == [1, [2, 3, 4, 5]]
107
107
  Section.new(1, 2, 3).place(4, [5]).after(3).to_a.should == [1, [2, 3, 4, [5]]]
108
108
  end
109
109
  end
110
-
110
+
111
111
  describe '#push' do
112
112
  it "should push objects as Sections" do
113
113
  s = Section.new(:foo)
114
114
  s.push :bar
115
115
  s[0].should == Section.new(:bar)
116
116
  end
117
-
117
+
118
118
  it "should alias to #<<" do
119
119
  s = Section.new(1)
120
120
  s << :index
121
121
  s[:index].should be_a(Section)
122
122
  end
123
123
  end
124
-
124
+
125
125
  describe '#unshift' do
126
126
  it "should unshift objects as Sections" do
127
127
  s = Section.new(:foo)
@@ -129,14 +129,14 @@ describe YARD::Templates::Section do
129
129
  s[0].should == Section.new(:bar)
130
130
  end
131
131
  end
132
-
132
+
133
133
  describe '#any' do
134
134
  it "should find item inside sections" do
135
135
  s = Section.new(:foo, Section.new(:bar, Section.new(:bar)))
136
136
  s.any(:bar).push(:baz)
137
137
  s.to_a.should == [:foo, [:bar, [:bar, :baz]]]
138
138
  end
139
-
139
+
140
140
  it "should find item in any deeply nested set of sections" do
141
141
  s = Section.new(:foo, Section.new(:bar, Section.new(:baz)))
142
142
  s.any(:baz).push(:qux)
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  include YARD::Templates
4
4
 
5
- def only_copy?(result, example, type)
5
+ def only_copy?(result, example, type)
6
6
  if $COPY == :all || $COPY == example
7
7
  puts(result) unless $COPYT && $COPYT != type
8
8
  end
@@ -40,3 +40,33 @@ module YARD::Templates::Engine
40
40
  public :find_template_paths
41
41
  end
42
42
  end
43
+
44
+ class TestHtmlTemplateOptions < Templates::TemplateOptions
45
+ default_attr :markup, :none
46
+ default_attr :default_return, ""
47
+ default_attr :format, :html
48
+ default_attr :highlight, false
49
+ end
50
+
51
+ class TestTextTemplateOptions < Templates::TemplateOptions
52
+ default_attr :markup, :none
53
+ default_attr :default_return, ""
54
+ default_attr :format, :text
55
+ default_attr :highlight, false
56
+ end
57
+
58
+ def html_options(opts = {})
59
+ template_options(opts, TestHtmlTemplateOptions)
60
+ end
61
+
62
+ def text_options(opts = {})
63
+ template_options(opts, TestTextTemplateOptions)
64
+ end
65
+
66
+ def template_options(opts, klass)
67
+ options = klass.new
68
+ options.reset_defaults
69
+ options.update(opts)
70
+ options
71
+ end
72
+
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  describe YARD::Templates::Engine.template(:default, :tags) do
4
4
  before { Registry.clear }
5
-
5
+
6
6
  describe 'all known tags' do
7
7
  before do
8
8
  YARD.parse_string <<-'eof'
@@ -33,18 +33,18 @@ describe YARD::Templates::Engine.template(:default, :tags) do
33
33
  end
34
34
 
35
35
  it "should render text format correctly" do
36
- text_equals(Registry.at('#m').format, :tag001)
36
+ text_equals(Registry.at('#m').format(text_options), :tag001)
37
37
  end
38
38
  end
39
-
39
+
40
40
  describe 'param tags on non-methods' do
41
41
  it 'should not display @param tags on non-method objects' do
42
42
  YARD.parse_string <<-'eof'
43
43
  # @param [#to_s] name the name
44
44
  module Foo; end
45
45
  eof
46
-
47
- proc = lambda { Registry.at('Foo').format(:format => :html) }
46
+
47
+ proc = lambda { Registry.at('Foo').format(html_options) }
48
48
  proc.should_not raise_error(NoMethodError)
49
49
  end
50
50
  end
@@ -8,13 +8,13 @@ describe YARD::Templates::Template do
8
8
  before :each do
9
9
  YARD::Templates::ErbCache.clear!
10
10
  end
11
-
11
+
12
12
  describe '.include_parent' do
13
13
  it "should not include parent directory if parent directory is a template root path" do
14
14
  mod = template('q')
15
15
  mod.should_not include(template(''))
16
16
  end
17
-
17
+
18
18
  it "should include overridden parent directory" do
19
19
  Engine.stub!(:template_paths).and_return(['/foo', '/bar'])
20
20
  File.should_receive(:directory?).with('/foo/a/b').and_return(true)
@@ -24,40 +24,40 @@ describe YARD::Templates::Template do
24
24
  ancestors = Engine.template('a/b').ancestors.map {|c| c.class_name }
25
25
  ancestors[0, 3].should == %w( Template__foo_a_b Template__bar_a Template__foo_a )
26
26
  end
27
-
27
+
28
28
  it "should include parent directory template if exists" do
29
29
  mod1 = template('x')
30
30
  mod2 = template('x/y')
31
31
  mod2.should include(mod1)
32
32
  end
33
33
  end
34
-
34
+
35
35
  describe '.full_paths' do
36
36
  it "should list full_path" do
37
37
  mod = template(:a)
38
38
  mod.full_paths.should == ['/full/path/a']
39
39
  end
40
-
40
+
41
41
  it "should list paths of included modules" do
42
42
  mod = template(:a)
43
43
  mod.send(:include, template(:b))
44
44
  mod.full_paths.should == ['/full/path/a', '/full/path/b']
45
45
  end
46
-
46
+
47
47
  it "should list paths from modules of included modules" do
48
48
  mod = template(:c)
49
49
  mod.send(:include, template(:d))
50
50
  mod.send(:include, template(:a))
51
51
  mod.full_paths.should == ['c', 'a', 'b', 'd'].map {|o| '/full/path/' + o }
52
52
  end
53
-
53
+
54
54
  it "should only list full paths of modules that respond to full_paths" do
55
55
  mod = template(:d)
56
56
  mod.send(:include, Enumerable)
57
57
  mod.full_paths.should == ['/full/path/d']
58
58
  end
59
59
  end
60
-
60
+
61
61
  describe '.load_setup_rb' do
62
62
  it "should load setup.rb file for module" do
63
63
  File.should_receive(:file?).with('/full/path/e/setup.rb').and_return(true)
@@ -65,7 +65,7 @@ describe YARD::Templates::Template do
65
65
  template(:e).new.should respond_to(:success)
66
66
  end
67
67
  end
68
-
68
+
69
69
  describe '.T' do
70
70
  it "should load template from absolute path" do
71
71
  mod = template(:a)
@@ -73,77 +73,85 @@ describe YARD::Templates::Template do
73
73
  mod.T('other')
74
74
  end
75
75
  end
76
-
76
+
77
77
  describe '.find_file' do
78
78
  it "should find file in module's full_path" do
79
79
  File.should_receive(:file?).with('/full/path/a/basename').and_return(false)
80
80
  File.should_receive(:file?).with('/full/path/b/basename').and_return(true)
81
81
  template(:a).find_file('basename').should == '/full/path/b/basename'
82
82
  end
83
-
83
+
84
84
  it "should return nil if no file is found" do
85
85
  File.should_receive(:file?).with('/full/path/a/basename').and_return(false)
86
86
  File.should_receive(:file?).with('/full/path/b/basename').and_return(false)
87
87
  template(:a).find_file('basename').should be_nil
88
88
  end
89
89
  end
90
-
90
+
91
91
  describe '.find_nth_file' do
92
92
  it "should find 2nd existing file in template paths" do
93
93
  File.should_receive(:file?).with('/full/path/a/basename').and_return(true)
94
94
  File.should_receive(:file?).with('/full/path/b/basename').and_return(true)
95
95
  template(:a).find_nth_file('basename', 2).should == '/full/path/b/basename'
96
96
  end
97
-
97
+
98
98
  it "should return nil if no file is found" do
99
99
  File.should_receive(:file?).with('/full/path/a/basename').and_return(true)
100
100
  File.should_receive(:file?).with('/full/path/b/basename').and_return(true)
101
101
  template(:a).find_nth_file('basename', 3).should be_nil
102
102
  end
103
103
  end
104
-
104
+
105
105
  describe '.extra_includes' do
106
106
  it "should be included when a module is initialized" do
107
107
  module MyModule; end
108
108
  Template.extra_includes << MyModule
109
109
  template(:e).new.should be_kind_of(MyModule)
110
110
  end
111
+
112
+ it "should support lambdas in list" do
113
+ module MyModule2; end
114
+ Template.extra_includes << lambda {|opts| MyModule2 if opts.format == :html }
115
+ template(:f).new(:format => :html).should be_kind_of(MyModule2)
116
+ metaclass = (class << template(:g).new(:format => :text); self end)
117
+ metaclass.ancestors.should_not include(MyModule2)
118
+ end
111
119
  end
112
-
120
+
113
121
  describe '.is_a?' do
114
122
  it "should be kind of Template" do
115
123
  template(:e).is_a?(Template).should == true
116
124
  end
117
125
  end
118
-
126
+
119
127
  describe '#T' do
120
128
  it "should delegate to class method" do
121
129
  template(:e).should_receive(:T).with('test')
122
130
  template(:e).new.T('test')
123
131
  end
124
132
  end
125
-
133
+
126
134
  describe '#init' do
127
135
  it "should be called during initialization" do
128
136
  module YARD::Templates::Engine::Template__full_path_e
129
- def init; sections 1, 2, 3 end
137
+ def init; sections 1, 2, 3 end
130
138
  end
131
139
  template(:e).new.sections.should == Section.new(nil, 1, 2, 3)
132
140
  end
133
141
  end
134
-
142
+
135
143
  describe '#file' do
136
144
  it "should read the file if it exists" do
137
145
  File.should_receive(:file?).with('/full/path/e/abc').and_return(true)
138
146
  IO.should_receive(:read).with('/full/path/e/abc').and_return('hello world')
139
147
  template(:e).new.file('abc').should == 'hello world'
140
148
  end
141
-
149
+
142
150
  it "should raise ArgumentError if the file does not exist" do
143
151
  File.should_receive(:file?).with('/full/path/e/abc').and_return(false)
144
152
  lambda { template(:e).new.file('abc') }.should raise_error(ArgumentError)
145
153
  end
146
-
154
+
147
155
  it "should replace {{{__super__}}} with inherited template contents if allow_inherited=true" do
148
156
  File.should_receive(:file?).with('/full/path/a/abc').twice.and_return(true)
149
157
  File.should_receive(:file?).with('/full/path/b/abc').and_return(true)
@@ -158,7 +166,7 @@ describe YARD::Templates::Template do
158
166
  template(:a).new.file('abc').should == "foo {{{__super__}}}"
159
167
  end
160
168
  end
161
-
169
+
162
170
  describe '#superb' do
163
171
  it "should return the inherited erb template contents" do
164
172
  File.should_receive(:file?).with('/full/path/a/test.erb').and_return(true)
@@ -168,7 +176,7 @@ describe YARD::Templates::Template do
168
176
  template.section = :test
169
177
  template.superb.should == "bar"
170
178
  end
171
-
179
+
172
180
  it "should work inside an erb template" do
173
181
  File.should_receive(:file?).with('/full/path/a/test.erb').twice.and_return(true)
174
182
  File.should_receive(:file?).with('/full/path/b/test.erb').and_return(true)
@@ -179,7 +187,7 @@ describe YARD::Templates::Template do
179
187
  template.erb(:test).should == "foobar!"
180
188
  end
181
189
  end
182
-
190
+
183
191
  describe '#sections' do
184
192
  it "should allow sections to be set if arguments are provided" do
185
193
  mod = template(:e).new
@@ -187,7 +195,7 @@ describe YARD::Templates::Template do
187
195
  mod.sections.should == Section.new(nil, 1, 2, [3])
188
196
  end
189
197
  end
190
-
198
+
191
199
  describe '#run' do
192
200
  it "should render all sections" do
193
201
  mod = template(:e).new
@@ -197,7 +205,7 @@ describe YARD::Templates::Template do
197
205
  mod.sections :a, :b, :c
198
206
  mod.run.should == 'abc'
199
207
  end
200
-
208
+
201
209
  it "should render all sections with options" do
202
210
  mod = template(:e).new
203
211
  mod.should_receive(:render_section).with(Section.new(:a)).and_return('a')
@@ -205,14 +213,14 @@ describe YARD::Templates::Template do
205
213
  mod.sections :a
206
214
  mod.run(:a => 1).should == 'a'
207
215
  end
208
-
216
+
209
217
  it "should run section list if provided" do
210
218
  mod = template(:e).new
211
219
  mod.should_receive(:render_section).with(Section.new(:q))
212
220
  mod.should_receive(:render_section).with(Section.new(:x))
213
221
  mod.run({}, [:q, :x])
214
222
  end
215
-
223
+
216
224
  it "should accept a nil section as empty string" do
217
225
  mod = template(:e).new
218
226
  mod.should_receive(:render_section).with(Section.new(:a))
@@ -220,7 +228,7 @@ describe YARD::Templates::Template do
220
228
  mod.run.should == ""
221
229
  end
222
230
  end
223
-
231
+
224
232
  describe '#add_options' do
225
233
  it "should set instance variables in addition to options" do
226
234
  mod = template(:f).new
@@ -229,7 +237,7 @@ describe YARD::Templates::Template do
229
237
  mod.instance_variable_get("@a").should == 1
230
238
  mod.instance_variable_get("@b").should == 2
231
239
  end
232
-
240
+
233
241
  it "should set instance variables and options only for the block" do
234
242
  mod = template(:f).new
235
243
  mod.send(:add_options, {:a => 100, :b => 200}) do
@@ -238,7 +246,7 @@ describe YARD::Templates::Template do
238
246
  mod.options.should_not == {:a => 100, :b => 200}
239
247
  end
240
248
  end
241
-
249
+
242
250
  describe '#render_section' do
243
251
  it "should call method if method exists by section name as Symbol" do
244
252
  mod = template(:f).new
@@ -248,7 +256,7 @@ describe YARD::Templates::Template do
248
256
  mod.should_receive(:send).with('a').and_return('a')
249
257
  mod.run({}, [:a, 'a']).should == 'aa'
250
258
  end
251
-
259
+
252
260
  it "should call erb if no method exists by section name" do
253
261
  mod = template(:f).new
254
262
  mod.should_receive(:respond_to?).with(:a).and_return(false)
@@ -257,7 +265,7 @@ describe YARD::Templates::Template do
257
265
  mod.should_receive(:erb).with('a').and_return('a')
258
266
  mod.run({}, [:a, 'a']).should == 'aa'
259
267
  end
260
-
268
+
261
269
  it "should run a template if section is one" do
262
270
  mod2 = template(:g)
263
271
  mod2.should_receive(:run)
@@ -265,7 +273,7 @@ describe YARD::Templates::Template do
265
273
  mod.sections mod2
266
274
  mod.run
267
275
  end
268
-
276
+
269
277
  it "should run a template instance if section is one" do
270
278
  mod2 = template(:g).new
271
279
  mod2.should_receive(:run)
@@ -273,8 +281,8 @@ describe YARD::Templates::Template do
273
281
  mod.sections mod2
274
282
  mod.run
275
283
  end
276
- end
277
-
284
+ end
285
+
278
286
  describe '#yield' do
279
287
  it "should yield a subsection" do
280
288
  mod = template(:e).new
@@ -287,7 +295,7 @@ describe YARD::Templates::Template do
287
295
 
288
296
  mod.run.should == "(b)"
289
297
  end
290
-
298
+
291
299
  it "should yield a subsection within a yielded subsection" do
292
300
  mod = template(:e).new
293
301
  mod.sections :a, [:b, [:c]]
@@ -299,7 +307,7 @@ describe YARD::Templates::Template do
299
307
 
300
308
  mod.run.should == "(c)"
301
309
  end
302
-
310
+
303
311
  it "should support arbitrary nesting" do
304
312
  mod = template(:e).new
305
313
  mod.sections :a, [:b, [:c, [:d, [:e]]]]
@@ -313,7 +321,7 @@ describe YARD::Templates::Template do
313
321
 
314
322
  mod.run.should == "(e)"
315
323
  end
316
-
324
+
317
325
  it "should yield first two elements if yield is called twice" do
318
326
  mod = template(:e).new
319
327
  mod.sections :a, [:b, :c, :d]
@@ -325,7 +333,7 @@ describe YARD::Templates::Template do
325
333
 
326
334
  mod.run.should == "(bc)"
327
335
  end
328
-
336
+
329
337
  it "should ignore any subsections inside subsection yields" do
330
338
  mod = template(:e).new
331
339
  mod.sections :a, [:b, [:c], :d]
@@ -337,19 +345,19 @@ describe YARD::Templates::Template do
337
345
 
338
346
  mod.run.should == "(bd)"
339
347
  end
340
-
348
+
341
349
  it "should allow extra options passed via yield" do
342
350
  mod = template(:e).new
343
351
  mod.sections :a, [:b]
344
352
  class << mod
345
353
  def a; "(" + yield(:x => "a") + ")" end
346
- def b; options[:x] + @x end
354
+ def b; options.x + @x end
347
355
  end
348
356
 
349
357
  mod.run.should == "(aa)"
350
358
  end
351
359
  end
352
-
360
+
353
361
  describe '#yieldall' do
354
362
  it "should yield all subsections" do
355
363
  mod = template(:e).new
@@ -364,7 +372,7 @@ describe YARD::Templates::Template do
364
372
 
365
373
  mod.run.should == "(bdec)"
366
374
  end
367
-
375
+
368
376
  it "should yield options to all subsections" do
369
377
  mod = template(:e).new
370
378
  mod.sections :a, [:b, :c]
@@ -375,7 +383,7 @@ describe YARD::Templates::Template do
375
383
  end
376
384
  mod.run.should == "(22)"
377
385
  end
378
-
386
+
379
387
  it "should yield all subsections more than once" do
380
388
  mod = template(:e).new
381
389
  mod.sections :a, [:b]
@@ -386,7 +394,7 @@ describe YARD::Templates::Template do
386
394
 
387
395
  mod.run.should == "(bb)"
388
396
  end
389
-
397
+
390
398
  it "should not yield if no yieldall is called" do
391
399
  mod = template(:e).new
392
400
  mod.sections :a, [:b]