deg-yard 0.8.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. data/.travis.yml +39 -0
  2. data/.yardopts +25 -0
  3. data/.yardopts_guide +19 -0
  4. data/.yardopts_i18n +22 -0
  5. data/Gemfile +35 -0
  6. data/LEGAL +66 -0
  7. data/LICENSE +22 -0
  8. data/README.md +609 -0
  9. data/Rakefile +66 -0
  10. data/benchmarks/builtins_vs_eval.rb +23 -0
  11. data/benchmarks/concat_vs_join.rb +12 -0
  12. data/benchmarks/erb_vs_erubis.rb +53 -0
  13. data/benchmarks/format_args.rb +46 -0
  14. data/benchmarks/generation.rb +37 -0
  15. data/benchmarks/marshal_vs_dbm.rb +63 -0
  16. data/benchmarks/parsing.rb +46 -0
  17. data/benchmarks/pathname_vs_string.rb +50 -0
  18. data/benchmarks/rdoc_vs_yardoc.rb +10 -0
  19. data/benchmarks/registry_store_types.rb +48 -0
  20. data/benchmarks/ri_vs_yri.rb +18 -0
  21. data/benchmarks/ripper_parser.rb +12 -0
  22. data/benchmarks/splat_vs_flatten.rb +12 -0
  23. data/benchmarks/template_erb.rb +22 -0
  24. data/benchmarks/template_format.rb +6 -0
  25. data/benchmarks/template_profile.rb +17 -0
  26. data/benchmarks/yri_cache.rb +19 -0
  27. data/bin/yard +12 -0
  28. data/bin/yardoc +12 -0
  29. data/bin/yri +12 -0
  30. data/docs/CodeObjects.md +115 -0
  31. data/docs/GettingStarted.md +592 -0
  32. data/docs/Handlers.md +152 -0
  33. data/docs/Overview.md +61 -0
  34. data/docs/Parser.md +191 -0
  35. data/docs/Tags.md +282 -0
  36. data/docs/TagsArch.md +123 -0
  37. data/docs/Templates.md +496 -0
  38. data/docs/WhatsNew.md +1244 -0
  39. data/docs/images/code-objects-class-diagram.png +0 -0
  40. data/docs/images/handlers-class-diagram.png +0 -0
  41. data/docs/images/overview-class-diagram.png +0 -0
  42. data/docs/images/parser-class-diagram.png +0 -0
  43. data/docs/images/tags-class-diagram.png +0 -0
  44. data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
  45. data/docs/templates/default/fulldoc/html/setup.rb +6 -0
  46. data/docs/templates/default/layout/html/setup.rb +8 -0
  47. data/docs/templates/default/layout/html/tag_list.erb +11 -0
  48. data/docs/templates/default/yard_tags/html/list.erb +18 -0
  49. data/docs/templates/default/yard_tags/html/setup.rb +27 -0
  50. data/docs/templates/plugin.rb +65 -0
  51. data/lib/rubygems_plugin.rb +4 -0
  52. data/lib/yard/autoload.rb +290 -0
  53. data/lib/yard/cli/command.rb +84 -0
  54. data/lib/yard/cli/command_parser.rb +92 -0
  55. data/lib/yard/cli/config.rb +136 -0
  56. data/lib/yard/cli/diff.rb +270 -0
  57. data/lib/yard/cli/display.rb +68 -0
  58. data/lib/yard/cli/gems.rb +83 -0
  59. data/lib/yard/cli/graph.rb +126 -0
  60. data/lib/yard/cli/help.rb +18 -0
  61. data/lib/yard/cli/i18n.rb +69 -0
  62. data/lib/yard/cli/list.rb +22 -0
  63. data/lib/yard/cli/markup_types.rb +33 -0
  64. data/lib/yard/cli/server.rb +253 -0
  65. data/lib/yard/cli/stats.rb +213 -0
  66. data/lib/yard/cli/yardoc.rb +752 -0
  67. data/lib/yard/cli/yardopts_command.rb +109 -0
  68. data/lib/yard/cli/yri.rb +214 -0
  69. data/lib/yard/code_objects/base.rb +585 -0
  70. data/lib/yard/code_objects/class_object.rb +143 -0
  71. data/lib/yard/code_objects/class_variable_object.rb +8 -0
  72. data/lib/yard/code_objects/constant_object.rb +13 -0
  73. data/lib/yard/code_objects/extended_method_object.rb +23 -0
  74. data/lib/yard/code_objects/extra_file_object.rb +128 -0
  75. data/lib/yard/code_objects/macro_object.rb +172 -0
  76. data/lib/yard/code_objects/method_object.rb +191 -0
  77. data/lib/yard/code_objects/module_object.rb +18 -0
  78. data/lib/yard/code_objects/namespace_object.rb +200 -0
  79. data/lib/yard/code_objects/proxy.rb +258 -0
  80. data/lib/yard/code_objects/root_object.rb +17 -0
  81. data/lib/yard/config.rb +269 -0
  82. data/lib/yard/core_ext/array.rb +15 -0
  83. data/lib/yard/core_ext/file.rb +65 -0
  84. data/lib/yard/core_ext/hash.rb +15 -0
  85. data/lib/yard/core_ext/insertion.rb +60 -0
  86. data/lib/yard/core_ext/module.rb +19 -0
  87. data/lib/yard/core_ext/string.rb +67 -0
  88. data/lib/yard/core_ext/symbol_hash.rb +73 -0
  89. data/lib/yard/docstring.rb +362 -0
  90. data/lib/yard/docstring_parser.rb +321 -0
  91. data/lib/yard/globals.rb +18 -0
  92. data/lib/yard/handlers/base.rb +597 -0
  93. data/lib/yard/handlers/c/alias_handler.rb +15 -0
  94. data/lib/yard/handlers/c/attribute_handler.rb +13 -0
  95. data/lib/yard/handlers/c/base.rb +110 -0
  96. data/lib/yard/handlers/c/class_handler.rb +26 -0
  97. data/lib/yard/handlers/c/constant_handler.rb +12 -0
  98. data/lib/yard/handlers/c/handler_methods.rb +166 -0
  99. data/lib/yard/handlers/c/init_handler.rb +18 -0
  100. data/lib/yard/handlers/c/method_handler.rb +35 -0
  101. data/lib/yard/handlers/c/mixin_handler.rb +13 -0
  102. data/lib/yard/handlers/c/module_handler.rb +16 -0
  103. data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
  104. data/lib/yard/handlers/c/path_handler.rb +10 -0
  105. data/lib/yard/handlers/c/struct_handler.rb +12 -0
  106. data/lib/yard/handlers/c/symbol_handler.rb +7 -0
  107. data/lib/yard/handlers/processor.rb +201 -0
  108. data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
  109. data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
  110. data/lib/yard/handlers/ruby/base.rb +164 -0
  111. data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
  112. data/lib/yard/handlers/ruby/class_handler.rb +121 -0
  113. data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
  114. data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
  115. data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
  116. data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
  117. data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
  118. data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
  119. data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
  120. data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
  121. data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
  122. data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
  123. data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
  124. data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
  125. data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
  126. data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
  127. data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
  128. data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
  129. data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
  130. data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
  131. data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
  132. data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
  133. data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
  134. data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
  135. data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
  136. data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
  137. data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
  138. data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
  139. data/lib/yard/handlers/ruby/method_handler.rb +92 -0
  140. data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
  141. data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
  142. data/lib/yard/handlers/ruby/module_handler.rb +11 -0
  143. data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
  144. data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
  145. data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
  146. data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
  147. data/lib/yard/i18n/locale.rb +74 -0
  148. data/lib/yard/i18n/message.rb +56 -0
  149. data/lib/yard/i18n/messages.rb +55 -0
  150. data/lib/yard/i18n/pot_generator.rb +280 -0
  151. data/lib/yard/i18n/text.rb +173 -0
  152. data/lib/yard/logging.rb +190 -0
  153. data/lib/yard/options.rb +216 -0
  154. data/lib/yard/parser/base.rb +56 -0
  155. data/lib/yard/parser/c/c_parser.rb +231 -0
  156. data/lib/yard/parser/c/comment_parser.rb +131 -0
  157. data/lib/yard/parser/c/statement.rb +63 -0
  158. data/lib/yard/parser/ruby/ast_node.rb +496 -0
  159. data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
  160. data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
  161. data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
  162. data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
  163. data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
  164. data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
  165. data/lib/yard/parser/source_parser.rb +517 -0
  166. data/lib/yard/rake/yardoc_task.rb +74 -0
  167. data/lib/yard/registry.rb +438 -0
  168. data/lib/yard/registry_store.rb +319 -0
  169. data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
  170. data/lib/yard/rubygems/backports/MIT.txt +20 -0
  171. data/lib/yard/rubygems/backports/gem.rb +9 -0
  172. data/lib/yard/rubygems/backports/source_index.rb +370 -0
  173. data/lib/yard/rubygems/backports.rb +8 -0
  174. data/lib/yard/rubygems/doc_manager.rb +88 -0
  175. data/lib/yard/rubygems/specification.rb +41 -0
  176. data/lib/yard/serializers/base.rb +80 -0
  177. data/lib/yard/serializers/file_system_serializer.rb +90 -0
  178. data/lib/yard/serializers/process_serializer.rb +24 -0
  179. data/lib/yard/serializers/stdout_serializer.rb +32 -0
  180. data/lib/yard/serializers/yardoc_serializer.rb +124 -0
  181. data/lib/yard/server/adapter.rb +100 -0
  182. data/lib/yard/server/commands/base.rb +192 -0
  183. data/lib/yard/server/commands/display_file_command.rb +24 -0
  184. data/lib/yard/server/commands/display_object_command.rb +58 -0
  185. data/lib/yard/server/commands/frames_command.rb +15 -0
  186. data/lib/yard/server/commands/library_command.rb +148 -0
  187. data/lib/yard/server/commands/library_index_command.rb +24 -0
  188. data/lib/yard/server/commands/list_command.rb +24 -0
  189. data/lib/yard/server/commands/search_command.rb +78 -0
  190. data/lib/yard/server/commands/static_file_command.rb +57 -0
  191. data/lib/yard/server/doc_server_helper.rb +76 -0
  192. data/lib/yard/server/doc_server_serializer.rb +33 -0
  193. data/lib/yard/server/library_version.rb +227 -0
  194. data/lib/yard/server/rack_adapter.rb +88 -0
  195. data/lib/yard/server/router.rb +176 -0
  196. data/lib/yard/server/static_caching.rb +45 -0
  197. data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
  198. data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
  199. data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
  200. data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
  201. data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
  202. data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
  203. data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
  204. data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
  205. data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
  206. data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
  207. data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
  208. data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
  209. data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
  210. data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
  211. data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
  212. data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
  213. data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
  214. data/lib/yard/server/webrick_adapter.rb +43 -0
  215. data/lib/yard/server.rb +11 -0
  216. data/lib/yard/tags/default_factory.rb +176 -0
  217. data/lib/yard/tags/default_tag.rb +12 -0
  218. data/lib/yard/tags/directives.rb +599 -0
  219. data/lib/yard/tags/library.rb +630 -0
  220. data/lib/yard/tags/option_tag.rb +12 -0
  221. data/lib/yard/tags/overload_tag.rb +66 -0
  222. data/lib/yard/tags/ref_tag.rb +7 -0
  223. data/lib/yard/tags/ref_tag_list.rb +27 -0
  224. data/lib/yard/tags/tag.rb +57 -0
  225. data/lib/yard/tags/tag_format_error.rb +6 -0
  226. data/lib/yard/templates/engine.rb +185 -0
  227. data/lib/yard/templates/erb_cache.rb +22 -0
  228. data/lib/yard/templates/helpers/base_helper.rb +212 -0
  229. data/lib/yard/templates/helpers/filter_helper.rb +26 -0
  230. data/lib/yard/templates/helpers/html_helper.rb +599 -0
  231. data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
  232. data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
  233. data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
  234. data/lib/yard/templates/helpers/markup_helper.rb +169 -0
  235. data/lib/yard/templates/helpers/method_helper.rb +74 -0
  236. data/lib/yard/templates/helpers/module_helper.rb +19 -0
  237. data/lib/yard/templates/helpers/text_helper.rb +95 -0
  238. data/lib/yard/templates/helpers/uml_helper.rb +46 -0
  239. data/lib/yard/templates/section.rb +106 -0
  240. data/lib/yard/templates/template.rb +407 -0
  241. data/lib/yard/templates/template_options.rb +88 -0
  242. data/lib/yard/verifier.rb +148 -0
  243. data/lib/yard/version.rb +3 -0
  244. data/lib/yard.rb +71 -0
  245. data/po/ja.po +31118 -0
  246. data/spec/cli/command_parser_spec.rb +43 -0
  247. data/spec/cli/command_spec.rb +36 -0
  248. data/spec/cli/config_spec.rb +92 -0
  249. data/spec/cli/diff_spec.rb +260 -0
  250. data/spec/cli/display_spec.rb +30 -0
  251. data/spec/cli/gems_spec.rb +81 -0
  252. data/spec/cli/graph_spec.rb +17 -0
  253. data/spec/cli/help_spec.rb +22 -0
  254. data/spec/cli/i18n_spec.rb +111 -0
  255. data/spec/cli/list_spec.rb +8 -0
  256. data/spec/cli/markup_types_spec.rb +22 -0
  257. data/spec/cli/server_spec.rb +327 -0
  258. data/spec/cli/stats_spec.rb +90 -0
  259. data/spec/cli/yardoc_spec.rb +804 -0
  260. data/spec/cli/yri_spec.rb +99 -0
  261. data/spec/code_objects/base_spec.rb +438 -0
  262. data/spec/code_objects/class_object_spec.rb +225 -0
  263. data/spec/code_objects/code_object_list_spec.rb +33 -0
  264. data/spec/code_objects/constants_spec.rb +82 -0
  265. data/spec/code_objects/extra_file_object_spec.rb +147 -0
  266. data/spec/code_objects/macro_object_spec.rb +148 -0
  267. data/spec/code_objects/method_object_spec.rb +175 -0
  268. data/spec/code_objects/module_object_spec.rb +141 -0
  269. data/spec/code_objects/namespace_object_spec.rb +170 -0
  270. data/spec/code_objects/proxy_spec.rb +140 -0
  271. data/spec/code_objects/spec_helper.rb +3 -0
  272. data/spec/config_spec.rb +176 -0
  273. data/spec/core_ext/array_spec.rb +14 -0
  274. data/spec/core_ext/file_spec.rb +68 -0
  275. data/spec/core_ext/hash_spec.rb +14 -0
  276. data/spec/core_ext/insertion_spec.rb +37 -0
  277. data/spec/core_ext/module_spec.rb +15 -0
  278. data/spec/core_ext/string_spec.rb +42 -0
  279. data/spec/core_ext/symbol_hash_spec.rb +86 -0
  280. data/spec/docstring_parser_spec.rb +228 -0
  281. data/spec/docstring_spec.rb +335 -0
  282. data/spec/handlers/alias_handler_spec.rb +80 -0
  283. data/spec/handlers/attribute_handler_spec.rb +94 -0
  284. data/spec/handlers/base_spec.rb +206 -0
  285. data/spec/handlers/c/alias_handler_spec.rb +33 -0
  286. data/spec/handlers/c/attribute_handler_spec.rb +40 -0
  287. data/spec/handlers/c/class_handler_spec.rb +63 -0
  288. data/spec/handlers/c/constant_handler_spec.rb +68 -0
  289. data/spec/handlers/c/init_handler_spec.rb +47 -0
  290. data/spec/handlers/c/method_handler_spec.rb +229 -0
  291. data/spec/handlers/c/mixin_handler_spec.rb +27 -0
  292. data/spec/handlers/c/module_handler_spec.rb +38 -0
  293. data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
  294. data/spec/handlers/c/path_handler_spec.rb +35 -0
  295. data/spec/handlers/c/spec_helper.rb +13 -0
  296. data/spec/handlers/c/struct_handler_spec.rb +15 -0
  297. data/spec/handlers/class_condition_handler_spec.rb +67 -0
  298. data/spec/handlers/class_handler_spec.rb +246 -0
  299. data/spec/handlers/class_variable_handler_spec.rb +11 -0
  300. data/spec/handlers/constant_handler_spec.rb +64 -0
  301. data/spec/handlers/dsl_handler_spec.rb +197 -0
  302. data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
  303. data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
  304. data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
  305. data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
  306. data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
  307. data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
  308. data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
  309. data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
  310. data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
  311. data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
  312. data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
  313. data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
  314. data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
  315. data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
  316. data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
  317. data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
  318. data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
  319. data/spec/handlers/exception_handler_spec.rb +48 -0
  320. data/spec/handlers/extend_handler_spec.rb +23 -0
  321. data/spec/handlers/legacy_base_spec.rb +128 -0
  322. data/spec/handlers/method_condition_handler_spec.rb +14 -0
  323. data/spec/handlers/method_handler_spec.rb +184 -0
  324. data/spec/handlers/mixin_handler_spec.rb +55 -0
  325. data/spec/handlers/module_function_handler_spec.rb +105 -0
  326. data/spec/handlers/module_handler_spec.rb +34 -0
  327. data/spec/handlers/private_constant_handler_spec.rb +24 -0
  328. data/spec/handlers/processor_spec.rb +34 -0
  329. data/spec/handlers/ruby/base_spec.rb +94 -0
  330. data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
  331. data/spec/handlers/spec_helper.rb +33 -0
  332. data/spec/handlers/visibility_handler_spec.rb +39 -0
  333. data/spec/handlers/yield_handler_spec.rb +51 -0
  334. data/spec/i18n/locale_spec.rb +68 -0
  335. data/spec/i18n/message_spec.rb +52 -0
  336. data/spec/i18n/messages_spec.rb +67 -0
  337. data/spec/i18n/pot_generator_spec.rb +262 -0
  338. data/spec/i18n/text_spec.rb +180 -0
  339. data/spec/logging_spec.rb +35 -0
  340. data/spec/options_spec.rb +171 -0
  341. data/spec/parser/base_spec.rb +24 -0
  342. data/spec/parser/c_parser_spec.rb +171 -0
  343. data/spec/parser/examples/array.c.txt +3887 -0
  344. data/spec/parser/examples/example1.rb.txt +8 -0
  345. data/spec/parser/examples/extrafile.c.txt +8 -0
  346. data/spec/parser/examples/multifile.c.txt +22 -0
  347. data/spec/parser/examples/override.c.txt +424 -0
  348. data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
  349. data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
  350. data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
  351. data/spec/parser/ruby/ast_node_spec.rb +33 -0
  352. data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
  353. data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
  354. data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
  355. data/spec/parser/source_parser_spec.rb +717 -0
  356. data/spec/parser/tag_parsing_spec.rb +18 -0
  357. data/spec/rake/yardoc_task_spec.rb +101 -0
  358. data/spec/registry_spec.rb +393 -0
  359. data/spec/registry_store_spec.rb +315 -0
  360. data/spec/rubygems/doc_manager_spec.rb +112 -0
  361. data/spec/serializers/data/serialized_yardoc/checksums +1 -0
  362. data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
  363. data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
  364. data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
  365. data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
  366. data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
  367. data/spec/serializers/file_system_serializer_spec.rb +124 -0
  368. data/spec/serializers/spec_helper.rb +2 -0
  369. data/spec/serializers/yardoc_serializer_spec.rb +46 -0
  370. data/spec/server/adapter_spec.rb +38 -0
  371. data/spec/server/commands/base_spec.rb +87 -0
  372. data/spec/server/commands/library_command_spec.rb +39 -0
  373. data/spec/server/commands/static_file_command_spec.rb +84 -0
  374. data/spec/server/doc_server_helper_spec.rb +53 -0
  375. data/spec/server/doc_server_serializer_spec.rb +45 -0
  376. data/spec/server/rack_adapter_spec.rb +20 -0
  377. data/spec/server/router_spec.rb +122 -0
  378. data/spec/server/spec_helper.rb +17 -0
  379. data/spec/server/static_caching_spec.rb +39 -0
  380. data/spec/server/webrick_servlet_spec.rb +20 -0
  381. data/spec/server_spec.rb +10 -0
  382. data/spec/spec_helper.rb +128 -0
  383. data/spec/tags/default_factory_spec.rb +152 -0
  384. data/spec/tags/default_tag_spec.rb +11 -0
  385. data/spec/tags/directives_spec.rb +453 -0
  386. data/spec/tags/library_spec.rb +34 -0
  387. data/spec/tags/overload_tag_spec.rb +53 -0
  388. data/spec/tags/ref_tag_list_spec.rb +53 -0
  389. data/spec/templates/class_spec.rb +44 -0
  390. data/spec/templates/constant_spec.rb +40 -0
  391. data/spec/templates/engine_spec.rb +121 -0
  392. data/spec/templates/examples/class001.html +280 -0
  393. data/spec/templates/examples/class001.txt +36 -0
  394. data/spec/templates/examples/class002.html +35 -0
  395. data/spec/templates/examples/constant001.txt +25 -0
  396. data/spec/templates/examples/constant002.txt +7 -0
  397. data/spec/templates/examples/constant003.txt +11 -0
  398. data/spec/templates/examples/method001.html +130 -0
  399. data/spec/templates/examples/method001.txt +35 -0
  400. data/spec/templates/examples/method002.html +86 -0
  401. data/spec/templates/examples/method002.txt +20 -0
  402. data/spec/templates/examples/method003.html +159 -0
  403. data/spec/templates/examples/method003.txt +45 -0
  404. data/spec/templates/examples/method004.html +44 -0
  405. data/spec/templates/examples/method004.txt +10 -0
  406. data/spec/templates/examples/method005.html +99 -0
  407. data/spec/templates/examples/method005.txt +33 -0
  408. data/spec/templates/examples/module001.dot +33 -0
  409. data/spec/templates/examples/module001.html +825 -0
  410. data/spec/templates/examples/module001.txt +33 -0
  411. data/spec/templates/examples/module002.html +318 -0
  412. data/spec/templates/examples/module003.html +185 -0
  413. data/spec/templates/examples/module004.html +387 -0
  414. data/spec/templates/examples/tag001.txt +82 -0
  415. data/spec/templates/helpers/base_helper_spec.rb +175 -0
  416. data/spec/templates/helpers/html_helper_spec.rb +612 -0
  417. data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
  418. data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
  419. data/spec/templates/helpers/markup_helper_spec.rb +135 -0
  420. data/spec/templates/helpers/method_helper_spec.rb +82 -0
  421. data/spec/templates/helpers/shared_signature_examples.rb +123 -0
  422. data/spec/templates/helpers/text_helper_spec.rb +44 -0
  423. data/spec/templates/method_spec.rb +102 -0
  424. data/spec/templates/module_spec.rb +181 -0
  425. data/spec/templates/onefile_spec.rb +64 -0
  426. data/spec/templates/section_spec.rb +146 -0
  427. data/spec/templates/spec_helper.rb +73 -0
  428. data/spec/templates/tag_spec.rb +51 -0
  429. data/spec/templates/template_spec.rb +409 -0
  430. data/spec/verifier_spec.rb +106 -0
  431. data/templates/default/class/dot/setup.rb +6 -0
  432. data/templates/default/class/dot/superklass.erb +3 -0
  433. data/templates/default/class/html/constructor_details.erb +8 -0
  434. data/templates/default/class/html/setup.rb +1 -0
  435. data/templates/default/class/html/subclasses.erb +4 -0
  436. data/templates/default/class/setup.rb +36 -0
  437. data/templates/default/class/text/setup.rb +11 -0
  438. data/templates/default/class/text/subclasses.erb +5 -0
  439. data/templates/default/constant/text/header.erb +11 -0
  440. data/templates/default/constant/text/setup.rb +3 -0
  441. data/templates/default/docstring/html/abstract.erb +4 -0
  442. data/templates/default/docstring/html/deprecated.erb +1 -0
  443. data/templates/default/docstring/html/index.erb +5 -0
  444. data/templates/default/docstring/html/note.erb +6 -0
  445. data/templates/default/docstring/html/private.erb +4 -0
  446. data/templates/default/docstring/html/returns_void.erb +1 -0
  447. data/templates/default/docstring/html/text.erb +1 -0
  448. data/templates/default/docstring/html/todo.erb +6 -0
  449. data/templates/default/docstring/setup.rb +51 -0
  450. data/templates/default/docstring/text/abstract.erb +2 -0
  451. data/templates/default/docstring/text/deprecated.erb +2 -0
  452. data/templates/default/docstring/text/index.erb +2 -0
  453. data/templates/default/docstring/text/note.erb +4 -0
  454. data/templates/default/docstring/text/private.erb +2 -0
  455. data/templates/default/docstring/text/returns_void.erb +1 -0
  456. data/templates/default/docstring/text/text.erb +1 -0
  457. data/templates/default/docstring/text/todo.erb +4 -0
  458. data/templates/default/fulldoc/html/css/common.css +1 -0
  459. data/templates/default/fulldoc/html/css/full_list.css +57 -0
  460. data/templates/default/fulldoc/html/css/style.css +338 -0
  461. data/templates/default/fulldoc/html/frames.erb +28 -0
  462. data/templates/default/fulldoc/html/full_list.erb +40 -0
  463. data/templates/default/fulldoc/html/full_list_class.erb +2 -0
  464. data/templates/default/fulldoc/html/full_list_file.erb +5 -0
  465. data/templates/default/fulldoc/html/full_list_method.erb +8 -0
  466. data/templates/default/fulldoc/html/js/app.js +214 -0
  467. data/templates/default/fulldoc/html/js/full_list.js +178 -0
  468. data/templates/default/fulldoc/html/js/jquery.js +4 -0
  469. data/templates/default/fulldoc/html/setup.rb +199 -0
  470. data/templates/default/layout/dot/header.erb +6 -0
  471. data/templates/default/layout/dot/setup.rb +14 -0
  472. data/templates/default/layout/html/breadcrumb.erb +13 -0
  473. data/templates/default/layout/html/files.erb +11 -0
  474. data/templates/default/layout/html/footer.erb +5 -0
  475. data/templates/default/layout/html/headers.erb +14 -0
  476. data/templates/default/layout/html/index.erb +2 -0
  477. data/templates/default/layout/html/layout.erb +20 -0
  478. data/templates/default/layout/html/listing.erb +4 -0
  479. data/templates/default/layout/html/objects.erb +32 -0
  480. data/templates/default/layout/html/script_setup.erb +5 -0
  481. data/templates/default/layout/html/search.erb +8 -0
  482. data/templates/default/layout/html/setup.rb +71 -0
  483. data/templates/default/method/html/header.erb +16 -0
  484. data/templates/default/method/setup.rb +3 -0
  485. data/templates/default/method/text/header.erb +1 -0
  486. data/templates/default/method_details/html/header.erb +3 -0
  487. data/templates/default/method_details/html/method_signature.erb +25 -0
  488. data/templates/default/method_details/html/source.erb +10 -0
  489. data/templates/default/method_details/setup.rb +10 -0
  490. data/templates/default/method_details/text/header.erb +10 -0
  491. data/templates/default/method_details/text/method_signature.erb +12 -0
  492. data/templates/default/method_details/text/setup.rb +10 -0
  493. data/templates/default/module/dot/child.erb +1 -0
  494. data/templates/default/module/dot/dependencies.erb +3 -0
  495. data/templates/default/module/dot/header.erb +6 -0
  496. data/templates/default/module/dot/info.erb +14 -0
  497. data/templates/default/module/dot/setup.rb +14 -0
  498. data/templates/default/module/html/attribute_details.erb +10 -0
  499. data/templates/default/module/html/attribute_summary.erb +8 -0
  500. data/templates/default/module/html/box_info.erb +37 -0
  501. data/templates/default/module/html/children.erb +8 -0
  502. data/templates/default/module/html/constant_summary.erb +13 -0
  503. data/templates/default/module/html/defines.erb +3 -0
  504. data/templates/default/module/html/header.erb +5 -0
  505. data/templates/default/module/html/inherited_attributes.erb +14 -0
  506. data/templates/default/module/html/inherited_constants.erb +8 -0
  507. data/templates/default/module/html/inherited_methods.erb +19 -0
  508. data/templates/default/module/html/item_summary.erb +40 -0
  509. data/templates/default/module/html/method_details_list.erb +9 -0
  510. data/templates/default/module/html/method_summary.erb +14 -0
  511. data/templates/default/module/html/methodmissing.erb +12 -0
  512. data/templates/default/module/html/pre_docstring.erb +1 -0
  513. data/templates/default/module/setup.rb +164 -0
  514. data/templates/default/module/text/children.erb +10 -0
  515. data/templates/default/module/text/class_meths_list.erb +8 -0
  516. data/templates/default/module/text/extends.erb +8 -0
  517. data/templates/default/module/text/header.erb +7 -0
  518. data/templates/default/module/text/includes.erb +8 -0
  519. data/templates/default/module/text/instance_meths_list.erb +8 -0
  520. data/templates/default/module/text/setup.rb +12 -0
  521. data/templates/default/onefile/html/files.erb +5 -0
  522. data/templates/default/onefile/html/headers.erb +6 -0
  523. data/templates/default/onefile/html/layout.erb +17 -0
  524. data/templates/default/onefile/html/readme.erb +3 -0
  525. data/templates/default/onefile/html/setup.rb +61 -0
  526. data/templates/default/root/dot/child.erb +3 -0
  527. data/templates/default/root/dot/setup.rb +5 -0
  528. data/templates/default/root/html/setup.rb +1 -0
  529. data/templates/default/tags/html/example.erb +11 -0
  530. data/templates/default/tags/html/index.erb +3 -0
  531. data/templates/default/tags/html/option.erb +24 -0
  532. data/templates/default/tags/html/overload.erb +14 -0
  533. data/templates/default/tags/html/see.erb +8 -0
  534. data/templates/default/tags/html/tag.erb +20 -0
  535. data/templates/default/tags/setup.rb +55 -0
  536. data/templates/default/tags/text/example.erb +12 -0
  537. data/templates/default/tags/text/index.erb +1 -0
  538. data/templates/default/tags/text/option.erb +20 -0
  539. data/templates/default/tags/text/overload.erb +19 -0
  540. data/templates/default/tags/text/see.erb +11 -0
  541. data/templates/default/tags/text/tag.erb +13 -0
  542. data/templates/guide/class/html/setup.rb +1 -0
  543. data/templates/guide/docstring/html/setup.rb +1 -0
  544. data/templates/guide/fulldoc/html/css/style.css +108 -0
  545. data/templates/guide/fulldoc/html/js/app.js +33 -0
  546. data/templates/guide/fulldoc/html/setup.rb +73 -0
  547. data/templates/guide/layout/html/layout.erb +81 -0
  548. data/templates/guide/layout/html/setup.rb +28 -0
  549. data/templates/guide/method/html/header.erb +18 -0
  550. data/templates/guide/method/html/setup.rb +21 -0
  551. data/templates/guide/module/html/header.erb +7 -0
  552. data/templates/guide/module/html/method_list.erb +5 -0
  553. data/templates/guide/module/html/setup.rb +26 -0
  554. data/templates/guide/onefile/html/files.erb +4 -0
  555. data/templates/guide/onefile/html/setup.rb +5 -0
  556. data/templates/guide/onefile/html/toc.erb +3 -0
  557. data/templates/guide/tags/html/setup.rb +8 -0
  558. metadata +689 -0
