nano-safe-sys 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nano-safe-sys might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/nano-safe-sys.gemspec +12 -0
- data/yard-0.9.44/CHANGELOG.md +983 -0
- data/yard-0.9.44/LEGAL +94 -0
- data/yard-0.9.44/LICENSE +22 -0
- data/yard-0.9.44/README.md +329 -0
- data/yard-0.9.44/bin/yard +13 -0
- data/yard-0.9.44/bin/yardoc +13 -0
- data/yard-0.9.44/bin/yri +13 -0
- data/yard-0.9.44/docs/CodeObjects.md +115 -0
- data/yard-0.9.44/docs/GettingStarted.md +705 -0
- data/yard-0.9.44/docs/Handlers.md +152 -0
- data/yard-0.9.44/docs/Overview.md +61 -0
- data/yard-0.9.44/docs/Parser.md +166 -0
- data/yard-0.9.44/docs/Tags.md +304 -0
- data/yard-0.9.44/docs/TagsArch.md +123 -0
- data/yard-0.9.44/docs/Templates.md +497 -0
- data/yard-0.9.44/docs/WhatsNew.md +1297 -0
- data/yard-0.9.44/docs/images/code-objects-class-diagram.png +0 -0
- data/yard-0.9.44/docs/images/handlers-class-diagram.png +0 -0
- data/yard-0.9.44/docs/images/overview-class-diagram.png +0 -0
- data/yard-0.9.44/docs/images/parser-class-diagram.png +0 -0
- data/yard-0.9.44/docs/images/tags-class-diagram.png +0 -0
- data/yard-0.9.44/docs/templates/default/fulldoc/html/full_list_tag.erb +9 -0
- data/yard-0.9.44/docs/templates/default/fulldoc/html/setup.rb +6 -0
- data/yard-0.9.44/docs/templates/default/layout/html/setup.rb +9 -0
- data/yard-0.9.44/docs/templates/default/layout/html/tag_list.erb +11 -0
- data/yard-0.9.44/docs/templates/default/yard_tags/html/list.erb +18 -0
- data/yard-0.9.44/docs/templates/default/yard_tags/html/setup.rb +26 -0
- data/yard-0.9.44/docs/templates/plugin.rb +70 -0
- data/yard-0.9.44/lib/rubygems_plugin.rb +157 -0
- data/yard-0.9.44/lib/yard/autoload.rb +328 -0
- data/yard-0.9.44/lib/yard/cli/command.rb +85 -0
- data/yard-0.9.44/lib/yard/cli/command_parser.rb +93 -0
- data/yard-0.9.44/lib/yard/cli/config.rb +198 -0
- data/yard-0.9.44/lib/yard/cli/diff.rb +278 -0
- data/yard-0.9.44/lib/yard/cli/display.rb +69 -0
- data/yard-0.9.44/lib/yard/cli/gems.rb +84 -0
- data/yard-0.9.44/lib/yard/cli/graph.rb +125 -0
- data/yard-0.9.44/lib/yard/cli/help.rb +20 -0
- data/yard-0.9.44/lib/yard/cli/i18n.rb +70 -0
- data/yard-0.9.44/lib/yard/cli/list.rb +23 -0
- data/yard-0.9.44/lib/yard/cli/markup_types.rb +32 -0
- data/yard-0.9.44/lib/yard/cli/server.rb +266 -0
- data/yard-0.9.44/lib/yard/cli/stats.rb +234 -0
- data/yard-0.9.44/lib/yard/cli/yardoc.rb +791 -0
- data/yard-0.9.44/lib/yard/cli/yardopts_command.rb +110 -0
- data/yard-0.9.44/lib/yard/cli/yri.rb +215 -0
- data/yard-0.9.44/lib/yard/code_objects/base.rb +626 -0
- data/yard-0.9.44/lib/yard/code_objects/class_object.rb +146 -0
- data/yard-0.9.44/lib/yard/code_objects/class_variable_object.rb +11 -0
- data/yard-0.9.44/lib/yard/code_objects/constant_object.rb +16 -0
- data/yard-0.9.44/lib/yard/code_objects/extended_method_object.rb +24 -0
- data/yard-0.9.44/lib/yard/code_objects/extra_file_object.rb +135 -0
- data/yard-0.9.44/lib/yard/code_objects/macro_object.rb +171 -0
- data/yard-0.9.44/lib/yard/code_objects/method_object.rb +196 -0
- data/yard-0.9.44/lib/yard/code_objects/module_object.rb +21 -0
- data/yard-0.9.44/lib/yard/code_objects/namespace_mapper.rb +141 -0
- data/yard-0.9.44/lib/yard/code_objects/namespace_object.rb +200 -0
- data/yard-0.9.44/lib/yard/code_objects/proxy.rb +245 -0
- data/yard-0.9.44/lib/yard/code_objects/root_object.rb +19 -0
- data/yard-0.9.44/lib/yard/config.rb +274 -0
- data/yard-0.9.44/lib/yard/core_ext/array.rb +16 -0
- data/yard-0.9.44/lib/yard/core_ext/file.rb +69 -0
- data/yard-0.9.44/lib/yard/core_ext/hash.rb +16 -0
- data/yard-0.9.44/lib/yard/core_ext/insertion.rb +63 -0
- data/yard-0.9.44/lib/yard/core_ext/module.rb +11 -0
- data/yard-0.9.44/lib/yard/core_ext/string.rb +68 -0
- data/yard-0.9.44/lib/yard/core_ext/symbol_hash.rb +75 -0
- data/yard-0.9.44/lib/yard/docstring.rb +386 -0
- data/yard-0.9.44/lib/yard/docstring_parser.rb +344 -0
- data/yard-0.9.44/lib/yard/gem_index.rb +29 -0
- data/yard-0.9.44/lib/yard/globals.rb +22 -0
- data/yard-0.9.44/lib/yard/handlers/base.rb +617 -0
- data/yard-0.9.44/lib/yard/handlers/c/alias_handler.rb +16 -0
- data/yard-0.9.44/lib/yard/handlers/c/attribute_handler.rb +13 -0
- data/yard-0.9.44/lib/yard/handlers/c/base.rb +164 -0
- data/yard-0.9.44/lib/yard/handlers/c/class_handler.rb +27 -0
- data/yard-0.9.44/lib/yard/handlers/c/constant_handler.rb +13 -0
- data/yard-0.9.44/lib/yard/handlers/c/handler_methods.rb +212 -0
- data/yard-0.9.44/lib/yard/handlers/c/init_handler.rb +20 -0
- data/yard-0.9.44/lib/yard/handlers/c/method_handler.rb +45 -0
- data/yard-0.9.44/lib/yard/handlers/c/mixin_handler.rb +21 -0
- data/yard-0.9.44/lib/yard/handlers/c/module_handler.rb +17 -0
- data/yard-0.9.44/lib/yard/handlers/c/override_comment_handler.rb +31 -0
- data/yard-0.9.44/lib/yard/handlers/c/path_handler.rb +11 -0
- data/yard-0.9.44/lib/yard/handlers/c/struct_handler.rb +13 -0
- data/yard-0.9.44/lib/yard/handlers/c/symbol_handler.rb +8 -0
- data/yard-0.9.44/lib/yard/handlers/common/method_handler.rb +19 -0
- data/yard-0.9.44/lib/yard/handlers/processor.rb +200 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/attribute_handler.rb +79 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/base.rb +38 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/constant_handler.rb +18 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/method_handler.rb +327 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/mixin_handler.rb +20 -0
- data/yard-0.9.44/lib/yard/handlers/rbs/namespace_handler.rb +26 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/alias_handler.rb +45 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/attribute_handler.rb +90 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/base.rb +165 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/class_condition_handler.rb +92 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/class_handler.rb +119 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/class_variable_handler.rb +17 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/comment_handler.rb +10 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/constant_handler.rb +73 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/dsl_handler.rb +15 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/exception_handler.rb +27 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/extend_handler.rb +22 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/base.rb +245 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/visibility_handler.rb +18 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/method_condition_handler.rb +9 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/method_handler.rb +104 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/mixin_handler.rb +61 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/module_function_handler.rb +39 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/module_handler.rb +12 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/private_constant_handler.rb +43 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/visibility_handler.rb +35 -0
- data/yard-0.9.44/lib/yard/handlers/ruby/yield_handler.rb +31 -0
- data/yard-0.9.44/lib/yard/i18n/locale.rb +67 -0
- data/yard-0.9.44/lib/yard/i18n/message.rb +57 -0
- data/yard-0.9.44/lib/yard/i18n/messages.rb +56 -0
- data/yard-0.9.44/lib/yard/i18n/po_parser.rb +61 -0
- data/yard-0.9.44/lib/yard/i18n/pot_generator.rb +290 -0
- data/yard-0.9.44/lib/yard/i18n/text.rb +173 -0
- data/yard-0.9.44/lib/yard/logging.rb +260 -0
- data/yard-0.9.44/lib/yard/open_struct.rb +67 -0
- data/yard-0.9.44/lib/yard/options.rb +217 -0
- data/yard-0.9.44/lib/yard/parser/base.rb +57 -0
- data/yard-0.9.44/lib/yard/parser/c/c_parser.rb +235 -0
- data/yard-0.9.44/lib/yard/parser/c/comment_parser.rb +134 -0
- data/yard-0.9.44/lib/yard/parser/c/statement.rb +66 -0
- data/yard-0.9.44/lib/yard/parser/rbs/rbs_parser.rb +325 -0
- data/yard-0.9.44/lib/yard/parser/rbs/statement.rb +75 -0
- data/yard-0.9.44/lib/yard/parser/ruby/ast_node.rb +559 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/irb/slex.rb +294 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/ruby_lex.rb +1360 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/statement.rb +68 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/statement_list.rb +394 -0
- data/yard-0.9.44/lib/yard/parser/ruby/legacy/token_list.rb +74 -0
- data/yard-0.9.44/lib/yard/parser/ruby/ruby_parser.rb +792 -0
- data/yard-0.9.44/lib/yard/parser/ruby/token_resolver.rb +158 -0
- data/yard-0.9.44/lib/yard/parser/source_parser.rb +526 -0
- data/yard-0.9.44/lib/yard/rake/yardoc_task.rb +81 -0
- data/yard-0.9.44/lib/yard/registry.rb +439 -0
- data/yard-0.9.44/lib/yard/registry_resolver.rb +225 -0
- data/yard-0.9.44/lib/yard/registry_store.rb +342 -0
- data/yard-0.9.44/lib/yard/rubygems/backports/LICENSE.txt +57 -0
- data/yard-0.9.44/lib/yard/rubygems/backports/MIT.txt +20 -0
- data/yard-0.9.44/lib/yard/rubygems/backports/gem.rb +10 -0
- data/yard-0.9.44/lib/yard/rubygems/backports/source_index.rb +365 -0
- data/yard-0.9.44/lib/yard/rubygems/backports.rb +10 -0
- data/yard-0.9.44/lib/yard/rubygems/doc_manager.rb +90 -0
- data/yard-0.9.44/lib/yard/rubygems/hook.rb +197 -0
- data/yard-0.9.44/lib/yard/rubygems/specification.rb +50 -0
- data/yard-0.9.44/lib/yard/serializers/base.rb +83 -0
- data/yard-0.9.44/lib/yard/serializers/file_system_serializer.rb +123 -0
- data/yard-0.9.44/lib/yard/serializers/process_serializer.rb +24 -0
- data/yard-0.9.44/lib/yard/serializers/stdout_serializer.rb +34 -0
- data/yard-0.9.44/lib/yard/serializers/yardoc_serializer.rb +152 -0
- data/yard-0.9.44/lib/yard/server/adapter.rb +100 -0
- data/yard-0.9.44/lib/yard/server/commands/base.rb +203 -0
- data/yard-0.9.44/lib/yard/server/commands/display_file_command.rb +29 -0
- data/yard-0.9.44/lib/yard/server/commands/display_object_command.rb +65 -0
- data/yard-0.9.44/lib/yard/server/commands/frames_command.rb +16 -0
- data/yard-0.9.44/lib/yard/server/commands/library_command.rb +187 -0
- data/yard-0.9.44/lib/yard/server/commands/library_index_command.rb +28 -0
- data/yard-0.9.44/lib/yard/server/commands/list_command.rb +25 -0
- data/yard-0.9.44/lib/yard/server/commands/root_request_command.rb +15 -0
- data/yard-0.9.44/lib/yard/server/commands/search_command.rb +79 -0
- data/yard-0.9.44/lib/yard/server/commands/static_file_command.rb +23 -0
- data/yard-0.9.44/lib/yard/server/commands/static_file_helpers.rb +60 -0
- data/yard-0.9.44/lib/yard/server/doc_server_helper.rb +91 -0
- data/yard-0.9.44/lib/yard/server/doc_server_serializer.rb +39 -0
- data/yard-0.9.44/lib/yard/server/http_utils.rb +512 -0
- data/yard-0.9.44/lib/yard/server/library_version.rb +277 -0
- data/yard-0.9.44/lib/yard/server/rack_adapter.rb +97 -0
- data/yard-0.9.44/lib/yard/server/router.rb +187 -0
- data/yard-0.9.44/lib/yard/server/static_caching.rb +77 -0
- data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/css/custom.css +207 -0
- data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/images/processing.gif +0 -0
- data/yard-0.9.44/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +203 -0
- data/yard-0.9.44/lib/yard/server/templates/default/layout/html/breadcrumb.erb +21 -0
- data/yard-0.9.44/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -0
- data/yard-0.9.44/lib/yard/server/templates/default/layout/html/setup.rb +8 -0
- data/yard-0.9.44/lib/yard/server/templates/default/method_details/html/permalink.erb +6 -0
- data/yard-0.9.44/lib/yard/server/templates/default/method_details/html/setup.rb +5 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +13 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/processing/html/processing.erb +58 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/search/html/search.erb +18 -0
- data/yard-0.9.44/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -0
- data/yard-0.9.44/lib/yard/server/webrick_adapter.rb +45 -0
- data/yard-0.9.44/lib/yard/server.rb +13 -0
- data/yard-0.9.44/lib/yard/tags/default_factory.rb +192 -0
- data/yard-0.9.44/lib/yard/tags/default_tag.rb +13 -0
- data/yard-0.9.44/lib/yard/tags/directives.rb +631 -0
- data/yard-0.9.44/lib/yard/tags/library.rb +633 -0
- data/yard-0.9.44/lib/yard/tags/option_tag.rb +13 -0
- data/yard-0.9.44/lib/yard/tags/overload_tag.rb +72 -0
- data/yard-0.9.44/lib/yard/tags/ref_tag.rb +8 -0
- data/yard-0.9.44/lib/yard/tags/ref_tag_list.rb +28 -0
- data/yard-0.9.44/lib/yard/tags/tag.rb +72 -0
- data/yard-0.9.44/lib/yard/tags/tag_format_error.rb +7 -0
- data/yard-0.9.44/lib/yard/tags/types_explainer.rb +288 -0
- data/yard-0.9.44/lib/yard/templates/engine.rb +185 -0
- data/yard-0.9.44/lib/yard/templates/erb_cache.rb +23 -0
- data/yard-0.9.44/lib/yard/templates/helpers/base_helper.rb +215 -0
- data/yard-0.9.44/lib/yard/templates/helpers/filter_helper.rb +27 -0
- data/yard-0.9.44/lib/yard/templates/helpers/html_helper.rb +688 -0
- data/yard-0.9.44/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +83 -0
- data/yard-0.9.44/lib/yard/templates/helpers/markup/html_entities.rb +2140 -0
- data/yard-0.9.44/lib/yard/templates/helpers/markup/hybrid_markdown.rb +2131 -0
- data/yard-0.9.44/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -0
- data/yard-0.9.44/lib/yard/templates/helpers/markup/rdoc_markup.rb +112 -0
- data/yard-0.9.44/lib/yard/templates/helpers/markup_helper.rb +175 -0
- data/yard-0.9.44/lib/yard/templates/helpers/method_helper.rb +77 -0
- data/yard-0.9.44/lib/yard/templates/helpers/module_helper.rb +21 -0
- data/yard-0.9.44/lib/yard/templates/helpers/text_helper.rb +112 -0
- data/yard-0.9.44/lib/yard/templates/helpers/uml_helper.rb +47 -0
- data/yard-0.9.44/lib/yard/templates/section.rb +103 -0
- data/yard-0.9.44/lib/yard/templates/template.rb +420 -0
- data/yard-0.9.44/lib/yard/templates/template_options.rb +91 -0
- data/yard-0.9.44/lib/yard/verifier.rb +151 -0
- data/yard-0.9.44/lib/yard/version.rb +6 -0
- data/yard-0.9.44/lib/yard.rb +75 -0
- data/yard-0.9.44/po/ja.po +31108 -0
- data/yard-0.9.44/templates/default/class/dot/setup.rb +7 -0
- data/yard-0.9.44/templates/default/class/dot/superklass.erb +3 -0
- data/yard-0.9.44/templates/default/class/html/constructor_details.erb +8 -0
- data/yard-0.9.44/templates/default/class/html/setup.rb +2 -0
- data/yard-0.9.44/templates/default/class/html/subclasses.erb +4 -0
- data/yard-0.9.44/templates/default/class/setup.rb +36 -0
- data/yard-0.9.44/templates/default/class/text/setup.rb +12 -0
- data/yard-0.9.44/templates/default/class/text/subclasses.erb +5 -0
- data/yard-0.9.44/templates/default/constant/text/header.erb +11 -0
- data/yard-0.9.44/templates/default/constant/text/setup.rb +4 -0
- data/yard-0.9.44/templates/default/docstring/html/abstract.erb +4 -0
- data/yard-0.9.44/templates/default/docstring/html/deprecated.erb +1 -0
- data/yard-0.9.44/templates/default/docstring/html/index.erb +5 -0
- data/yard-0.9.44/templates/default/docstring/html/note.erb +6 -0
- data/yard-0.9.44/templates/default/docstring/html/private.erb +4 -0
- data/yard-0.9.44/templates/default/docstring/html/returns_void.erb +1 -0
- data/yard-0.9.44/templates/default/docstring/html/text.erb +1 -0
- data/yard-0.9.44/templates/default/docstring/html/todo.erb +6 -0
- data/yard-0.9.44/templates/default/docstring/setup.rb +52 -0
- data/yard-0.9.44/templates/default/docstring/text/abstract.erb +2 -0
- data/yard-0.9.44/templates/default/docstring/text/deprecated.erb +2 -0
- data/yard-0.9.44/templates/default/docstring/text/index.erb +2 -0
- data/yard-0.9.44/templates/default/docstring/text/note.erb +4 -0
- data/yard-0.9.44/templates/default/docstring/text/private.erb +2 -0
- data/yard-0.9.44/templates/default/docstring/text/returns_void.erb +1 -0
- data/yard-0.9.44/templates/default/docstring/text/text.erb +1 -0
- data/yard-0.9.44/templates/default/docstring/text/todo.erb +4 -0
- data/yard-0.9.44/templates/default/fulldoc/html/css/common.css +1 -0
- data/yard-0.9.44/templates/default/fulldoc/html/css/full_list.css +206 -0
- data/yard-0.9.44/templates/default/fulldoc/html/css/style.css +1089 -0
- data/yard-0.9.44/templates/default/fulldoc/html/frames.erb +22 -0
- data/yard-0.9.44/templates/default/fulldoc/html/full_list.erb +40 -0
- data/yard-0.9.44/templates/default/fulldoc/html/full_list_class.erb +2 -0
- data/yard-0.9.44/templates/default/fulldoc/html/full_list_file.erb +7 -0
- data/yard-0.9.44/templates/default/fulldoc/html/full_list_method.erb +10 -0
- data/yard-0.9.44/templates/default/fulldoc/html/js/app.js +801 -0
- data/yard-0.9.44/templates/default/fulldoc/html/js/full_list.js +334 -0
- data/yard-0.9.44/templates/default/fulldoc/html/js/jquery.js +4 -0
- data/yard-0.9.44/templates/default/fulldoc/html/setup.rb +249 -0
- data/yard-0.9.44/templates/default/layout/dot/header.erb +6 -0
- data/yard-0.9.44/templates/default/layout/dot/setup.rb +15 -0
- data/yard-0.9.44/templates/default/layout/html/breadcrumb.erb +11 -0
- data/yard-0.9.44/templates/default/layout/html/files.erb +11 -0
- data/yard-0.9.44/templates/default/layout/html/footer.erb +5 -0
- data/yard-0.9.44/templates/default/layout/html/headers.erb +15 -0
- data/yard-0.9.44/templates/default/layout/html/index.erb +2 -0
- data/yard-0.9.44/templates/default/layout/html/layout.erb +26 -0
- data/yard-0.9.44/templates/default/layout/html/listing.erb +4 -0
- data/yard-0.9.44/templates/default/layout/html/objects.erb +32 -0
- data/yard-0.9.44/templates/default/layout/html/script_setup.erb +4 -0
- data/yard-0.9.44/templates/default/layout/html/search.erb +13 -0
- data/yard-0.9.44/templates/default/layout/html/setup.rb +89 -0
- data/yard-0.9.44/templates/default/method/html/header.erb +17 -0
- data/yard-0.9.44/templates/default/method/setup.rb +4 -0
- data/yard-0.9.44/templates/default/method/text/header.erb +1 -0
- data/yard-0.9.44/templates/default/method_details/html/header.erb +3 -0
- data/yard-0.9.44/templates/default/method_details/html/method_signature.erb +25 -0
- data/yard-0.9.44/templates/default/method_details/html/source.erb +10 -0
- data/yard-0.9.44/templates/default/method_details/setup.rb +11 -0
- data/yard-0.9.44/templates/default/method_details/text/header.erb +10 -0
- data/yard-0.9.44/templates/default/method_details/text/method_signature.erb +12 -0
- data/yard-0.9.44/templates/default/method_details/text/setup.rb +11 -0
- data/yard-0.9.44/templates/default/module/dot/child.erb +1 -0
- data/yard-0.9.44/templates/default/module/dot/dependencies.erb +3 -0
- data/yard-0.9.44/templates/default/module/dot/header.erb +6 -0
- data/yard-0.9.44/templates/default/module/dot/info.erb +14 -0
- data/yard-0.9.44/templates/default/module/dot/setup.rb +15 -0
- data/yard-0.9.44/templates/default/module/html/attribute_details.erb +10 -0
- data/yard-0.9.44/templates/default/module/html/attribute_summary.erb +8 -0
- data/yard-0.9.44/templates/default/module/html/box_info.erb +43 -0
- data/yard-0.9.44/templates/default/module/html/children.erb +8 -0
- data/yard-0.9.44/templates/default/module/html/constant_summary.erb +17 -0
- data/yard-0.9.44/templates/default/module/html/defines.erb +3 -0
- data/yard-0.9.44/templates/default/module/html/header.erb +5 -0
- data/yard-0.9.44/templates/default/module/html/inherited_attributes.erb +14 -0
- data/yard-0.9.44/templates/default/module/html/inherited_constants.erb +8 -0
- data/yard-0.9.44/templates/default/module/html/inherited_methods.erb +20 -0
- data/yard-0.9.44/templates/default/module/html/item_summary.erb +40 -0
- data/yard-0.9.44/templates/default/module/html/method_details_list.erb +9 -0
- data/yard-0.9.44/templates/default/module/html/method_summary.erb +22 -0
- data/yard-0.9.44/templates/default/module/html/methodmissing.erb +12 -0
- data/yard-0.9.44/templates/default/module/html/pre_docstring.erb +1 -0
- data/yard-0.9.44/templates/default/module/setup.rb +187 -0
- data/yard-0.9.44/templates/default/module/text/children.erb +10 -0
- data/yard-0.9.44/templates/default/module/text/class_meths_list.erb +8 -0
- data/yard-0.9.44/templates/default/module/text/extends.erb +8 -0
- data/yard-0.9.44/templates/default/module/text/header.erb +7 -0
- data/yard-0.9.44/templates/default/module/text/includes.erb +8 -0
- data/yard-0.9.44/templates/default/module/text/instance_meths_list.erb +8 -0
- data/yard-0.9.44/templates/default/module/text/setup.rb +13 -0
- data/yard-0.9.44/templates/default/onefile/html/files.erb +5 -0
- data/yard-0.9.44/templates/default/onefile/html/headers.erb +8 -0
- data/yard-0.9.44/templates/default/onefile/html/layout.erb +16 -0
- data/yard-0.9.44/templates/default/onefile/html/readme.erb +3 -0
- data/yard-0.9.44/templates/default/onefile/html/setup.rb +62 -0
- data/yard-0.9.44/templates/default/root/dot/child.erb +3 -0
- data/yard-0.9.44/templates/default/root/dot/setup.rb +6 -0
- data/yard-0.9.44/templates/default/root/html/setup.rb +2 -0
- data/yard-0.9.44/templates/default/tags/html/example.erb +11 -0
- data/yard-0.9.44/templates/default/tags/html/index.erb +3 -0
- data/yard-0.9.44/templates/default/tags/html/option.erb +24 -0
- data/yard-0.9.44/templates/default/tags/html/overload.erb +14 -0
- data/yard-0.9.44/templates/default/tags/html/see.erb +8 -0
- data/yard-0.9.44/templates/default/tags/html/tag.erb +20 -0
- data/yard-0.9.44/templates/default/tags/setup.rb +57 -0
- data/yard-0.9.44/templates/default/tags/text/example.erb +12 -0
- data/yard-0.9.44/templates/default/tags/text/index.erb +1 -0
- data/yard-0.9.44/templates/default/tags/text/option.erb +20 -0
- data/yard-0.9.44/templates/default/tags/text/overload.erb +19 -0
- data/yard-0.9.44/templates/default/tags/text/see.erb +11 -0
- data/yard-0.9.44/templates/default/tags/text/tag.erb +13 -0
- data/yard-0.9.44/templates/guide/class/html/setup.rb +2 -0
- data/yard-0.9.44/templates/guide/docstring/html/setup.rb +2 -0
- data/yard-0.9.44/templates/guide/fulldoc/html/css/style.css +358 -0
- data/yard-0.9.44/templates/guide/fulldoc/html/js/app.js +61 -0
- data/yard-0.9.44/templates/guide/fulldoc/html/setup.rb +74 -0
- data/yard-0.9.44/templates/guide/layout/html/layout.erb +78 -0
- data/yard-0.9.44/templates/guide/layout/html/setup.rb +25 -0
- data/yard-0.9.44/templates/guide/method/html/header.erb +18 -0
- data/yard-0.9.44/templates/guide/method/html/setup.rb +22 -0
- data/yard-0.9.44/templates/guide/module/html/header.erb +7 -0
- data/yard-0.9.44/templates/guide/module/html/method_list.erb +5 -0
- data/yard-0.9.44/templates/guide/module/html/setup.rb +27 -0
- data/yard-0.9.44/templates/guide/onefile/html/files.erb +4 -0
- data/yard-0.9.44/templates/guide/onefile/html/setup.rb +6 -0
- data/yard-0.9.44/templates/guide/onefile/html/toc.erb +3 -0
- data/yard-0.9.44/templates/guide/tags/html/setup.rb +9 -0
- metadata +419 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module YARD
|
|
4
|
+
module Server
|
|
5
|
+
module Commands
|
|
6
|
+
# Include this module to get access to {#static_template_file?}
|
|
7
|
+
# and {favicon?} helpers.
|
|
8
|
+
module StaticFileHelpers
|
|
9
|
+
include Server::HTTPUtils
|
|
10
|
+
|
|
11
|
+
# Serves an empty favicon.
|
|
12
|
+
# @raise [FinishRequest] finalizes an empty body if the path matches
|
|
13
|
+
# /favicon.ico so browsers don't complain.
|
|
14
|
+
def favicon?
|
|
15
|
+
return unless request.path == '/favicon.ico'
|
|
16
|
+
headers['Content-Type'] = 'image/png'
|
|
17
|
+
self.status = 200
|
|
18
|
+
self.body = ''
|
|
19
|
+
raise FinishRequest
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Attempts to route a path to a static template file.
|
|
23
|
+
#
|
|
24
|
+
# @raise [FinishRequest] if a file was found and served
|
|
25
|
+
# @return [void]
|
|
26
|
+
def static_template_file?
|
|
27
|
+
# this const was defined in StaticFileCommand originally
|
|
28
|
+
default_mime_types = StaticFileCommand::DefaultMimeTypes
|
|
29
|
+
|
|
30
|
+
file = find_file(adapter, path)
|
|
31
|
+
|
|
32
|
+
if file
|
|
33
|
+
ext = "." + (path[/\.(\w+)$/, 1] || "html")
|
|
34
|
+
headers['Content-Type'] = mime_type(ext, default_mime_types)
|
|
35
|
+
self.body = File.read(file)
|
|
36
|
+
raise FinishRequest
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module_function
|
|
41
|
+
|
|
42
|
+
def find_file(adapter, url)
|
|
43
|
+
# this const was defined in StaticFileCommand originally
|
|
44
|
+
static_paths = StaticFileCommand::STATIC_PATHS
|
|
45
|
+
|
|
46
|
+
file = nil
|
|
47
|
+
([adapter.document_root] + static_paths.reverse).compact.each do |path_prefix|
|
|
48
|
+
file = File.join(path_prefix, url)
|
|
49
|
+
break if File.exist?(file)
|
|
50
|
+
file = nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Search in default/fulldoc/html template if nothing in static asset paths
|
|
54
|
+
assets_template = Templates::Engine.template(:default, :fulldoc, :html)
|
|
55
|
+
file || assets_template.find_file(url)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module YARD
|
|
3
|
+
module Server
|
|
4
|
+
# A module that is mixed into {Templates::Template} in order to customize
|
|
5
|
+
# certain template methods.
|
|
6
|
+
module DocServerHelper
|
|
7
|
+
# Modifies {Templates::Helpers::HtmlHelper#url_for} to return a URL instead
|
|
8
|
+
# of a disk location.
|
|
9
|
+
# @param (see Templates::Helpers::HtmlHelper#url_for)
|
|
10
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for)
|
|
11
|
+
def url_for(obj, anchor = nil, relative = false) # rubocop:disable Lint/UnusedMethodArgument
|
|
12
|
+
return '' if obj.nil?
|
|
13
|
+
return url_for_index if obj == '_index.html'
|
|
14
|
+
return abs_url(base_path(router.static_prefix), obj) if String === obj
|
|
15
|
+
url = super(obj, anchor, false)
|
|
16
|
+
return unless url
|
|
17
|
+
abs_url(base_path(router.docs_prefix), url)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Modifies {Templates::Helpers::HtmlHelper#url_for_file} to return a URL instead
|
|
21
|
+
# of a disk location.
|
|
22
|
+
# @param (see Templates::Helpers::HtmlHelper#url_for_file)
|
|
23
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for_file)
|
|
24
|
+
def url_for_file(filename, anchor = nil)
|
|
25
|
+
if filename.is_a?(CodeObjects::ExtraFileObject)
|
|
26
|
+
filename = filename.filename
|
|
27
|
+
end
|
|
28
|
+
fname = filename.sub(%r{^#{@library.source_path.to_s}/}, '')
|
|
29
|
+
fname += "##{anchor}" if anchor && !anchor.empty?
|
|
30
|
+
abs_url(base_path(router.docs_prefix), 'file', fname)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Modifies {Templates::Helpers::HtmlHelper#url_for_list} to return a URL
|
|
34
|
+
# based on the list prefix instead of a HTML filename.
|
|
35
|
+
# @param (see Templates::Helpers::HtmlHelper#url_for_list)
|
|
36
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for_list)
|
|
37
|
+
def url_for_list(type)
|
|
38
|
+
abs_url(base_path(router.list_prefix), type.to_s)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns the frames URL for the page
|
|
42
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for_frameset)
|
|
43
|
+
def url_for_frameset
|
|
44
|
+
options.file ? url_for_file(options.file) : url_for(object)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Returns the main URL, first checking a readme and then linking to the index
|
|
48
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for_main)
|
|
49
|
+
def url_for_main
|
|
50
|
+
options.readme ? url_for_file(options.readme) : url_for_index
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Returns the URL for the alphabetic index page
|
|
54
|
+
# @return (see Templates::Helpers::HtmlHelper#url_for_index)
|
|
55
|
+
def url_for_index
|
|
56
|
+
abs_url(base_path(router.docs_prefix), 'index')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# @param path_components [Array<String>] components of a URL
|
|
60
|
+
# @return [String] the absolute path from any mounted base URI.
|
|
61
|
+
def abs_url(*path_components)
|
|
62
|
+
File.join(router.request.script_name, *path_components)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @example The base path for a library 'foo'
|
|
66
|
+
# base_path('docs') # => 'docs/foo'
|
|
67
|
+
# @param [String] path the path prefix for a base path URI
|
|
68
|
+
# @return [String] the base URI for a library with an extra +path+ prefix
|
|
69
|
+
def base_path(path)
|
|
70
|
+
libname = router.request.version_supplied ? @library.to_s : @library.name
|
|
71
|
+
path + (@single_library ? '' : "/#{libname}")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# @return [Router] convenience method for accessing the router
|
|
75
|
+
def router; @adapter.router end
|
|
76
|
+
|
|
77
|
+
# @return [String] a timestamp for a given file
|
|
78
|
+
def mtime(file)
|
|
79
|
+
file = YARD::Server::Commands::StaticFileHelpers.find_file(@adapter, file)
|
|
80
|
+
file ? File.mtime(file).to_i : nil
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @return [String] a URL for a file with a timestamp
|
|
84
|
+
def mtime_url(file)
|
|
85
|
+
url = url_for(file)
|
|
86
|
+
time = mtime(file)
|
|
87
|
+
url + (time ? "?#{time}" : "")
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module YARD
|
|
3
|
+
module Server
|
|
4
|
+
# A custom {Serializers::Base serializer} which returns resource URLs instead of
|
|
5
|
+
# static relative paths to files on disk.
|
|
6
|
+
class DocServerSerializer < Serializers::FileSystemSerializer
|
|
7
|
+
def initialize(_command = nil)
|
|
8
|
+
super(:basepath => '', :extension => '')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def serialized_path(object)
|
|
12
|
+
case object
|
|
13
|
+
when CodeObjects::RootObject
|
|
14
|
+
"toplevel"
|
|
15
|
+
when CodeObjects::ExtendedMethodObject
|
|
16
|
+
serialized_path(object.namespace) + ':' + urlencode(object.name.to_s)
|
|
17
|
+
when CodeObjects::MethodObject
|
|
18
|
+
serialized_path(object.namespace) +
|
|
19
|
+
(object.scope == :instance ? ":" : ".") + urlencode(object.name.to_s)
|
|
20
|
+
when CodeObjects::ConstantObject, CodeObjects::ClassVariableObject
|
|
21
|
+
serialized_path(object.namespace) + "##{object.name}-#{object.type}"
|
|
22
|
+
when CodeObjects::ExtraFileObject
|
|
23
|
+
super(object).gsub(/^file\./, 'file/')
|
|
24
|
+
else
|
|
25
|
+
super(object)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
def urlencode(name)
|
|
32
|
+
if name.respond_to?(:force_encoding)
|
|
33
|
+
name = name.dup.force_encoding('binary')
|
|
34
|
+
end
|
|
35
|
+
Templates::Helpers::HtmlHelper.urlencode(name)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,512 @@
|
|
|
1
|
+
# frozen_string_literal: false
|
|
2
|
+
#
|
|
3
|
+
# httputils.rb -- HTTPUtils Module
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000, 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: httputils.rb,v 1.34 2003/06/05 21:34:08 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
require 'socket'
|
|
13
|
+
require 'tempfile'
|
|
14
|
+
|
|
15
|
+
module YARD::Server
|
|
16
|
+
CR = "\x0d" # :nodoc:
|
|
17
|
+
LF = "\x0a" # :nodoc:
|
|
18
|
+
CRLF = "\x0d\x0a" # :nodoc:
|
|
19
|
+
|
|
20
|
+
##
|
|
21
|
+
# HTTPUtils provides utility methods for working with the HTTP protocol.
|
|
22
|
+
#
|
|
23
|
+
# This module is generally used internally by WEBrick
|
|
24
|
+
|
|
25
|
+
module HTTPUtils
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
# Normalizes a request path. Raises an exception if the path cannot be
|
|
29
|
+
# normalized.
|
|
30
|
+
|
|
31
|
+
def normalize_path(path)
|
|
32
|
+
raise "abnormal path `#{path}'" if path[0] != ?/
|
|
33
|
+
ret = path.dup
|
|
34
|
+
|
|
35
|
+
ret.gsub!(%r{/+}o, '/') # // => /
|
|
36
|
+
while ret.sub!(%r'/\.(?:/|\Z)', '/'); end # /. => /
|
|
37
|
+
while ret.sub!(%r'/(?!\.\./)[^/]+/\.\.(?:/|\Z)', '/'); end # /foo/.. => /foo
|
|
38
|
+
|
|
39
|
+
raise "abnormal path `#{path}'" if %r{/\.\.(/|\Z)} =~ ret
|
|
40
|
+
ret
|
|
41
|
+
end
|
|
42
|
+
module_function :normalize_path
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
# Default mime types
|
|
46
|
+
|
|
47
|
+
DefaultMimeTypes = {
|
|
48
|
+
"ai" => "application/postscript",
|
|
49
|
+
"asc" => "text/plain",
|
|
50
|
+
"avi" => "video/x-msvideo",
|
|
51
|
+
"bin" => "application/octet-stream",
|
|
52
|
+
"bmp" => "image/bmp",
|
|
53
|
+
"class" => "application/octet-stream",
|
|
54
|
+
"cer" => "application/pkix-cert",
|
|
55
|
+
"crl" => "application/pkix-crl",
|
|
56
|
+
"crt" => "application/x-x509-ca-cert",
|
|
57
|
+
#"crl" => "application/x-pkcs7-crl",
|
|
58
|
+
"css" => "text/css",
|
|
59
|
+
"dms" => "application/octet-stream",
|
|
60
|
+
"doc" => "application/msword",
|
|
61
|
+
"dvi" => "application/x-dvi",
|
|
62
|
+
"eps" => "application/postscript",
|
|
63
|
+
"etx" => "text/x-setext",
|
|
64
|
+
"exe" => "application/octet-stream",
|
|
65
|
+
"gif" => "image/gif",
|
|
66
|
+
"htm" => "text/html",
|
|
67
|
+
"html" => "text/html",
|
|
68
|
+
"jpe" => "image/jpeg",
|
|
69
|
+
"jpeg" => "image/jpeg",
|
|
70
|
+
"jpg" => "image/jpeg",
|
|
71
|
+
"js" => "application/javascript",
|
|
72
|
+
"json" => "application/json",
|
|
73
|
+
"lha" => "application/octet-stream",
|
|
74
|
+
"lzh" => "application/octet-stream",
|
|
75
|
+
"mjs" => "application/javascript",
|
|
76
|
+
"mov" => "video/quicktime",
|
|
77
|
+
"mpe" => "video/mpeg",
|
|
78
|
+
"mpeg" => "video/mpeg",
|
|
79
|
+
"mpg" => "video/mpeg",
|
|
80
|
+
"pbm" => "image/x-portable-bitmap",
|
|
81
|
+
"pdf" => "application/pdf",
|
|
82
|
+
"pgm" => "image/x-portable-graymap",
|
|
83
|
+
"png" => "image/png",
|
|
84
|
+
"pnm" => "image/x-portable-anymap",
|
|
85
|
+
"ppm" => "image/x-portable-pixmap",
|
|
86
|
+
"ppt" => "application/vnd.ms-powerpoint",
|
|
87
|
+
"ps" => "application/postscript",
|
|
88
|
+
"qt" => "video/quicktime",
|
|
89
|
+
"ras" => "image/x-cmu-raster",
|
|
90
|
+
"rb" => "text/plain",
|
|
91
|
+
"rd" => "text/plain",
|
|
92
|
+
"rtf" => "application/rtf",
|
|
93
|
+
"sgm" => "text/sgml",
|
|
94
|
+
"sgml" => "text/sgml",
|
|
95
|
+
"svg" => "image/svg+xml",
|
|
96
|
+
"tif" => "image/tiff",
|
|
97
|
+
"tiff" => "image/tiff",
|
|
98
|
+
"txt" => "text/plain",
|
|
99
|
+
"wasm" => "application/wasm",
|
|
100
|
+
"xbm" => "image/x-xbitmap",
|
|
101
|
+
"xhtml" => "text/html",
|
|
102
|
+
"xls" => "application/vnd.ms-excel",
|
|
103
|
+
"xml" => "text/xml",
|
|
104
|
+
"xpm" => "image/x-xpixmap",
|
|
105
|
+
"xwd" => "image/x-xwindowdump",
|
|
106
|
+
"zip" => "application/zip",
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
##
|
|
110
|
+
# Loads Apache-compatible mime.types in +file+.
|
|
111
|
+
|
|
112
|
+
def load_mime_types(file)
|
|
113
|
+
# note: +file+ may be a "| command" for now; some people may
|
|
114
|
+
# rely on this, but currently we do not use this method by default.
|
|
115
|
+
open(file){ |io|
|
|
116
|
+
hash = Hash.new
|
|
117
|
+
io.each{ |line|
|
|
118
|
+
next if /^#/ =~ line
|
|
119
|
+
line.chomp!
|
|
120
|
+
mimetype, ext0 = line.split(/\s+/, 2)
|
|
121
|
+
next unless ext0
|
|
122
|
+
next if ext0.empty?
|
|
123
|
+
ext0.split(/\s+/).each{ |ext| hash[ext] = mimetype }
|
|
124
|
+
}
|
|
125
|
+
hash
|
|
126
|
+
}
|
|
127
|
+
end
|
|
128
|
+
module_function :load_mime_types
|
|
129
|
+
|
|
130
|
+
##
|
|
131
|
+
# Returns the mime type of +filename+ from the list in +mime_tab+. If no
|
|
132
|
+
# mime type was found application/octet-stream is returned.
|
|
133
|
+
|
|
134
|
+
def mime_type(filename, mime_tab)
|
|
135
|
+
suffix1 = (/\.(\w+)$/ =~ filename && $1.downcase)
|
|
136
|
+
suffix2 = (/\.(\w+)\.[\w\-]+$/ =~ filename && $1.downcase)
|
|
137
|
+
mime_tab[suffix1] || mime_tab[suffix2] || "application/octet-stream"
|
|
138
|
+
end
|
|
139
|
+
module_function :mime_type
|
|
140
|
+
|
|
141
|
+
##
|
|
142
|
+
# Parses an HTTP header +raw+ into a hash of header fields with an Array
|
|
143
|
+
# of values.
|
|
144
|
+
|
|
145
|
+
def parse_header(raw)
|
|
146
|
+
header = Hash.new([].freeze)
|
|
147
|
+
field = nil
|
|
148
|
+
raw.each_line{|line|
|
|
149
|
+
case line
|
|
150
|
+
when /^([A-Za-z0-9!\#$%&'*+\-.^_`|~]+):\s*(.*?)\s*\z/om
|
|
151
|
+
field, value = $1, $2
|
|
152
|
+
field.downcase!
|
|
153
|
+
header[field] = [] unless header.has_key?(field)
|
|
154
|
+
header[field] << value
|
|
155
|
+
when /^\s+(.*?)\s*\z/om
|
|
156
|
+
value = $1
|
|
157
|
+
unless field
|
|
158
|
+
raise HTTPStatus::BadRequest, "bad header '#{line}'."
|
|
159
|
+
end
|
|
160
|
+
header[field][-1] << " " << value
|
|
161
|
+
else
|
|
162
|
+
raise HTTPStatus::BadRequest, "bad header '#{line}'."
|
|
163
|
+
end
|
|
164
|
+
}
|
|
165
|
+
header.each{|key, values|
|
|
166
|
+
values.each(&:strip!)
|
|
167
|
+
}
|
|
168
|
+
header
|
|
169
|
+
end
|
|
170
|
+
module_function :parse_header
|
|
171
|
+
|
|
172
|
+
##
|
|
173
|
+
# Splits a header value +str+ according to HTTP specification.
|
|
174
|
+
|
|
175
|
+
def split_header_value(str)
|
|
176
|
+
str.scan(%r'\G((?:"(?:\\.|[^"])+?"|[^",]+)+)
|
|
177
|
+
(?:,\s*|\Z)'xn).flatten
|
|
178
|
+
end
|
|
179
|
+
module_function :split_header_value
|
|
180
|
+
|
|
181
|
+
##
|
|
182
|
+
# Parses a Range header value +ranges_specifier+
|
|
183
|
+
|
|
184
|
+
def parse_range_header(ranges_specifier)
|
|
185
|
+
if /^bytes=(.*)/ =~ ranges_specifier
|
|
186
|
+
byte_range_set = split_header_value($1)
|
|
187
|
+
byte_range_set.collect{|range_spec|
|
|
188
|
+
case range_spec
|
|
189
|
+
when /^(\d+)-(\d+)/ then $1.to_i .. $2.to_i
|
|
190
|
+
when /^(\d+)-/ then $1.to_i .. -1
|
|
191
|
+
when /^-(\d+)/ then -($1.to_i) .. -1
|
|
192
|
+
else return nil
|
|
193
|
+
end
|
|
194
|
+
}
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
module_function :parse_range_header
|
|
198
|
+
|
|
199
|
+
##
|
|
200
|
+
# Parses q values in +value+ as used in Accept headers.
|
|
201
|
+
|
|
202
|
+
def parse_qvalues(value)
|
|
203
|
+
tmp = []
|
|
204
|
+
if value
|
|
205
|
+
parts = value.split(/,\s*/)
|
|
206
|
+
parts.each {|part|
|
|
207
|
+
if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part)
|
|
208
|
+
val = m[1]
|
|
209
|
+
q = (m[2] or 1).to_f
|
|
210
|
+
tmp.push([val, q])
|
|
211
|
+
end
|
|
212
|
+
}
|
|
213
|
+
tmp = tmp.sort_by{|val, q| -q}
|
|
214
|
+
tmp.collect!{|val, q| val}
|
|
215
|
+
end
|
|
216
|
+
return tmp
|
|
217
|
+
end
|
|
218
|
+
module_function :parse_qvalues
|
|
219
|
+
|
|
220
|
+
##
|
|
221
|
+
# Removes quotes and escapes from +str+
|
|
222
|
+
|
|
223
|
+
def dequote(str)
|
|
224
|
+
ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
|
|
225
|
+
ret.gsub!(/\\(.)/, "\\1")
|
|
226
|
+
ret
|
|
227
|
+
end
|
|
228
|
+
module_function :dequote
|
|
229
|
+
|
|
230
|
+
##
|
|
231
|
+
# Quotes and escapes quotes in +str+
|
|
232
|
+
|
|
233
|
+
def quote(str)
|
|
234
|
+
'"' << str.gsub(/[\\\"]/o, "\\\1") << '"'
|
|
235
|
+
end
|
|
236
|
+
module_function :quote
|
|
237
|
+
|
|
238
|
+
##
|
|
239
|
+
# Stores multipart form data. FormData objects are created when
|
|
240
|
+
# WEBrick::HTTPUtils.parse_form_data is called.
|
|
241
|
+
|
|
242
|
+
class FormData < String
|
|
243
|
+
EmptyRawHeader = [].freeze # :nodoc:
|
|
244
|
+
EmptyHeader = {}.freeze # :nodoc:
|
|
245
|
+
|
|
246
|
+
##
|
|
247
|
+
# The name of the form data part
|
|
248
|
+
|
|
249
|
+
attr_accessor :name
|
|
250
|
+
|
|
251
|
+
##
|
|
252
|
+
# The filename of the form data part
|
|
253
|
+
|
|
254
|
+
attr_accessor :filename
|
|
255
|
+
|
|
256
|
+
attr_accessor :next_data # :nodoc:
|
|
257
|
+
protected :next_data
|
|
258
|
+
|
|
259
|
+
##
|
|
260
|
+
# Creates a new FormData object.
|
|
261
|
+
#
|
|
262
|
+
# +args+ is an Array of form data entries. One FormData will be created
|
|
263
|
+
# for each entry.
|
|
264
|
+
#
|
|
265
|
+
# This is called by WEBrick::HTTPUtils.parse_form_data for you
|
|
266
|
+
|
|
267
|
+
def initialize(*args)
|
|
268
|
+
@name = @filename = @next_data = nil
|
|
269
|
+
if args.empty?
|
|
270
|
+
@raw_header = []
|
|
271
|
+
@header = nil
|
|
272
|
+
super("")
|
|
273
|
+
else
|
|
274
|
+
@raw_header = EmptyRawHeader
|
|
275
|
+
@header = EmptyHeader
|
|
276
|
+
super(args.shift)
|
|
277
|
+
unless args.empty?
|
|
278
|
+
@next_data = self.class.new(*args)
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
##
|
|
284
|
+
# Retrieves the header at the first entry in +key+
|
|
285
|
+
|
|
286
|
+
def [](*key)
|
|
287
|
+
begin
|
|
288
|
+
@header[key[0].downcase].join(", ")
|
|
289
|
+
rescue StandardError, NameError
|
|
290
|
+
super
|
|
291
|
+
end
|
|
292
|
+
end
|
|
293
|
+
|
|
294
|
+
##
|
|
295
|
+
# Adds +str+ to this FormData which may be the body, a header or a
|
|
296
|
+
# header entry.
|
|
297
|
+
#
|
|
298
|
+
# This is called by WEBrick::HTTPUtils.parse_form_data for you
|
|
299
|
+
|
|
300
|
+
def <<(str)
|
|
301
|
+
if @header
|
|
302
|
+
super
|
|
303
|
+
elsif str == CRLF
|
|
304
|
+
@header = HTTPUtils::parse_header(@raw_header.join)
|
|
305
|
+
if cd = self['content-disposition']
|
|
306
|
+
if /\s+name="(.*?)"/ =~ cd then @name = $1 end
|
|
307
|
+
if /\s+filename="(.*?)"/ =~ cd then @filename = $1 end
|
|
308
|
+
end
|
|
309
|
+
else
|
|
310
|
+
@raw_header << str
|
|
311
|
+
end
|
|
312
|
+
self
|
|
313
|
+
end
|
|
314
|
+
|
|
315
|
+
##
|
|
316
|
+
# Adds +data+ at the end of the chain of entries
|
|
317
|
+
#
|
|
318
|
+
# This is called by WEBrick::HTTPUtils.parse_form_data for you.
|
|
319
|
+
|
|
320
|
+
def append_data(data)
|
|
321
|
+
tmp = self
|
|
322
|
+
while tmp
|
|
323
|
+
unless tmp.next_data
|
|
324
|
+
tmp.next_data = data
|
|
325
|
+
break
|
|
326
|
+
end
|
|
327
|
+
tmp = tmp.next_data
|
|
328
|
+
end
|
|
329
|
+
self
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
##
|
|
333
|
+
# Yields each entry in this FormData
|
|
334
|
+
|
|
335
|
+
def each_data
|
|
336
|
+
tmp = self
|
|
337
|
+
while tmp
|
|
338
|
+
next_data = tmp.next_data
|
|
339
|
+
yield(tmp)
|
|
340
|
+
tmp = next_data
|
|
341
|
+
end
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
##
|
|
345
|
+
# Returns all the FormData as an Array
|
|
346
|
+
|
|
347
|
+
def list
|
|
348
|
+
ret = []
|
|
349
|
+
each_data{|data|
|
|
350
|
+
ret << data.to_s
|
|
351
|
+
}
|
|
352
|
+
ret
|
|
353
|
+
end
|
|
354
|
+
|
|
355
|
+
##
|
|
356
|
+
# A FormData will behave like an Array
|
|
357
|
+
|
|
358
|
+
alias :to_ary :list
|
|
359
|
+
|
|
360
|
+
##
|
|
361
|
+
# This FormData's body
|
|
362
|
+
|
|
363
|
+
def to_s
|
|
364
|
+
String.new(self)
|
|
365
|
+
end
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
##
|
|
369
|
+
# Parses the query component of a URI in +str+
|
|
370
|
+
|
|
371
|
+
def parse_query(str)
|
|
372
|
+
query = Hash.new
|
|
373
|
+
if str
|
|
374
|
+
str.split(/[&;]/).each{|x|
|
|
375
|
+
next if x.empty?
|
|
376
|
+
key, val = x.split(/=/,2)
|
|
377
|
+
key = unescape_form(key)
|
|
378
|
+
val = unescape_form(val.to_s)
|
|
379
|
+
val = FormData.new(val)
|
|
380
|
+
val.name = key
|
|
381
|
+
if query.has_key?(key)
|
|
382
|
+
query[key].append_data(val)
|
|
383
|
+
next
|
|
384
|
+
end
|
|
385
|
+
query[key] = val
|
|
386
|
+
}
|
|
387
|
+
end
|
|
388
|
+
query
|
|
389
|
+
end
|
|
390
|
+
module_function :parse_query
|
|
391
|
+
|
|
392
|
+
##
|
|
393
|
+
# Parses form data in +io+ with the given +boundary+
|
|
394
|
+
|
|
395
|
+
def parse_form_data(io, boundary)
|
|
396
|
+
boundary_regexp = /\A--#{Regexp.quote(boundary)}(--)?#{CRLF}\z/
|
|
397
|
+
form_data = Hash.new
|
|
398
|
+
return form_data unless io
|
|
399
|
+
data = nil
|
|
400
|
+
io.each_line{|line|
|
|
401
|
+
if boundary_regexp =~ line
|
|
402
|
+
if data
|
|
403
|
+
data.chop!
|
|
404
|
+
key = data.name
|
|
405
|
+
if form_data.has_key?(key)
|
|
406
|
+
form_data[key].append_data(data)
|
|
407
|
+
else
|
|
408
|
+
form_data[key] = data
|
|
409
|
+
end
|
|
410
|
+
end
|
|
411
|
+
data = FormData.new
|
|
412
|
+
next
|
|
413
|
+
else
|
|
414
|
+
if data
|
|
415
|
+
data << line
|
|
416
|
+
end
|
|
417
|
+
end
|
|
418
|
+
}
|
|
419
|
+
return form_data
|
|
420
|
+
end
|
|
421
|
+
module_function :parse_form_data
|
|
422
|
+
|
|
423
|
+
#####
|
|
424
|
+
|
|
425
|
+
reserved = ';/?:@&=+$,'
|
|
426
|
+
num = '0123456789'
|
|
427
|
+
lowalpha = 'abcdefghijklmnopqrstuvwxyz'
|
|
428
|
+
upalpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
|
429
|
+
mark = '-_.!~*\'()'
|
|
430
|
+
unreserved = num + lowalpha + upalpha + mark
|
|
431
|
+
control = (0x0..0x1f).collect{|c| c.chr }.join + "\x7f"
|
|
432
|
+
space = " "
|
|
433
|
+
delims = '<>#%"'
|
|
434
|
+
unwise = '{}|\\^[]`'
|
|
435
|
+
nonascii = (0x80..0xff).collect{|c| c.chr }.join
|
|
436
|
+
|
|
437
|
+
module_function
|
|
438
|
+
|
|
439
|
+
# :stopdoc:
|
|
440
|
+
|
|
441
|
+
def _make_regex(str) /([#{Regexp.escape(str)}])/n end
|
|
442
|
+
def _make_regex!(str) /([^#{Regexp.escape(str)}])/n end
|
|
443
|
+
def _escape(str, regex)
|
|
444
|
+
str = str.b
|
|
445
|
+
str.gsub!(regex) {"%%%02X" % $1.ord}
|
|
446
|
+
# %-escaped string should contain US-ASCII only
|
|
447
|
+
str.force_encoding(Encoding::US_ASCII)
|
|
448
|
+
end
|
|
449
|
+
def _unescape(str, regex)
|
|
450
|
+
str = str.b
|
|
451
|
+
str.gsub!(regex) {$1.hex.chr}
|
|
452
|
+
# encoding of %-unescaped string is unknown
|
|
453
|
+
str
|
|
454
|
+
end
|
|
455
|
+
|
|
456
|
+
UNESCAPED = _make_regex(control+space+delims+unwise+nonascii)
|
|
457
|
+
UNESCAPED_FORM = _make_regex(reserved+control+delims+unwise+nonascii)
|
|
458
|
+
NONASCII = _make_regex(nonascii)
|
|
459
|
+
ESCAPED = /%([0-9a-fA-F]{2})/
|
|
460
|
+
UNESCAPED_PCHAR = _make_regex!(unreserved+":@&=+$,")
|
|
461
|
+
|
|
462
|
+
# :startdoc:
|
|
463
|
+
|
|
464
|
+
##
|
|
465
|
+
# Escapes HTTP reserved and unwise characters in +str+
|
|
466
|
+
|
|
467
|
+
def escape(str)
|
|
468
|
+
_escape(str, UNESCAPED)
|
|
469
|
+
end
|
|
470
|
+
|
|
471
|
+
##
|
|
472
|
+
# Unescapes HTTP reserved and unwise characters in +str+
|
|
473
|
+
|
|
474
|
+
def unescape(str)
|
|
475
|
+
_unescape(str, ESCAPED)
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
##
|
|
479
|
+
# Escapes form reserved characters in +str+
|
|
480
|
+
|
|
481
|
+
def escape_form(str)
|
|
482
|
+
ret = _escape(str, UNESCAPED_FORM)
|
|
483
|
+
ret.gsub!(/ /, "+")
|
|
484
|
+
ret
|
|
485
|
+
end
|
|
486
|
+
|
|
487
|
+
##
|
|
488
|
+
# Unescapes form reserved characters in +str+
|
|
489
|
+
|
|
490
|
+
def unescape_form(str)
|
|
491
|
+
_unescape(str.gsub(/\+/, " "), ESCAPED)
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
##
|
|
495
|
+
# Escapes path +str+
|
|
496
|
+
|
|
497
|
+
def escape_path(str)
|
|
498
|
+
result = ""
|
|
499
|
+
str.scan(%r{/([^/]*)}).each{|i|
|
|
500
|
+
result << "/" << _escape(i[0], UNESCAPED_PCHAR)
|
|
501
|
+
}
|
|
502
|
+
return result
|
|
503
|
+
end
|
|
504
|
+
|
|
505
|
+
##
|
|
506
|
+
# Escapes 8 bit characters in +str+
|
|
507
|
+
|
|
508
|
+
def escape8bit(str)
|
|
509
|
+
_escape(str, NONASCII)
|
|
510
|
+
end
|
|
511
|
+
end
|
|
512
|
+
end
|