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.
- data/.travis.yml +39 -0
- data/.yardopts +25 -0
- data/.yardopts_guide +19 -0
- data/.yardopts_i18n +22 -0
- data/Gemfile +35 -0
- data/LEGAL +66 -0
- data/LICENSE +22 -0
- data/README.md +609 -0
- data/Rakefile +66 -0
- data/benchmarks/builtins_vs_eval.rb +23 -0
- data/benchmarks/concat_vs_join.rb +12 -0
- data/benchmarks/erb_vs_erubis.rb +53 -0
- data/benchmarks/format_args.rb +46 -0
- data/benchmarks/generation.rb +37 -0
- data/benchmarks/marshal_vs_dbm.rb +63 -0
- data/benchmarks/parsing.rb +46 -0
- data/benchmarks/pathname_vs_string.rb +50 -0
- data/benchmarks/rdoc_vs_yardoc.rb +10 -0
- data/benchmarks/registry_store_types.rb +48 -0
- data/benchmarks/ri_vs_yri.rb +18 -0
- data/benchmarks/ripper_parser.rb +12 -0
- data/benchmarks/splat_vs_flatten.rb +12 -0
- data/benchmarks/template_erb.rb +22 -0
- data/benchmarks/template_format.rb +6 -0
- data/benchmarks/template_profile.rb +17 -0
- data/benchmarks/yri_cache.rb +19 -0
- data/bin/yard +12 -0
- data/bin/yardoc +12 -0
- data/bin/yri +12 -0
- data/docs/CodeObjects.md +115 -0
- data/docs/GettingStarted.md +592 -0
- data/docs/Handlers.md +152 -0
- data/docs/Overview.md +61 -0
- data/docs/Parser.md +191 -0
- data/docs/Tags.md +282 -0
- data/docs/TagsArch.md +123 -0
- data/docs/Templates.md +496 -0
- data/docs/WhatsNew.md +1244 -0
- data/docs/images/code-objects-class-diagram.png +0 -0
- data/docs/images/handlers-class-diagram.png +0 -0
- data/docs/images/overview-class-diagram.png +0 -0
- data/docs/images/parser-class-diagram.png +0 -0
- data/docs/images/tags-class-diagram.png +0 -0
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +7 -0
- data/docs/templates/default/fulldoc/html/setup.rb +6 -0
- data/docs/templates/default/layout/html/setup.rb +8 -0
- data/docs/templates/default/layout/html/tag_list.erb +11 -0
- data/docs/templates/default/yard_tags/html/list.erb +18 -0
- data/docs/templates/default/yard_tags/html/setup.rb +27 -0
- data/docs/templates/plugin.rb +65 -0
- data/lib/rubygems_plugin.rb +4 -0
- data/lib/yard/autoload.rb +290 -0
- data/lib/yard/cli/command.rb +84 -0
- data/lib/yard/cli/command_parser.rb +92 -0
- data/lib/yard/cli/config.rb +136 -0
- data/lib/yard/cli/diff.rb +270 -0
- data/lib/yard/cli/display.rb +68 -0
- data/lib/yard/cli/gems.rb +83 -0
- data/lib/yard/cli/graph.rb +126 -0
- data/lib/yard/cli/help.rb +18 -0
- data/lib/yard/cli/i18n.rb +69 -0
- data/lib/yard/cli/list.rb +22 -0
- data/lib/yard/cli/markup_types.rb +33 -0
- data/lib/yard/cli/server.rb +253 -0
- data/lib/yard/cli/stats.rb +213 -0
- data/lib/yard/cli/yardoc.rb +752 -0
- data/lib/yard/cli/yardopts_command.rb +109 -0
- data/lib/yard/cli/yri.rb +214 -0
- data/lib/yard/code_objects/base.rb +585 -0
- data/lib/yard/code_objects/class_object.rb +143 -0
- data/lib/yard/code_objects/class_variable_object.rb +8 -0
- data/lib/yard/code_objects/constant_object.rb +13 -0
- data/lib/yard/code_objects/extended_method_object.rb +23 -0
- data/lib/yard/code_objects/extra_file_object.rb +128 -0
- data/lib/yard/code_objects/macro_object.rb +172 -0
- data/lib/yard/code_objects/method_object.rb +191 -0
- data/lib/yard/code_objects/module_object.rb +18 -0
- data/lib/yard/code_objects/namespace_object.rb +200 -0
- data/lib/yard/code_objects/proxy.rb +258 -0
- data/lib/yard/code_objects/root_object.rb +17 -0
- data/lib/yard/config.rb +269 -0
- data/lib/yard/core_ext/array.rb +15 -0
- data/lib/yard/core_ext/file.rb +65 -0
- data/lib/yard/core_ext/hash.rb +15 -0
- data/lib/yard/core_ext/insertion.rb +60 -0
- data/lib/yard/core_ext/module.rb +19 -0
- data/lib/yard/core_ext/string.rb +67 -0
- data/lib/yard/core_ext/symbol_hash.rb +73 -0
- data/lib/yard/docstring.rb +362 -0
- data/lib/yard/docstring_parser.rb +321 -0
- data/lib/yard/globals.rb +18 -0
- data/lib/yard/handlers/base.rb +597 -0
- data/lib/yard/handlers/c/alias_handler.rb +15 -0
- data/lib/yard/handlers/c/attribute_handler.rb +13 -0
- data/lib/yard/handlers/c/base.rb +110 -0
- data/lib/yard/handlers/c/class_handler.rb +26 -0
- data/lib/yard/handlers/c/constant_handler.rb +12 -0
- data/lib/yard/handlers/c/handler_methods.rb +166 -0
- data/lib/yard/handlers/c/init_handler.rb +18 -0
- data/lib/yard/handlers/c/method_handler.rb +35 -0
- data/lib/yard/handlers/c/mixin_handler.rb +13 -0
- data/lib/yard/handlers/c/module_handler.rb +16 -0
- data/lib/yard/handlers/c/override_comment_handler.rb +30 -0
- data/lib/yard/handlers/c/path_handler.rb +10 -0
- data/lib/yard/handlers/c/struct_handler.rb +12 -0
- data/lib/yard/handlers/c/symbol_handler.rb +7 -0
- data/lib/yard/handlers/processor.rb +201 -0
- data/lib/yard/handlers/ruby/alias_handler.rb +41 -0
- data/lib/yard/handlers/ruby/attribute_handler.rb +82 -0
- data/lib/yard/handlers/ruby/base.rb +164 -0
- data/lib/yard/handlers/ruby/class_condition_handler.rb +86 -0
- data/lib/yard/handlers/ruby/class_handler.rb +121 -0
- data/lib/yard/handlers/ruby/class_variable_handler.rb +16 -0
- data/lib/yard/handlers/ruby/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/constant_handler.rb +45 -0
- data/lib/yard/handlers/ruby/dsl_handler.rb +14 -0
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +77 -0
- data/lib/yard/handlers/ruby/exception_handler.rb +26 -0
- data/lib/yard/handlers/ruby/extend_handler.rb +21 -0
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +34 -0
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +60 -0
- data/lib/yard/handlers/ruby/legacy/base.rb +250 -0
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +111 -0
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +14 -0
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +9 -0
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +28 -0
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +12 -0
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +20 -0
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +85 -0
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +18 -0
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +11 -0
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +21 -0
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +16 -0
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +28 -0
- data/lib/yard/handlers/ruby/method_condition_handler.rb +8 -0
- data/lib/yard/handlers/ruby/method_handler.rb +92 -0
- data/lib/yard/handlers/ruby/mixin_handler.rb +36 -0
- data/lib/yard/handlers/ruby/module_function_handler.rb +26 -0
- data/lib/yard/handlers/ruby/module_handler.rb +11 -0
- data/lib/yard/handlers/ruby/private_constant_handler.rb +36 -0
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +141 -0
- data/lib/yard/handlers/ruby/visibility_handler.rb +24 -0
- data/lib/yard/handlers/ruby/yield_handler.rb +30 -0
- data/lib/yard/i18n/locale.rb +74 -0
- data/lib/yard/i18n/message.rb +56 -0
- data/lib/yard/i18n/messages.rb +55 -0
- data/lib/yard/i18n/pot_generator.rb +280 -0
- data/lib/yard/i18n/text.rb +173 -0
- data/lib/yard/logging.rb +190 -0
- data/lib/yard/options.rb +216 -0
- data/lib/yard/parser/base.rb +56 -0
- data/lib/yard/parser/c/c_parser.rb +231 -0
- data/lib/yard/parser/c/comment_parser.rb +131 -0
- data/lib/yard/parser/c/statement.rb +63 -0
- data/lib/yard/parser/ruby/ast_node.rb +496 -0
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1378 -0
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +31 -0
- data/lib/yard/parser/ruby/legacy/statement.rb +65 -0
- data/lib/yard/parser/ruby/legacy/statement_list.rb +384 -0
- data/lib/yard/parser/ruby/legacy/token_list.rb +71 -0
- data/lib/yard/parser/ruby/ruby_parser.rb +625 -0
- data/lib/yard/parser/source_parser.rb +517 -0
- data/lib/yard/rake/yardoc_task.rb +74 -0
- data/lib/yard/registry.rb +438 -0
- data/lib/yard/registry_store.rb +319 -0
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -0
- data/lib/yard/rubygems/backports/MIT.txt +20 -0
- data/lib/yard/rubygems/backports/gem.rb +9 -0
- data/lib/yard/rubygems/backports/source_index.rb +370 -0
- data/lib/yard/rubygems/backports.rb +8 -0
- data/lib/yard/rubygems/doc_manager.rb +88 -0
- data/lib/yard/rubygems/specification.rb +41 -0
- data/lib/yard/serializers/base.rb +80 -0
- data/lib/yard/serializers/file_system_serializer.rb +90 -0
- data/lib/yard/serializers/process_serializer.rb +24 -0
- data/lib/yard/serializers/stdout_serializer.rb +32 -0
- data/lib/yard/serializers/yardoc_serializer.rb +124 -0
- data/lib/yard/server/adapter.rb +100 -0
- data/lib/yard/server/commands/base.rb +192 -0
- data/lib/yard/server/commands/display_file_command.rb +24 -0
- data/lib/yard/server/commands/display_object_command.rb +58 -0
- data/lib/yard/server/commands/frames_command.rb +15 -0
- data/lib/yard/server/commands/library_command.rb +148 -0
- data/lib/yard/server/commands/library_index_command.rb +24 -0
- data/lib/yard/server/commands/list_command.rb +24 -0
- data/lib/yard/server/commands/search_command.rb +78 -0
- data/lib/yard/server/commands/static_file_command.rb +57 -0
- data/lib/yard/server/doc_server_helper.rb +76 -0
- data/lib/yard/server/doc_server_serializer.rb +33 -0
- data/lib/yard/server/library_version.rb +227 -0
- data/lib/yard/server/rack_adapter.rb +88 -0
- data/lib/yard/server/router.rb +176 -0
- data/lib/yard/server/static_caching.rb +45 -0
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +78 -0
- data/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +12 -0
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +46 -0
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +8 -0
- data/lib/yard/server/templates/default/layout/html/setup.rb +7 -0
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -0
- data/lib/yard/server/templates/default/method_details/html/setup.rb +4 -0
- data/lib/yard/server/templates/doc_server/library_list/html/contents.erb +13 -0
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +26 -0
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +12 -0
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +3 -0
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +51 -0
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +3 -0
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +8 -0
- data/lib/yard/server/webrick_adapter.rb +43 -0
- data/lib/yard/server.rb +11 -0
- data/lib/yard/tags/default_factory.rb +176 -0
- data/lib/yard/tags/default_tag.rb +12 -0
- data/lib/yard/tags/directives.rb +599 -0
- data/lib/yard/tags/library.rb +630 -0
- data/lib/yard/tags/option_tag.rb +12 -0
- data/lib/yard/tags/overload_tag.rb +66 -0
- data/lib/yard/tags/ref_tag.rb +7 -0
- data/lib/yard/tags/ref_tag_list.rb +27 -0
- data/lib/yard/tags/tag.rb +57 -0
- data/lib/yard/tags/tag_format_error.rb +6 -0
- data/lib/yard/templates/engine.rb +185 -0
- data/lib/yard/templates/erb_cache.rb +22 -0
- data/lib/yard/templates/helpers/base_helper.rb +212 -0
- data/lib/yard/templates/helpers/filter_helper.rb +26 -0
- data/lib/yard/templates/helpers/html_helper.rb +599 -0
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +59 -0
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +22 -0
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +106 -0
- data/lib/yard/templates/helpers/markup_helper.rb +169 -0
- data/lib/yard/templates/helpers/method_helper.rb +74 -0
- data/lib/yard/templates/helpers/module_helper.rb +19 -0
- data/lib/yard/templates/helpers/text_helper.rb +95 -0
- data/lib/yard/templates/helpers/uml_helper.rb +46 -0
- data/lib/yard/templates/section.rb +106 -0
- data/lib/yard/templates/template.rb +407 -0
- data/lib/yard/templates/template_options.rb +88 -0
- data/lib/yard/verifier.rb +148 -0
- data/lib/yard/version.rb +3 -0
- data/lib/yard.rb +71 -0
- data/po/ja.po +31118 -0
- data/spec/cli/command_parser_spec.rb +43 -0
- data/spec/cli/command_spec.rb +36 -0
- data/spec/cli/config_spec.rb +92 -0
- data/spec/cli/diff_spec.rb +260 -0
- data/spec/cli/display_spec.rb +30 -0
- data/spec/cli/gems_spec.rb +81 -0
- data/spec/cli/graph_spec.rb +17 -0
- data/spec/cli/help_spec.rb +22 -0
- data/spec/cli/i18n_spec.rb +111 -0
- data/spec/cli/list_spec.rb +8 -0
- data/spec/cli/markup_types_spec.rb +22 -0
- data/spec/cli/server_spec.rb +327 -0
- data/spec/cli/stats_spec.rb +90 -0
- data/spec/cli/yardoc_spec.rb +804 -0
- data/spec/cli/yri_spec.rb +99 -0
- data/spec/code_objects/base_spec.rb +438 -0
- data/spec/code_objects/class_object_spec.rb +225 -0
- data/spec/code_objects/code_object_list_spec.rb +33 -0
- data/spec/code_objects/constants_spec.rb +82 -0
- data/spec/code_objects/extra_file_object_spec.rb +147 -0
- data/spec/code_objects/macro_object_spec.rb +148 -0
- data/spec/code_objects/method_object_spec.rb +175 -0
- data/spec/code_objects/module_object_spec.rb +141 -0
- data/spec/code_objects/namespace_object_spec.rb +170 -0
- data/spec/code_objects/proxy_spec.rb +140 -0
- data/spec/code_objects/spec_helper.rb +3 -0
- data/spec/config_spec.rb +176 -0
- data/spec/core_ext/array_spec.rb +14 -0
- data/spec/core_ext/file_spec.rb +68 -0
- data/spec/core_ext/hash_spec.rb +14 -0
- data/spec/core_ext/insertion_spec.rb +37 -0
- data/spec/core_ext/module_spec.rb +15 -0
- data/spec/core_ext/string_spec.rb +42 -0
- data/spec/core_ext/symbol_hash_spec.rb +86 -0
- data/spec/docstring_parser_spec.rb +228 -0
- data/spec/docstring_spec.rb +335 -0
- data/spec/handlers/alias_handler_spec.rb +80 -0
- data/spec/handlers/attribute_handler_spec.rb +94 -0
- data/spec/handlers/base_spec.rb +206 -0
- data/spec/handlers/c/alias_handler_spec.rb +33 -0
- data/spec/handlers/c/attribute_handler_spec.rb +40 -0
- data/spec/handlers/c/class_handler_spec.rb +63 -0
- data/spec/handlers/c/constant_handler_spec.rb +68 -0
- data/spec/handlers/c/init_handler_spec.rb +47 -0
- data/spec/handlers/c/method_handler_spec.rb +229 -0
- data/spec/handlers/c/mixin_handler_spec.rb +27 -0
- data/spec/handlers/c/module_handler_spec.rb +38 -0
- data/spec/handlers/c/override_comment_handler_spec.rb +46 -0
- data/spec/handlers/c/path_handler_spec.rb +35 -0
- data/spec/handlers/c/spec_helper.rb +13 -0
- data/spec/handlers/c/struct_handler_spec.rb +15 -0
- data/spec/handlers/class_condition_handler_spec.rb +67 -0
- data/spec/handlers/class_handler_spec.rb +246 -0
- data/spec/handlers/class_variable_handler_spec.rb +11 -0
- data/spec/handlers/constant_handler_spec.rb +64 -0
- data/spec/handlers/dsl_handler_spec.rb +197 -0
- data/spec/handlers/examples/alias_handler_001.rb.txt +44 -0
- data/spec/handlers/examples/attribute_handler_001.rb.txt +32 -0
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +69 -0
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -0
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +10 -0
- data/spec/handlers/examples/constant_handler_001.rb.txt +25 -0
- data/spec/handlers/examples/dsl_handler_001.rb.txt +125 -0
- data/spec/handlers/examples/exception_handler_001.rb.txt +59 -0
- data/spec/handlers/examples/extend_handler_001.rb.txt +16 -0
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +10 -0
- data/spec/handlers/examples/method_handler_001.rb.txt +126 -0
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -0
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -0
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -0
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -0
- data/spec/handlers/examples/visibility_handler_001.rb.txt +32 -0
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -0
- data/spec/handlers/exception_handler_spec.rb +48 -0
- data/spec/handlers/extend_handler_spec.rb +23 -0
- data/spec/handlers/legacy_base_spec.rb +128 -0
- data/spec/handlers/method_condition_handler_spec.rb +14 -0
- data/spec/handlers/method_handler_spec.rb +184 -0
- data/spec/handlers/mixin_handler_spec.rb +55 -0
- data/spec/handlers/module_function_handler_spec.rb +105 -0
- data/spec/handlers/module_handler_spec.rb +34 -0
- data/spec/handlers/private_constant_handler_spec.rb +24 -0
- data/spec/handlers/processor_spec.rb +34 -0
- data/spec/handlers/ruby/base_spec.rb +94 -0
- data/spec/handlers/ruby/legacy/base_spec.rb +82 -0
- data/spec/handlers/spec_helper.rb +33 -0
- data/spec/handlers/visibility_handler_spec.rb +39 -0
- data/spec/handlers/yield_handler_spec.rb +51 -0
- data/spec/i18n/locale_spec.rb +68 -0
- data/spec/i18n/message_spec.rb +52 -0
- data/spec/i18n/messages_spec.rb +67 -0
- data/spec/i18n/pot_generator_spec.rb +262 -0
- data/spec/i18n/text_spec.rb +180 -0
- data/spec/logging_spec.rb +35 -0
- data/spec/options_spec.rb +171 -0
- data/spec/parser/base_spec.rb +24 -0
- data/spec/parser/c_parser_spec.rb +171 -0
- data/spec/parser/examples/array.c.txt +3887 -0
- data/spec/parser/examples/example1.rb.txt +8 -0
- data/spec/parser/examples/extrafile.c.txt +8 -0
- data/spec/parser/examples/multifile.c.txt +22 -0
- data/spec/parser/examples/override.c.txt +424 -0
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -0
- data/spec/parser/examples/parse_in_order_002.rb.txt +2 -0
- data/spec/parser/examples/tag_handler_001.rb.txt +8 -0
- data/spec/parser/ruby/ast_node_spec.rb +33 -0
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -0
- data/spec/parser/ruby/legacy/token_list_spec.rb +77 -0
- data/spec/parser/ruby/ruby_parser_spec.rb +334 -0
- data/spec/parser/source_parser_spec.rb +717 -0
- data/spec/parser/tag_parsing_spec.rb +18 -0
- data/spec/rake/yardoc_task_spec.rb +101 -0
- data/spec/registry_spec.rb +393 -0
- data/spec/registry_store_spec.rb +315 -0
- data/spec/rubygems/doc_manager_spec.rb +112 -0
- data/spec/serializers/data/serialized_yardoc/checksums +1 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/bar_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo/baz_i.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/Foo.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/objects/root.dat +0 -0
- data/spec/serializers/data/serialized_yardoc/proxy_types +2 -0
- data/spec/serializers/file_system_serializer_spec.rb +124 -0
- data/spec/serializers/spec_helper.rb +2 -0
- data/spec/serializers/yardoc_serializer_spec.rb +46 -0
- data/spec/server/adapter_spec.rb +38 -0
- data/spec/server/commands/base_spec.rb +87 -0
- data/spec/server/commands/library_command_spec.rb +39 -0
- data/spec/server/commands/static_file_command_spec.rb +84 -0
- data/spec/server/doc_server_helper_spec.rb +53 -0
- data/spec/server/doc_server_serializer_spec.rb +45 -0
- data/spec/server/rack_adapter_spec.rb +20 -0
- data/spec/server/router_spec.rb +122 -0
- data/spec/server/spec_helper.rb +17 -0
- data/spec/server/static_caching_spec.rb +39 -0
- data/spec/server/webrick_servlet_spec.rb +20 -0
- data/spec/server_spec.rb +10 -0
- data/spec/spec_helper.rb +128 -0
- data/spec/tags/default_factory_spec.rb +152 -0
- data/spec/tags/default_tag_spec.rb +11 -0
- data/spec/tags/directives_spec.rb +453 -0
- data/spec/tags/library_spec.rb +34 -0
- data/spec/tags/overload_tag_spec.rb +53 -0
- data/spec/tags/ref_tag_list_spec.rb +53 -0
- data/spec/templates/class_spec.rb +44 -0
- data/spec/templates/constant_spec.rb +40 -0
- data/spec/templates/engine_spec.rb +121 -0
- data/spec/templates/examples/class001.html +280 -0
- data/spec/templates/examples/class001.txt +36 -0
- data/spec/templates/examples/class002.html +35 -0
- data/spec/templates/examples/constant001.txt +25 -0
- data/spec/templates/examples/constant002.txt +7 -0
- data/spec/templates/examples/constant003.txt +11 -0
- data/spec/templates/examples/method001.html +130 -0
- data/spec/templates/examples/method001.txt +35 -0
- data/spec/templates/examples/method002.html +86 -0
- data/spec/templates/examples/method002.txt +20 -0
- data/spec/templates/examples/method003.html +159 -0
- data/spec/templates/examples/method003.txt +45 -0
- data/spec/templates/examples/method004.html +44 -0
- data/spec/templates/examples/method004.txt +10 -0
- data/spec/templates/examples/method005.html +99 -0
- data/spec/templates/examples/method005.txt +33 -0
- data/spec/templates/examples/module001.dot +33 -0
- data/spec/templates/examples/module001.html +825 -0
- data/spec/templates/examples/module001.txt +33 -0
- data/spec/templates/examples/module002.html +318 -0
- data/spec/templates/examples/module003.html +185 -0
- data/spec/templates/examples/module004.html +387 -0
- data/spec/templates/examples/tag001.txt +82 -0
- data/spec/templates/helpers/base_helper_spec.rb +175 -0
- data/spec/templates/helpers/html_helper_spec.rb +612 -0
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +48 -0
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +93 -0
- data/spec/templates/helpers/markup_helper_spec.rb +135 -0
- data/spec/templates/helpers/method_helper_spec.rb +82 -0
- data/spec/templates/helpers/shared_signature_examples.rb +123 -0
- data/spec/templates/helpers/text_helper_spec.rb +44 -0
- data/spec/templates/method_spec.rb +102 -0
- data/spec/templates/module_spec.rb +181 -0
- data/spec/templates/onefile_spec.rb +64 -0
- data/spec/templates/section_spec.rb +146 -0
- data/spec/templates/spec_helper.rb +73 -0
- data/spec/templates/tag_spec.rb +51 -0
- data/spec/templates/template_spec.rb +409 -0
- data/spec/verifier_spec.rb +106 -0
- data/templates/default/class/dot/setup.rb +6 -0
- data/templates/default/class/dot/superklass.erb +3 -0
- data/templates/default/class/html/constructor_details.erb +8 -0
- data/templates/default/class/html/setup.rb +1 -0
- data/templates/default/class/html/subclasses.erb +4 -0
- data/templates/default/class/setup.rb +36 -0
- data/templates/default/class/text/setup.rb +11 -0
- data/templates/default/class/text/subclasses.erb +5 -0
- data/templates/default/constant/text/header.erb +11 -0
- data/templates/default/constant/text/setup.rb +3 -0
- data/templates/default/docstring/html/abstract.erb +4 -0
- data/templates/default/docstring/html/deprecated.erb +1 -0
- data/templates/default/docstring/html/index.erb +5 -0
- data/templates/default/docstring/html/note.erb +6 -0
- data/templates/default/docstring/html/private.erb +4 -0
- data/templates/default/docstring/html/returns_void.erb +1 -0
- data/templates/default/docstring/html/text.erb +1 -0
- data/templates/default/docstring/html/todo.erb +6 -0
- data/templates/default/docstring/setup.rb +51 -0
- data/templates/default/docstring/text/abstract.erb +2 -0
- data/templates/default/docstring/text/deprecated.erb +2 -0
- data/templates/default/docstring/text/index.erb +2 -0
- data/templates/default/docstring/text/note.erb +4 -0
- data/templates/default/docstring/text/private.erb +2 -0
- data/templates/default/docstring/text/returns_void.erb +1 -0
- data/templates/default/docstring/text/text.erb +1 -0
- data/templates/default/docstring/text/todo.erb +4 -0
- data/templates/default/fulldoc/html/css/common.css +1 -0
- data/templates/default/fulldoc/html/css/full_list.css +57 -0
- data/templates/default/fulldoc/html/css/style.css +338 -0
- data/templates/default/fulldoc/html/frames.erb +28 -0
- data/templates/default/fulldoc/html/full_list.erb +40 -0
- data/templates/default/fulldoc/html/full_list_class.erb +2 -0
- data/templates/default/fulldoc/html/full_list_file.erb +5 -0
- data/templates/default/fulldoc/html/full_list_method.erb +8 -0
- data/templates/default/fulldoc/html/js/app.js +214 -0
- data/templates/default/fulldoc/html/js/full_list.js +178 -0
- data/templates/default/fulldoc/html/js/jquery.js +4 -0
- data/templates/default/fulldoc/html/setup.rb +199 -0
- data/templates/default/layout/dot/header.erb +6 -0
- data/templates/default/layout/dot/setup.rb +14 -0
- data/templates/default/layout/html/breadcrumb.erb +13 -0
- data/templates/default/layout/html/files.erb +11 -0
- data/templates/default/layout/html/footer.erb +5 -0
- data/templates/default/layout/html/headers.erb +14 -0
- data/templates/default/layout/html/index.erb +2 -0
- data/templates/default/layout/html/layout.erb +20 -0
- data/templates/default/layout/html/listing.erb +4 -0
- data/templates/default/layout/html/objects.erb +32 -0
- data/templates/default/layout/html/script_setup.erb +5 -0
- data/templates/default/layout/html/search.erb +8 -0
- data/templates/default/layout/html/setup.rb +71 -0
- data/templates/default/method/html/header.erb +16 -0
- data/templates/default/method/setup.rb +3 -0
- data/templates/default/method/text/header.erb +1 -0
- data/templates/default/method_details/html/header.erb +3 -0
- data/templates/default/method_details/html/method_signature.erb +25 -0
- data/templates/default/method_details/html/source.erb +10 -0
- data/templates/default/method_details/setup.rb +10 -0
- data/templates/default/method_details/text/header.erb +10 -0
- data/templates/default/method_details/text/method_signature.erb +12 -0
- data/templates/default/method_details/text/setup.rb +10 -0
- data/templates/default/module/dot/child.erb +1 -0
- data/templates/default/module/dot/dependencies.erb +3 -0
- data/templates/default/module/dot/header.erb +6 -0
- data/templates/default/module/dot/info.erb +14 -0
- data/templates/default/module/dot/setup.rb +14 -0
- data/templates/default/module/html/attribute_details.erb +10 -0
- data/templates/default/module/html/attribute_summary.erb +8 -0
- data/templates/default/module/html/box_info.erb +37 -0
- data/templates/default/module/html/children.erb +8 -0
- data/templates/default/module/html/constant_summary.erb +13 -0
- data/templates/default/module/html/defines.erb +3 -0
- data/templates/default/module/html/header.erb +5 -0
- data/templates/default/module/html/inherited_attributes.erb +14 -0
- data/templates/default/module/html/inherited_constants.erb +8 -0
- data/templates/default/module/html/inherited_methods.erb +19 -0
- data/templates/default/module/html/item_summary.erb +40 -0
- data/templates/default/module/html/method_details_list.erb +9 -0
- data/templates/default/module/html/method_summary.erb +14 -0
- data/templates/default/module/html/methodmissing.erb +12 -0
- data/templates/default/module/html/pre_docstring.erb +1 -0
- data/templates/default/module/setup.rb +164 -0
- data/templates/default/module/text/children.erb +10 -0
- data/templates/default/module/text/class_meths_list.erb +8 -0
- data/templates/default/module/text/extends.erb +8 -0
- data/templates/default/module/text/header.erb +7 -0
- data/templates/default/module/text/includes.erb +8 -0
- data/templates/default/module/text/instance_meths_list.erb +8 -0
- data/templates/default/module/text/setup.rb +12 -0
- data/templates/default/onefile/html/files.erb +5 -0
- data/templates/default/onefile/html/headers.erb +6 -0
- data/templates/default/onefile/html/layout.erb +17 -0
- data/templates/default/onefile/html/readme.erb +3 -0
- data/templates/default/onefile/html/setup.rb +61 -0
- data/templates/default/root/dot/child.erb +3 -0
- data/templates/default/root/dot/setup.rb +5 -0
- data/templates/default/root/html/setup.rb +1 -0
- data/templates/default/tags/html/example.erb +11 -0
- data/templates/default/tags/html/index.erb +3 -0
- data/templates/default/tags/html/option.erb +24 -0
- data/templates/default/tags/html/overload.erb +14 -0
- data/templates/default/tags/html/see.erb +8 -0
- data/templates/default/tags/html/tag.erb +20 -0
- data/templates/default/tags/setup.rb +55 -0
- data/templates/default/tags/text/example.erb +12 -0
- data/templates/default/tags/text/index.erb +1 -0
- data/templates/default/tags/text/option.erb +20 -0
- data/templates/default/tags/text/overload.erb +19 -0
- data/templates/default/tags/text/see.erb +11 -0
- data/templates/default/tags/text/tag.erb +13 -0
- data/templates/guide/class/html/setup.rb +1 -0
- data/templates/guide/docstring/html/setup.rb +1 -0
- data/templates/guide/fulldoc/html/css/style.css +108 -0
- data/templates/guide/fulldoc/html/js/app.js +33 -0
- data/templates/guide/fulldoc/html/setup.rb +73 -0
- data/templates/guide/layout/html/layout.erb +81 -0
- data/templates/guide/layout/html/setup.rb +28 -0
- data/templates/guide/method/html/header.erb +18 -0
- data/templates/guide/method/html/setup.rb +21 -0
- data/templates/guide/module/html/header.erb +7 -0
- data/templates/guide/module/html/method_list.erb +5 -0
- data/templates/guide/module/html/setup.rb +26 -0
- data/templates/guide/onefile/html/files.erb +4 -0
- data/templates/guide/onefile/html/setup.rb +5 -0
- data/templates/guide/onefile/html/toc.erb +3 -0
- data/templates/guide/tags/html/setup.rb +8 -0
- metadata +689 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
require 'erb'
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Templates
|
|
5
|
+
module Template
|
|
6
|
+
attr_accessor :class, :section
|
|
7
|
+
attr_reader :options
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
# Extra includes are mixins that are included after a template is created. These
|
|
11
|
+
# mixins can be registered by plugins to operate on templates and override behaviour.
|
|
12
|
+
#
|
|
13
|
+
# Note that this array can be filled with modules or proc objects. If a proc object
|
|
14
|
+
# is given, the proc will be called with the {Template#options} hash containing
|
|
15
|
+
# relevant template information like the object, format, and more. The proc should
|
|
16
|
+
# return a module or nil if there is none.
|
|
17
|
+
#
|
|
18
|
+
# @example Adding in extra mixins to include on a template
|
|
19
|
+
# Template.extra_includes << MyHelper
|
|
20
|
+
# @example Conditionally including a mixin if the format is html
|
|
21
|
+
# Template.extra_includes << proc {|opts| MyHelper if opts.format == :html }
|
|
22
|
+
# @return [Array<Module, Proc>] a list of modules to be automatically included
|
|
23
|
+
# into any new template module
|
|
24
|
+
attr_accessor :extra_includes
|
|
25
|
+
|
|
26
|
+
# @!parse extend ClassMethods
|
|
27
|
+
# @private
|
|
28
|
+
def included(klass)
|
|
29
|
+
klass.extend(ClassMethods)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Includes the {extra_includes} modules into the template object.
|
|
33
|
+
#
|
|
34
|
+
# @param [Template] template the template object to mixin the extra includes.
|
|
35
|
+
# @param [SymbolHash] options the options hash containing all template information
|
|
36
|
+
# @return [void]
|
|
37
|
+
def include_extra(template, options)
|
|
38
|
+
extra_includes.each do |mod|
|
|
39
|
+
mod = mod.call(options) if mod.is_a?(Proc)
|
|
40
|
+
next unless mod.is_a?(Module)
|
|
41
|
+
template.extend(mod)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
self.extra_includes = [
|
|
47
|
+
proc {|options|
|
|
48
|
+
{ :html => Helpers::HtmlHelper,
|
|
49
|
+
:text => Helpers::TextHelper,
|
|
50
|
+
:dot => Helpers::UMLHelper }[options.format]
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
include ErbCache
|
|
55
|
+
include Helpers::BaseHelper
|
|
56
|
+
include Helpers::MethodHelper
|
|
57
|
+
|
|
58
|
+
module ClassMethods
|
|
59
|
+
attr_accessor :path, :full_path
|
|
60
|
+
|
|
61
|
+
# @return [Array<String>] a list of full paths
|
|
62
|
+
# @note This method caches path results. Paths should not be modified
|
|
63
|
+
# after this method is called; call {#reset_full_paths} to reset cache.
|
|
64
|
+
def full_paths
|
|
65
|
+
reset_full_paths unless defined? @cached_included_modules
|
|
66
|
+
return @full_paths if included_modules == @cached_included_modules
|
|
67
|
+
|
|
68
|
+
@cached_included_modules = included_modules
|
|
69
|
+
@full_paths = included_modules.inject([full_path]) do |paths, mod|
|
|
70
|
+
paths |= mod.full_paths if mod.respond_to?(:full_paths)
|
|
71
|
+
paths
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# Resets cache for {#full_paths}
|
|
76
|
+
def reset_full_paths
|
|
77
|
+
@cached_included_modules = nil
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def initialize(path, full_paths)
|
|
81
|
+
full_path = full_paths.shift
|
|
82
|
+
self.path = path
|
|
83
|
+
self.full_path = full_path
|
|
84
|
+
include_inherited(full_paths)
|
|
85
|
+
include_parent
|
|
86
|
+
load_setup_rb
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Searches for a file identified by +basename+ in the template's
|
|
90
|
+
# path as well as any mixed in template paths. Equivalent to calling
|
|
91
|
+
# {ClassMethods#find_nth_file} with index of 1.
|
|
92
|
+
#
|
|
93
|
+
# @param [String] basename the filename to search for
|
|
94
|
+
# @return [String] the full path of a file on disk with filename
|
|
95
|
+
# +basename+ in one of the template's paths.
|
|
96
|
+
# @see find_nth_file
|
|
97
|
+
def find_file(basename)
|
|
98
|
+
find_nth_file(basename)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
# Searches for the nth file (where n = +index+) identified
|
|
102
|
+
# by basename in the template's path and any mixed in template paths.
|
|
103
|
+
#
|
|
104
|
+
# @param [String] basename the filename to search for
|
|
105
|
+
# @param [Fixnum] index the nth existing file to return
|
|
106
|
+
# @return [String] the full path of the nth file on disk with
|
|
107
|
+
# filename +basename+ in one of the template paths
|
|
108
|
+
def find_nth_file(basename, index = 1)
|
|
109
|
+
n = 1
|
|
110
|
+
full_paths.each do |path|
|
|
111
|
+
file = File.join(path, basename)
|
|
112
|
+
if File.file?(file)
|
|
113
|
+
return file if index == n
|
|
114
|
+
n += 1
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
nil
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def is_a?(klass)
|
|
122
|
+
return true if klass == Template
|
|
123
|
+
super(klass)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Creates a new template object to be rendered with {Template#run}
|
|
127
|
+
def new(*args)
|
|
128
|
+
obj = Object.new.extend(self)
|
|
129
|
+
obj.class = self
|
|
130
|
+
obj.send(:initialize, *args)
|
|
131
|
+
obj
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def run(*args)
|
|
135
|
+
new(*args).run
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def T(*path)
|
|
139
|
+
Engine.template(*path)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
# Alias for creating a {Section} with arguments
|
|
143
|
+
# @see Section#initialize
|
|
144
|
+
# @since 0.6.0
|
|
145
|
+
def S(*args)
|
|
146
|
+
Section.new(*args)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
private
|
|
150
|
+
|
|
151
|
+
def include_parent
|
|
152
|
+
pc = path.to_s.split('/')
|
|
153
|
+
if pc.size > 1
|
|
154
|
+
pc.pop
|
|
155
|
+
pc = pc.join('/')
|
|
156
|
+
begin
|
|
157
|
+
include Engine.template(pc)
|
|
158
|
+
rescue ArgumentError
|
|
159
|
+
include Engine.template!(pc, full_path.gsub(%r{/[^/]+$}, ''))
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def include_inherited(full_paths)
|
|
165
|
+
full_paths.reverse.each do |full_path|
|
|
166
|
+
include Engine.template!(path, full_path)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def load_setup_rb
|
|
171
|
+
setup_file = File.join(full_path, 'setup.rb')
|
|
172
|
+
if File.file? setup_file
|
|
173
|
+
module_eval(File.read(setup_file).taint, setup_file, 1)
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def initialize(opts = TemplateOptions.new)
|
|
179
|
+
opts_class = opts.class
|
|
180
|
+
opts_class = TemplateOptions if opts_class == Hash
|
|
181
|
+
@cache, @cache_filename = {}, {}
|
|
182
|
+
@sections, @options = [], opts_class.new
|
|
183
|
+
add_options(opts)
|
|
184
|
+
Template.include_extra(self, options)
|
|
185
|
+
init
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Loads a template specified by path. If +:template+ or +:format+ is
|
|
189
|
+
# specified in the {#options} hash, they are prepended and appended
|
|
190
|
+
# to the path respectively.
|
|
191
|
+
#
|
|
192
|
+
# @param [Array<String, Symbol>] path the path of the template
|
|
193
|
+
# @return [Template] the loaded template module
|
|
194
|
+
def T(*path)
|
|
195
|
+
path.unshift(options.template) if options.template
|
|
196
|
+
path.push(options.format) if options.format
|
|
197
|
+
self.class.T(*path)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# Sets the sections (and subsections) to be rendered for the template
|
|
201
|
+
#
|
|
202
|
+
# @example Sets a set of erb sections
|
|
203
|
+
# sections :a, :b, :c # searches for a.erb, b.erb, c.erb
|
|
204
|
+
# @example Sets a set of method and erb sections
|
|
205
|
+
# sections :a, :b, :c # a is a method, the rest are erb files
|
|
206
|
+
# @example Sections with subsections
|
|
207
|
+
# sections :header, [:name, :children]
|
|
208
|
+
# # the above will call header.erb and only renders the subsections
|
|
209
|
+
# # if they are yielded by the template (see #yieldall)
|
|
210
|
+
# @param [Array<Symbol, String, Template, Array>] args the sections
|
|
211
|
+
# to use to render the template. For symbols and strings, the
|
|
212
|
+
# section will be executed as a method (if one exists), or rendered
|
|
213
|
+
# from the file "name.erb" where name is the section name. For
|
|
214
|
+
# templates, they will have {Template::ClassMethods#run} called on them.
|
|
215
|
+
# Any subsections can be yielded to using yield or {#yieldall}
|
|
216
|
+
def sections(*args)
|
|
217
|
+
@sections = Section.new(nil, *args) if args.size > 0
|
|
218
|
+
@sections
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Initialization called on the template. Override this in a 'setup.rb'
|
|
222
|
+
# file in the template's path to implement a template
|
|
223
|
+
#
|
|
224
|
+
# @example A default set of sections
|
|
225
|
+
# def init
|
|
226
|
+
# sections :section1, :section2, [:subsection1, :etc]
|
|
227
|
+
# end
|
|
228
|
+
# @see #sections
|
|
229
|
+
def init
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
# Runs a template on +sects+ using extra options. This method should
|
|
233
|
+
# not be called directly. Instead, call the class method {ClassMethods#run}
|
|
234
|
+
#
|
|
235
|
+
# @param [Hash, nil] opts any extra options to apply to sections
|
|
236
|
+
# @param [Section, Array] sects a section list of sections to render
|
|
237
|
+
# @param [Fixnum] start_at the index in the section list to start from
|
|
238
|
+
# @param [Boolean] break_first if true, renders only the first section
|
|
239
|
+
# @yield [opts] calls for the subsections to be rendered
|
|
240
|
+
# @yieldparam [Hash] opts any extra options to yield
|
|
241
|
+
# @return [String] the rendered sections joined together
|
|
242
|
+
def run(opts = nil, sects = sections, start_at = 0, break_first = false, &block)
|
|
243
|
+
out = ""
|
|
244
|
+
return out if sects.nil?
|
|
245
|
+
sects = sects[start_at..-1] if start_at > 0
|
|
246
|
+
sects = Section.new(nil, sects) unless sects.is_a?(Section)
|
|
247
|
+
add_options(opts) do
|
|
248
|
+
sects.each do |s|
|
|
249
|
+
self.section = s
|
|
250
|
+
subsection_index = 0
|
|
251
|
+
value = render_section(section) do |*args|
|
|
252
|
+
value = with_section do
|
|
253
|
+
run(args.first, section, subsection_index, true, &block)
|
|
254
|
+
end
|
|
255
|
+
subsection_index += 1
|
|
256
|
+
value
|
|
257
|
+
end
|
|
258
|
+
out << (value || "")
|
|
259
|
+
break if break_first
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
out
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# Yields all subsections with any extra options
|
|
266
|
+
#
|
|
267
|
+
# @param [Hash] opts extra options to be applied to subsections
|
|
268
|
+
def yieldall(opts = nil, &block)
|
|
269
|
+
with_section { run(opts, section, &block) }
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# @param [String, Symbol] section the section name
|
|
273
|
+
# @yield calls subsections to be rendered
|
|
274
|
+
# @return [String] the contents of the ERB rendered section
|
|
275
|
+
def erb(section, &block)
|
|
276
|
+
method_name = ErbCache.method_for(cache_filename(section)) do
|
|
277
|
+
erb_with(cache(section), cache_filename(section))
|
|
278
|
+
end
|
|
279
|
+
send(method_name, &block)
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
# Returns the contents of a file. If +allow_inherited+ is set to +true+,
|
|
283
|
+
# use +{{{__super__}}}+ inside the file contents to insert the contents
|
|
284
|
+
# of the file from an inherited template. For instance, if +templates/b+
|
|
285
|
+
# inherits from +templates/a+ and file "test.css" exists in both directories,
|
|
286
|
+
# both file contents can be retrieved by having +templates/b/test.css+ look
|
|
287
|
+
# like:
|
|
288
|
+
#
|
|
289
|
+
# {{{__super__}}}
|
|
290
|
+
# ...
|
|
291
|
+
# body { css styles here }
|
|
292
|
+
# p.class { other styles }
|
|
293
|
+
#
|
|
294
|
+
# @param [String] basename the name of the file
|
|
295
|
+
# @param [Boolean] allow_inherited whether inherited templates can
|
|
296
|
+
# be inserted with +{{{__super__}}}+
|
|
297
|
+
# @return [String] the contents of a file identified by +basename+. All
|
|
298
|
+
# template paths (including any mixed in templates) are searched for
|
|
299
|
+
# the file
|
|
300
|
+
# @see ClassMethods#find_file
|
|
301
|
+
# @see ClassMethods#find_nth_file
|
|
302
|
+
def file(basename, allow_inherited = false)
|
|
303
|
+
file = self.class.find_file(basename)
|
|
304
|
+
raise ArgumentError, "no file for '#{basename}' in #{self.class.path}" unless file
|
|
305
|
+
|
|
306
|
+
data = IO.read(file)
|
|
307
|
+
if allow_inherited
|
|
308
|
+
superfile = self.class.find_nth_file(basename, 2)
|
|
309
|
+
data.gsub!('{{{__super__}}}', superfile ? IO.read(superfile) : "")
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
data
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
# Calls the ERB file from the last inherited template with {#section}.erb
|
|
316
|
+
#
|
|
317
|
+
# @param [Symbol, String] section if provided, uses a specific section name
|
|
318
|
+
# @return [String] the rendered ERB file in any of the inherited template
|
|
319
|
+
# paths.
|
|
320
|
+
def superb(section = section, &block)
|
|
321
|
+
filename = self.class.find_nth_file(erb_file_for(section), 2)
|
|
322
|
+
return "" unless filename
|
|
323
|
+
method_name = ErbCache.method_for(filename) { erb_with(IO.read(filename), filename) }
|
|
324
|
+
send(method_name, &block)
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
def options=(value)
|
|
328
|
+
@options = value
|
|
329
|
+
set_ivars
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def inspect
|
|
333
|
+
"Template(#{self.class.path}) [section=#{section.name}]"
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
protected
|
|
337
|
+
|
|
338
|
+
def erb_file_for(section)
|
|
339
|
+
"#{section}.erb"
|
|
340
|
+
end
|
|
341
|
+
|
|
342
|
+
def erb_with(content, filename = nil)
|
|
343
|
+
erb = ERB.new(content, nil, options.format == :text ? '<>' : nil)
|
|
344
|
+
erb.filename = filename if filename
|
|
345
|
+
erb
|
|
346
|
+
end
|
|
347
|
+
|
|
348
|
+
private
|
|
349
|
+
|
|
350
|
+
def render_section(section, &block)
|
|
351
|
+
section = section.name if section.is_a?(Section)
|
|
352
|
+
case section
|
|
353
|
+
when Section, String, Symbol
|
|
354
|
+
if respond_to?(section)
|
|
355
|
+
send(section, &block)
|
|
356
|
+
else
|
|
357
|
+
erb(section, &block)
|
|
358
|
+
end
|
|
359
|
+
when Module, Template
|
|
360
|
+
section.run(options, &block) if section.is_a?(Template)
|
|
361
|
+
end || ""
|
|
362
|
+
end
|
|
363
|
+
|
|
364
|
+
def cache(section)
|
|
365
|
+
content = @cache[section.to_sym]
|
|
366
|
+
return content if content
|
|
367
|
+
|
|
368
|
+
file = cache_filename(section)
|
|
369
|
+
@cache_filename[section.to_sym] = file
|
|
370
|
+
raise ArgumentError, "no template for section '#{section}' in #{self.class.path}" unless file
|
|
371
|
+
@cache[section.to_sym] = IO.read(file)
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def cache_filename(section)
|
|
375
|
+
@cache_filename[section.to_sym] ||=
|
|
376
|
+
self.class.find_file(erb_file_for(section))
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
def set_ivars
|
|
380
|
+
options.each do |k, v|
|
|
381
|
+
instance_variable_set("@#{k}", v)
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
def add_options(opts = nil)
|
|
386
|
+
return(yield) if opts.nil? && block_given?
|
|
387
|
+
cur_opts = options if block_given?
|
|
388
|
+
|
|
389
|
+
self.options = options.merge(opts)
|
|
390
|
+
|
|
391
|
+
if block_given?
|
|
392
|
+
value = yield
|
|
393
|
+
self.options = cur_opts
|
|
394
|
+
value
|
|
395
|
+
end
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
def with_section(&block)
|
|
399
|
+
sect = section
|
|
400
|
+
value = yield
|
|
401
|
+
self.section = sect
|
|
402
|
+
value
|
|
403
|
+
end
|
|
404
|
+
end
|
|
405
|
+
end
|
|
406
|
+
end
|
|
407
|
+
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require 'ostruct'
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Templates
|
|
5
|
+
# An Options class containing default options for base template rendering. For
|
|
6
|
+
# options specific to generation of HTML output, see {CLI::YardocOptions}.
|
|
7
|
+
#
|
|
8
|
+
# @see CLI::YardocOptions
|
|
9
|
+
class TemplateOptions < YARD::Options
|
|
10
|
+
# @return [Symbol] the template output format
|
|
11
|
+
default_attr :format, :text
|
|
12
|
+
|
|
13
|
+
# @return [Symbol] the template name used to render output
|
|
14
|
+
default_attr :template, :default
|
|
15
|
+
|
|
16
|
+
# @return [Symbol] the markup format to use when parsing docstrings
|
|
17
|
+
default_attr :markup, :rdoc # default is :rdoc but falls back on :none
|
|
18
|
+
|
|
19
|
+
# @return [String] the default return type for a method with no return tags
|
|
20
|
+
default_attr :default_return, "Object"
|
|
21
|
+
|
|
22
|
+
# @return [Boolean] whether void methods should show "void" in their signature
|
|
23
|
+
default_attr :hide_void_return, false
|
|
24
|
+
|
|
25
|
+
# @return [Boolean] whether code blocks should be syntax highlighted
|
|
26
|
+
default_attr :highlight, true
|
|
27
|
+
|
|
28
|
+
# @return [Class] the markup provider class for the markup format
|
|
29
|
+
attr_accessor :markup_provider
|
|
30
|
+
|
|
31
|
+
# @return [OpenStruct] an open struct containing any global state across all
|
|
32
|
+
# generated objects in a template.
|
|
33
|
+
default_attr :globals, lambda { OpenStruct.new }
|
|
34
|
+
alias __globals globals
|
|
35
|
+
|
|
36
|
+
# @return [CodeObjects::Base] the main object being generated in the template
|
|
37
|
+
attr_accessor :object
|
|
38
|
+
|
|
39
|
+
# @return [CodeObjects::Base] the owner of the generated object
|
|
40
|
+
attr_accessor :owner
|
|
41
|
+
|
|
42
|
+
# @return [Symbol] the template type used to generate output
|
|
43
|
+
attr_accessor :type
|
|
44
|
+
|
|
45
|
+
# @return [Boolean] whether serialization should be performed
|
|
46
|
+
default_attr :serialize, true
|
|
47
|
+
|
|
48
|
+
# @return [Serializers::Base] the serializer used to generate links and serialize
|
|
49
|
+
# output. Serialization output only occurs if {#serialize} is +true+.
|
|
50
|
+
attr_accessor :serializer
|
|
51
|
+
|
|
52
|
+
# @deprecated use {#highlight} instead.
|
|
53
|
+
# @return [Boolean] whether highlighting should be ignored
|
|
54
|
+
attr_reader :no_highlight
|
|
55
|
+
undef no_highlight
|
|
56
|
+
def no_highlight; !highlight end
|
|
57
|
+
def no_highlight=(value) self.highlight = !value end
|
|
58
|
+
|
|
59
|
+
# @return [String] the title of a given page
|
|
60
|
+
attr_accessor :page_title
|
|
61
|
+
|
|
62
|
+
# @example A list of mixin path names (including wildcards)
|
|
63
|
+
# opts.embed_mixins #=> ['ClassMethods', '*Helper', 'YARD::*']
|
|
64
|
+
# @return [Array<String>] an array of module name wildcards to embed into
|
|
65
|
+
# class documentation as if their methods were defined directly in the class.
|
|
66
|
+
# Useful for modules like ClassMethods. If the name contains '::', the module
|
|
67
|
+
# is matched against the full mixin path, otherwise only the module name is used.
|
|
68
|
+
default_attr :embed_mixins, lambda { [] }
|
|
69
|
+
|
|
70
|
+
# @param [CodeObjects::Base] mixin accepts any code object, but returns
|
|
71
|
+
# nil unless the object is a module.
|
|
72
|
+
# @return [Boolean] whether a mixin matches the embed_mixins list
|
|
73
|
+
# @return [nil] if the mixin is not a module object
|
|
74
|
+
def embed_mixins_match?(mixin)
|
|
75
|
+
return nil unless mixin.is_a?(CodeObjects::ModuleObject)
|
|
76
|
+
return nil if mixin == object # the method is not inherited
|
|
77
|
+
embed_mixins.any? do |embed_mixin|
|
|
78
|
+
re = /\A#{Regexp.quote(embed_mixin).gsub('\*', '.*')}\Z/
|
|
79
|
+
matchstr = embed_mixin.include?("::") ? mixin.path : mixin.name
|
|
80
|
+
re.match(matchstr.to_s)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# @return [Verifier] the verifier object
|
|
85
|
+
attr_accessor :verifier
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
module YARD
|
|
2
|
+
# Similar to a Proc, but runs a set of Ruby expressions using a small
|
|
3
|
+
# DSL to make tag lookups easier.
|
|
4
|
+
#
|
|
5
|
+
# The syntax is as follows:
|
|
6
|
+
# * All syntax is Ruby compatible
|
|
7
|
+
# * +object+ (+o+ for short) exist to access the object being verified
|
|
8
|
+
# * +@TAGNAME+ is translated into +object.tag('TAGNAME')+
|
|
9
|
+
# * +@@TAGNAME+ is translated into +object.tags('TAGNAME')+
|
|
10
|
+
# * +object+ can be omitted as target for method calls (it is implied)
|
|
11
|
+
#
|
|
12
|
+
# @example Create a verifier to check for objects that don't have @private tags
|
|
13
|
+
# verifier = Verifier.new('!@private')
|
|
14
|
+
# verifier.call(object) # => true (no @private tag)
|
|
15
|
+
# @example Create a verifier to find any return tag with an empty description
|
|
16
|
+
# Verifier.new('@return.text.empty?')
|
|
17
|
+
# # Equivalent to:
|
|
18
|
+
# Verifier.new('object.tag(:return).text.empty?')
|
|
19
|
+
# @example Check if there are any @param tags
|
|
20
|
+
# Verifier.new('@@param.empty?')
|
|
21
|
+
# # Equivalent to:
|
|
22
|
+
# Verifier.new('object.tags(:param).empty?')
|
|
23
|
+
# @example Using +object+ or +o+ to look up object attributes directly
|
|
24
|
+
# Verifier.new('object.docstring == "hello world"')
|
|
25
|
+
# # Equivalent to:
|
|
26
|
+
# Verifier.new('o.docstring == "hello world"')
|
|
27
|
+
# @example Without using +object+ or +o+
|
|
28
|
+
# Verifier.new('tag(:return).size == 1 || has_tag?(:author)')
|
|
29
|
+
# @example Specifying multiple expressions
|
|
30
|
+
# Verifier.new('@return', '@param', '@yield')
|
|
31
|
+
# # Equivalent to:
|
|
32
|
+
# Verifier.new('@return && @param && @yield')
|
|
33
|
+
class Verifier
|
|
34
|
+
# @return [Array<String>] a list of all expressions the verifier checks for
|
|
35
|
+
# @since 0.5.6
|
|
36
|
+
attr_reader :expressions
|
|
37
|
+
|
|
38
|
+
def expressions=(value)
|
|
39
|
+
@expressions = value
|
|
40
|
+
create_method_from_expressions
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Creates a verifier from a set of expressions
|
|
44
|
+
#
|
|
45
|
+
# @param [Array<String>] expressions a list of Ruby expressions to
|
|
46
|
+
# parse.
|
|
47
|
+
def initialize(*expressions)
|
|
48
|
+
@expressions = []
|
|
49
|
+
add_expressions(*expressions)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Adds a set of expressions and recompiles the verifier
|
|
53
|
+
#
|
|
54
|
+
# @param [Array<String>] expressions a list of expressions
|
|
55
|
+
# @return [void]
|
|
56
|
+
# @since 0.5.6
|
|
57
|
+
def add_expressions(*expressions)
|
|
58
|
+
self.expressions += expressions.flatten
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Passes any method calls to the object from the {#call}
|
|
62
|
+
def method_missing(sym, *args, &block)
|
|
63
|
+
if object.respond_to?(sym)
|
|
64
|
+
object.send(sym, *args, &block)
|
|
65
|
+
else
|
|
66
|
+
super
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Tests the expressions on the object.
|
|
71
|
+
#
|
|
72
|
+
# @note If the object is a {CodeObjects::Proxy} the result will always be true.
|
|
73
|
+
# @param [CodeObjects::Base] object the object to verify
|
|
74
|
+
# @return [Boolean] the result of the expressions
|
|
75
|
+
def call(object)
|
|
76
|
+
return true if object.is_a?(CodeObjects::Proxy)
|
|
77
|
+
modify_nilclass
|
|
78
|
+
@object = object
|
|
79
|
+
retval = __execute ? true : false
|
|
80
|
+
unmodify_nilclass
|
|
81
|
+
retval
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Runs a list of objects against the verifier and returns the subset
|
|
85
|
+
# of verified objects.
|
|
86
|
+
#
|
|
87
|
+
# @param [Array<CodeObjects::Base>] list a list of code objects
|
|
88
|
+
# @return [Array<CodeObjects::Base>] a list of code objects that match
|
|
89
|
+
# the verifier.
|
|
90
|
+
def run(list)
|
|
91
|
+
list.reject {|item| call(item).is_a?(FalseClass) }
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
protected
|
|
95
|
+
|
|
96
|
+
# @return [CodeObjects::Base] the current object being tested
|
|
97
|
+
attr_reader :object
|
|
98
|
+
alias o object
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
|
|
102
|
+
# @private
|
|
103
|
+
NILCLASS_METHODS = [:type, :method_missing]
|
|
104
|
+
|
|
105
|
+
# Modifies nil to not throw NoMethodErrors. This allows
|
|
106
|
+
# syntax like object.tag(:return).text to work if the #tag
|
|
107
|
+
# call returns nil, which means users don't need to perform
|
|
108
|
+
# stringent nil checking
|
|
109
|
+
#
|
|
110
|
+
# @return [void]
|
|
111
|
+
def modify_nilclass
|
|
112
|
+
NILCLASS_METHODS.each do |meth|
|
|
113
|
+
NilClass.send(:define_method, meth) {|*args| }
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
# Returns the state of NilClass back to normal
|
|
118
|
+
# @return [void]
|
|
119
|
+
def unmodify_nilclass
|
|
120
|
+
NILCLASS_METHODS.each do |meth|
|
|
121
|
+
NilClass.send(:remove_method, meth)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
# Creates the +__execute+ method by evaluating the expressions
|
|
126
|
+
# as Ruby code
|
|
127
|
+
# @return [void]
|
|
128
|
+
def create_method_from_expressions
|
|
129
|
+
expr = expressions.map {|e| "(#{parse_expression(e)})" }.join(" && ")
|
|
130
|
+
|
|
131
|
+
instance_eval(<<-eof, __FILE__, __LINE__ + 1)
|
|
132
|
+
def __execute; #{expr}; end
|
|
133
|
+
eof
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Parses a single expression, handling some of the DSL syntax.
|
|
137
|
+
#
|
|
138
|
+
# The syntax "@tag" should be turned into object.tag(:tag),
|
|
139
|
+
# and "@@tag" should be turned into object.tags(:tag)
|
|
140
|
+
#
|
|
141
|
+
# @return [String] the parsed expression
|
|
142
|
+
def parse_expression(expr)
|
|
143
|
+
expr = expr.gsub(/@@(?:(\w+)|\{([\w\.]+)\})/, 'object.tags("\1\2")')
|
|
144
|
+
expr = expr.gsub(/@(?:(\w+)|\{([\w\.]+)\})/, 'object.tag("\1\2")')
|
|
145
|
+
expr
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
data/lib/yard/version.rb
ADDED