@@ -0,0 +1,269 @@
1
+ module YARD
2
+ # This class maintains all system-wide configuration for YARD and handles
3
+ # the loading of plugins. To access options call {options}, and to load
4
+ # a plugin use {load_plugin}. All other public methods are used by YARD
5
+ # during load time.
6
+ #
7
+ # == User Configuration Files
8
+ #
9
+ # Persistent user configuration files can be stored in the file
10
+ # +~/.yard/config+, which is read when YARD first loads. The file should
11
+ # be formatted as YAML, and should contain a map of keys and values.
12
+ #
13
+ # Although you can specify any key-value mapping in the configuration file,
14
+ # YARD defines special keys specified in {DEFAULT_CONFIG_OPTIONS}.
15
+ #
16
+ # An example of a configuration file is listed below:
17
+ #
18
+ # !!!yaml
19
+ # load_plugins: true # Auto-load plugins when YARD starts
20
+ # ignored_plugins:
21
+ # - yard-broken
22
+ # - broken2 # yard- prefix not necessary
23
+ # autoload_plugins:
24
+ # - yard-rspec
25
+ #
26
+ # == Automatic Loading of Plugins
27
+ #
28
+ # YARD 0.6.2 will no longer automatically load all plugins by default. This
29
+ # option can be reset by setting 'load_plugins' to true in the configuration
30
+ # file. In addition, you can specify a set of specific plugins to load on
31
+ # load through the 'autoload_plugins' list setting. This setting is
32
+ # independent of the 'load_plugins' value and will always be processed.
33
+ #
34
+ # == Ignored Plugins File
35
+ #
36
+ # YARD 0.5 and below used a +~/.yard/ignored_plugins+ file to specify
37
+ # plugins to be ignored at load time. Ignored plugins in 0.6.2 and above
38
+ # should now be specified in the main configuration file, though YARD
39
+ # will support the +ignored_plugins+ file until 0.7.x.
40
+ #
41
+ # == Safe Mode
42
+ #
43
+ # YARD supports running in safe-mode. By doing this, it will avoid executing
44
+ # any user code such as require files or queries. Plugins will still be
45
+ # loaded with safe mode on, because plugins are properly namespaced with
46
+ # a 'yard-' prefix, must be installed as a gem, and therefore cannot be
47
+ # touched by the user. To specify safe mode, use the +safe_mode+ key.
48
+ #
49
+ # == Plugin Specific Configuration
50
+ #
51
+ # Additional settings can be defined within the configuration file
52
+ # specifically to provide configuration for a plugin. A plugin that utilizes
53
+ # the YARD configuration is strongly encouraged to utilize namespacing of
54
+ # their configuration content.
55
+ #
56
+ # !!!yaml
57
+ # load_plugins: true # Auto-load plugins when YARD starts
58
+ # ignored_plugins:
59
+ # - yard-broken
60
+ # - broken2 # yard- prefix not necessary
61
+ # autoload_plugins:
62
+ # - yard-rspec
63
+ # # Plugin Specific Configuration
64
+ # yard-sample-plugin:
65
+ # show-results-inline: true
66
+ #
67
+ # As the configuration is available system wide, it can be
68
+ # accessed within the plugin code.
69
+ #
70
+ #
71
+ # if YARD::Config.options['yard-sample-plugin'] and
72
+ # YARD::Config.options['yard-sample-plugin']['show-results-inline']
73
+ # # ... perform the action that places the results inline ...
74
+ # else
75
+ # # ... do the default behavior of not showing the results inline ...
76
+ # end
77
+ #
78
+ # When accessing the configuration, be aware that this file is user managed
79
+ # so configuration keys and values may not be present. Make no assumptions and
80
+ # instead ensure that you check for the existence of keys before proceeding to
81
+ # retrieve values.
82
+ #
83
+ # @since 0.6.2
84
+ # @see options
85
+ class Config
86
+ class << self
87
+ # The system-wide configuration options for YARD
88
+ # @return [SymbolHash] a map a key-value pair settings.
89
+ # @see DEFAULT_CONFIG_OPTIONS
90
+ attr_accessor :options
91
+ end
92
+
93
+ # The location where YARD stores user-specific settings
94
+ CONFIG_DIR = File.expand_path('~/.yard')
95
+
96
+ # The main configuration YAML file.
97
+ CONFIG_FILE = File.join(CONFIG_DIR, 'config')
98
+
99
+ # File listing all ignored plugins
100
+ # @deprecated Set `ignored_plugins` in the {CONFIG_FILE} instead.
101
+ IGNORED_PLUGINS = File.join(CONFIG_DIR, 'ignored_plugins')
102
+
103
+ # Default configuration options
104
+ DEFAULT_CONFIG_OPTIONS = {
105
+ :load_plugins => false, # Whether to load plugins automatically with YARD
106
+ :ignored_plugins => [], # A list of ignored plugins by name
107
+ :autoload_plugins => [], # A list of plugins to be automatically loaded
108
+ :safe_mode => false # Does not execute or eval any user-level code
109
+ }
110
+
111
+ # The prefix used for YARD plugins. Name your gem with this prefix
112
+ # to allow it to be used as a plugin.
113
+ YARD_PLUGIN_PREFIX = /^yard[-_]/
114
+
115
+ # Loads settings from {CONFIG_FILE}. This method is called by YARD at
116
+ # load time and should not be called by the user.
117
+ # @return [void]
118
+ def self.load
119
+ self.options = SymbolHash.new(false)
120
+ options.update(DEFAULT_CONFIG_OPTIONS)
121
+ options.update(read_config_file)
122
+ load_commandline_safemode
123
+ add_ignored_plugins_file
124
+ translate_plugin_names
125
+ load_plugins
126
+ rescue
127
+ log.error "Invalid configuration file, using default options."
128
+ options.update(DEFAULT_CONFIG_OPTIONS)
129
+ end
130
+
131
+ # Saves settings to {CONFIG_FILE}.
132
+ # @return [void]
133
+ def self.save
134
+ require 'yaml'
135
+ File.open(CONFIG_FILE, 'w') {|f| f.write(YAML.dump(options)) }
136
+ end
137
+
138
+ # Loads gems that match the name 'yard-*' (recommended) or 'yard_*' except
139
+ # those listed in +~/.yard/ignored_plugins+. This is called immediately
140
+ # after YARD is loaded to allow plugin support.
141
+ #
142
+ # @return [Boolean] true if all plugins loaded successfully, false otherwise.
143
+ def self.load_plugins
144
+ load_gem_plugins &&
145
+ load_autoload_plugins &&
146
+ load_commandline_plugins ? true : false
147
+ end
148
+
149
+ # Loads an individual plugin by name. It is not necessary to include the
150
+ # +yard-+ plugin prefix here.
151
+ #
152
+ # @param [String] name the name of the plugin (with or without +yard-+ prefix)
153
+ # @return [Boolean] whether the plugin was successfully loaded
154
+ def self.load_plugin(name)
155
+ name = translate_plugin_name(name)
156
+ return false if options[:ignored_plugins].include?(name)
157
+ return false if name =~ /^yard-doc-/
158
+ log.debug "Loading plugin '#{name}'..."
159
+ require name
160
+ true
161
+ rescue LoadError => e
162
+ load_plugin_failed(name, e)
163
+ end
164
+
165
+ private
166
+
167
+ # Load gem plugins if :load_plugins is true
168
+ def self.load_gem_plugins
169
+ return true unless options[:load_plugins]
170
+ require 'rubygems'
171
+ result = true
172
+ Gem.source_index.find_name('').each do |gem|
173
+ begin
174
+ next true unless gem.name =~ YARD_PLUGIN_PREFIX
175
+ load_plugin(gem.name)
176
+ rescue Gem::LoadError => e
177
+ tmp = load_plugin_failed(gem.name, e)
178
+ result = tmp if !tmp
179
+ end
180
+ end
181
+ result
182
+ rescue LoadError
183
+ log.debug "RubyGems is not present, skipping plugin loading"
184
+ false
185
+ end
186
+
187
+ # Load plugins set in :autoload_plugins
188
+ def self.load_autoload_plugins
189
+ options[:autoload_plugins].each {|name| load_plugin(name) }
190
+ end
191
+
192
+ # Load plugins from {#arguments}
193
+ def self.load_commandline_plugins
194
+ with_yardopts do
195
+ arguments.each_with_index do |arg, i|
196
+ next unless arg == '--plugin'
197
+ load_plugin(arguments[i+1])
198
+ end
199
+ end
200
+ end
201
+
202
+ # Check for command-line safe_mode switch in {#arguments}
203
+ def self.load_commandline_safemode
204
+ with_yardopts do
205
+ arguments.each_with_index do |arg, i|
206
+ options[:safe_mode] = true if arg == '--safe'
207
+ end
208
+ end
209
+ end
210
+
211
+ # Print a warning if the plugin failed to load
212
+ # @return [false]
213
+ def self.load_plugin_failed(name, exception)
214
+ log.warn "Error loading plugin '#{name}'"
215
+ log.backtrace(exception) if $DEBUG
216
+ false
217
+ end
218
+
219
+ # Legacy support for {IGNORED_PLUGINS}
220
+ def self.add_ignored_plugins_file
221
+ if File.file?(IGNORED_PLUGINS)
222
+ options[:ignored_plugins] += File.read(IGNORED_PLUGINS).split(/\s+/)
223
+ end
224
+ end
225
+
226
+ # Translates plugin names to add yard- prefix.
227
+ def self.translate_plugin_names
228
+ options[:ignored_plugins].map! {|name| translate_plugin_name(name) }
229
+ options[:autoload_plugins].map! {|name| translate_plugin_name(name) }
230
+ end
231
+
232
+ # Loads the YAML configuration file into memory
233
+ # @return [Hash] the contents of the YAML file from disk
234
+ # @see CONFIG_FILE
235
+ def self.read_config_file
236
+ if File.file?(CONFIG_FILE)
237
+ require 'yaml'
238
+ YAML.load_file(CONFIG_FILE)
239
+ else
240
+ {}
241
+ end
242
+ end
243
+
244
+ # Sanitizes and normalizes a plugin name to include the 'yard-' prefix.
245
+ # @param [String] name the plugin name
246
+ # @return [String] the sanitized and normalized plugin name.
247
+ def self.translate_plugin_name(name)
248
+ name = name.gsub('/', '') # Security sanitization
249
+ name = "yard-" + name unless name =~ YARD_PLUGIN_PREFIX
250
+ name
251
+ end
252
+
253
+ # Temporarily loads .yardopts file into @yardopts
254
+ def self.with_yardopts(&block)
255
+ yfile = CLI::Yardoc::DEFAULT_YARDOPTS_FILE
256
+ @yardopts = File.file?(yfile) ? File.read_binary(yfile).shell_split : []
257
+ result = yield
258
+ @yardopts = nil
259
+ result
260
+ end
261
+
262
+ # @return [Array<String>] arguments from commandline and yardopts file
263
+ def self.arguments
264
+ ARGV + @yardopts
265
+ end
266
+ end
267
+
268
+ Config.options = Config::DEFAULT_CONFIG_OPTIONS
269
+ end
@@ -0,0 +1,15 @@
1
+ class Array
2
+ # Places values before or after another object (by value) in
3
+ # an array. This is used in tandem with the before and after
4
+ # methods of the {Insertion} class.
5
+ #
6
+ # @example Places an item before another
7
+ # [1, 2, 3].place(4).before(3) # => [1, 2, 4, 3]
8
+ # @example Places an item after another
9
+ # [:a, :b, :c].place(:x).after(:a) # => [:a, :x, :b, :c]
10
+ # @param [Array] values value to insert
11
+ # @return [Insertion] an insertion object to
12
+ # @see Insertion#before
13
+ # @see Insertion#after
14
+ def place(*values) Insertion.new(self, values) end
15
+ end
@@ -0,0 +1,65 @@
1
+ require 'fileutils'
2
+
3
+ class File
4
+ RELATIVE_PARENTDIR = '..'
5
+ RELATIVE_SAMEDIR = '.'
6
+
7
+ # @group Manipulating Paths
8
+
9
+ # Turns a path +to+ into a relative path from starting
10
+ # point +from+. The argument +from+ is assumed to be
11
+ # a filename. To treat it as a directory, make sure it
12
+ # ends in +File::SEPARATOR+ ('/' on UNIX filesystems).
13
+ #
14
+ # @param [String] from the starting filename
15
+ # (or directory with +from_isdir+ set to +true+).
16
+ # @param [String] to the final path that should be made relative.
17
+ # @return [String] the relative path from +from+ to +to+.
18
+ def self.relative_path(from, to)
19
+ from = expand_path(from).split(SEPARATOR)
20
+ to = expand_path(to).split(SEPARATOR)
21
+ from.length.times do
22
+ break if from[0] != to[0]
23
+ from.shift; to.shift
24
+ end
25
+ from.pop
26
+ join(*(from.map { RELATIVE_PARENTDIR } + to))
27
+ end
28
+
29
+ # Cleans a path by removing extraneous '..', '.' and '/' characters
30
+ #
31
+ # @example Clean a path
32
+ # File.cleanpath('a/b//./c/../e') # => "a/b/e"
33
+ # @param [String] path the path to clean
34
+ # @return [String] the sanitized path
35
+ def self.cleanpath(path)
36
+ path = path.split(SEPARATOR)
37
+ path = path.inject([]) do |acc, comp|
38
+ next acc if comp == RELATIVE_SAMEDIR
39
+ if comp == RELATIVE_PARENTDIR && acc.size > 0 && acc.last != RELATIVE_PARENTDIR
40
+ acc.pop
41
+ next acc
42
+ end
43
+ acc << comp
44
+ end
45
+ File.join(*path)
46
+ end
47
+
48
+ # @group Reading Files
49
+
50
+ # Forces opening a file (for writing) by first creating the file's directory
51
+ # @param [String] file the filename to open
52
+ # @since 0.5.2
53
+ def self.open!(file, *args, &block)
54
+ dir = dirname(file)
55
+ FileUtils.mkdir_p(dir) unless directory?(dir)
56
+ open(file, *args, &block)
57
+ end
58
+
59
+ # Reads a file with binary encoding
60
+ # @return [String] the ascii-8bit encoded data
61
+ # @since 0.5.3
62
+ def self.read_binary(file)
63
+ File.open(file, 'rb') {|f| f.read }
64
+ end
65
+ end
@@ -0,0 +1,15 @@
1
+ class Hash
2
+ class << self
3
+ def create(*args)
4
+ if args.first.is_a?(Array) && args.size == 1
5
+ obj = new
6
+ args.first.each {|k, v| obj[k] = v }
7
+ obj
8
+ else
9
+ create_186(*args)
10
+ end
11
+ end
12
+ alias :create_186 :[]
13
+ alias :[] :create
14
+ end
15
+ end if RUBY_VERSION < "1.8.7"
@@ -0,0 +1,60 @@
1
+ # The Insertion class inserts a value before or after another
2
+ # value in a list.
3
+ #
4
+ # @example
5
+ # Insertion.new([1, 2, 3], 4).before(3) # => [1, 2, 4, 3]
6
+ class Insertion
7
+ # Creates an insertion object on a list with a value to be
8
+ # inserted. To finalize the insertion, call {#before} or
9
+ # {#after} on the object.
10
+ #
11
+ # @param [Array] list the list to perform the insertion on
12
+ # @param [Object] value the value to insert
13
+ def initialize(list, value) @list, @values = list, (Array === value ? value : [value]) end
14
+
15
+ # Inserts the value before +val+
16
+ # @param [Object] val the object the value will be inserted before
17
+ # @param [Boolean] recursive look inside sublists
18
+ def before(val, recursive = false) insertion(val, 0, recursive) end
19
+
20
+ # Inserts the value after +val+.
21
+ #
22
+ # @example If subsections are ignored
23
+ # Insertion.new([1, [2], 3], :X).after(1) # => [1, [2], :X, 3]
24
+ # @param [Object] val the object the value will be inserted after
25
+ # @param [Boolean] recursive look inside sublists
26
+ def after(val, recursive = false) insertion(val, 1, recursive) end
27
+
28
+ # Alias for {#before} with +recursive+ set to true
29
+ # @since 0.6.0
30
+ def before_any(val) insertion(val, 0, true) end
31
+
32
+ # Alias for {#after} with +recursive+ set to true
33
+ # @since 0.6.0
34
+ def after_any(val) insertion(val, 1, true) end
35
+
36
+ private
37
+
38
+ # This method performs the actual insertion
39
+ #
40
+ # @param [Object] val the value to insert
41
+ # @param [Fixnum] rel the relative index (0 or 1) of where the object
42
+ # should be placed
43
+ # @param [Boolean] recursive look inside sublists
44
+ # @param [Array] list the list to place objects into
45
+ def insertion(val, rel, recursive = false, list = @list)
46
+ if recursive
47
+ list.each do |item|
48
+ next unless item.is_a?(Array)
49
+ tmp = item.dup
50
+ insertion(val, rel, recursive, item)
51
+ return(list) unless item == tmp
52
+ end
53
+ end
54
+
55
+ if index = list.index(val)
56
+ list[index+rel,0] = @values
57
+ end
58
+ list
59
+ end
60
+ end
@@ -0,0 +1,19 @@
1
+ class Module
2
+ # Returns the class name of a full module namespace path
3
+ #
4
+ # @example
5
+ # module A::B::C; class_name end # => "C"
6
+ # @return [String] the last part of a module path
7
+ def class_name
8
+ name.split("::").last
9
+ end
10
+
11
+ # Returns the module namespace path minus the class/module name
12
+ #
13
+ # @example
14
+ # module A::B::C; namespace_name end # => "A::B"
15
+ # @return [String] the namespace minus the class/module name
16
+ def namespace_name
17
+ name.split("::")[0..-2].join("::")
18
+ end
19
+ end
@@ -0,0 +1,67 @@
1
+ class String
2
+ # Splits text into tokens the way a shell would, handling quoted
3
+ # text as a single token. Use '\"' and "\'" to escape quotes and
4
+ # '\\' to escape a backslash.
5
+ #
6
+ # @return [Array] an array representing the tokens
7
+ def shell_split
8
+ out = [""]
9
+ state = :none
10
+ escape_next = false
11
+ quote = ""
12
+ strip.split(//).each do |char|
13
+ case state
14
+ when :none, :space
15
+ case char
16
+ when /\s/
17
+ out << "" unless state == :space
18
+ state = :space
19
+ escape_next = false
20
+ when "\\"
21
+ if escape_next
22
+ out.last << char
23
+ escape_next = false
24
+ else
25
+ escape_next = true
26
+ end
27
+ when '"', "'"
28
+ if escape_next
29
+ out.last << char
30
+ escape_next = false
31
+ else
32
+ state = char
33
+ quote = ""
34
+ end
35
+ else
36
+ state = :none
37
+ out.last << char
38
+ escape_next = false
39
+ end
40
+ when '"', "'"
41
+ case char
42
+ when '"', "'"
43
+ if escape_next
44
+ quote << char
45
+ escape_next = false
46
+ elsif char == state
47
+ out.last << quote
48
+ state = :none
49
+ else
50
+ quote << char
51
+ end
52
+ when '\\'
53
+ if escape_next
54
+ quote << char
55
+ escape_next = false
56
+ else
57
+ escape_next = true
58
+ end
59
+ else
60
+ quote << char
61
+ escape_next = false
62
+ end
63
+ end
64
+ end
65
+ out
66
+ end
67
+ end
@@ -0,0 +1,73 @@
1
+ # A subclass of Hash where all keys are converted into Symbols, and
2
+ # optionally, all String values are converted into Symbols.
3
+ class SymbolHash < Hash
4
+ # Creates a new SymbolHash object
5
+ #
6
+ # @param [Boolean] symbolize_value converts any String values into Symbols
7
+ # if this is set to +true+.
8
+ def initialize(symbolize_value = true)
9
+ @symbolize_value = symbolize_value
10
+ end
11
+
12
+ # @overload [](hash)
13
+ # Creates a SymbolHash object from an existing Hash
14
+ #
15
+ # @example
16
+ # SymbolHash['x' => 1, :y => 2] # => #<SymbolHash:0x...>
17
+ # @param [Hash] hash the hash object
18
+ # @return [SymbolHash] a new SymbolHash from a hash object
19
+ #
20
+ # @overload [](*list)
21
+ # Creates a SymbolHash from an even list of keys and values
22
+ #
23
+ # @example
24
+ # SymbolHash[key1, value1, key2, value2, ...]
25
+ # @param [Array] list an even list of key followed by value
26
+ # @return [SymbolHash] a new SymbolHash object
27
+ def self.[](*hsh)
28
+ obj = new;
29
+ if hsh.size == 1 && hsh.first.is_a?(Hash)
30
+ hsh.first.each {|k,v| obj[k] = v }
31
+ else
32
+ 0.step(hsh.size, 2) {|n| obj[hsh[n]] = hsh[n+1] }
33
+ end
34
+ obj
35
+ end
36
+
37
+ # Assigns a value to a symbolized key
38
+ # @param [#to_sym] key the key
39
+ # @param [Object] value the value to be assigned. If this is a String and
40
+ # values are set to be symbolized, it will be converted into a Symbol.
41
+ def []=(key, value)
42
+ super(key.to_sym, value.instance_of?(String) && @symbolize_value ? value.to_sym : value)
43
+ end
44
+
45
+ # Accessed a symbolized key
46
+ # @param [#to_sym] key the key to access
47
+ # @return [Object] the value associated with the key
48
+ def [](key) super(key.to_sym) end
49
+
50
+ # Deleted a key and value associated with it
51
+ # @param [#to_sym] key the key to delete
52
+ # @return [void]
53
+ def delete(key) super(key.to_sym) end
54
+
55
+ # Tests if a symbolized key exists
56
+ # @param [#to_sym] key the key to test
57
+ # @return [Boolean] whether the key exists
58
+ def has_key?(key) super(key.to_sym) end
59
+
60
+ # Updates the object with the contents of another Hash object.
61
+ # This method modifies the original SymbolHash object
62
+ #
63
+ # @param [Hash] hash the hash object to copy the values from
64
+ # @return [SymbolHash] self
65
+ def update(hash) hash.each {|k,v| self[k] = v }; self end
66
+ alias_method :merge!, :update
67
+
68
+ # Merges the contents of another hash into a new SymbolHash object
69
+ #
70
+ # @param [Hash] hash the hash of objects to copy
71
+ # @return [SymbolHash] a new SymbolHash containing the merged data
72
+ def merge(hash) dup.merge!(hash) end
73
+ end