fluid_cli 0.1.2
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.
- checksums.yaml +7 -0
- data/README.md +1 -0
- data/dev.yml +5 -0
- data/exe/fluid +24 -0
- data/lib/fluid_cli/api.rb +135 -0
- data/lib/fluid_cli/assets/post_auth_page/index.html.erb +34 -0
- data/lib/fluid_cli/assets/post_auth_page/style.css +58 -0
- data/lib/fluid_cli/command.rb +55 -0
- data/lib/fluid_cli/commands/help.rb +21 -0
- data/lib/fluid_cli/commands/login.rb +30 -0
- data/lib/fluid_cli/commands/logout.rb +38 -0
- data/lib/fluid_cli/commands/switch.rb +23 -0
- data/lib/fluid_cli/commands/theme/common/company_helper.rb +15 -0
- data/lib/fluid_cli/commands/theme/common/root_helper.rb +95 -0
- data/lib/fluid_cli/commands/theme/dev.rb +61 -0
- data/lib/fluid_cli/commands/theme/help.rb +21 -0
- data/lib/fluid_cli/commands/theme/init.rb +46 -0
- data/lib/fluid_cli/commands/theme/pull.rb +68 -0
- data/lib/fluid_cli/commands/theme/push.rb +132 -0
- data/lib/fluid_cli/commands/theme.rb +23 -0
- data/lib/fluid_cli/commands/whoami.rb +23 -0
- data/lib/fluid_cli/commands.rb +19 -0
- data/lib/fluid_cli/company_switcher.rb +69 -0
- data/lib/fluid_cli/context.rb +691 -0
- data/lib/fluid_cli/db.rb +114 -0
- data/lib/fluid_cli/entry_point.rb +10 -0
- data/lib/fluid_cli/environment.rb +32 -0
- data/lib/fluid_cli/file_system_listener.rb +29 -0
- data/lib/fluid_cli/form.rb +42 -0
- data/lib/fluid_cli/git.rb +319 -0
- data/lib/fluid_cli/http_request.rb +54 -0
- data/lib/fluid_cli/identity_auth/servlet.rb +39 -0
- data/lib/fluid_cli/identity_auth.rb +126 -0
- data/lib/fluid_cli/options.rb +38 -0
- data/lib/fluid_cli/theme/dev_server/certificate_manager.rb +79 -0
- data/lib/fluid_cli/theme/dev_server/errors.rb +9 -0
- data/lib/fluid_cli/theme/dev_server/header_hash.rb +98 -0
- data/lib/fluid_cli/theme/dev_server/hooks/file_change_hook.rb +39 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot_reload.js +28 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/theme.js +16 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/script_injector.rb +54 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload.rb +75 -0
- data/lib/fluid_cli/theme/dev_server/local_assets.rb +92 -0
- data/lib/fluid_cli/theme/dev_server/proxy.rb +235 -0
- data/lib/fluid_cli/theme/dev_server/proxy_param_builder.rb +82 -0
- data/lib/fluid_cli/theme/dev_server/reload_mode.rb +34 -0
- data/lib/fluid_cli/theme/dev_server/sse.rb +75 -0
- data/lib/fluid_cli/theme/dev_server/watcher.rb +57 -0
- data/lib/fluid_cli/theme/dev_server/web_server.rb +140 -0
- data/lib/fluid_cli/theme/dev_server.rb +289 -0
- data/lib/fluid_cli/theme/development_theme.rb +101 -0
- data/lib/fluid_cli/theme/file.rb +105 -0
- data/lib/fluid_cli/theme/forms/select.rb +33 -0
- data/lib/fluid_cli/theme/mime_type.rb +34 -0
- data/lib/fluid_cli/theme/presenters/theme_presenter.rb +49 -0
- data/lib/fluid_cli/theme/presenters/themes_presenter.rb +31 -0
- data/lib/fluid_cli/theme/root.rb +62 -0
- data/lib/fluid_cli/theme/syncer/checksums.rb +66 -0
- data/lib/fluid_cli/theme/syncer/downloader.rb +54 -0
- data/lib/fluid_cli/theme/syncer/error_reporter.rb +45 -0
- data/lib/fluid_cli/theme/syncer/merger.rb +53 -0
- data/lib/fluid_cli/theme/syncer/operation.rb +58 -0
- data/lib/fluid_cli/theme/syncer/standard_reporter.rb +32 -0
- data/lib/fluid_cli/theme/syncer/unsupported_script_warning.rb +90 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
- data/lib/fluid_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
- data/lib/fluid_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
- data/lib/fluid_cli/theme/syncer/uploader.rb +105 -0
- data/lib/fluid_cli/theme/syncer.rb +412 -0
- data/lib/fluid_cli/theme/theme.rb +186 -0
- data/lib/fluid_cli/theme/ui/sync_progress_bar.rb +22 -0
- data/lib/fluid_cli/thread_pool/job.rb +35 -0
- data/lib/fluid_cli/thread_pool.rb +49 -0
- data/lib/fluid_cli/version.rb +3 -0
- data/lib/fluid_cli.rb +59 -0
- data/vendor/deps/base64/.document +5 -0
- data/vendor/deps/base64/.gitignore +9 -0
- data/vendor/deps/base64/BSDL +22 -0
- data/vendor/deps/base64/COPYING +56 -0
- data/vendor/deps/base64/Gemfile +9 -0
- data/vendor/deps/base64/LEGAL +60 -0
- data/vendor/deps/base64/README.md +48 -0
- data/vendor/deps/base64/Rakefile +31 -0
- data/vendor/deps/base64/base64.gemspec +28 -0
- data/vendor/deps/base64/bin/console +14 -0
- data/vendor/deps/base64/bin/setup +8 -0
- data/vendor/deps/base64/lib/base64.rb +382 -0
- data/vendor/deps/base64/sig/base64.rbs +358 -0
- data/vendor/deps/base64/test/base64/test_base64.rb +115 -0
- data/vendor/deps/base64/test_sig/test_base64.rb +44 -0
- data/vendor/deps/cli-kit/REVISION +1 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/definition.rb +286 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/evaluation.rb +215 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/parser/node.rb +128 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/parser.rb +125 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/tokenizer.rb +130 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args.rb +16 -0
- data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +30 -0
- data/vendor/deps/cli-kit/lib/cli/kit/command_help.rb +268 -0
- data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +150 -0
- data/vendor/deps/cli-kit/lib/cli/kit/config.rb +137 -0
- data/vendor/deps/cli-kit/lib/cli/kit/core_ext.rb +28 -0
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +166 -0
- data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +92 -0
- data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +91 -0
- data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +92 -0
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +94 -0
- data/vendor/deps/cli-kit/lib/cli/kit/opts.rb +248 -0
- data/vendor/deps/cli-kit/lib/cli/kit/parse_args.rb +55 -0
- data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +66 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +260 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support.rb +11 -0
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +290 -0
- data/vendor/deps/cli-kit/lib/cli/kit/util.rb +118 -0
- data/vendor/deps/cli-kit/lib/cli/kit/version.rb +7 -0
- data/vendor/deps/cli-kit/lib/cli/kit.rb +139 -0
- data/vendor/deps/cli-ui/REVISION +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +218 -0
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +101 -0
- data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +219 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +67 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +179 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +152 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +127 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +286 -0
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +92 -0
- data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +64 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +132 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress_reporter.rb +209 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +583 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +36 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +381 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +48 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +602 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +79 -0
- data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +399 -0
- data/vendor/deps/cli-ui/lib/cli/ui/table.rb +83 -0
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +55 -0
- data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +106 -0
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +8 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +46 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +79 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +89 -0
- data/vendor/deps/cli-ui/lib/cli/ui/work_queue.rb +142 -0
- data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +61 -0
- data/vendor/deps/cli-ui/lib/cli/ui.rb +359 -0
- data/vendor/deps/cli-ui/vendor/reentrant_mutex.rb +78 -0
- data/vendor/deps/debug/CONTRIBUTING.md +573 -0
- data/vendor/deps/debug/Gemfile +10 -0
- data/vendor/deps/debug/LICENSE.txt +22 -0
- data/vendor/deps/debug/README.md +996 -0
- data/vendor/deps/debug/Rakefile +57 -0
- data/vendor/deps/debug/TODO.md +23 -0
- data/vendor/deps/debug/debug.gemspec +33 -0
- data/vendor/deps/debug/exe/rdbg +53 -0
- data/vendor/deps/debug/ext/debug/Makefile +273 -0
- data/vendor/deps/debug/ext/debug/debug.c +228 -0
- data/vendor/deps/debug/ext/debug/debug_version.h +1 -0
- data/vendor/deps/debug/ext/debug/extconf.rb +27 -0
- data/vendor/deps/debug/ext/debug/iseq_collector.c +93 -0
- data/vendor/deps/debug/lib/debug/abbrev_command.rb +77 -0
- data/vendor/deps/debug/lib/debug/breakpoint.rb +556 -0
- data/vendor/deps/debug/lib/debug/client.rb +263 -0
- data/vendor/deps/debug/lib/debug/color.rb +123 -0
- data/vendor/deps/debug/lib/debug/config.rb +592 -0
- data/vendor/deps/debug/lib/debug/console.rb +224 -0
- data/vendor/deps/debug/lib/debug/dap_custom/traceInspector.rb +336 -0
- data/vendor/deps/debug/lib/debug/debug.bundle +0 -0
- data/vendor/deps/debug/lib/debug/frame_info.rb +190 -0
- data/vendor/deps/debug/lib/debug/irb_integration.rb +37 -0
- data/vendor/deps/debug/lib/debug/local.rb +115 -0
- data/vendor/deps/debug/lib/debug/open.rb +13 -0
- data/vendor/deps/debug/lib/debug/open_nonstop.rb +15 -0
- data/vendor/deps/debug/lib/debug/prelude.rb +50 -0
- data/vendor/deps/debug/lib/debug/server.rb +534 -0
- data/vendor/deps/debug/lib/debug/server_cdp.rb +1348 -0
- data/vendor/deps/debug/lib/debug/server_dap.rb +1108 -0
- data/vendor/deps/debug/lib/debug/session.rb +2667 -0
- data/vendor/deps/debug/lib/debug/source_repository.rb +150 -0
- data/vendor/deps/debug/lib/debug/start.rb +5 -0
- data/vendor/deps/debug/lib/debug/thread_client.rb +1457 -0
- data/vendor/deps/debug/lib/debug/tracer.rb +241 -0
- data/vendor/deps/debug/lib/debug/version.rb +5 -0
- data/vendor/deps/debug/lib/debug.rb +9 -0
- data/vendor/deps/debug/misc/README.md.erb +660 -0
- data/vendor/deps/listen/.github/release-drafter.yml +17 -0
- data/vendor/deps/listen/.github/workflows/development.yml +67 -0
- data/vendor/deps/listen/.github/workflows/push.yml +12 -0
- data/vendor/deps/listen/.gitignore +28 -0
- data/vendor/deps/listen/.rspec +3 -0
- data/vendor/deps/listen/.rubocop.yml +283 -0
- data/vendor/deps/listen/.yardopts +11 -0
- data/vendor/deps/listen/CHANGELOG.md +1 -0
- data/vendor/deps/listen/CONTRIBUTING.md +45 -0
- data/vendor/deps/listen/Gemfile +33 -0
- data/vendor/deps/listen/Guardfile +26 -0
- data/vendor/deps/listen/LICENSE.txt +22 -0
- data/vendor/deps/listen/README.md +490 -0
- data/vendor/deps/listen/Rakefile +154 -0
- data/vendor/deps/listen/bin/listen +11 -0
- data/vendor/deps/listen/lib/listen/adapter/base.rb +129 -0
- data/vendor/deps/listen/lib/listen/adapter/bsd.rb +104 -0
- data/vendor/deps/listen/lib/listen/adapter/config.rb +31 -0
- data/vendor/deps/listen/lib/listen/adapter/darwin.rb +77 -0
- data/vendor/deps/listen/lib/listen/adapter/linux.rb +108 -0
- data/vendor/deps/listen/lib/listen/adapter/polling.rb +40 -0
- data/vendor/deps/listen/lib/listen/adapter/windows.rb +96 -0
- data/vendor/deps/listen/lib/listen/adapter.rb +43 -0
- data/vendor/deps/listen/lib/listen/backend.rb +40 -0
- data/vendor/deps/listen/lib/listen/change.rb +69 -0
- data/vendor/deps/listen/lib/listen/cli.rb +65 -0
- data/vendor/deps/listen/lib/listen/directory.rb +93 -0
- data/vendor/deps/listen/lib/listen/error.rb +11 -0
- data/vendor/deps/listen/lib/listen/event/config.rb +39 -0
- data/vendor/deps/listen/lib/listen/event/loop.rb +92 -0
- data/vendor/deps/listen/lib/listen/event/processor.rb +128 -0
- data/vendor/deps/listen/lib/listen/event/queue.rb +52 -0
- data/vendor/deps/listen/lib/listen/file.rb +95 -0
- data/vendor/deps/listen/lib/listen/fsm.rb +131 -0
- data/vendor/deps/listen/lib/listen/listener/config.rb +41 -0
- data/vendor/deps/listen/lib/listen/listener.rb +136 -0
- data/vendor/deps/listen/lib/listen/logger.rb +65 -0
- data/vendor/deps/listen/lib/listen/monotonic_time.rb +27 -0
- data/vendor/deps/listen/lib/listen/options.rb +24 -0
- data/vendor/deps/listen/lib/listen/queue_optimizer.rb +129 -0
- data/vendor/deps/listen/lib/listen/record/entry.rb +66 -0
- data/vendor/deps/listen/lib/listen/record/symlink_detector.rb +47 -0
- data/vendor/deps/listen/lib/listen/record.rb +122 -0
- data/vendor/deps/listen/lib/listen/silencer/controller.rb +50 -0
- data/vendor/deps/listen/lib/listen/silencer.rb +106 -0
- data/vendor/deps/listen/lib/listen/thread.rb +54 -0
- data/vendor/deps/listen/lib/listen/version.rb +5 -0
- data/vendor/deps/listen/lib/listen.rb +47 -0
- data/vendor/deps/listen/listen.gemspec +40 -0
- data/vendor/deps/listen/spec/acceptance/listen_spec.rb +320 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/base_spec.rb +101 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/bsd_spec.rb +13 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/config_spec.rb +122 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/darwin_spec.rb +82 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/linux_spec.rb +199 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/polling_spec.rb +83 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/windows_spec.rb +13 -0
- data/vendor/deps/listen/spec/lib/listen/adapter_spec.rb +69 -0
- data/vendor/deps/listen/spec/lib/listen/backend_spec.rb +82 -0
- data/vendor/deps/listen/spec/lib/listen/change_spec.rb +102 -0
- data/vendor/deps/listen/spec/lib/listen/cli_spec.rb +116 -0
- data/vendor/deps/listen/spec/lib/listen/directory_spec.rb +284 -0
- data/vendor/deps/listen/spec/lib/listen/event/config_spec.rb +33 -0
- data/vendor/deps/listen/spec/lib/listen/event/loop_spec.rb +118 -0
- data/vendor/deps/listen/spec/lib/listen/event/processor_spec.rb +250 -0
- data/vendor/deps/listen/spec/lib/listen/event/queue_spec.rb +118 -0
- data/vendor/deps/listen/spec/lib/listen/file_spec.rb +254 -0
- data/vendor/deps/listen/spec/lib/listen/fsm_spec.rb +147 -0
- data/vendor/deps/listen/spec/lib/listen/listener/config_spec.rb +29 -0
- data/vendor/deps/listen/spec/lib/listen/listener_spec.rb +321 -0
- data/vendor/deps/listen/spec/lib/listen/logger_spec.rb +212 -0
- data/vendor/deps/listen/spec/lib/listen/monotonic_time_spec.rb +58 -0
- data/vendor/deps/listen/spec/lib/listen/queue_optimizer_spec.rb +111 -0
- data/vendor/deps/listen/spec/lib/listen/record_spec.rb +424 -0
- data/vendor/deps/listen/spec/lib/listen/silencer/controller_spec.rb +97 -0
- data/vendor/deps/listen/spec/lib/listen/silencer_spec.rb +109 -0
- data/vendor/deps/listen/spec/lib/listen/thread_spec.rb +133 -0
- data/vendor/deps/listen/spec/lib/listen_spec.rb +25 -0
- data/vendor/deps/listen/spec/spec_helper.rb +49 -0
- data/vendor/deps/listen/spec/support/acceptance_helper.rb +260 -0
- data/vendor/deps/listen/spec/support/fixtures_helper.rb +32 -0
- data/vendor/deps/listen/spec/support/platform_helper.rb +17 -0
- data/vendor/deps/observer/.github/dependabot.yml +6 -0
- data/vendor/deps/observer/.github/workflows/test.yml +33 -0
- data/vendor/deps/observer/.gitignore +8 -0
- data/vendor/deps/observer/BSDL +22 -0
- data/vendor/deps/observer/COPYING +56 -0
- data/vendor/deps/observer/Gemfile +9 -0
- data/vendor/deps/observer/README.md +139 -0
- data/vendor/deps/observer/Rakefile +10 -0
- data/vendor/deps/observer/bin/console +14 -0
- data/vendor/deps/observer/bin/setup +8 -0
- data/vendor/deps/observer/lib/observer.rb +229 -0
- data/vendor/deps/observer/observer.gemspec +32 -0
- data/vendor/deps/observer/test/test_observer.rb +66 -0
- data/vendor/deps/webrick/.gitignore +9 -0
- data/vendor/deps/webrick/Gemfile +3 -0
- data/vendor/deps/webrick/LICENSE.txt +22 -0
- data/vendor/deps/webrick/README.md +61 -0
- data/vendor/deps/webrick/Rakefile +10 -0
- data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
- data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
- data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
- data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
- data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
- data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
- data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
- data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
- data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
- data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
- data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
- data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
- data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
- data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
- data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
- data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
- data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
- data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
- data/vendor/deps/webrick/lib/webrick.rb +232 -0
- data/vendor/deps/webrick/webrick.gemspec +74 -0
- metadata +412 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# ssl.rb -- SSL/TLS enhancement for GenericServer
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2003 GOTOU Yuuzou All rights reserved.
|
|
6
|
+
#
|
|
7
|
+
# $Id$
|
|
8
|
+
|
|
9
|
+
require 'webrick'
|
|
10
|
+
require 'openssl'
|
|
11
|
+
|
|
12
|
+
module WEBrick
|
|
13
|
+
module Config
|
|
14
|
+
svrsoft = General[:ServerSoftware]
|
|
15
|
+
osslv = ::OpenSSL::OPENSSL_VERSION.split[1]
|
|
16
|
+
|
|
17
|
+
##
|
|
18
|
+
# Default SSL server configuration.
|
|
19
|
+
#
|
|
20
|
+
# WEBrick can automatically create a self-signed certificate if
|
|
21
|
+
# <code>:SSLCertName</code> is set. For more information on the various
|
|
22
|
+
# SSL options see OpenSSL::SSL::SSLContext.
|
|
23
|
+
#
|
|
24
|
+
# :ServerSoftware ::
|
|
25
|
+
# The server software name used in the Server: header.
|
|
26
|
+
# :SSLEnable :: false,
|
|
27
|
+
# Enable SSL for this server. Defaults to false.
|
|
28
|
+
# :SSLCertificate ::
|
|
29
|
+
# The SSL certificate for the server.
|
|
30
|
+
# :SSLPrivateKey ::
|
|
31
|
+
# The SSL private key for the server certificate.
|
|
32
|
+
# :SSLClientCA :: nil,
|
|
33
|
+
# Array of certificates that will be sent to the client.
|
|
34
|
+
# :SSLExtraChainCert :: nil,
|
|
35
|
+
# Array of certificates that will be added to the certificate chain
|
|
36
|
+
# :SSLCACertificateFile :: nil,
|
|
37
|
+
# Path to a CA certificate file
|
|
38
|
+
# :SSLCACertificatePath :: nil,
|
|
39
|
+
# Path to a directory containing CA certificates
|
|
40
|
+
# :SSLCertificateStore :: nil,
|
|
41
|
+
# OpenSSL::X509::Store used for certificate validation of the client
|
|
42
|
+
# :SSLTmpDhCallback :: nil,
|
|
43
|
+
# Callback invoked when DH parameters are required.
|
|
44
|
+
# :SSLVerifyClient ::
|
|
45
|
+
# Sets whether the client is verified. This defaults to VERIFY_NONE
|
|
46
|
+
# which is typical for an HTTPS server.
|
|
47
|
+
# :SSLVerifyDepth ::
|
|
48
|
+
# Number of CA certificates to walk when verifying a certificate chain
|
|
49
|
+
# :SSLVerifyCallback ::
|
|
50
|
+
# Custom certificate verification callback
|
|
51
|
+
# :SSLServerNameCallback::
|
|
52
|
+
# Custom servername indication callback
|
|
53
|
+
# :SSLTimeout ::
|
|
54
|
+
# Maximum session lifetime
|
|
55
|
+
# :SSLOptions ::
|
|
56
|
+
# Various SSL options
|
|
57
|
+
# :SSLCiphers ::
|
|
58
|
+
# Ciphers to be used
|
|
59
|
+
# :SSLStartImmediately ::
|
|
60
|
+
# Immediately start SSL upon connection? Defaults to true
|
|
61
|
+
# :SSLCertName ::
|
|
62
|
+
# SSL certificate name. Must be set to enable automatic certificate
|
|
63
|
+
# creation.
|
|
64
|
+
# :SSLCertComment ::
|
|
65
|
+
# Comment used during automatic certificate creation.
|
|
66
|
+
|
|
67
|
+
SSL = {
|
|
68
|
+
:ServerSoftware => "#{svrsoft} OpenSSL/#{osslv}",
|
|
69
|
+
:SSLEnable => false,
|
|
70
|
+
:SSLCertificate => nil,
|
|
71
|
+
:SSLPrivateKey => nil,
|
|
72
|
+
:SSLClientCA => nil,
|
|
73
|
+
:SSLExtraChainCert => nil,
|
|
74
|
+
:SSLCACertificateFile => nil,
|
|
75
|
+
:SSLCACertificatePath => nil,
|
|
76
|
+
:SSLCertificateStore => nil,
|
|
77
|
+
:SSLTmpDhCallback => nil,
|
|
78
|
+
:SSLVerifyClient => ::OpenSSL::SSL::VERIFY_NONE,
|
|
79
|
+
:SSLVerifyDepth => nil,
|
|
80
|
+
:SSLVerifyCallback => nil, # custom verification
|
|
81
|
+
:SSLTimeout => nil,
|
|
82
|
+
:SSLOptions => nil,
|
|
83
|
+
:SSLCiphers => nil,
|
|
84
|
+
:SSLStartImmediately => true,
|
|
85
|
+
# Must specify if you use auto generated certificate.
|
|
86
|
+
:SSLCertName => nil,
|
|
87
|
+
:SSLCertComment => "Generated by Ruby/OpenSSL"
|
|
88
|
+
}
|
|
89
|
+
General.update(SSL)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
module Utils
|
|
93
|
+
##
|
|
94
|
+
# Creates a self-signed certificate with the given number of +bits+,
|
|
95
|
+
# the issuer +cn+ and a +comment+ to be stored in the certificate.
|
|
96
|
+
|
|
97
|
+
def create_self_signed_cert(bits, cn, comment)
|
|
98
|
+
rsa = OpenSSL::PKey::RSA.new(bits){|p, n|
|
|
99
|
+
case p
|
|
100
|
+
when 0; $stderr.putc "." # BN_generate_prime
|
|
101
|
+
when 1; $stderr.putc "+" # BN_generate_prime
|
|
102
|
+
when 2; $stderr.putc "*" # searching good prime,
|
|
103
|
+
# n = #of try,
|
|
104
|
+
# but also data from BN_generate_prime
|
|
105
|
+
when 3; $stderr.putc "\n" # found good prime, n==0 - p, n==1 - q,
|
|
106
|
+
# but also data from BN_generate_prime
|
|
107
|
+
else; $stderr.putc "*" # BN_generate_prime
|
|
108
|
+
end
|
|
109
|
+
}
|
|
110
|
+
cert = OpenSSL::X509::Certificate.new
|
|
111
|
+
cert.version = 2
|
|
112
|
+
cert.serial = 1
|
|
113
|
+
name = (cn.kind_of? String) ? OpenSSL::X509::Name.parse(cn)
|
|
114
|
+
: OpenSSL::X509::Name.new(cn)
|
|
115
|
+
cert.subject = name
|
|
116
|
+
cert.issuer = name
|
|
117
|
+
cert.not_before = Time.now
|
|
118
|
+
cert.not_after = Time.now + (365*24*60*60)
|
|
119
|
+
cert.public_key = rsa.public_key
|
|
120
|
+
|
|
121
|
+
ef = OpenSSL::X509::ExtensionFactory.new(nil,cert)
|
|
122
|
+
ef.issuer_certificate = cert
|
|
123
|
+
cert.extensions = [
|
|
124
|
+
ef.create_extension("basicConstraints","CA:FALSE"),
|
|
125
|
+
ef.create_extension("keyUsage", "keyEncipherment, digitalSignature, keyAgreement, dataEncipherment"),
|
|
126
|
+
ef.create_extension("subjectKeyIdentifier", "hash"),
|
|
127
|
+
ef.create_extension("extendedKeyUsage", "serverAuth"),
|
|
128
|
+
ef.create_extension("nsComment", comment),
|
|
129
|
+
]
|
|
130
|
+
aki = ef.create_extension("authorityKeyIdentifier",
|
|
131
|
+
"keyid:always,issuer:always")
|
|
132
|
+
cert.add_extension(aki)
|
|
133
|
+
cert.sign(rsa, "SHA256")
|
|
134
|
+
|
|
135
|
+
return [ cert, rsa ]
|
|
136
|
+
end
|
|
137
|
+
module_function :create_self_signed_cert
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
##
|
|
141
|
+
#--
|
|
142
|
+
# Updates WEBrick::GenericServer with SSL functionality
|
|
143
|
+
|
|
144
|
+
class GenericServer
|
|
145
|
+
|
|
146
|
+
##
|
|
147
|
+
# SSL context for the server when run in SSL mode
|
|
148
|
+
|
|
149
|
+
def ssl_context # :nodoc:
|
|
150
|
+
@ssl_context ||= begin
|
|
151
|
+
if @config[:SSLEnable]
|
|
152
|
+
ssl_context = setup_ssl_context(@config)
|
|
153
|
+
@logger.info("\n" + @config[:SSLCertificate].to_text)
|
|
154
|
+
ssl_context
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
undef listen
|
|
160
|
+
|
|
161
|
+
##
|
|
162
|
+
# Updates +listen+ to enable SSL when the SSL configuration is active.
|
|
163
|
+
|
|
164
|
+
def listen(address, port) # :nodoc:
|
|
165
|
+
listeners = Utils::create_listeners(address, port)
|
|
166
|
+
if @config[:SSLEnable]
|
|
167
|
+
listeners.collect!{|svr|
|
|
168
|
+
ssvr = ::OpenSSL::SSL::SSLServer.new(svr, ssl_context)
|
|
169
|
+
ssvr.start_immediately = @config[:SSLStartImmediately]
|
|
170
|
+
ssvr
|
|
171
|
+
}
|
|
172
|
+
end
|
|
173
|
+
@listeners += listeners
|
|
174
|
+
setup_shutdown_pipe
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
##
|
|
178
|
+
# Sets up an SSL context for +config+
|
|
179
|
+
|
|
180
|
+
def setup_ssl_context(config) # :nodoc:
|
|
181
|
+
unless config[:SSLCertificate]
|
|
182
|
+
cn = config[:SSLCertName]
|
|
183
|
+
comment = config[:SSLCertComment]
|
|
184
|
+
cert, key = Utils::create_self_signed_cert(2048, cn, comment)
|
|
185
|
+
config[:SSLCertificate] = cert
|
|
186
|
+
config[:SSLPrivateKey] = key
|
|
187
|
+
end
|
|
188
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
|
189
|
+
ctx.key = config[:SSLPrivateKey]
|
|
190
|
+
ctx.cert = config[:SSLCertificate]
|
|
191
|
+
ctx.client_ca = config[:SSLClientCA]
|
|
192
|
+
ctx.extra_chain_cert = config[:SSLExtraChainCert]
|
|
193
|
+
ctx.ca_file = config[:SSLCACertificateFile]
|
|
194
|
+
ctx.ca_path = config[:SSLCACertificatePath]
|
|
195
|
+
ctx.cert_store = config[:SSLCertificateStore]
|
|
196
|
+
ctx.tmp_dh_callback = config[:SSLTmpDhCallback]
|
|
197
|
+
ctx.verify_mode = config[:SSLVerifyClient]
|
|
198
|
+
ctx.verify_depth = config[:SSLVerifyDepth]
|
|
199
|
+
ctx.verify_callback = config[:SSLVerifyCallback]
|
|
200
|
+
ctx.servername_cb = config[:SSLServerNameCallback] || proc { |args| ssl_servername_callback(*args) }
|
|
201
|
+
ctx.timeout = config[:SSLTimeout]
|
|
202
|
+
ctx.options = config[:SSLOptions]
|
|
203
|
+
ctx.ciphers = config[:SSLCiphers]
|
|
204
|
+
ctx
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
##
|
|
208
|
+
# ServerNameIndication callback
|
|
209
|
+
|
|
210
|
+
def ssl_servername_callback(sslsocket, hostname = nil)
|
|
211
|
+
# default
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
215
|
+
end
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#
|
|
3
|
+
# utils.rb -- Miscellaneous utilities
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2001 TAKAHASHI Masayoshi, GOTOU Yuuzou
|
|
7
|
+
# Copyright (c) 2002 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: utils.rb,v 1.10 2003/02/16 22:22:54 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
require 'socket'
|
|
13
|
+
require 'io/nonblock'
|
|
14
|
+
require 'etc'
|
|
15
|
+
|
|
16
|
+
module WEBrick
|
|
17
|
+
module Utils
|
|
18
|
+
##
|
|
19
|
+
# Sets IO operations on +io+ to be non-blocking
|
|
20
|
+
def set_non_blocking(io)
|
|
21
|
+
io.nonblock = true if io.respond_to?(:nonblock=)
|
|
22
|
+
end
|
|
23
|
+
module_function :set_non_blocking
|
|
24
|
+
|
|
25
|
+
##
|
|
26
|
+
# Sets the close on exec flag for +io+
|
|
27
|
+
def set_close_on_exec(io)
|
|
28
|
+
io.close_on_exec = true if io.respond_to?(:close_on_exec=)
|
|
29
|
+
end
|
|
30
|
+
module_function :set_close_on_exec
|
|
31
|
+
|
|
32
|
+
##
|
|
33
|
+
# Changes the process's uid and gid to the ones of +user+
|
|
34
|
+
def su(user)
|
|
35
|
+
if pw = Etc.getpwnam(user)
|
|
36
|
+
Process::initgroups(user, pw.gid)
|
|
37
|
+
Process::Sys::setgid(pw.gid)
|
|
38
|
+
Process::Sys::setuid(pw.uid)
|
|
39
|
+
else
|
|
40
|
+
warn("WEBrick::Utils::su doesn't work on this platform", uplevel: 1)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
module_function :su
|
|
44
|
+
|
|
45
|
+
##
|
|
46
|
+
# The server hostname
|
|
47
|
+
def getservername
|
|
48
|
+
Socket::gethostname
|
|
49
|
+
end
|
|
50
|
+
module_function :getservername
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
# Creates TCP server sockets bound to +address+:+port+ and returns them.
|
|
54
|
+
#
|
|
55
|
+
# It will create IPV4 and IPV6 sockets on all interfaces.
|
|
56
|
+
def create_listeners(address, port)
|
|
57
|
+
unless port
|
|
58
|
+
raise ArgumentError, "must specify port"
|
|
59
|
+
end
|
|
60
|
+
sockets = Socket.tcp_server_sockets(address, port)
|
|
61
|
+
sockets = sockets.map {|s|
|
|
62
|
+
s.autoclose = false
|
|
63
|
+
ts = TCPServer.for_fd(s.fileno)
|
|
64
|
+
s.close
|
|
65
|
+
ts
|
|
66
|
+
}
|
|
67
|
+
return sockets
|
|
68
|
+
end
|
|
69
|
+
module_function :create_listeners
|
|
70
|
+
|
|
71
|
+
##
|
|
72
|
+
# Characters used to generate random strings
|
|
73
|
+
RAND_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
|
|
74
|
+
"0123456789" +
|
|
75
|
+
"abcdefghijklmnopqrstuvwxyz"
|
|
76
|
+
|
|
77
|
+
##
|
|
78
|
+
# Generates a random string of length +len+
|
|
79
|
+
def random_string(len)
|
|
80
|
+
rand_max = RAND_CHARS.bytesize
|
|
81
|
+
ret = +""
|
|
82
|
+
len.times{ ret << RAND_CHARS[rand(rand_max)] }
|
|
83
|
+
ret
|
|
84
|
+
end
|
|
85
|
+
module_function :random_string
|
|
86
|
+
|
|
87
|
+
###########
|
|
88
|
+
|
|
89
|
+
require "timeout"
|
|
90
|
+
require "singleton"
|
|
91
|
+
|
|
92
|
+
##
|
|
93
|
+
# Class used to manage timeout handlers across multiple threads.
|
|
94
|
+
#
|
|
95
|
+
# Timeout handlers should be managed by using the class methods which are
|
|
96
|
+
# synchronized.
|
|
97
|
+
#
|
|
98
|
+
# id = TimeoutHandler.register(10, Timeout::Error)
|
|
99
|
+
# begin
|
|
100
|
+
# sleep 20
|
|
101
|
+
# puts 'foo'
|
|
102
|
+
# ensure
|
|
103
|
+
# TimeoutHandler.cancel(id)
|
|
104
|
+
# end
|
|
105
|
+
#
|
|
106
|
+
# will raise Timeout::Error
|
|
107
|
+
#
|
|
108
|
+
# id = TimeoutHandler.register(10, Timeout::Error)
|
|
109
|
+
# begin
|
|
110
|
+
# sleep 5
|
|
111
|
+
# puts 'foo'
|
|
112
|
+
# ensure
|
|
113
|
+
# TimeoutHandler.cancel(id)
|
|
114
|
+
# end
|
|
115
|
+
#
|
|
116
|
+
# will print 'foo'
|
|
117
|
+
#
|
|
118
|
+
class TimeoutHandler
|
|
119
|
+
include Singleton
|
|
120
|
+
|
|
121
|
+
##
|
|
122
|
+
# Mutex used to synchronize access across threads
|
|
123
|
+
TimeoutMutex = Thread::Mutex.new # :nodoc:
|
|
124
|
+
|
|
125
|
+
##
|
|
126
|
+
# Registers a new timeout handler
|
|
127
|
+
#
|
|
128
|
+
# +time+:: Timeout in seconds
|
|
129
|
+
# +exception+:: Exception to raise when timeout elapsed
|
|
130
|
+
def TimeoutHandler.register(seconds, exception)
|
|
131
|
+
at = Process.clock_gettime(Process::CLOCK_MONOTONIC) + seconds
|
|
132
|
+
instance.register(Thread.current, at, exception)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
##
|
|
136
|
+
# Cancels the timeout handler +id+
|
|
137
|
+
def TimeoutHandler.cancel(id)
|
|
138
|
+
instance.cancel(Thread.current, id)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def self.terminate
|
|
142
|
+
instance.terminate
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
##
|
|
146
|
+
# Creates a new TimeoutHandler. You should use ::register and ::cancel
|
|
147
|
+
# instead of creating the timeout handler directly.
|
|
148
|
+
def initialize
|
|
149
|
+
TimeoutMutex.synchronize{
|
|
150
|
+
@timeout_info = Hash.new
|
|
151
|
+
}
|
|
152
|
+
@queue = Thread::Queue.new
|
|
153
|
+
@watcher = nil
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
# :nodoc:
|
|
157
|
+
private \
|
|
158
|
+
def watch
|
|
159
|
+
to_interrupt = []
|
|
160
|
+
while true
|
|
161
|
+
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
162
|
+
wakeup = nil
|
|
163
|
+
to_interrupt.clear
|
|
164
|
+
TimeoutMutex.synchronize{
|
|
165
|
+
@timeout_info.each {|thread, ary|
|
|
166
|
+
next unless ary
|
|
167
|
+
ary.each{|info|
|
|
168
|
+
time, exception = *info
|
|
169
|
+
if time < now
|
|
170
|
+
to_interrupt.push [thread, info.object_id, exception]
|
|
171
|
+
elsif !wakeup || time < wakeup
|
|
172
|
+
wakeup = time
|
|
173
|
+
end
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
to_interrupt.each {|arg| interrupt(*arg)}
|
|
178
|
+
if !wakeup
|
|
179
|
+
@queue.pop
|
|
180
|
+
elsif (wakeup -= now) > 0
|
|
181
|
+
begin
|
|
182
|
+
(th = Thread.start {@queue.pop}).join(wakeup)
|
|
183
|
+
ensure
|
|
184
|
+
th&.kill&.join
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
@queue.clear
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
# :nodoc:
|
|
192
|
+
private \
|
|
193
|
+
def watcher
|
|
194
|
+
(w = @watcher)&.alive? and return w # usual case
|
|
195
|
+
TimeoutMutex.synchronize{
|
|
196
|
+
(w = @watcher)&.alive? and next w # pathological check
|
|
197
|
+
@watcher = Thread.start(&method(:watch))
|
|
198
|
+
}
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
##
|
|
202
|
+
# Interrupts the timeout handler +id+ and raises +exception+
|
|
203
|
+
def interrupt(thread, id, exception)
|
|
204
|
+
if cancel(thread, id) && thread.alive?
|
|
205
|
+
thread.raise(exception, "execution timeout")
|
|
206
|
+
end
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
##
|
|
210
|
+
# Registers a new timeout handler
|
|
211
|
+
#
|
|
212
|
+
# +time+:: Timeout in seconds
|
|
213
|
+
# +exception+:: Exception to raise when timeout elapsed
|
|
214
|
+
def register(thread, time, exception)
|
|
215
|
+
info = nil
|
|
216
|
+
TimeoutMutex.synchronize{
|
|
217
|
+
(@timeout_info[thread] ||= []) << (info = [time, exception])
|
|
218
|
+
}
|
|
219
|
+
@queue.push nil
|
|
220
|
+
watcher
|
|
221
|
+
return info.object_id
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
##
|
|
225
|
+
# Cancels the timeout handler +id+
|
|
226
|
+
def cancel(thread, id)
|
|
227
|
+
TimeoutMutex.synchronize{
|
|
228
|
+
if ary = @timeout_info[thread]
|
|
229
|
+
ary.delete_if{|info| info.object_id == id }
|
|
230
|
+
if ary.empty?
|
|
231
|
+
@timeout_info.delete(thread)
|
|
232
|
+
end
|
|
233
|
+
return true
|
|
234
|
+
end
|
|
235
|
+
return false
|
|
236
|
+
}
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
##
|
|
240
|
+
def terminate
|
|
241
|
+
TimeoutMutex.synchronize{
|
|
242
|
+
@timeout_info.clear
|
|
243
|
+
@watcher&.kill&.join
|
|
244
|
+
}
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
##
|
|
249
|
+
# Executes the passed block and raises +exception+ if execution takes more
|
|
250
|
+
# than +seconds+.
|
|
251
|
+
#
|
|
252
|
+
# If +seconds+ is zero or nil, simply executes the block
|
|
253
|
+
def timeout(seconds, exception=Timeout::Error)
|
|
254
|
+
return yield if seconds.nil? or seconds.zero?
|
|
255
|
+
# raise ThreadError, "timeout within critical session" if Thread.critical
|
|
256
|
+
id = TimeoutHandler.register(seconds, exception)
|
|
257
|
+
begin
|
|
258
|
+
yield(seconds)
|
|
259
|
+
ensure
|
|
260
|
+
TimeoutHandler.cancel(id)
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
module_function :timeout
|
|
264
|
+
end
|
|
265
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
#--
|
|
3
|
+
# version.rb -- version and release date
|
|
4
|
+
#
|
|
5
|
+
# Author: IPR -- Internet Programming with Ruby -- writers
|
|
6
|
+
# Copyright (c) 2000 TAKAHASHI Masayoshi, GOTOU YUUZOU
|
|
7
|
+
# Copyright (c) 2003 Internet Programming with Ruby writers. All rights
|
|
8
|
+
# reserved.
|
|
9
|
+
#
|
|
10
|
+
# $IPR: version.rb,v 1.74 2003/07/22 19:20:43 gotoyuzo Exp $
|
|
11
|
+
|
|
12
|
+
module WEBrick
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
# The WEBrick version
|
|
16
|
+
|
|
17
|
+
VERSION = "1.7.0"
|
|
18
|
+
end
|