deg-yard 0.8.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,370 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'rubygems/specification'
8
+
9
+ ##
10
+ # The SourceIndex object indexes all the gems available from a
11
+ # particular source (e.g. a list of gem directories, or a remote
12
+ # source). A SourceIndex maps a gem full name to a gem
13
+ # specification.
14
+ #
15
+ # NOTE:: The class used to be named Cache, but that became
16
+ # confusing when cached source fetchers where introduced. The
17
+ # constant Gem::Cache is an alias for this class to allow old
18
+ # YAMLized source index objects to load properly.
19
+
20
+ class Gem::SourceIndex
21
+ # Undef old methods
22
+ alias old_initialize initialize
23
+ undef old_initialize
24
+ %w(all_gems prerelease_gems load_gems_in latest_specs prerelease_specs
25
+ released_specs add_spec add_specs remove_spec each specification
26
+ index_signature gem_signature size length find_name search released_gems
27
+ refresh! outdated == dump gems spec_dirs spec_dirs=).each do |meth|
28
+ undef_method(meth) if method_defined?(meth)
29
+ end
30
+
31
+ include Enumerable
32
+
33
+ attr_reader :gems # :nodoc:
34
+
35
+ ##
36
+ # Directories to use to refresh this SourceIndex when calling refresh!
37
+
38
+ attr_accessor :spec_dirs
39
+
40
+ class << self
41
+ # Undef old methods
42
+ %w(from_installed_gems installed_spec_directories
43
+ from_gems_in load_specification).each do |meth|
44
+ if instance_methods(true).find {|m| m.to_s == meth }
45
+ undef_method(meth)
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Factory method to construct a source index instance for a given
51
+ # path.
52
+ #
53
+ # deprecated::
54
+ # If supplied, from_installed_gems will act just like
55
+ # +from_gems_in+. This argument is deprecated and is provided
56
+ # just for backwards compatibility, and should not generally
57
+ # be used.
58
+ #
59
+ # return::
60
+ # SourceIndex instance
61
+
62
+ def from_installed_gems(*deprecated)
63
+ if deprecated.empty?
64
+ from_gems_in(*installed_spec_directories)
65
+ else
66
+ from_gems_in(*deprecated) # HACK warn
67
+ end
68
+ end
69
+
70
+ ##
71
+ # Returns a list of directories from Gem.path that contain specifications.
72
+
73
+ def installed_spec_directories
74
+ Gem.path.collect { |dir| File.join(dir, "specifications") }
75
+ end
76
+
77
+ ##
78
+ # Creates a new SourceIndex from the ruby format gem specifications in
79
+ # +spec_dirs+.
80
+
81
+ def from_gems_in(*spec_dirs)
82
+ source_index = new
83
+ source_index.spec_dirs = spec_dirs
84
+ source_index.refresh!
85
+ end
86
+
87
+ ##
88
+ # Loads a ruby-format specification from +file_name+ and returns the
89
+ # loaded spec.
90
+
91
+ def load_specification(file_name)
92
+ Gem::Specification.load file_name
93
+ end
94
+
95
+ end
96
+
97
+ ##
98
+ # Constructs a source index instance from the provided specifications, which
99
+ # is a Hash of gem full names and Gem::Specifications.
100
+ #--
101
+ # TODO merge @gems and @prerelease_gems and provide a separate method
102
+ # #prerelease_gems
103
+
104
+ def initialize(specifications={})
105
+ @gems = {}
106
+ specifications.each{ |full_name, spec| add_spec spec }
107
+ @spec_dirs = nil
108
+ end
109
+
110
+ # TODO: remove method
111
+ def all_gems
112
+ @gems
113
+ end
114
+
115
+ def prerelease_gems
116
+ @gems.reject{ |name, gem| !gem.version.prerelease? }
117
+ end
118
+
119
+ def released_gems
120
+ @gems.reject{ |name, gem| gem.version.prerelease? }
121
+ end
122
+
123
+ ##
124
+ # Reconstruct the source index from the specifications in +spec_dirs+.
125
+
126
+ def load_gems_in(*spec_dirs)
127
+ @gems.clear
128
+
129
+ spec_dirs.reverse_each do |spec_dir|
130
+ spec_files = Dir.glob File.join(spec_dir, '*.gemspec')
131
+
132
+ spec_files.each do |spec_file|
133
+ gemspec = Gem::Specification.load spec_file
134
+ add_spec gemspec if gemspec
135
+ end
136
+ end
137
+
138
+ self
139
+ end
140
+
141
+ ##
142
+ # Returns an Array specifications for the latest released versions
143
+ # of each gem in this index.
144
+
145
+ def latest_specs(include_prerelease=false)
146
+ result = Hash.new { |h,k| h[k] = [] }
147
+ latest = {}
148
+
149
+ sort.each do |_, spec|
150
+ name = spec.name
151
+ curr_ver = spec.version
152
+ prev_ver = latest.key?(name) ? latest[name].version : nil
153
+
154
+ next if !include_prerelease && curr_ver.prerelease?
155
+ next unless prev_ver.nil? or curr_ver >= prev_ver or
156
+ latest[name].platform != Gem::Platform::RUBY
157
+
158
+ if prev_ver.nil? or
159
+ (curr_ver > prev_ver and spec.platform == Gem::Platform::RUBY) then
160
+ result[name].clear
161
+ latest[name] = spec
162
+ end
163
+
164
+ if spec.platform != Gem::Platform::RUBY then
165
+ result[name].delete_if do |result_spec|
166
+ result_spec.platform == spec.platform
167
+ end
168
+ end
169
+
170
+ result[name] << spec
171
+ end
172
+
173
+ # TODO: why is this a hash while @gems is an array? Seems like
174
+ # structural similarity would be good.
175
+ result.values.flatten
176
+ end
177
+
178
+ ##
179
+ # An array including only the prerelease gemspecs
180
+
181
+ def prerelease_specs
182
+ prerelease_gems.values
183
+ end
184
+
185
+ ##
186
+ # An array including only the released gemspecs
187
+
188
+ def released_specs
189
+ released_gems.values
190
+ end
191
+
192
+ ##
193
+ # Add a gem specification to the source index.
194
+
195
+ def add_spec(gem_spec, name = gem_spec.full_name)
196
+ # No idea why, but the Indexer wants to insert them using original_name
197
+ # instead of full_name. So we make it an optional arg.
198
+ @gems[name] = gem_spec
199
+ end
200
+
201
+ ##
202
+ # Add gem specifications to the source index.
203
+
204
+ def add_specs(*gem_specs)
205
+ gem_specs.each do |spec|
206
+ add_spec spec
207
+ end
208
+ end
209
+
210
+ ##
211
+ # Remove a gem specification named +full_name+.
212
+
213
+ def remove_spec(full_name)
214
+ @gems.delete full_name
215
+ end
216
+
217
+ ##
218
+ # Iterate over the specifications in the source index.
219
+
220
+ def each(&block) # :yields: gem.full_name, gem
221
+ @gems.each(&block)
222
+ end
223
+
224
+ ##
225
+ # The gem specification given a full gem spec name.
226
+
227
+ def specification(full_name)
228
+ @gems[full_name]
229
+ end
230
+
231
+ ##
232
+ # The signature for the source index. Changes in the signature indicate a
233
+ # change in the index.
234
+
235
+ def index_signature
236
+ require 'digest'
237
+
238
+ Digest::SHA256.new.hexdigest(@gems.keys.sort.join(',')).to_s
239
+ end
240
+
241
+ ##
242
+ # The signature for the given gem specification.
243
+
244
+ def gem_signature(gem_full_name)
245
+ require 'digest'
246
+
247
+ Digest::SHA256.new.hexdigest(@gems[gem_full_name].to_yaml).to_s
248
+ end
249
+
250
+ def size
251
+ @gems.size
252
+ end
253
+ alias length size
254
+
255
+ ##
256
+ # Find a gem by an exact match on the short name.
257
+
258
+ def find_name(gem_name, requirement = Gem::Requirement.default)
259
+ dep = Gem::Dependency.new gem_name, requirement
260
+ search dep
261
+ end
262
+
263
+ ##
264
+ # Search for a gem by Gem::Dependency +gem_pattern+. If +only_platform+
265
+ # is true, only gems matching Gem::Platform.local will be returned. An
266
+ # Array of matching Gem::Specification objects is returned.
267
+ #
268
+ # For backwards compatibility, a String or Regexp pattern may be passed as
269
+ # +gem_pattern+, and a Gem::Requirement for +platform_only+. This
270
+ # behavior is deprecated and will be removed.
271
+
272
+ def search(gem_pattern, platform_only = false)
273
+ requirement = nil
274
+ only_platform = false
275
+
276
+ # TODO - Remove support and warning for legacy arguments after 2008/11
277
+ unless Gem::Dependency === gem_pattern
278
+ warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated, use #find_name"
279
+ end
280
+
281
+ case gem_pattern
282
+ when Regexp then
283
+ requirement = platform_only || Gem::Requirement.default
284
+ when Gem::Dependency then
285
+ only_platform = platform_only
286
+ requirement = gem_pattern.requirement
287
+
288
+ gem_pattern = if Regexp === gem_pattern.name then
289
+ gem_pattern.name
290
+ elsif gem_pattern.name.empty? then
291
+ //
292
+ else
293
+ /^#{Regexp.escape gem_pattern.name}$/
294
+ end
295
+ else
296
+ requirement = platform_only || Gem::Requirement.default
297
+ gem_pattern = /#{gem_pattern}/i
298
+ end
299
+
300
+ unless Gem::Requirement === requirement then
301
+ requirement = Gem::Requirement.create requirement
302
+ end
303
+
304
+ specs = all_gems.values.select do |spec|
305
+ spec.name =~ gem_pattern and
306
+ requirement.satisfied_by? spec.version
307
+ end
308
+
309
+ if only_platform then
310
+ specs = specs.select do |spec|
311
+ Gem::Platform.match spec.platform
312
+ end
313
+ end
314
+
315
+ specs.sort_by { |s| s.sort_obj }
316
+ end
317
+
318
+ ##
319
+ # Replaces the gems in the source index from specifications in the
320
+ # directories this source index was created from. Raises an exception if
321
+ # this source index wasn't created from a directory (via from_gems_in or
322
+ # from_installed_gems, or having spec_dirs set).
323
+
324
+ def refresh!
325
+ raise 'source index not created from disk' if @spec_dirs.nil?
326
+ load_gems_in(*@spec_dirs)
327
+ end
328
+
329
+ ##
330
+ # Returns an Array of Gem::Specifications that are not up to date.
331
+
332
+ def outdated
333
+ outdateds = []
334
+
335
+ latest_specs.each do |local|
336
+ dependency = Gem::Dependency.new local.name, ">= #{local.version}"
337
+
338
+ fetcher = Gem::SpecFetcher.fetcher
339
+ remotes = fetcher.find_matching dependency
340
+ remotes = remotes.map { |(_, version, _), _| version }
341
+
342
+ latest = remotes.sort.last
343
+
344
+ outdateds << local.name if latest and local.version < latest
345
+ end
346
+
347
+ outdateds
348
+ end
349
+
350
+ def ==(other) # :nodoc:
351
+ self.class === other and @gems == other.gems
352
+ end
353
+
354
+ def dump
355
+ Marshal.dump(self)
356
+ end
357
+
358
+ end
359
+
360
+ # :stopdoc:
361
+ module Gem
362
+
363
+ ##
364
+ # Cache is an alias for SourceIndex to allow older YAMLized source index
365
+ # objects to load properly.
366
+
367
+ Cache = SourceIndex unless defined?(Cache)
368
+
369
+ end
370
+ # :startdoc:
@@ -0,0 +1,8 @@
1
+ begin
2
+ require 'rubygems'
3
+ if defined?(Gem::VERSION) && Gem::VERSION >= '1.8.0'
4
+ require File.dirname(__FILE__) + '/backports/gem'
5
+ require File.dirname(__FILE__) + '/backports/source_index'
6
+ end
7
+ rescue LoadError
8
+ end
@@ -0,0 +1,88 @@
1
+ begin
2
+ require 'rubygems/user_interaction'
3
+ require 'rubygems/doc_manager'
4
+ rescue LoadError
5
+ end
6
+
7
+ class Gem::DocManager
8
+ def self.load_yardoc
9
+ require File.expand_path(File.join(File.dirname(__FILE__), *%w(.. .. yard)))
10
+ end
11
+
12
+ def run_yardoc(*args)
13
+ args << '--quiet'
14
+ args << '--backtrace' if Gem.configuration.backtrace
15
+ unless File.file?(File.join(@spec.full_gem_path, '.yardopts'))
16
+ args << @spec.require_paths
17
+ if @spec.extra_rdoc_files.size > 0
18
+ args << '-'
19
+ args += @spec.extra_rdoc_files
20
+ end
21
+ end
22
+ args = args.flatten.map {|arg| arg.to_s }
23
+
24
+ old_pwd = Dir.pwd
25
+ Dir.chdir(@spec.full_gem_path)
26
+ YARD::CLI::Yardoc.run(*args)
27
+ rescue Errno::EACCES => e
28
+ dirname = File.dirname e.message.split("-")[1].strip
29
+ raise Gem::FilePermissionError.new(dirname)
30
+ rescue => ex
31
+ alert_error "While generating documentation for #{@spec.full_name}"
32
+ ui.errs.puts "... MESSAGE: #{ex}"
33
+ ui.errs.puts "... YARDOC args: #{args.join(' ')}"
34
+ ui.errs.puts "\t#{ex.backtrace.join("\n\t")}" if Gem.configuration.backtrace
35
+ ui.errs.puts "(continuing with the rest of the installation)"
36
+ ensure
37
+ Dir.chdir(old_pwd)
38
+ end
39
+
40
+ begin undef setup_rdoc; rescue NameError; end
41
+ def setup_rdoc
42
+ if File.exist?(@doc_dir) && !File.writable?(@doc_dir) then
43
+ raise Gem::FilePermissionError.new(@doc_dir)
44
+ end
45
+
46
+ FileUtils.mkdir_p @doc_dir unless File.exist?(@doc_dir)
47
+
48
+ self.class.load_rdoc if @spec.has_rdoc?
49
+ self.class.load_yardoc if @spec.has_yardoc?
50
+ end
51
+
52
+ def install_yardoc
53
+ rdoc_dir = File.join(@doc_dir, 'rdoc')
54
+
55
+ FileUtils.rm_rf rdoc_dir
56
+
57
+ say "Installing YARD documentation for #{@spec.full_name}..."
58
+ run_yardoc '-o', rdoc_dir
59
+ end
60
+
61
+ def install_ri_yard
62
+ install_ri_yard_orig if @spec.has_rdoc?
63
+ return if @spec.has_rdoc? == false
64
+ return if @spec.has_yardoc?
65
+
66
+ self.class.load_yardoc
67
+ say "Building YARD (yri) index for #{@spec.full_name}..."
68
+ run_yardoc '-c', '-n'
69
+ end
70
+
71
+ begin
72
+ alias install_ri_yard_orig install_ri
73
+ alias install_ri install_ri_yard
74
+ rescue NameError; end
75
+
76
+ def install_rdoc_yard
77
+ if @spec.has_rdoc?
78
+ install_rdoc_yard_orig
79
+ elsif @spec.has_yardoc?
80
+ install_yardoc
81
+ end
82
+ end
83
+
84
+ begin
85
+ alias install_rdoc_yard_orig install_rdoc
86
+ alias install_rdoc install_rdoc_yard
87
+ rescue NameError; end
88
+ end
@@ -0,0 +1,41 @@
1
+ require 'rubygems/specification'
2
+
3
+ class Gem::Specification
4
+ # @since 0.5.3
5
+ def has_yardoc=(value)
6
+ @has_rdoc = value ? 'yard' : false
7
+ end
8
+
9
+ def has_yardoc
10
+ @has_rdoc == 'yard'
11
+ end
12
+
13
+ undef has_rdoc?
14
+ def has_rdoc?
15
+ (@has_rdoc ||= true) && @has_rdoc != 'yard'
16
+ end
17
+
18
+ alias has_yardoc? has_yardoc
19
+
20
+ # has_rdoc should not be ignored!
21
+ if respond_to?(:overwrite_accessor)
22
+ overwrite_accessor(:has_rdoc) { @has_rdoc ||= true }
23
+ overwrite_accessor(:has_rdoc=) {|v| @has_rdoc = v }
24
+ else
25
+ attr_accessor :has_rdoc
26
+ end
27
+
28
+ if defined?(Gem::VERSION) && Gem::VERSION >= '1.7.'
29
+ def _dump_with_rdoc(limit)
30
+ dmp = _dump_without_rdoc(limit)
31
+ dmp[15] = @has_rdoc if dmp[15] == true
32
+ dmp
33
+ end
34
+ alias _dump_without_rdoc _dump
35
+ alias _dump _dump_with_rdoc
36
+
37
+ @@default_value[:has_rdoc] = true if defined?(@@default_value)
38
+ @@attributes << 'has_rdoc' if defined?(@@attributes)
39
+ @@nil_attributes << 'has_rdoc' if defined?(@@nil_attributes)
40
+ end
41
+ end
@@ -0,0 +1,80 @@
1
+ module YARD
2
+ module Serializers
3
+ # The abstract base serializer. Serializers allow templates to be
4
+ # rendered to various endpoints. For instance, a {FileSystemSerializer}
5
+ # would allow template contents to be written to the filesystem
6
+ #
7
+ # To implement a custom serializer, override the following methods:
8
+ # * {#serialize}
9
+ # * {#serialized_path}
10
+ #
11
+ # Optionally, a serializer can implement before and after filters:
12
+ # * {#before_serialize}
13
+ # * {#after_serialize}
14
+ #
15
+ # @abstract Override this class to implement a custom serializer.
16
+ class Base
17
+ # All serializer options are saved so they can be passed to other serializers.
18
+ #
19
+ # @return [SymbolHash] the serializer options
20
+ attr_reader :options
21
+
22
+ # @group Creating a New Serializer
23
+
24
+ # Creates a new serializer with options
25
+ #
26
+ # @param [Hash] opts the options to assign to {#options}
27
+ def initialize(opts = {})
28
+ @options = SymbolHash.new(false).update(opts)
29
+ end
30
+
31
+ # @group Serializing an Object
32
+
33
+ # Serializes an object.
34
+ #
35
+ # @abstract This method should implement the logic that serializes
36
+ # +data+ to the respective endpoint. This method should also call
37
+ # the before and after callbacks {#before_serialize} and {#after_serialize}
38
+ # @param [CodeObjects::Base, String] object the object to serialize the
39
+ # data for. The object can also be a string (for non-object serialization)
40
+ # @param [String] data the contents that should be serialized
41
+ def serialize(object, data) end
42
+
43
+ # The serialized path of an object
44
+ #
45
+ # @abstract This method should return the path of the object on the
46
+ # endpoint. For instance, for a file serializer, this should return
47
+ # the filename that represents the object on disk.
48
+ # @param [CodeObjects::Base] object the object to return a path for
49
+ # @return [String] the serialized path of an object
50
+ def serialized_path(object) end
51
+
52
+ # Returns whether an object has been serialized
53
+ #
54
+ # @abstract This method should return whether the endpoint already exists.
55
+ # For instance, a file system serializer would check if the file exists
56
+ # on disk. You will most likely use +#basepath+ and {#serialized_path} to
57
+ # get the endpoint's location.
58
+ # @param [CodeObjects::Base] object the object to check existence of
59
+ # @return [Boolean] whether the endpoint exists.
60
+ # @since 0.6.0
61
+ def exists?(object) false end
62
+
63
+ # @group Callbacks
64
+
65
+ # Called before serialization.
66
+ #
67
+ # @abstract Should run code before serialization. Should return false
68
+ # if serialization should not occur.
69
+ # @return [Boolean] whether or not serialization should occur
70
+ def before_serialize; end
71
+
72
+ # Called after serialization.
73
+ #
74
+ # @abstract Should run code after serialization.
75
+ # @param [String] data the data that was serialized.
76
+ # @return [void]
77
+ def after_serialize(data); end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,90 @@
1
+ module YARD
2
+ module Serializers
3
+ # Implements a serializer that reads from and writes to the filesystem.
4
+ class FileSystemSerializer < Base
5
+ # The base path to write data to.
6
+ # @return [String] a base path
7
+ attr_reader :basepath
8
+
9
+ def basepath=(value)
10
+ @basepath = options[:basepath] = value
11
+ end
12
+
13
+ # The extension of the filename (defaults to +html+)
14
+ #
15
+ # @return [String] the extension of the file. Empty string for no extension.
16
+ attr_reader :extension
17
+
18
+ def extension=(value)
19
+ @extension = options[:extension] = value
20
+ end
21
+
22
+ # Creates a new FileSystemSerializer with options
23
+ #
24
+ # @option opts [String] :basepath ('doc') the base path to write data to
25
+ # @option opts [String] :extension ('html') the extension of the serialized
26
+ # path filename. If this is set to the empty string, no extension is used.
27
+ def initialize(opts = {})
28
+ super
29
+ @basepath = (options[:basepath] || 'doc').to_s
30
+ @extension = (options.has_key?(:extension) ? options[:extension] : 'html').to_s
31
+ end
32
+
33
+ # Serializes object with data to its serialized path (prefixed by the +#basepath+).
34
+ #
35
+ # @return [String] the written data (for chaining)
36
+ def serialize(object, data)
37
+ path = File.join(basepath, serialized_path(object))
38
+ log.debug "Serializing to #{path}"
39
+ File.open!(path, "wb") {|f| f.write data }
40
+ end
41
+
42
+ # Implements the serialized path of a code object.
43
+ #
44
+ # @param [CodeObjects::Base, CodeObjects::ExtraFileObject, String] object
45
+ # the object to get a path for. The path of a string is the string itself.
46
+ # @return [String] if object is a String, returns
47
+ # object, otherwise the path on disk (without the basepath).
48
+ def serialized_path(object)
49
+ return object if object.is_a?(String)
50
+
51
+ if object.is_a?(CodeObjects::ExtraFileObject)
52
+ fspath = ['file.' + object.name + (extension.empty? ? '' : ".#{extension}")]
53
+ else
54
+ objname = object != YARD::Registry.root ? object.name.to_s : "top-level-namespace"
55
+ objname += '_' + object.scope.to_s[0,1] if object.is_a?(CodeObjects::MethodObject)
56
+ fspath = [objname + (extension.empty? ? '' : ".#{extension}")]
57
+ if object.namespace && object.namespace.path != ""
58
+ fspath.unshift(*object.namespace.path.split(CodeObjects::NSEP))
59
+ end
60
+ end
61
+
62
+ File.join(encode_path_components(*fspath))
63
+ end
64
+
65
+ # Checks the disk for an object and returns whether it was serialized.
66
+ #
67
+ # @param [CodeObjects::Base] object the object to check
68
+ # @return [Boolean] whether an object has been serialized to disk
69
+ def exists?(object)
70
+ File.exist?(File.join(basepath, serialized_path(object)))
71
+ end
72
+
73
+ private
74
+
75
+ # Remove special chars from filenames.
76
+ # Windows disallows \ / : * ? " < > | but we will just remove any
77
+ # non alphanumeric (plus period, underscore and dash).
78
+ def encode_path_components(*components)
79
+ components.map! do |p|
80
+ p.gsub(/[^\w\.-]/) do |x|
81
+ encoded = '_'
82
+
83
+ x.each_byte { |b| encoded << ("%X" % b) }
84
+ encoded
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,24 @@
1
+ module YARD
2
+ module Serializers
3
+ # Serializes an object to a process (like less)
4
+ #
5
+ # @example Serializing to a pager (less)
6
+ # serializer = ProcessSerializer.new('less')
7
+ # serializer.serialize(object, "data!")
8
+ class ProcessSerializer < Base
9
+ # Creates a new ProcessSerializer for the shell command +cmd+
10
+ #
11
+ # @param [String] cmd the command that will accept data on stdin
12
+ def initialize(cmd)
13
+ @cmd = cmd
14
+ end
15
+
16
+ # Overrides serialize behaviour and writes data to standard input
17
+ # of the associated command
18
+ def serialize(object, data)
19
+ IO.popen(@cmd, 'w') {|io| io.write(data) }
20
+ end
21
+ end
22
+ end
23
+ end
24
+