yard 0.9.16 → 0.9.17
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.yardopts +26 -26
- data/CHANGELOG.md +728 -728
- data/LEGAL +66 -66
- data/LICENSE +22 -22
- data/README.md +328 -328
- data/Rakefile +53 -47
- data/benchmarks/builtins_vs_eval.rb +24 -24
- data/benchmarks/concat_vs_join.rb +13 -13
- data/benchmarks/erb_vs_erubis.rb +54 -54
- data/benchmarks/format_args.rb +47 -47
- data/benchmarks/generation.rb +38 -38
- data/benchmarks/marshal_vs_dbm.rb +64 -64
- data/benchmarks/parsing.rb +46 -46
- data/benchmarks/pathname_vs_string.rb +50 -50
- data/benchmarks/rdoc_vs_yardoc.rb +11 -11
- data/benchmarks/registry_store_types.rb +49 -49
- data/benchmarks/ri_vs_yri.rb +19 -19
- data/benchmarks/ripper_parser.rb +13 -13
- data/benchmarks/splat_vs_flatten.rb +13 -13
- data/benchmarks/template_erb.rb +23 -23
- data/benchmarks/template_format.rb +7 -7
- data/benchmarks/template_profile.rb +18 -18
- data/benchmarks/yri_cache.rb +20 -20
- data/bin/yard +13 -13
- data/bin/yardoc +13 -13
- data/bin/yri +13 -13
- data/docs/CodeObjects.md +115 -115
- data/docs/GettingStarted.md +679 -679
- data/docs/Handlers.md +152 -152
- data/docs/Overview.md +61 -61
- data/docs/Parser.md +191 -191
- data/docs/Tags.md +283 -283
- data/docs/TagsArch.md +123 -123
- data/docs/Templates.md +496 -496
- data/docs/WhatsNew.md +1245 -1245
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
- data/docs/templates/default/fulldoc/html/setup.rb +6 -6
- data/docs/templates/default/layout/html/setup.rb +9 -9
- data/docs/templates/default/layout/html/tag_list.erb +11 -11
- data/docs/templates/default/yard_tags/html/list.erb +18 -18
- data/docs/templates/default/yard_tags/html/setup.rb +26 -26
- data/docs/templates/plugin.rb +70 -70
- data/lib/rubygems_plugin.rb +9 -9
- data/lib/yard.rb +69 -69
- data/lib/yard/autoload.rb +303 -303
- data/lib/yard/cli/command.rb +85 -85
- data/lib/yard/cli/command_parser.rb +93 -93
- data/lib/yard/cli/config.rb +198 -198
- data/lib/yard/cli/diff.rb +270 -270
- data/lib/yard/cli/display.rb +69 -69
- data/lib/yard/cli/gems.rb +84 -84
- data/lib/yard/cli/graph.rb +125 -125
- data/lib/yard/cli/help.rb +20 -20
- data/lib/yard/cli/i18n.rb +70 -70
- data/lib/yard/cli/list.rb +23 -23
- data/lib/yard/cli/markup_types.rb +32 -32
- data/lib/yard/cli/server.rb +257 -257
- data/lib/yard/cli/stats.rb +231 -231
- data/lib/yard/cli/yardoc.rb +788 -788
- data/lib/yard/cli/yardopts_command.rb +110 -110
- data/lib/yard/cli/yri.rb +215 -215
- data/lib/yard/code_objects/base.rb +615 -610
- data/lib/yard/code_objects/class_object.rb +146 -146
- data/lib/yard/code_objects/class_variable_object.rb +11 -11
- data/lib/yard/code_objects/constant_object.rb +16 -16
- data/lib/yard/code_objects/extended_method_object.rb +24 -24
- data/lib/yard/code_objects/extra_file_object.rb +131 -131
- data/lib/yard/code_objects/macro_object.rb +172 -172
- data/lib/yard/code_objects/method_object.rb +196 -196
- data/lib/yard/code_objects/module_object.rb +21 -21
- data/lib/yard/code_objects/namespace_mapper.rb +114 -114
- data/lib/yard/code_objects/namespace_object.rb +200 -200
- data/lib/yard/code_objects/proxy.rb +240 -240
- data/lib/yard/code_objects/root_object.rb +19 -19
- data/lib/yard/config.rb +270 -270
- data/lib/yard/core_ext/array.rb +16 -16
- data/lib/yard/core_ext/file.rb +69 -69
- data/lib/yard/core_ext/hash.rb +16 -16
- data/lib/yard/core_ext/insertion.rb +63 -63
- data/lib/yard/core_ext/module.rb +20 -20
- data/lib/yard/core_ext/string.rb +68 -68
- data/lib/yard/core_ext/symbol_hash.rb +75 -75
- data/lib/yard/docstring.rb +386 -378
- data/lib/yard/docstring_parser.rb +345 -345
- data/lib/yard/gem_index.rb +29 -29
- data/lib/yard/globals.rb +22 -22
- data/lib/yard/handlers/base.rb +595 -595
- data/lib/yard/handlers/c/alias_handler.rb +16 -16
- data/lib/yard/handlers/c/attribute_handler.rb +13 -13
- data/lib/yard/handlers/c/base.rb +129 -129
- data/lib/yard/handlers/c/class_handler.rb +27 -27
- data/lib/yard/handlers/c/constant_handler.rb +13 -13
- data/lib/yard/handlers/c/handler_methods.rb +211 -211
- data/lib/yard/handlers/c/init_handler.rb +20 -20
- data/lib/yard/handlers/c/method_handler.rb +45 -36
- data/lib/yard/handlers/c/mixin_handler.rb +21 -21
- data/lib/yard/handlers/c/module_handler.rb +17 -17
- data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
- data/lib/yard/handlers/c/path_handler.rb +11 -11
- data/lib/yard/handlers/c/struct_handler.rb +13 -13
- data/lib/yard/handlers/c/symbol_handler.rb +8 -8
- data/lib/yard/handlers/processor.rb +200 -200
- data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
- data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
- data/lib/yard/handlers/ruby/base.rb +165 -165
- data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
- data/lib/yard/handlers/ruby/class_handler.rb +119 -119
- data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
- data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
- data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
- data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -95
- data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
- data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
- data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
- data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
- data/lib/yard/handlers/ruby/method_handler.rb +118 -118
- data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
- data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
- data/lib/yard/handlers/ruby/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
- data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
- data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
- data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
- data/lib/yard/i18n/locale.rb +67 -67
- data/lib/yard/i18n/message.rb +57 -57
- data/lib/yard/i18n/messages.rb +56 -56
- data/lib/yard/i18n/po_parser.rb +61 -61
- data/lib/yard/i18n/pot_generator.rb +290 -290
- data/lib/yard/i18n/text.rb +173 -173
- data/lib/yard/logging.rb +205 -205
- data/lib/yard/options.rb +217 -217
- data/lib/yard/parser/base.rb +57 -57
- data/lib/yard/parser/c/c_parser.rb +235 -235
- data/lib/yard/parser/c/comment_parser.rb +134 -134
- data/lib/yard/parser/c/statement.rb +64 -64
- data/lib/yard/parser/ruby/ast_node.rb +540 -540
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
- data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
- data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
- data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
- data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
- data/lib/yard/parser/ruby/token_resolver.rb +156 -156
- data/lib/yard/parser/source_parser.rb +526 -526
- data/lib/yard/rake/yardoc_task.rb +81 -81
- data/lib/yard/registry.rb +439 -439
- data/lib/yard/registry_resolver.rb +189 -189
- data/lib/yard/registry_store.rb +337 -337
- data/lib/yard/rubygems/backports.rb +10 -10
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
- data/lib/yard/rubygems/backports/MIT.txt +20 -20
- data/lib/yard/rubygems/backports/gem.rb +10 -10
- data/lib/yard/rubygems/backports/source_index.rb +365 -365
- data/lib/yard/rubygems/doc_manager.rb +90 -90
- data/lib/yard/rubygems/hook.rb +197 -197
- data/lib/yard/rubygems/specification.rb +50 -50
- data/lib/yard/serializers/base.rb +83 -83
- data/lib/yard/serializers/file_system_serializer.rb +123 -123
- data/lib/yard/serializers/process_serializer.rb +24 -24
- data/lib/yard/serializers/stdout_serializer.rb +34 -34
- data/lib/yard/serializers/yardoc_serializer.rb +152 -152
- data/lib/yard/server.rb +13 -13
- data/lib/yard/server/adapter.rb +100 -100
- data/lib/yard/server/commands/base.rb +209 -209
- data/lib/yard/server/commands/display_file_command.rb +29 -29
- data/lib/yard/server/commands/display_object_command.rb +65 -65
- data/lib/yard/server/commands/frames_command.rb +16 -16
- data/lib/yard/server/commands/library_command.rb +187 -187
- data/lib/yard/server/commands/library_index_command.rb +28 -28
- data/lib/yard/server/commands/list_command.rb +25 -25
- data/lib/yard/server/commands/root_request_command.rb +15 -15
- data/lib/yard/server/commands/search_command.rb +79 -79
- data/lib/yard/server/commands/static_file_command.rb +23 -23
- data/lib/yard/server/commands/static_file_helpers.rb +62 -62
- data/lib/yard/server/doc_server_helper.rb +91 -91
- data/lib/yard/server/doc_server_serializer.rb +39 -39
- data/lib/yard/server/library_version.rb +277 -277
- data/lib/yard/server/rack_adapter.rb +89 -89
- data/lib/yard/server/router.rb +187 -187
- data/lib/yard/server/static_caching.rb +46 -46
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
- data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
- data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
- data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
- data/lib/yard/server/webrick_adapter.rb +45 -45
- data/lib/yard/tags/default_factory.rb +191 -191
- data/lib/yard/tags/default_tag.rb +13 -13
- data/lib/yard/tags/directives.rb +616 -616
- data/lib/yard/tags/library.rb +633 -633
- data/lib/yard/tags/option_tag.rb +13 -13
- data/lib/yard/tags/overload_tag.rb +71 -71
- data/lib/yard/tags/ref_tag.rb +8 -8
- data/lib/yard/tags/ref_tag_list.rb +28 -28
- data/lib/yard/tags/tag.rb +71 -71
- data/lib/yard/tags/tag_format_error.rb +7 -7
- data/lib/yard/tags/types_explainer.rb +162 -162
- data/lib/yard/templates/engine.rb +186 -186
- data/lib/yard/templates/erb_cache.rb +23 -23
- data/lib/yard/templates/helpers/base_helper.rb +215 -215
- data/lib/yard/templates/helpers/filter_helper.rb +27 -27
- data/lib/yard/templates/helpers/html_helper.rb +646 -642
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
- data/lib/yard/templates/helpers/markup_helper.rb +172 -172
- data/lib/yard/templates/helpers/method_helper.rb +75 -75
- data/lib/yard/templates/helpers/module_helper.rb +21 -21
- data/lib/yard/templates/helpers/text_helper.rb +112 -112
- data/lib/yard/templates/helpers/uml_helper.rb +47 -47
- data/lib/yard/templates/section.rb +105 -105
- data/lib/yard/templates/template.rb +418 -418
- data/lib/yard/templates/template_options.rb +92 -92
- data/lib/yard/verifier.rb +151 -151
- data/lib/yard/version.rb +3 -1
- data/spec/cli/command_parser_spec.rb +43 -43
- data/spec/cli/command_spec.rb +36 -36
- data/spec/cli/config_spec.rb +148 -148
- data/spec/cli/diff_spec.rb +254 -254
- data/spec/cli/display_spec.rb +30 -30
- data/spec/cli/gems_spec.rb +81 -81
- data/spec/cli/graph_spec.rb +18 -18
- data/spec/cli/help_spec.rb +22 -22
- data/spec/cli/i18n_spec.rb +107 -107
- data/spec/cli/list_spec.rb +8 -8
- data/spec/cli/markup_types_spec.rb +22 -22
- data/spec/cli/server_spec.rb +324 -324
- data/spec/cli/stats_spec.rb +96 -96
- data/spec/cli/yard_on_yard_spec.rb +38 -38
- data/spec/cli/yardoc_spec.rb +862 -849
- data/spec/cli/yri_spec.rb +101 -101
- data/spec/code_objects/base_spec.rb +470 -460
- data/spec/code_objects/class_object_spec.rb +226 -226
- data/spec/code_objects/code_object_list_spec.rb +36 -36
- data/spec/code_objects/constants_spec.rb +116 -116
- data/spec/code_objects/extra_file_object_spec.rb +160 -160
- data/spec/code_objects/macro_object_spec.rb +150 -150
- data/spec/code_objects/method_object_spec.rb +184 -184
- data/spec/code_objects/module_object_spec.rb +142 -142
- data/spec/code_objects/namespace_object_spec.rb +171 -171
- data/spec/code_objects/proxy_spec.rb +141 -141
- data/spec/code_objects/spec_helper.rb +3 -3
- data/spec/config_spec.rb +171 -171
- data/spec/core_ext/array_spec.rb +13 -13
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +14 -14
- data/spec/core_ext/insertion_spec.rb +37 -37
- data/spec/core_ext/module_spec.rb +15 -15
- data/spec/core_ext/string_spec.rb +42 -42
- data/spec/core_ext/symbol_hash_spec.rb +89 -89
- data/spec/docstring_parser_spec.rb +280 -262
- data/spec/docstring_spec.rb +373 -364
- data/spec/examples.txt +1875 -1871
- data/spec/handlers/alias_handler_spec.rb +82 -82
- data/spec/handlers/attribute_handler_spec.rb +96 -96
- data/spec/handlers/base_spec.rb +216 -216
- data/spec/handlers/c/alias_handler_spec.rb +34 -34
- data/spec/handlers/c/attribute_handler_spec.rb +41 -41
- data/spec/handlers/c/class_handler_spec.rb +78 -78
- data/spec/handlers/c/constant_handler_spec.rb +71 -71
- data/spec/handlers/c/init_handler_spec.rb +48 -48
- data/spec/handlers/c/method_handler_spec.rb +325 -325
- data/spec/handlers/c/mixin_handler_spec.rb +44 -44
- data/spec/handlers/c/module_handler_spec.rb +71 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
- data/spec/handlers/c/path_handler_spec.rb +36 -36
- data/spec/handlers/c/spec_helper.rb +23 -23
- data/spec/handlers/c/struct_handler_spec.rb +16 -16
- data/spec/handlers/class_condition_handler_spec.rb +87 -87
- data/spec/handlers/class_handler_spec.rb +247 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
- data/spec/handlers/class_variable_handler_spec.rb +12 -12
- data/spec/handlers/constant_handler_spec.rb +112 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
- data/spec/handlers/dsl_handler_spec.rb +219 -219
- data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
- data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
- data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
- data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
- data/spec/handlers/exception_handler_spec.rb +49 -49
- data/spec/handlers/extend_handler_spec.rb +24 -24
- data/spec/handlers/legacy_base_spec.rb +128 -128
- data/spec/handlers/method_condition_handler_spec.rb +15 -15
- data/spec/handlers/method_handler_spec.rb +190 -190
- data/spec/handlers/mixin_handler_spec.rb +56 -56
- data/spec/handlers/module_function_handler_spec.rb +106 -106
- data/spec/handlers/module_handler_spec.rb +35 -35
- data/spec/handlers/private_class_method_handler_spec.rb +11 -11
- data/spec/handlers/private_constant_handler_spec.rb +25 -25
- data/spec/handlers/processor_spec.rb +35 -35
- data/spec/handlers/public_class_method_handler_spec.rb +11 -11
- data/spec/handlers/ruby/base_spec.rb +95 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
- data/spec/handlers/spec_helper.rb +33 -33
- data/spec/handlers/visibility_handler_spec.rb +44 -44
- data/spec/handlers/yield_handler_spec.rb +52 -52
- data/spec/i18n/locale_spec.rb +81 -81
- data/spec/i18n/message_spec.rb +52 -52
- data/spec/i18n/messages_spec.rb +67 -67
- data/spec/i18n/pot_generator_spec.rb +295 -295
- data/spec/i18n/text_spec.rb +184 -184
- data/spec/logging_spec.rb +44 -44
- data/spec/options_spec.rb +171 -171
- data/spec/parser/base_spec.rb +24 -24
- data/spec/parser/c_parser_spec.rb +236 -223
- data/spec/parser/examples/array.c.txt +6267 -6267
- data/spec/parser/examples/example1.rb.txt +7 -7
- data/spec/parser/examples/extrafile.c.txt +8 -8
- data/spec/parser/examples/file.c.txt +28 -0
- data/spec/parser/examples/multifile.c.txt +22 -22
- data/spec/parser/examples/namespace.cpp.txt +68 -68
- data/spec/parser/examples/override.c.txt +424 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
- data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
- data/spec/parser/ruby/ast_node_spec.rb +33 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
- data/spec/parser/ruby/token_resolver_spec.rb +165 -165
- data/spec/parser/source_parser_spec.rb +727 -727
- data/spec/parser/tag_parsing_spec.rb +17 -17
- data/spec/rake/yardoc_task_spec.rb +118 -118
- data/spec/registry_spec.rb +463 -463
- data/spec/registry_store_spec.rb +316 -316
- data/spec/rubygems/doc_manager_spec.rb +112 -112
- data/spec/serializers/data/serialized_yardoc/checksums +1 -1
- data/spec/serializers/file_system_serializer_spec.rb +145 -145
- data/spec/serializers/spec_helper.rb +2 -2
- data/spec/serializers/yardoc_serializer_spec.rb +78 -78
- data/spec/server/adapter_spec.rb +39 -39
- data/spec/server/commands/base_spec.rb +91 -91
- data/spec/server/commands/library_command_spec.rb +39 -39
- data/spec/server/doc_server_helper_spec.rb +72 -72
- data/spec/server/doc_server_serializer_spec.rb +60 -60
- data/spec/server/rack_adapter_spec.rb +21 -21
- data/spec/server/router_spec.rb +123 -123
- data/spec/server/spec_helper.rb +22 -22
- data/spec/server/static_caching_spec.rb +47 -47
- data/spec/server/webrick_servlet_spec.rb +20 -20
- data/spec/server_spec.rb +19 -19
- data/spec/spec_helper.rb +212 -212
- data/spec/tags/default_factory_spec.rb +168 -168
- data/spec/tags/default_tag_spec.rb +11 -11
- data/spec/tags/directives_spec.rb +463 -463
- data/spec/tags/library_spec.rb +48 -48
- data/spec/tags/overload_tag_spec.rb +53 -53
- data/spec/tags/ref_tag_list_spec.rb +53 -53
- data/spec/tags/types_explainer_spec.rb +203 -203
- data/spec/templates/class_spec.rb +45 -45
- data/spec/templates/constant_spec.rb +41 -41
- data/spec/templates/engine_spec.rb +131 -131
- data/spec/templates/examples/class001.html +308 -308
- data/spec/templates/examples/class001.txt +36 -36
- data/spec/templates/examples/class002.html +39 -39
- data/spec/templates/examples/constant001.txt +24 -24
- data/spec/templates/examples/constant002.txt +6 -6
- data/spec/templates/examples/constant003.txt +10 -10
- data/spec/templates/examples/method001.html +137 -137
- data/spec/templates/examples/method001.txt +35 -35
- data/spec/templates/examples/method002.html +91 -91
- data/spec/templates/examples/method002.txt +20 -20
- data/spec/templates/examples/method003.html +165 -165
- data/spec/templates/examples/method003.txt +45 -45
- data/spec/templates/examples/method004.html +48 -48
- data/spec/templates/examples/method004.txt +10 -10
- data/spec/templates/examples/method005.html +105 -105
- data/spec/templates/examples/method005.txt +33 -33
- data/spec/templates/examples/method006.html +107 -107
- data/spec/templates/examples/method006.txt +20 -20
- data/spec/templates/examples/module001.dot +33 -33
- data/spec/templates/examples/module001.html +833 -833
- data/spec/templates/examples/module001.txt +33 -33
- data/spec/templates/examples/module002.html +341 -341
- data/spec/templates/examples/module003.html +202 -202
- data/spec/templates/examples/module004.html +394 -394
- data/spec/templates/examples/module005.html +81 -81
- data/spec/templates/examples/tag001.txt +82 -82
- data/spec/templates/helpers/base_helper_spec.rb +171 -171
- data/spec/templates/helpers/html_helper_spec.rb +668 -653
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
- data/spec/templates/helpers/markup_helper_spec.rb +136 -136
- data/spec/templates/helpers/method_helper_spec.rb +107 -107
- data/spec/templates/helpers/module_helper_spec.rb +35 -35
- data/spec/templates/helpers/shared_signature_examples.rb +126 -126
- data/spec/templates/helpers/text_helper_spec.rb +65 -65
- data/spec/templates/method_spec.rb +118 -118
- data/spec/templates/module_spec.rb +203 -203
- data/spec/templates/onefile_spec.rb +66 -66
- data/spec/templates/section_spec.rb +144 -144
- data/spec/templates/spec_helper.rb +76 -76
- data/spec/templates/tag_spec.rb +52 -52
- data/spec/templates/template_spec.rb +410 -410
- data/spec/verifier_spec.rb +106 -106
- data/templates/default/class/dot/setup.rb +7 -7
- data/templates/default/class/dot/superklass.erb +2 -2
- data/templates/default/class/html/constructor_details.erb +8 -8
- data/templates/default/class/html/setup.rb +2 -2
- data/templates/default/class/html/subclasses.erb +4 -4
- data/templates/default/class/setup.rb +36 -36
- data/templates/default/class/text/setup.rb +12 -12
- data/templates/default/class/text/subclasses.erb +5 -5
- data/templates/default/constant/text/header.erb +11 -11
- data/templates/default/constant/text/setup.rb +4 -4
- data/templates/default/docstring/html/abstract.erb +4 -4
- data/templates/default/docstring/html/deprecated.erb +1 -1
- data/templates/default/docstring/html/index.erb +5 -5
- data/templates/default/docstring/html/note.erb +6 -6
- data/templates/default/docstring/html/private.erb +4 -4
- data/templates/default/docstring/html/text.erb +1 -1
- data/templates/default/docstring/html/todo.erb +6 -6
- data/templates/default/docstring/setup.rb +52 -52
- data/templates/default/docstring/text/abstract.erb +2 -2
- data/templates/default/docstring/text/deprecated.erb +2 -2
- data/templates/default/docstring/text/index.erb +2 -2
- data/templates/default/docstring/text/note.erb +3 -3
- data/templates/default/docstring/text/private.erb +2 -2
- data/templates/default/docstring/text/text.erb +1 -1
- data/templates/default/docstring/text/todo.erb +3 -3
- data/templates/default/fulldoc/html/css/full_list.css +58 -58
- data/templates/default/fulldoc/html/css/style.css +496 -496
- data/templates/default/fulldoc/html/frames.erb +17 -17
- data/templates/default/fulldoc/html/full_list.erb +37 -37
- data/templates/default/fulldoc/html/full_list_class.erb +2 -2
- data/templates/default/fulldoc/html/full_list_file.erb +7 -7
- data/templates/default/fulldoc/html/full_list_method.erb +10 -10
- data/templates/default/fulldoc/html/js/app.js +292 -292
- data/templates/default/fulldoc/html/js/full_list.js +216 -216
- data/templates/default/fulldoc/html/js/jquery.js +3 -3
- data/templates/default/fulldoc/html/setup.rb +241 -241
- data/templates/default/layout/dot/header.erb +5 -5
- data/templates/default/layout/dot/setup.rb +15 -15
- data/templates/default/layout/html/breadcrumb.erb +11 -11
- data/templates/default/layout/html/files.erb +11 -11
- data/templates/default/layout/html/footer.erb +5 -5
- data/templates/default/layout/html/headers.erb +15 -15
- data/templates/default/layout/html/index.erb +2 -2
- data/templates/default/layout/html/layout.erb +23 -23
- data/templates/default/layout/html/listing.erb +4 -4
- data/templates/default/layout/html/objects.erb +32 -32
- data/templates/default/layout/html/script_setup.erb +4 -4
- data/templates/default/layout/html/search.erb +12 -12
- data/templates/default/layout/html/setup.rb +89 -89
- data/templates/default/method/html/header.erb +16 -16
- data/templates/default/method/setup.rb +4 -4
- data/templates/default/method_details/html/header.erb +2 -2
- data/templates/default/method_details/html/method_signature.erb +24 -24
- data/templates/default/method_details/html/source.erb +9 -9
- data/templates/default/method_details/setup.rb +11 -11
- data/templates/default/method_details/text/header.erb +10 -10
- data/templates/default/method_details/text/method_signature.erb +12 -12
- data/templates/default/method_details/text/setup.rb +11 -11
- data/templates/default/module/dot/child.erb +1 -1
- data/templates/default/module/dot/dependencies.erb +2 -2
- data/templates/default/module/dot/header.erb +6 -6
- data/templates/default/module/dot/info.erb +13 -13
- data/templates/default/module/dot/setup.rb +15 -15
- data/templates/default/module/html/attribute_details.erb +10 -10
- data/templates/default/module/html/attribute_summary.erb +8 -8
- data/templates/default/module/html/box_info.erb +43 -43
- data/templates/default/module/html/children.erb +8 -8
- data/templates/default/module/html/constant_summary.erb +17 -17
- data/templates/default/module/html/defines.erb +2 -2
- data/templates/default/module/html/header.erb +5 -5
- data/templates/default/module/html/inherited_attributes.erb +14 -14
- data/templates/default/module/html/inherited_constants.erb +8 -8
- data/templates/default/module/html/inherited_methods.erb +18 -18
- data/templates/default/module/html/item_summary.erb +40 -40
- data/templates/default/module/html/method_details_list.erb +9 -9
- data/templates/default/module/html/method_summary.erb +13 -13
- data/templates/default/module/html/methodmissing.erb +12 -12
- data/templates/default/module/setup.rb +167 -167
- data/templates/default/module/text/children.erb +9 -9
- data/templates/default/module/text/class_meths_list.erb +7 -7
- data/templates/default/module/text/extends.erb +7 -7
- data/templates/default/module/text/header.erb +7 -7
- data/templates/default/module/text/includes.erb +7 -7
- data/templates/default/module/text/instance_meths_list.erb +7 -7
- data/templates/default/module/text/setup.rb +13 -13
- data/templates/default/onefile/html/files.erb +4 -4
- data/templates/default/onefile/html/headers.erb +6 -6
- data/templates/default/onefile/html/layout.erb +17 -17
- data/templates/default/onefile/html/readme.erb +2 -2
- data/templates/default/onefile/html/setup.rb +62 -62
- data/templates/default/root/dot/child.erb +2 -2
- data/templates/default/root/dot/setup.rb +6 -6
- data/templates/default/root/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +10 -10
- data/templates/default/tags/html/index.erb +2 -2
- data/templates/default/tags/html/option.erb +24 -24
- data/templates/default/tags/html/overload.erb +13 -13
- data/templates/default/tags/html/see.erb +7 -7
- data/templates/default/tags/html/tag.erb +20 -20
- data/templates/default/tags/setup.rb +57 -57
- data/templates/default/tags/text/example.erb +12 -12
- data/templates/default/tags/text/index.erb +1 -1
- data/templates/default/tags/text/option.erb +20 -20
- data/templates/default/tags/text/overload.erb +19 -19
- data/templates/default/tags/text/see.erb +11 -11
- data/templates/default/tags/text/tag.erb +13 -13
- data/templates/guide/class/html/setup.rb +2 -2
- data/templates/guide/docstring/html/setup.rb +2 -2
- data/templates/guide/fulldoc/html/css/style.css +108 -108
- data/templates/guide/fulldoc/html/js/app.js +33 -33
- data/templates/guide/fulldoc/html/setup.rb +74 -74
- data/templates/guide/layout/html/layout.erb +81 -81
- data/templates/guide/layout/html/setup.rb +25 -25
- data/templates/guide/method/html/header.erb +17 -17
- data/templates/guide/method/html/setup.rb +22 -22
- data/templates/guide/module/html/header.erb +6 -6
- data/templates/guide/module/html/method_list.erb +4 -4
- data/templates/guide/module/html/setup.rb +27 -27
- data/templates/guide/onefile/html/files.erb +4 -4
- data/templates/guide/onefile/html/setup.rb +6 -6
- data/templates/guide/onefile/html/toc.erb +3 -3
- data/templates/guide/tags/html/setup.rb +9 -9
- data/yard.gemspec +43 -43
- metadata +4 -4
@@ -1,89 +1,89 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'rack'
|
3
|
-
require 'webrick/httputils'
|
4
|
-
|
5
|
-
module YARD
|
6
|
-
module Server
|
7
|
-
# This class wraps the {RackAdapter} into a Rack-compatible middleware.
|
8
|
-
# See {#initialize} for a list of options to pass via Rack's +#use+ method.
|
9
|
-
#
|
10
|
-
# @note You must pass a +:libraries+ option to the RackMiddleware via +#use+. To
|
11
|
-
# read about how to return a list of libraries, see {LibraryVersion} or look
|
12
|
-
# at the example below.
|
13
|
-
# @example Using the RackMiddleware in a Rack application
|
14
|
-
# libraries = {:mylib => [YARD::Server::LibraryVersion.new('mylib', nil, '/path/to/.yardoc')]}
|
15
|
-
# use YARD::Server::RackMiddleware, :libraries => libraries
|
16
|
-
#
|
17
|
-
class RackMiddleware
|
18
|
-
# Creates a new Rack-based middleware for serving YARD documentation.
|
19
|
-
#
|
20
|
-
# @param app the next Rack middleware in the stack
|
21
|
-
# @option opts [Hash{String=>Array<LibraryVersion>}] :libraries ({})
|
22
|
-
# the map of libraries to serve through the adapter. This option is *required*.
|
23
|
-
# @option opts [Hash] :options ({}) a list of options to pass to the adapter.
|
24
|
-
# See {Adapter#options} for a list.
|
25
|
-
# @option opts [Hash] :server_options ({}) a list of options to pass to the server.
|
26
|
-
# See {Adapter#server_options} for a list.
|
27
|
-
def initialize(app, opts = {})
|
28
|
-
args = [opts[:libraries] || {}, opts[:options] || {}, opts[:server_options] || {}]
|
29
|
-
@app = app
|
30
|
-
@adapter = RackAdapter.new(*args)
|
31
|
-
end
|
32
|
-
|
33
|
-
def call(env)
|
34
|
-
status, headers, body = *@adapter.call(env)
|
35
|
-
if status == 404
|
36
|
-
@app.call(env)
|
37
|
-
else
|
38
|
-
[status, headers, body]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
# A server adapter to respond to requests using the Rack server infrastructure.
|
44
|
-
class RackAdapter < Adapter
|
45
|
-
include WEBrick::HTTPUtils
|
46
|
-
|
47
|
-
# Responds to Rack requests and builds a response with the {Router}.
|
48
|
-
# @return [Array(Numeric,Hash,Array)] the Rack-style response
|
49
|
-
def call(env)
|
50
|
-
request = Rack::Request.new(env)
|
51
|
-
request.path_info = unescape(request.path_info) # unescape things like %3F
|
52
|
-
router.call(request)
|
53
|
-
rescue StandardError => ex
|
54
|
-
log.backtrace(ex)
|
55
|
-
[500, {'Content-Type' => 'text/plain'},
|
56
|
-
[ex.message + "\n" + ex.backtrace.join("\n")]]
|
57
|
-
end
|
58
|
-
|
59
|
-
# Starts the +Rack::Server+. This method will pass control to the server and
|
60
|
-
# block.
|
61
|
-
# @return [void]
|
62
|
-
def start
|
63
|
-
server = Rack::Server.new(server_options)
|
64
|
-
server.instance_variable_set("@app", self)
|
65
|
-
print_start_message(server)
|
66
|
-
server.start
|
67
|
-
end
|
68
|
-
|
69
|
-
private
|
70
|
-
|
71
|
-
def print_start_message(server)
|
72
|
-
opts = server.default_options.merge(server.options)
|
73
|
-
log.puts ">> YARD #{YARD::VERSION} documentation server at http://#{opts[:Host]}:#{opts[:Port]}"
|
74
|
-
|
75
|
-
# Only happens for Mongrel
|
76
|
-
return unless server.server.to_s == "Rack::Handler::Mongrel"
|
77
|
-
log.puts ">> #{server.server.class_name} web server (running on Rack)"
|
78
|
-
log.puts ">> Listening on #{opts[:Host]}:#{opts[:Port]}, CTRL+C to stop"
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
# @private
|
85
|
-
class Rack::Request
|
86
|
-
attr_accessor :version_supplied
|
87
|
-
alias query params
|
88
|
-
def xhr?; (env['HTTP_X_REQUESTED_WITH'] || "").casecmp("xmlhttprequest") == 0 end
|
89
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rack'
|
3
|
+
require 'webrick/httputils'
|
4
|
+
|
5
|
+
module YARD
|
6
|
+
module Server
|
7
|
+
# This class wraps the {RackAdapter} into a Rack-compatible middleware.
|
8
|
+
# See {#initialize} for a list of options to pass via Rack's +#use+ method.
|
9
|
+
#
|
10
|
+
# @note You must pass a +:libraries+ option to the RackMiddleware via +#use+. To
|
11
|
+
# read about how to return a list of libraries, see {LibraryVersion} or look
|
12
|
+
# at the example below.
|
13
|
+
# @example Using the RackMiddleware in a Rack application
|
14
|
+
# libraries = {:mylib => [YARD::Server::LibraryVersion.new('mylib', nil, '/path/to/.yardoc')]}
|
15
|
+
# use YARD::Server::RackMiddleware, :libraries => libraries
|
16
|
+
#
|
17
|
+
class RackMiddleware
|
18
|
+
# Creates a new Rack-based middleware for serving YARD documentation.
|
19
|
+
#
|
20
|
+
# @param app the next Rack middleware in the stack
|
21
|
+
# @option opts [Hash{String=>Array<LibraryVersion>}] :libraries ({})
|
22
|
+
# the map of libraries to serve through the adapter. This option is *required*.
|
23
|
+
# @option opts [Hash] :options ({}) a list of options to pass to the adapter.
|
24
|
+
# See {Adapter#options} for a list.
|
25
|
+
# @option opts [Hash] :server_options ({}) a list of options to pass to the server.
|
26
|
+
# See {Adapter#server_options} for a list.
|
27
|
+
def initialize(app, opts = {})
|
28
|
+
args = [opts[:libraries] || {}, opts[:options] || {}, opts[:server_options] || {}]
|
29
|
+
@app = app
|
30
|
+
@adapter = RackAdapter.new(*args)
|
31
|
+
end
|
32
|
+
|
33
|
+
def call(env)
|
34
|
+
status, headers, body = *@adapter.call(env)
|
35
|
+
if status == 404
|
36
|
+
@app.call(env)
|
37
|
+
else
|
38
|
+
[status, headers, body]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# A server adapter to respond to requests using the Rack server infrastructure.
|
44
|
+
class RackAdapter < Adapter
|
45
|
+
include WEBrick::HTTPUtils
|
46
|
+
|
47
|
+
# Responds to Rack requests and builds a response with the {Router}.
|
48
|
+
# @return [Array(Numeric,Hash,Array)] the Rack-style response
|
49
|
+
def call(env)
|
50
|
+
request = Rack::Request.new(env)
|
51
|
+
request.path_info = unescape(request.path_info) # unescape things like %3F
|
52
|
+
router.call(request)
|
53
|
+
rescue StandardError => ex
|
54
|
+
log.backtrace(ex)
|
55
|
+
[500, {'Content-Type' => 'text/plain'},
|
56
|
+
[ex.message + "\n" + ex.backtrace.join("\n")]]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Starts the +Rack::Server+. This method will pass control to the server and
|
60
|
+
# block.
|
61
|
+
# @return [void]
|
62
|
+
def start
|
63
|
+
server = Rack::Server.new(server_options)
|
64
|
+
server.instance_variable_set("@app", self)
|
65
|
+
print_start_message(server)
|
66
|
+
server.start
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def print_start_message(server)
|
72
|
+
opts = server.default_options.merge(server.options)
|
73
|
+
log.puts ">> YARD #{YARD::VERSION} documentation server at http://#{opts[:Host]}:#{opts[:Port]}"
|
74
|
+
|
75
|
+
# Only happens for Mongrel
|
76
|
+
return unless server.server.to_s == "Rack::Handler::Mongrel"
|
77
|
+
log.puts ">> #{server.server.class_name} web server (running on Rack)"
|
78
|
+
log.puts ">> Listening on #{opts[:Host]}:#{opts[:Port]}, CTRL+C to stop"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# @private
|
85
|
+
class Rack::Request
|
86
|
+
attr_accessor :version_supplied
|
87
|
+
alias query params
|
88
|
+
def xhr?; (env['HTTP_X_REQUESTED_WITH'] || "").casecmp("xmlhttprequest") == 0 end
|
89
|
+
end
|
data/lib/yard/server/router.rb
CHANGED
@@ -1,187 +1,187 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module YARD
|
3
|
-
module Server
|
4
|
-
# A router class implements the logic used to recognize a request for a specific
|
5
|
-
# URL and run specific {Commands::Base commands}.
|
6
|
-
#
|
7
|
-
# == Subclassing Notes
|
8
|
-
# To create a custom router, subclass this class and pass it into the adapter
|
9
|
-
# options through {Adapter#initialize} or by directly modifying {Adapter#router}.
|
10
|
-
#
|
11
|
-
# The most general customization is to change the URL prefixes recognized by
|
12
|
-
# routing, which can be done by overriding {#docs_prefix}, {#list_prefix},
|
13
|
-
# {#static_prefix}, and {#search_prefix}.
|
14
|
-
#
|
15
|
-
# == Implementing Custom Caching
|
16
|
-
# By default, the Router class performs static disk-based caching on all
|
17
|
-
# requests through the +#check_static_cache+. To override this behaviour,
|
18
|
-
# or create your own caching mechanism, mixin your own custom module with
|
19
|
-
# this method implemented as per {StaticCaching#check_static_cache}.
|
20
|
-
#
|
21
|
-
# @example Creating a subclassed router
|
22
|
-
# # Adds 'my' to all routing prefixes
|
23
|
-
# class MyRouter < YARD::Server::Router
|
24
|
-
# def docs_prefix; 'mydocs' end
|
25
|
-
# def list_prefix; 'mylist' end
|
26
|
-
# def static_prefix; 'mystatic' end
|
27
|
-
# def search_prefix; 'mysearch' end
|
28
|
-
# end
|
29
|
-
#
|
30
|
-
# # Using it:
|
31
|
-
# WebrickAdapter.new(libraries, :router => MyRouter).start
|
32
|
-
class Router
|
33
|
-
include StaticCaching
|
34
|
-
include Commands
|
35
|
-
|
36
|
-
# @return [Adapter Dependent] the request data coming in with the routing
|
37
|
-
attr_accessor :request
|
38
|
-
|
39
|
-
# @return [Adapter] the adapter used by the router
|
40
|
-
attr_accessor :adapter
|
41
|
-
|
42
|
-
# Creates a new router for a specific adapter
|
43
|
-
#
|
44
|
-
# @param [Adapter] adapter the adapter to route requests to
|
45
|
-
def initialize(adapter)
|
46
|
-
self.adapter = adapter
|
47
|
-
end
|
48
|
-
|
49
|
-
# Perform routing on a specific request, serving the request as a static
|
50
|
-
# file through {Commands::RootRequestCommand} if no route is found.
|
51
|
-
#
|
52
|
-
# @param [Adapter Dependent] request the request object
|
53
|
-
# @return [Array(Numeric,Hash,Array)] the Rack-style server response data
|
54
|
-
def call(request)
|
55
|
-
self.request = request
|
56
|
-
result = check_static_cache || route
|
57
|
-
result ? result : RootRequestCommand.new(adapter.options).call(request)
|
58
|
-
end
|
59
|
-
|
60
|
-
# @group Route Prefixes
|
61
|
-
|
62
|
-
# @return [String] the URI prefix for all object documentation requests
|
63
|
-
def docs_prefix; 'docs' end
|
64
|
-
|
65
|
-
# @return [String] the URI prefix for all class/method/file list requests
|
66
|
-
def list_prefix; 'list' end
|
67
|
-
|
68
|
-
# @return [String] the URI prefix for all search requests
|
69
|
-
def search_prefix; 'search' end
|
70
|
-
|
71
|
-
# @return [String] the URI prefix for all static assets (templates)
|
72
|
-
def static_prefix; 'static' end
|
73
|
-
|
74
|
-
# @group Routing Methods
|
75
|
-
|
76
|
-
# @return [Array(LibraryVersion, Array<String>)] the library followed
|
77
|
-
# by the rest of the path components in the request path. LibraryVersion
|
78
|
-
# will be nil if no matching library was found.
|
79
|
-
def parse_library_from_path(paths)
|
80
|
-
return [adapter.libraries.values.first.first, paths] if adapter.options[:single_library]
|
81
|
-
library = nil
|
82
|
-
paths = paths.dup
|
83
|
-
libs = adapter.libraries[paths.first]
|
84
|
-
if libs
|
85
|
-
paths.shift
|
86
|
-
library = libs.find {|l| l.version == paths.first }
|
87
|
-
if library
|
88
|
-
request.version_supplied = true if request
|
89
|
-
paths.shift
|
90
|
-
else # use the last lib in the list
|
91
|
-
request.version_supplied = false if request
|
92
|
-
library = libs.last
|
93
|
-
end
|
94
|
-
end
|
95
|
-
[library, paths]
|
96
|
-
end
|
97
|
-
|
98
|
-
protected
|
99
|
-
|
100
|
-
# Performs routing algorithm to find which prefix is called, first
|
101
|
-
# parsing out library name/version information.
|
102
|
-
#
|
103
|
-
# @return [Array(Numeric,Hash,Array<String>)] the Rack-style response
|
104
|
-
# @return [nil] if no route is matched
|
105
|
-
def route(path = request.path_info)
|
106
|
-
path = path.gsub(%r{//+}, '/').gsub(%r{^/|/$}, '')
|
107
|
-
return route_index if path.empty? || path == docs_prefix
|
108
|
-
case path
|
109
|
-
when %r{^(#{docs_prefix}|#{list_prefix}|#{search_prefix}|#{static_prefix})(/.*|$)}
|
110
|
-
prefix = $1
|
111
|
-
paths = $2.gsub(%r{^/|/$}, '').split('/')
|
112
|
-
library, paths = *parse_library_from_path(paths)
|
113
|
-
return unless library
|
114
|
-
return case prefix
|
115
|
-
when docs_prefix; route_docs(library, paths)
|
116
|
-
when list_prefix; route_list(library, paths)
|
117
|
-
when search_prefix; route_search(library, paths)
|
118
|
-
when static_prefix; route_static(library, paths)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
nil
|
122
|
-
end
|
123
|
-
|
124
|
-
# Routes requests from {#docs_prefix} and calls the appropriate command
|
125
|
-
# @param [LibraryVersion] library the library to route for
|
126
|
-
# @param [Array<String>] paths path components (split by '/')
|
127
|
-
# @return (see #route)
|
128
|
-
def route_docs(library, paths)
|
129
|
-
return route_index if library.nil?
|
130
|
-
case paths.first
|
131
|
-
when "frames"
|
132
|
-
paths.shift
|
133
|
-
cmd = DisplayObjectCommand
|
134
|
-
when "file"
|
135
|
-
paths.shift
|
136
|
-
cmd = DisplayFileCommand
|
137
|
-
else
|
138
|
-
cmd = DisplayObjectCommand
|
139
|
-
end
|
140
|
-
cmd = cmd.new(final_options(library, paths))
|
141
|
-
cmd.call(request)
|
142
|
-
end
|
143
|
-
|
144
|
-
# Routes for the index of a library / multiple libraries
|
145
|
-
# @return (see #route)
|
146
|
-
def route_index
|
147
|
-
if adapter.options[:single_library]
|
148
|
-
route_docs(adapter.libraries.values.first.first, [])
|
149
|
-
else
|
150
|
-
LibraryIndexCommand.new(adapter.options.merge(:path => '')).call(request)
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
# Routes requests from {#list_prefix} and calls the appropriate command
|
155
|
-
# @param (see #route_docs)
|
156
|
-
# @return (see #route_docs)
|
157
|
-
def route_list(library, paths)
|
158
|
-
return if paths.empty?
|
159
|
-
ListCommand.new(final_options(library, paths)).call(request)
|
160
|
-
end
|
161
|
-
|
162
|
-
# Routes requests from {#search_prefix} and calls the appropriate command
|
163
|
-
# @param (see #route_docs)
|
164
|
-
# @return (see #route_docs)
|
165
|
-
def route_search(library, paths)
|
166
|
-
return unless paths.empty?
|
167
|
-
SearchCommand.new(final_options(library, paths)).call(request)
|
168
|
-
end
|
169
|
-
|
170
|
-
def route_static(library, paths)
|
171
|
-
StaticFileCommand.new(final_options(library, paths)).call(request)
|
172
|
-
end
|
173
|
-
|
174
|
-
# @group Utility Methods
|
175
|
-
|
176
|
-
# Adds extra :library/:path option keys to the adapter options.
|
177
|
-
# Use this method when passing options to a command.
|
178
|
-
#
|
179
|
-
# @param (see #route_docs)
|
180
|
-
# @return [Hash] finalized options
|
181
|
-
def final_options(library, paths)
|
182
|
-
path = File.cleanpath(paths.join('/')).gsub(%r{^(\.\./)+}, '')
|
183
|
-
adapter.options.merge(:library => library, :path => path)
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module YARD
|
3
|
+
module Server
|
4
|
+
# A router class implements the logic used to recognize a request for a specific
|
5
|
+
# URL and run specific {Commands::Base commands}.
|
6
|
+
#
|
7
|
+
# == Subclassing Notes
|
8
|
+
# To create a custom router, subclass this class and pass it into the adapter
|
9
|
+
# options through {Adapter#initialize} or by directly modifying {Adapter#router}.
|
10
|
+
#
|
11
|
+
# The most general customization is to change the URL prefixes recognized by
|
12
|
+
# routing, which can be done by overriding {#docs_prefix}, {#list_prefix},
|
13
|
+
# {#static_prefix}, and {#search_prefix}.
|
14
|
+
#
|
15
|
+
# == Implementing Custom Caching
|
16
|
+
# By default, the Router class performs static disk-based caching on all
|
17
|
+
# requests through the +#check_static_cache+. To override this behaviour,
|
18
|
+
# or create your own caching mechanism, mixin your own custom module with
|
19
|
+
# this method implemented as per {StaticCaching#check_static_cache}.
|
20
|
+
#
|
21
|
+
# @example Creating a subclassed router
|
22
|
+
# # Adds 'my' to all routing prefixes
|
23
|
+
# class MyRouter < YARD::Server::Router
|
24
|
+
# def docs_prefix; 'mydocs' end
|
25
|
+
# def list_prefix; 'mylist' end
|
26
|
+
# def static_prefix; 'mystatic' end
|
27
|
+
# def search_prefix; 'mysearch' end
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# # Using it:
|
31
|
+
# WebrickAdapter.new(libraries, :router => MyRouter).start
|
32
|
+
class Router
|
33
|
+
include StaticCaching
|
34
|
+
include Commands
|
35
|
+
|
36
|
+
# @return [Adapter Dependent] the request data coming in with the routing
|
37
|
+
attr_accessor :request
|
38
|
+
|
39
|
+
# @return [Adapter] the adapter used by the router
|
40
|
+
attr_accessor :adapter
|
41
|
+
|
42
|
+
# Creates a new router for a specific adapter
|
43
|
+
#
|
44
|
+
# @param [Adapter] adapter the adapter to route requests to
|
45
|
+
def initialize(adapter)
|
46
|
+
self.adapter = adapter
|
47
|
+
end
|
48
|
+
|
49
|
+
# Perform routing on a specific request, serving the request as a static
|
50
|
+
# file through {Commands::RootRequestCommand} if no route is found.
|
51
|
+
#
|
52
|
+
# @param [Adapter Dependent] request the request object
|
53
|
+
# @return [Array(Numeric,Hash,Array)] the Rack-style server response data
|
54
|
+
def call(request)
|
55
|
+
self.request = request
|
56
|
+
result = check_static_cache || route
|
57
|
+
result ? result : RootRequestCommand.new(adapter.options).call(request)
|
58
|
+
end
|
59
|
+
|
60
|
+
# @group Route Prefixes
|
61
|
+
|
62
|
+
# @return [String] the URI prefix for all object documentation requests
|
63
|
+
def docs_prefix; 'docs' end
|
64
|
+
|
65
|
+
# @return [String] the URI prefix for all class/method/file list requests
|
66
|
+
def list_prefix; 'list' end
|
67
|
+
|
68
|
+
# @return [String] the URI prefix for all search requests
|
69
|
+
def search_prefix; 'search' end
|
70
|
+
|
71
|
+
# @return [String] the URI prefix for all static assets (templates)
|
72
|
+
def static_prefix; 'static' end
|
73
|
+
|
74
|
+
# @group Routing Methods
|
75
|
+
|
76
|
+
# @return [Array(LibraryVersion, Array<String>)] the library followed
|
77
|
+
# by the rest of the path components in the request path. LibraryVersion
|
78
|
+
# will be nil if no matching library was found.
|
79
|
+
def parse_library_from_path(paths)
|
80
|
+
return [adapter.libraries.values.first.first, paths] if adapter.options[:single_library]
|
81
|
+
library = nil
|
82
|
+
paths = paths.dup
|
83
|
+
libs = adapter.libraries[paths.first]
|
84
|
+
if libs
|
85
|
+
paths.shift
|
86
|
+
library = libs.find {|l| l.version == paths.first }
|
87
|
+
if library
|
88
|
+
request.version_supplied = true if request
|
89
|
+
paths.shift
|
90
|
+
else # use the last lib in the list
|
91
|
+
request.version_supplied = false if request
|
92
|
+
library = libs.last
|
93
|
+
end
|
94
|
+
end
|
95
|
+
[library, paths]
|
96
|
+
end
|
97
|
+
|
98
|
+
protected
|
99
|
+
|
100
|
+
# Performs routing algorithm to find which prefix is called, first
|
101
|
+
# parsing out library name/version information.
|
102
|
+
#
|
103
|
+
# @return [Array(Numeric,Hash,Array<String>)] the Rack-style response
|
104
|
+
# @return [nil] if no route is matched
|
105
|
+
def route(path = request.path_info)
|
106
|
+
path = path.gsub(%r{//+}, '/').gsub(%r{^/|/$}, '')
|
107
|
+
return route_index if path.empty? || path == docs_prefix
|
108
|
+
case path
|
109
|
+
when %r{^(#{docs_prefix}|#{list_prefix}|#{search_prefix}|#{static_prefix})(/.*|$)}
|
110
|
+
prefix = $1
|
111
|
+
paths = $2.gsub(%r{^/|/$}, '').split('/')
|
112
|
+
library, paths = *parse_library_from_path(paths)
|
113
|
+
return unless library
|
114
|
+
return case prefix
|
115
|
+
when docs_prefix; route_docs(library, paths)
|
116
|
+
when list_prefix; route_list(library, paths)
|
117
|
+
when search_prefix; route_search(library, paths)
|
118
|
+
when static_prefix; route_static(library, paths)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
nil
|
122
|
+
end
|
123
|
+
|
124
|
+
# Routes requests from {#docs_prefix} and calls the appropriate command
|
125
|
+
# @param [LibraryVersion] library the library to route for
|
126
|
+
# @param [Array<String>] paths path components (split by '/')
|
127
|
+
# @return (see #route)
|
128
|
+
def route_docs(library, paths)
|
129
|
+
return route_index if library.nil?
|
130
|
+
case paths.first
|
131
|
+
when "frames"
|
132
|
+
paths.shift
|
133
|
+
cmd = DisplayObjectCommand
|
134
|
+
when "file"
|
135
|
+
paths.shift
|
136
|
+
cmd = DisplayFileCommand
|
137
|
+
else
|
138
|
+
cmd = DisplayObjectCommand
|
139
|
+
end
|
140
|
+
cmd = cmd.new(final_options(library, paths))
|
141
|
+
cmd.call(request)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Routes for the index of a library / multiple libraries
|
145
|
+
# @return (see #route)
|
146
|
+
def route_index
|
147
|
+
if adapter.options[:single_library]
|
148
|
+
route_docs(adapter.libraries.values.first.first, [])
|
149
|
+
else
|
150
|
+
LibraryIndexCommand.new(adapter.options.merge(:path => '')).call(request)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Routes requests from {#list_prefix} and calls the appropriate command
|
155
|
+
# @param (see #route_docs)
|
156
|
+
# @return (see #route_docs)
|
157
|
+
def route_list(library, paths)
|
158
|
+
return if paths.empty?
|
159
|
+
ListCommand.new(final_options(library, paths)).call(request)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Routes requests from {#search_prefix} and calls the appropriate command
|
163
|
+
# @param (see #route_docs)
|
164
|
+
# @return (see #route_docs)
|
165
|
+
def route_search(library, paths)
|
166
|
+
return unless paths.empty?
|
167
|
+
SearchCommand.new(final_options(library, paths)).call(request)
|
168
|
+
end
|
169
|
+
|
170
|
+
def route_static(library, paths)
|
171
|
+
StaticFileCommand.new(final_options(library, paths)).call(request)
|
172
|
+
end
|
173
|
+
|
174
|
+
# @group Utility Methods
|
175
|
+
|
176
|
+
# Adds extra :library/:path option keys to the adapter options.
|
177
|
+
# Use this method when passing options to a command.
|
178
|
+
#
|
179
|
+
# @param (see #route_docs)
|
180
|
+
# @return [Hash] finalized options
|
181
|
+
def final_options(library, paths)
|
182
|
+
path = File.cleanpath(paths.join('/')).gsub(%r{^(\.\./)+}, '')
|
183
|
+
adapter.options.merge(:library => library, :path => path)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|