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,209 +1,209 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
module YARD
|
5
|
-
module Server
|
6
|
-
module Commands
|
7
|
-
# This is the base command class used to implement custom commands for
|
8
|
-
# a server. A command will be routed to by the {Router} class and return
|
9
|
-
# a Rack-style response.
|
10
|
-
#
|
11
|
-
# == Attribute Initializers
|
12
|
-
# All attributes can be initialized via options passed into the {#initialize}
|
13
|
-
# method. When creating a custom command, the {Adapter#options} will
|
14
|
-
# automatically be mapped to attributes by the same name on your class.
|
15
|
-
#
|
16
|
-
# class MyCommand < Base
|
17
|
-
# attr_accessor :myattr
|
18
|
-
# end
|
19
|
-
#
|
20
|
-
# Adapter.new(libs, {:myattr => 'foo'}).start
|
21
|
-
#
|
22
|
-
# # when a request comes in, cmd.myattr == 'foo'
|
23
|
-
#
|
24
|
-
# == Subclassing Notes
|
25
|
-
# To implement a custom command, override the {#run} method, not {#call}.
|
26
|
-
# In your implementation, you should set the body and status for requests.
|
27
|
-
# See details in the +#run+ method documentation.
|
28
|
-
#
|
29
|
-
# Note that if your command deals directly with libraries, you should
|
30
|
-
# consider subclassing the more specific {LibraryCommand} class instead.
|
31
|
-
#
|
32
|
-
# @abstract
|
33
|
-
# @see #run
|
34
|
-
class Base
|
35
|
-
# @group Basic Command and Adapter Options
|
36
|
-
|
37
|
-
# @return [Hash] the options passed to the command's constructor
|
38
|
-
attr_accessor :command_options
|
39
|
-
|
40
|
-
# @return [Adapter] the server adapter
|
41
|
-
attr_accessor :adapter
|
42
|
-
|
43
|
-
# @return [Boolean] whether to cache
|
44
|
-
attr_accessor :caching
|
45
|
-
|
46
|
-
# @group Attributes Set Per Request
|
47
|
-
|
48
|
-
# @return [Rack::Request] request object
|
49
|
-
attr_accessor :request
|
50
|
-
|
51
|
-
# @return [String] the path after the command base URI
|
52
|
-
attr_accessor :path
|
53
|
-
|
54
|
-
# @return [Hash{String => String}] response headers
|
55
|
-
attr_accessor :headers
|
56
|
-
|
57
|
-
# @return [Numeric] status code. Defaults to 200 per request
|
58
|
-
attr_accessor :status
|
59
|
-
|
60
|
-
# @return [String] the response body. Defaults to empty string.
|
61
|
-
attr_accessor :body
|
62
|
-
|
63
|
-
# @group Instance Method Summary
|
64
|
-
|
65
|
-
# Creates a new command object, setting attributes named by keys
|
66
|
-
# in the options hash. After initialization, the options hash
|
67
|
-
# is saved in {#command_options} for further inspection.
|
68
|
-
#
|
69
|
-
# @example Creating a Command
|
70
|
-
# cmd = DisplayObjectCommand.new(:caching => true, :library => mylib)
|
71
|
-
# cmd.library # => mylib
|
72
|
-
# cmd.command_options # => {:caching => true, :library => mylib}
|
73
|
-
# @param [Hash] opts the options hash, saved to {#command_options}
|
74
|
-
# after initialization.
|
75
|
-
def initialize(opts = {})
|
76
|
-
opts.each do |key, value|
|
77
|
-
send("#{key}=", value) if respond_to?("#{key}=")
|
78
|
-
end
|
79
|
-
self.command_options = opts
|
80
|
-
end
|
81
|
-
|
82
|
-
# The main method called by a router with a request object.
|
83
|
-
#
|
84
|
-
# @note This command should not be overridden by subclasses. Implement
|
85
|
-
# the callback method {#run} instead.
|
86
|
-
# @param [Adapter Dependent] request the request object
|
87
|
-
# @return [Array(Numeric,Hash,Array<String>)] a Rack-style response
|
88
|
-
# of status, headers, and body wrapped in an array.
|
89
|
-
def call(request)
|
90
|
-
self.request = request
|
91
|
-
self.path ||= request.path_info[1..-1]
|
92
|
-
self.headers = {'Content-Type' => 'text/html'}
|
93
|
-
self.body = ''
|
94
|
-
self.status = 200
|
95
|
-
add_cache_control
|
96
|
-
begin
|
97
|
-
run
|
98
|
-
rescue FinishRequest
|
99
|
-
nil # noop
|
100
|
-
rescue NotFoundError => e
|
101
|
-
self.body = e.message if e.message != e.class.to_s
|
102
|
-
not_found
|
103
|
-
end
|
104
|
-
|
105
|
-
# keep this to support commands setting status manually.
|
106
|
-
not_found if status == 404
|
107
|
-
|
108
|
-
[status, headers, body.is_a?(Array) ? body : [body]]
|
109
|
-
end
|
110
|
-
|
111
|
-
# @group Abstract Methods
|
112
|
-
|
113
|
-
# Subclass this method to implement a custom command. This method
|
114
|
-
# should set the {#status} and {#body}, and optionally modify the
|
115
|
-
# {#headers}. Note that +#status+ defaults to 200.
|
116
|
-
#
|
117
|
-
# @example A custom command
|
118
|
-
# class ErrorCommand < Base
|
119
|
-
# def run
|
120
|
-
# self.body = 'ERROR! The System is down!'
|
121
|
-
# self.status = 500
|
122
|
-
# self.headers['Conten-Type'] = 'text/plain'
|
123
|
-
# end
|
124
|
-
# end
|
125
|
-
#
|
126
|
-
# @abstract
|
127
|
-
# @return [void]
|
128
|
-
def run
|
129
|
-
raise NotImplementedError
|
130
|
-
end
|
131
|
-
|
132
|
-
protected
|
133
|
-
|
134
|
-
# @group Helper Methods
|
135
|
-
|
136
|
-
# Renders a specific object if provided, or a regular template rendering
|
137
|
-
# if object is not provided.
|
138
|
-
#
|
139
|
-
# @todo This method is dependent on +#options+, it should be in {LibraryCommand}.
|
140
|
-
# @param [CodeObjects::Base, nil] object calls {CodeObjects::Base#format} if
|
141
|
-
# an object is provided, or {Templates::Engine.render} if object is nil. Both
|
142
|
-
# receive +#options+ as an argument.
|
143
|
-
# @return [String] the resulting output to display
|
144
|
-
def render(object = nil)
|
145
|
-
case object
|
146
|
-
when CodeObjects::Base
|
147
|
-
cache object.format(options)
|
148
|
-
when nil
|
149
|
-
cache Templates::Engine.render(options)
|
150
|
-
else
|
151
|
-
cache object
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
# Override this method to implement custom caching mechanisms for
|
156
|
-
#
|
157
|
-
# @example Caching to memory
|
158
|
-
# $memory_cache = {}
|
159
|
-
# def cache(data)
|
160
|
-
# $memory_cache[path] = data
|
161
|
-
# end
|
162
|
-
# @param [String] data the data to cache
|
163
|
-
# @return [String] the same cached data (for chaining)
|
164
|
-
# @see StaticCaching
|
165
|
-
def cache(data)
|
166
|
-
if caching && adapter.document_root
|
167
|
-
path = File.join(adapter.document_root, request.path_info.sub(/\.html$/, '') + '.html')
|
168
|
-
path = path.sub(%r{/\.html$}, '.html')
|
169
|
-
FileUtils.mkdir_p(File.dirname(path))
|
170
|
-
log.debug "Caching data to #{path}"
|
171
|
-
File.open(path, 'wb') {|f| f.write(data) }
|
172
|
-
end
|
173
|
-
self.body = data
|
174
|
-
end
|
175
|
-
|
176
|
-
# Sets the body and headers for a 404 response. Does not modify the
|
177
|
-
# body if already set.
|
178
|
-
#
|
179
|
-
# @return [void]
|
180
|
-
def not_found
|
181
|
-
self.status = 404
|
182
|
-
return unless body.empty?
|
183
|
-
self.body = "Not found: #{request.path}"
|
184
|
-
headers['Content-Type'] = 'text/plain'
|
185
|
-
headers['X-Cascade'] = 'pass'
|
186
|
-
headers.delete('Cache-Control')
|
187
|
-
end
|
188
|
-
|
189
|
-
# Sets the headers and status code for a redirection to a given URL
|
190
|
-
# @param [String] url the URL to redirect to
|
191
|
-
# @raise [FinishRequest] causes the request to terminate.
|
192
|
-
def redirect(url)
|
193
|
-
headers['Location'] = url
|
194
|
-
self.status = 302
|
195
|
-
raise FinishRequest
|
196
|
-
end
|
197
|
-
|
198
|
-
private
|
199
|
-
|
200
|
-
# Add a conservative cache control policy to reduce load on
|
201
|
-
# requests served with "?1234567890" style timestamp query strings.
|
202
|
-
def add_cache_control
|
203
|
-
return if request.query_string.to_i == 0
|
204
|
-
headers['Cache-Control'] = 'private, max-age=300'
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module YARD
|
5
|
+
module Server
|
6
|
+
module Commands
|
7
|
+
# This is the base command class used to implement custom commands for
|
8
|
+
# a server. A command will be routed to by the {Router} class and return
|
9
|
+
# a Rack-style response.
|
10
|
+
#
|
11
|
+
# == Attribute Initializers
|
12
|
+
# All attributes can be initialized via options passed into the {#initialize}
|
13
|
+
# method. When creating a custom command, the {Adapter#options} will
|
14
|
+
# automatically be mapped to attributes by the same name on your class.
|
15
|
+
#
|
16
|
+
# class MyCommand < Base
|
17
|
+
# attr_accessor :myattr
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# Adapter.new(libs, {:myattr => 'foo'}).start
|
21
|
+
#
|
22
|
+
# # when a request comes in, cmd.myattr == 'foo'
|
23
|
+
#
|
24
|
+
# == Subclassing Notes
|
25
|
+
# To implement a custom command, override the {#run} method, not {#call}.
|
26
|
+
# In your implementation, you should set the body and status for requests.
|
27
|
+
# See details in the +#run+ method documentation.
|
28
|
+
#
|
29
|
+
# Note that if your command deals directly with libraries, you should
|
30
|
+
# consider subclassing the more specific {LibraryCommand} class instead.
|
31
|
+
#
|
32
|
+
# @abstract
|
33
|
+
# @see #run
|
34
|
+
class Base
|
35
|
+
# @group Basic Command and Adapter Options
|
36
|
+
|
37
|
+
# @return [Hash] the options passed to the command's constructor
|
38
|
+
attr_accessor :command_options
|
39
|
+
|
40
|
+
# @return [Adapter] the server adapter
|
41
|
+
attr_accessor :adapter
|
42
|
+
|
43
|
+
# @return [Boolean] whether to cache
|
44
|
+
attr_accessor :caching
|
45
|
+
|
46
|
+
# @group Attributes Set Per Request
|
47
|
+
|
48
|
+
# @return [Rack::Request] request object
|
49
|
+
attr_accessor :request
|
50
|
+
|
51
|
+
# @return [String] the path after the command base URI
|
52
|
+
attr_accessor :path
|
53
|
+
|
54
|
+
# @return [Hash{String => String}] response headers
|
55
|
+
attr_accessor :headers
|
56
|
+
|
57
|
+
# @return [Numeric] status code. Defaults to 200 per request
|
58
|
+
attr_accessor :status
|
59
|
+
|
60
|
+
# @return [String] the response body. Defaults to empty string.
|
61
|
+
attr_accessor :body
|
62
|
+
|
63
|
+
# @group Instance Method Summary
|
64
|
+
|
65
|
+
# Creates a new command object, setting attributes named by keys
|
66
|
+
# in the options hash. After initialization, the options hash
|
67
|
+
# is saved in {#command_options} for further inspection.
|
68
|
+
#
|
69
|
+
# @example Creating a Command
|
70
|
+
# cmd = DisplayObjectCommand.new(:caching => true, :library => mylib)
|
71
|
+
# cmd.library # => mylib
|
72
|
+
# cmd.command_options # => {:caching => true, :library => mylib}
|
73
|
+
# @param [Hash] opts the options hash, saved to {#command_options}
|
74
|
+
# after initialization.
|
75
|
+
def initialize(opts = {})
|
76
|
+
opts.each do |key, value|
|
77
|
+
send("#{key}=", value) if respond_to?("#{key}=")
|
78
|
+
end
|
79
|
+
self.command_options = opts
|
80
|
+
end
|
81
|
+
|
82
|
+
# The main method called by a router with a request object.
|
83
|
+
#
|
84
|
+
# @note This command should not be overridden by subclasses. Implement
|
85
|
+
# the callback method {#run} instead.
|
86
|
+
# @param [Adapter Dependent] request the request object
|
87
|
+
# @return [Array(Numeric,Hash,Array<String>)] a Rack-style response
|
88
|
+
# of status, headers, and body wrapped in an array.
|
89
|
+
def call(request)
|
90
|
+
self.request = request
|
91
|
+
self.path ||= request.path_info[1..-1]
|
92
|
+
self.headers = {'Content-Type' => 'text/html'}
|
93
|
+
self.body = ''
|
94
|
+
self.status = 200
|
95
|
+
add_cache_control
|
96
|
+
begin
|
97
|
+
run
|
98
|
+
rescue FinishRequest
|
99
|
+
nil # noop
|
100
|
+
rescue NotFoundError => e
|
101
|
+
self.body = e.message if e.message != e.class.to_s
|
102
|
+
not_found
|
103
|
+
end
|
104
|
+
|
105
|
+
# keep this to support commands setting status manually.
|
106
|
+
not_found if status == 404
|
107
|
+
|
108
|
+
[status, headers, body.is_a?(Array) ? body : [body]]
|
109
|
+
end
|
110
|
+
|
111
|
+
# @group Abstract Methods
|
112
|
+
|
113
|
+
# Subclass this method to implement a custom command. This method
|
114
|
+
# should set the {#status} and {#body}, and optionally modify the
|
115
|
+
# {#headers}. Note that +#status+ defaults to 200.
|
116
|
+
#
|
117
|
+
# @example A custom command
|
118
|
+
# class ErrorCommand < Base
|
119
|
+
# def run
|
120
|
+
# self.body = 'ERROR! The System is down!'
|
121
|
+
# self.status = 500
|
122
|
+
# self.headers['Conten-Type'] = 'text/plain'
|
123
|
+
# end
|
124
|
+
# end
|
125
|
+
#
|
126
|
+
# @abstract
|
127
|
+
# @return [void]
|
128
|
+
def run
|
129
|
+
raise NotImplementedError
|
130
|
+
end
|
131
|
+
|
132
|
+
protected
|
133
|
+
|
134
|
+
# @group Helper Methods
|
135
|
+
|
136
|
+
# Renders a specific object if provided, or a regular template rendering
|
137
|
+
# if object is not provided.
|
138
|
+
#
|
139
|
+
# @todo This method is dependent on +#options+, it should be in {LibraryCommand}.
|
140
|
+
# @param [CodeObjects::Base, nil] object calls {CodeObjects::Base#format} if
|
141
|
+
# an object is provided, or {Templates::Engine.render} if object is nil. Both
|
142
|
+
# receive +#options+ as an argument.
|
143
|
+
# @return [String] the resulting output to display
|
144
|
+
def render(object = nil)
|
145
|
+
case object
|
146
|
+
when CodeObjects::Base
|
147
|
+
cache object.format(options)
|
148
|
+
when nil
|
149
|
+
cache Templates::Engine.render(options)
|
150
|
+
else
|
151
|
+
cache object
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# Override this method to implement custom caching mechanisms for
|
156
|
+
#
|
157
|
+
# @example Caching to memory
|
158
|
+
# $memory_cache = {}
|
159
|
+
# def cache(data)
|
160
|
+
# $memory_cache[path] = data
|
161
|
+
# end
|
162
|
+
# @param [String] data the data to cache
|
163
|
+
# @return [String] the same cached data (for chaining)
|
164
|
+
# @see StaticCaching
|
165
|
+
def cache(data)
|
166
|
+
if caching && adapter.document_root
|
167
|
+
path = File.join(adapter.document_root, request.path_info.sub(/\.html$/, '') + '.html')
|
168
|
+
path = path.sub(%r{/\.html$}, '.html')
|
169
|
+
FileUtils.mkdir_p(File.dirname(path))
|
170
|
+
log.debug "Caching data to #{path}"
|
171
|
+
File.open(path, 'wb') {|f| f.write(data) }
|
172
|
+
end
|
173
|
+
self.body = data
|
174
|
+
end
|
175
|
+
|
176
|
+
# Sets the body and headers for a 404 response. Does not modify the
|
177
|
+
# body if already set.
|
178
|
+
#
|
179
|
+
# @return [void]
|
180
|
+
def not_found
|
181
|
+
self.status = 404
|
182
|
+
return unless body.empty?
|
183
|
+
self.body = "Not found: #{request.path}"
|
184
|
+
headers['Content-Type'] = 'text/plain'
|
185
|
+
headers['X-Cascade'] = 'pass'
|
186
|
+
headers.delete('Cache-Control')
|
187
|
+
end
|
188
|
+
|
189
|
+
# Sets the headers and status code for a redirection to a given URL
|
190
|
+
# @param [String] url the URL to redirect to
|
191
|
+
# @raise [FinishRequest] causes the request to terminate.
|
192
|
+
def redirect(url)
|
193
|
+
headers['Location'] = url
|
194
|
+
self.status = 302
|
195
|
+
raise FinishRequest
|
196
|
+
end
|
197
|
+
|
198
|
+
private
|
199
|
+
|
200
|
+
# Add a conservative cache control policy to reduce load on
|
201
|
+
# requests served with "?1234567890" style timestamp query strings.
|
202
|
+
def add_cache_control
|
203
|
+
return if request.query_string.to_i == 0
|
204
|
+
headers['Cache-Control'] = 'private, max-age=300'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -1,29 +1,29 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module YARD
|
3
|
-
module Server
|
4
|
-
module Commands
|
5
|
-
# Displays a README or extra file.
|
6
|
-
#
|
7
|
-
# @todo Implement better support for detecting binary (image) filetypes
|
8
|
-
class DisplayFileCommand < LibraryCommand
|
9
|
-
attr_accessor :index
|
10
|
-
|
11
|
-
def run
|
12
|
-
filename = File.cleanpath(File.join(library.source_path, path))
|
13
|
-
raise NotFoundError unless File.file?(filename)
|
14
|
-
if filename =~ /\.(jpe?g|gif|png|bmp)$/i
|
15
|
-
headers['Content-Type'] = StaticFileCommand::DefaultMimeTypes[$1.downcase] || 'text/html'
|
16
|
-
render File.read_binary(filename)
|
17
|
-
else
|
18
|
-
file = CodeObjects::ExtraFileObject.new(filename)
|
19
|
-
options.update :object => Registry.root,
|
20
|
-
:type => :layout,
|
21
|
-
:file => file,
|
22
|
-
:index => index ? true : false
|
23
|
-
render
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module YARD
|
3
|
+
module Server
|
4
|
+
module Commands
|
5
|
+
# Displays a README or extra file.
|
6
|
+
#
|
7
|
+
# @todo Implement better support for detecting binary (image) filetypes
|
8
|
+
class DisplayFileCommand < LibraryCommand
|
9
|
+
attr_accessor :index
|
10
|
+
|
11
|
+
def run
|
12
|
+
filename = File.cleanpath(File.join(library.source_path, path))
|
13
|
+
raise NotFoundError unless File.file?(filename)
|
14
|
+
if filename =~ /\.(jpe?g|gif|png|bmp|svg)$/i
|
15
|
+
headers['Content-Type'] = StaticFileCommand::DefaultMimeTypes[$1.downcase] || 'text/html'
|
16
|
+
render File.read_binary(filename)
|
17
|
+
else
|
18
|
+
file = CodeObjects::ExtraFileObject.new(filename)
|
19
|
+
options.update :object => Registry.root,
|
20
|
+
:type => :layout,
|
21
|
+
:file => file,
|
22
|
+
:index => index ? true : false
|
23
|
+
render
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|