bundler-plus 4.0.15
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/CHANGELOG.md +5670 -0
- data/LICENSE.md +22 -0
- data/README.md +58 -0
- data/bundler.gemspec +46 -0
- data/exe/bundle +29 -0
- data/exe/bundler +4 -0
- data/lib/bundler/.document +1 -0
- data/lib/bundler/build_metadata.rb +44 -0
- data/lib/bundler/capistrano.rb +4 -0
- data/lib/bundler/checksum.rb +270 -0
- data/lib/bundler/ci_detector.rb +75 -0
- data/lib/bundler/cli/add.rb +62 -0
- data/lib/bundler/cli/binstubs.rb +57 -0
- data/lib/bundler/cli/cache.rb +32 -0
- data/lib/bundler/cli/check.rb +40 -0
- data/lib/bundler/cli/clean.rb +25 -0
- data/lib/bundler/cli/common.rb +161 -0
- data/lib/bundler/cli/config.rb +208 -0
- data/lib/bundler/cli/console.rb +47 -0
- data/lib/bundler/cli/doctor/diagnose.rb +167 -0
- data/lib/bundler/cli/doctor/ssl.rb +249 -0
- data/lib/bundler/cli/doctor.rb +33 -0
- data/lib/bundler/cli/exec.rb +114 -0
- data/lib/bundler/cli/fund.rb +36 -0
- data/lib/bundler/cli/gem.rb +493 -0
- data/lib/bundler/cli/info.rb +83 -0
- data/lib/bundler/cli/init.rb +51 -0
- data/lib/bundler/cli/install.rb +127 -0
- data/lib/bundler/cli/issue.rb +41 -0
- data/lib/bundler/cli/list.rb +97 -0
- data/lib/bundler/cli/lock.rb +94 -0
- data/lib/bundler/cli/open.rb +29 -0
- data/lib/bundler/cli/outdated.rb +337 -0
- data/lib/bundler/cli/platform.rb +48 -0
- data/lib/bundler/cli/plugin.rb +39 -0
- data/lib/bundler/cli/pristine.rb +64 -0
- data/lib/bundler/cli/remove.rb +17 -0
- data/lib/bundler/cli/show.rb +71 -0
- data/lib/bundler/cli/update.rb +125 -0
- data/lib/bundler/cli.rb +829 -0
- data/lib/bundler/compact_index_client/cache.rb +96 -0
- data/lib/bundler/compact_index_client/cache_file.rb +148 -0
- data/lib/bundler/compact_index_client/parser.rb +87 -0
- data/lib/bundler/compact_index_client/updater.rb +105 -0
- data/lib/bundler/compact_index_client.rb +92 -0
- data/lib/bundler/constants.rb +14 -0
- data/lib/bundler/current_ruby.rb +94 -0
- data/lib/bundler/definition.rb +1304 -0
- data/lib/bundler/dependency.rb +151 -0
- data/lib/bundler/deployment.rb +6 -0
- data/lib/bundler/deprecate.rb +44 -0
- data/lib/bundler/digest.rb +71 -0
- data/lib/bundler/dsl.rb +642 -0
- data/lib/bundler/endpoint_specification.rb +184 -0
- data/lib/bundler/env.rb +148 -0
- data/lib/bundler/environment_preserver.rb +69 -0
- data/lib/bundler/errors.rb +277 -0
- data/lib/bundler/feature_flag.rb +20 -0
- data/lib/bundler/fetcher/base.rb +55 -0
- data/lib/bundler/fetcher/compact_index.rb +133 -0
- data/lib/bundler/fetcher/dependency.rb +85 -0
- data/lib/bundler/fetcher/downloader.rb +116 -0
- data/lib/bundler/fetcher/gem_remote_fetcher.rb +24 -0
- data/lib/bundler/fetcher/index.rb +25 -0
- data/lib/bundler/fetcher.rb +365 -0
- data/lib/bundler/force_platform.rb +16 -0
- data/lib/bundler/friendly_errors.rb +127 -0
- data/lib/bundler/gem_helper.rb +237 -0
- data/lib/bundler/gem_tasks.rb +7 -0
- data/lib/bundler/gem_version_promoter.rb +147 -0
- data/lib/bundler/index.rb +203 -0
- data/lib/bundler/injector.rb +284 -0
- data/lib/bundler/inline.rb +106 -0
- data/lib/bundler/installer/gem_installer.rb +88 -0
- data/lib/bundler/installer/parallel_installer.rb +280 -0
- data/lib/bundler/installer/standalone.rb +113 -0
- data/lib/bundler/installer.rb +241 -0
- data/lib/bundler/lazy_specification.rb +270 -0
- data/lib/bundler/lockfile_generator.rb +119 -0
- data/lib/bundler/lockfile_parser.rb +328 -0
- data/lib/bundler/man/.document +1 -0
- data/lib/bundler/man/bundle-add.1 +79 -0
- data/lib/bundler/man/bundle-add.1.ronn +92 -0
- data/lib/bundler/man/bundle-binstubs.1 +30 -0
- data/lib/bundler/man/bundle-binstubs.1.ronn +42 -0
- data/lib/bundler/man/bundle-cache.1 +56 -0
- data/lib/bundler/man/bundle-cache.1.ronn +95 -0
- data/lib/bundler/man/bundle-check.1 +21 -0
- data/lib/bundler/man/bundle-check.1.ronn +26 -0
- data/lib/bundler/man/bundle-clean.1 +17 -0
- data/lib/bundler/man/bundle-clean.1.ronn +18 -0
- data/lib/bundler/man/bundle-config.1 +339 -0
- data/lib/bundler/man/bundle-config.1.ronn +455 -0
- data/lib/bundler/man/bundle-console.1 +33 -0
- data/lib/bundler/man/bundle-console.1.ronn +39 -0
- data/lib/bundler/man/bundle-doctor.1 +69 -0
- data/lib/bundler/man/bundle-doctor.1.ronn +77 -0
- data/lib/bundler/man/bundle-env.1 +9 -0
- data/lib/bundler/man/bundle-env.1.ronn +10 -0
- data/lib/bundler/man/bundle-exec.1 +104 -0
- data/lib/bundler/man/bundle-exec.1.ronn +150 -0
- data/lib/bundler/man/bundle-fund.1 +22 -0
- data/lib/bundler/man/bundle-fund.1.ronn +25 -0
- data/lib/bundler/man/bundle-gem.1 +107 -0
- data/lib/bundler/man/bundle-gem.1.ronn +150 -0
- data/lib/bundler/man/bundle-help.1 +9 -0
- data/lib/bundler/man/bundle-help.1.ronn +12 -0
- data/lib/bundler/man/bundle-info.1 +17 -0
- data/lib/bundler/man/bundle-info.1.ronn +21 -0
- data/lib/bundler/man/bundle-init.1 +20 -0
- data/lib/bundler/man/bundle-init.1.ronn +32 -0
- data/lib/bundler/man/bundle-install.1 +178 -0
- data/lib/bundler/man/bundle-install.1.ronn +314 -0
- data/lib/bundler/man/bundle-issue.1 +45 -0
- data/lib/bundler/man/bundle-issue.1.ronn +37 -0
- data/lib/bundler/man/bundle-licenses.1 +9 -0
- data/lib/bundler/man/bundle-licenses.1.ronn +10 -0
- data/lib/bundler/man/bundle-list.1 +40 -0
- data/lib/bundler/man/bundle-list.1.ronn +41 -0
- data/lib/bundler/man/bundle-lock.1 +75 -0
- data/lib/bundler/man/bundle-lock.1.ronn +115 -0
- data/lib/bundler/man/bundle-open.1 +32 -0
- data/lib/bundler/man/bundle-open.1.ronn +28 -0
- data/lib/bundler/man/bundle-outdated.1 +106 -0
- data/lib/bundler/man/bundle-outdated.1.ronn +117 -0
- data/lib/bundler/man/bundle-platform.1 +49 -0
- data/lib/bundler/man/bundle-platform.1.ronn +49 -0
- data/lib/bundler/man/bundle-plugin.1 +76 -0
- data/lib/bundler/man/bundle-plugin.1.ronn +84 -0
- data/lib/bundler/man/bundle-pristine.1 +23 -0
- data/lib/bundler/man/bundle-pristine.1.ronn +34 -0
- data/lib/bundler/man/bundle-remove.1 +15 -0
- data/lib/bundler/man/bundle-remove.1.ronn +16 -0
- data/lib/bundler/man/bundle-show.1 +16 -0
- data/lib/bundler/man/bundle-show.1.ronn +21 -0
- data/lib/bundler/man/bundle-update.1 +284 -0
- data/lib/bundler/man/bundle-update.1.ronn +367 -0
- data/lib/bundler/man/bundle-version.1 +22 -0
- data/lib/bundler/man/bundle-version.1.ronn +24 -0
- data/lib/bundler/man/bundle.1 +93 -0
- data/lib/bundler/man/bundle.1.ronn +107 -0
- data/lib/bundler/man/gemfile.5 +503 -0
- data/lib/bundler/man/gemfile.5.ronn +586 -0
- data/lib/bundler/man/index.txt +31 -0
- data/lib/bundler/match_metadata.rb +30 -0
- data/lib/bundler/match_platform.rb +42 -0
- data/lib/bundler/match_remote_metadata.rb +29 -0
- data/lib/bundler/materialization.rb +59 -0
- data/lib/bundler/mirror.rb +221 -0
- data/lib/bundler/plugin/api/source.rb +330 -0
- data/lib/bundler/plugin/api.rb +81 -0
- data/lib/bundler/plugin/dsl.rb +53 -0
- data/lib/bundler/plugin/events.rb +85 -0
- data/lib/bundler/plugin/index.rb +203 -0
- data/lib/bundler/plugin/installer/git.rb +34 -0
- data/lib/bundler/plugin/installer/path.rb +26 -0
- data/lib/bundler/plugin/installer/rubygems.rb +19 -0
- data/lib/bundler/plugin/installer.rb +123 -0
- data/lib/bundler/plugin/source_list.rb +31 -0
- data/lib/bundler/plugin/unloaded_source.rb +25 -0
- data/lib/bundler/plugin.rb +387 -0
- data/lib/bundler/process_lock.rb +20 -0
- data/lib/bundler/remote_specification.rb +126 -0
- data/lib/bundler/resolver/base.rb +127 -0
- data/lib/bundler/resolver/candidate.rb +85 -0
- data/lib/bundler/resolver/incompatibility.rb +15 -0
- data/lib/bundler/resolver/package.rb +95 -0
- data/lib/bundler/resolver/root.rb +25 -0
- data/lib/bundler/resolver/spec_group.rb +74 -0
- data/lib/bundler/resolver/strategy.rb +43 -0
- data/lib/bundler/resolver.rb +603 -0
- data/lib/bundler/retry.rb +92 -0
- data/lib/bundler/ruby_dsl.rb +67 -0
- data/lib/bundler/ruby_version.rb +135 -0
- data/lib/bundler/rubygems_ext.rb +503 -0
- data/lib/bundler/rubygems_gem_installer.rb +206 -0
- data/lib/bundler/rubygems_integration.rb +456 -0
- data/lib/bundler/runtime.rb +331 -0
- data/lib/bundler/safe_marshal.rb +31 -0
- data/lib/bundler/self_manager.rb +197 -0
- data/lib/bundler/settings/validator.rb +86 -0
- data/lib/bundler/settings.rb +585 -0
- data/lib/bundler/setup.rb +39 -0
- data/lib/bundler/shared_helpers.rb +392 -0
- data/lib/bundler/source/gemspec.rb +19 -0
- data/lib/bundler/source/git/git_proxy.rb +509 -0
- data/lib/bundler/source/git.rb +451 -0
- data/lib/bundler/source/metadata.rb +67 -0
- data/lib/bundler/source/path/installer.rb +53 -0
- data/lib/bundler/source/path.rb +256 -0
- data/lib/bundler/source/rubygems/remote.rb +86 -0
- data/lib/bundler/source/rubygems.rb +606 -0
- data/lib/bundler/source/rubygems_aggregate.rb +71 -0
- data/lib/bundler/source.rb +120 -0
- data/lib/bundler/source_list.rb +240 -0
- data/lib/bundler/source_map.rb +72 -0
- data/lib/bundler/spec_set.rb +390 -0
- data/lib/bundler/stub_specification.rb +147 -0
- data/lib/bundler/templates/.document +1 -0
- data/lib/bundler/templates/Executable +16 -0
- data/lib/bundler/templates/Executable.standalone +14 -0
- data/lib/bundler/templates/Gemfile +5 -0
- data/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/lib/bundler/templates/newgem/CODE_OF_CONDUCT.md.tt +10 -0
- data/lib/bundler/templates/newgem/Cargo.toml.tt +13 -0
- data/lib/bundler/templates/newgem/Gemfile.tt +24 -0
- data/lib/bundler/templates/newgem/LICENSE.txt.tt +21 -0
- data/lib/bundler/templates/newgem/README.md.tt +49 -0
- data/lib/bundler/templates/newgem/Rakefile.tt +72 -0
- data/lib/bundler/templates/newgem/bin/console.tt +11 -0
- data/lib/bundler/templates/newgem/bin/setup.tt +8 -0
- data/lib/bundler/templates/newgem/circleci/config.yml.tt +37 -0
- data/lib/bundler/templates/newgem/exe/newgem.tt +3 -0
- data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +22 -0
- data/lib/bundler/templates/newgem/ext/newgem/build.rs.tt +5 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-c.rb.tt +10 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-go.rb.tt +11 -0
- data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/go.mod.tt +5 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem-go.c.tt +2 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.c.tt +9 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.go.tt +31 -0
- data/lib/bundler/templates/newgem/ext/newgem/newgem.h.tt +6 -0
- data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +23 -0
- data/lib/bundler/templates/newgem/github/workflows/build-gems.yml.tt +69 -0
- data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +48 -0
- data/lib/bundler/templates/newgem/gitignore.tt +23 -0
- data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +27 -0
- data/lib/bundler/templates/newgem/lib/newgem/version.rb.tt +9 -0
- data/lib/bundler/templates/newgem/lib/newgem.rb.tt +15 -0
- data/lib/bundler/templates/newgem/newgem.gemspec.tt +58 -0
- data/lib/bundler/templates/newgem/rspec.tt +3 -0
- data/lib/bundler/templates/newgem/rubocop.yml.tt +8 -0
- data/lib/bundler/templates/newgem/sig/newgem.rbs.tt +8 -0
- data/lib/bundler/templates/newgem/spec/newgem_spec.rb.tt +19 -0
- data/lib/bundler/templates/newgem/spec/spec_helper.rb.tt +15 -0
- data/lib/bundler/templates/newgem/standard.yml.tt +3 -0
- data/lib/bundler/templates/newgem/test/minitest/test_helper.rb.tt +6 -0
- data/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt +19 -0
- data/lib/bundler/templates/newgem/test/test-unit/newgem_test.rb.tt +15 -0
- data/lib/bundler/templates/newgem/test/test-unit/test_helper.rb.tt +6 -0
- data/lib/bundler/ui/rg_proxy.rb +19 -0
- data/lib/bundler/ui/shell.rb +191 -0
- data/lib/bundler/ui/silent.rb +96 -0
- data/lib/bundler/ui.rb +9 -0
- data/lib/bundler/uri_credentials_filter.rb +43 -0
- data/lib/bundler/uri_normalizer.rb +23 -0
- data/lib/bundler/vendor/.document +1 -0
- data/lib/bundler/vendor/connection_pool/LICENSE +20 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +227 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/version.rb +3 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +56 -0
- data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +230 -0
- data/lib/bundler/vendor/fileutils/COPYING +56 -0
- data/lib/bundler/vendor/fileutils/lib/fileutils.rb +2701 -0
- data/lib/bundler/vendor/net-http-persistent/README.rdoc +82 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/connection.rb +41 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/pool.rb +65 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent/timed_stack_multi.rb +80 -0
- data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1153 -0
- data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +169 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +150 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +61 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/strategy.rb +42 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +129 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +423 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +236 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
- data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
- data/lib/bundler/vendor/securerandom/COPYING +56 -0
- data/lib/bundler/vendor/securerandom/lib/securerandom.rb +102 -0
- data/lib/bundler/vendor/thor/LICENSE.md +20 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb +105 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb +61 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/directory.rb +108 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/empty_directory.rb +143 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +407 -0
- data/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +130 -0
- data/lib/bundler/vendor/thor/lib/thor/actions.rb +340 -0
- data/lib/bundler/vendor/thor/lib/thor/base.rb +825 -0
- data/lib/bundler/vendor/thor/lib/thor/command.rb +151 -0
- data/lib/bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access.rb +107 -0
- data/lib/bundler/vendor/thor/lib/thor/error.rb +106 -0
- data/lib/bundler/vendor/thor/lib/thor/group.rb +292 -0
- data/lib/bundler/vendor/thor/lib/thor/invocation.rb +178 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/basic.rb +37 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor/readline.rb +88 -0
- data/lib/bundler/vendor/thor/lib/thor/line_editor.rb +17 -0
- data/lib/bundler/vendor/thor/lib/thor/nested_context.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/argument.rb +86 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +195 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/option.rb +178 -0
- data/lib/bundler/vendor/thor/lib/thor/parser/options.rb +294 -0
- data/lib/bundler/vendor/thor/lib/thor/parser.rb +4 -0
- data/lib/bundler/vendor/thor/lib/thor/rake_compat.rb +72 -0
- data/lib/bundler/vendor/thor/lib/thor/runner.rb +335 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +384 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/color.rb +112 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/column_printer.rb +29 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/html.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/table_printer.rb +118 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/terminal.rb +42 -0
- data/lib/bundler/vendor/thor/lib/thor/shell/wrapped_printer.rb +38 -0
- data/lib/bundler/vendor/thor/lib/thor/shell.rb +81 -0
- data/lib/bundler/vendor/thor/lib/thor/util.rb +285 -0
- data/lib/bundler/vendor/thor/lib/thor/version.rb +3 -0
- data/lib/bundler/vendor/thor/lib/thor.rb +674 -0
- data/lib/bundler/vendor/tsort/LICENSE.txt +22 -0
- data/lib/bundler/vendor/tsort/lib/tsort.rb +455 -0
- data/lib/bundler/vendor/uri/COPYING +56 -0
- data/lib/bundler/vendor/uri/lib/uri/common.rb +922 -0
- data/lib/bundler/vendor/uri/lib/uri/file.rb +100 -0
- data/lib/bundler/vendor/uri/lib/uri/ftp.rb +267 -0
- data/lib/bundler/vendor/uri/lib/uri/generic.rb +1592 -0
- data/lib/bundler/vendor/uri/lib/uri/http.rb +137 -0
- data/lib/bundler/vendor/uri/lib/uri/https.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri/ldap.rb +261 -0
- data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +22 -0
- data/lib/bundler/vendor/uri/lib/uri/mailto.rb +293 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +547 -0
- data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +206 -0
- data/lib/bundler/vendor/uri/lib/uri/version.rb +6 -0
- data/lib/bundler/vendor/uri/lib/uri/ws.rb +83 -0
- data/lib/bundler/vendor/uri/lib/uri/wss.rb +23 -0
- data/lib/bundler/vendor/uri/lib/uri.rb +104 -0
- data/lib/bundler/vendored_fileutils.rb +4 -0
- data/lib/bundler/vendored_net_http.rb +23 -0
- data/lib/bundler/vendored_persistent.rb +11 -0
- data/lib/bundler/vendored_pub_grub.rb +4 -0
- data/lib/bundler/vendored_securerandom.rb +12 -0
- data/lib/bundler/vendored_thor.rb +8 -0
- data/lib/bundler/vendored_timeout.rb +12 -0
- data/lib/bundler/vendored_tsort.rb +4 -0
- data/lib/bundler/vendored_uri.rb +21 -0
- data/lib/bundler/version.rb +21 -0
- data/lib/bundler/vlad.rb +4 -0
- data/lib/bundler/worker.rb +125 -0
- data/lib/bundler/yaml_serializer.rb +98 -0
- data/lib/bundler.rb +691 -0
- metadata +409 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
class Bundler::Thor
|
|
2
|
+
class Option < Argument #:nodoc:
|
|
3
|
+
attr_reader :aliases, :group, :lazy_default, :hide, :repeatable
|
|
4
|
+
|
|
5
|
+
VALID_TYPES = [:boolean, :numeric, :hash, :array, :string]
|
|
6
|
+
|
|
7
|
+
def initialize(name, options = {})
|
|
8
|
+
@check_default_type = options[:check_default_type]
|
|
9
|
+
options[:required] = false unless options.key?(:required)
|
|
10
|
+
@repeatable = options.fetch(:repeatable, false)
|
|
11
|
+
super
|
|
12
|
+
@lazy_default = options[:lazy_default]
|
|
13
|
+
@group = options[:group].to_s.capitalize if options[:group]
|
|
14
|
+
@aliases = normalize_aliases(options[:aliases])
|
|
15
|
+
@hide = options[:hide]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# This parse quick options given as method_options. It makes several
|
|
19
|
+
# assumptions, but you can be more specific using the option method.
|
|
20
|
+
#
|
|
21
|
+
# parse :foo => "bar"
|
|
22
|
+
# #=> Option foo with default value bar
|
|
23
|
+
#
|
|
24
|
+
# parse [:foo, :baz] => "bar"
|
|
25
|
+
# #=> Option foo with default value bar and alias :baz
|
|
26
|
+
#
|
|
27
|
+
# parse :foo => :required
|
|
28
|
+
# #=> Required option foo without default value
|
|
29
|
+
#
|
|
30
|
+
# parse :foo => 2
|
|
31
|
+
# #=> Option foo with default value 2 and type numeric
|
|
32
|
+
#
|
|
33
|
+
# parse :foo => :numeric
|
|
34
|
+
# #=> Option foo without default value and type numeric
|
|
35
|
+
#
|
|
36
|
+
# parse :foo => true
|
|
37
|
+
# #=> Option foo with default value true and type boolean
|
|
38
|
+
#
|
|
39
|
+
# The valid types are :boolean, :numeric, :hash, :array and :string. If none
|
|
40
|
+
# is given a default type is assumed. This default type accepts arguments as
|
|
41
|
+
# string (--foo=value) or booleans (just --foo).
|
|
42
|
+
#
|
|
43
|
+
# By default all options are optional, unless :required is given.
|
|
44
|
+
#
|
|
45
|
+
def self.parse(key, value)
|
|
46
|
+
if key.is_a?(Array)
|
|
47
|
+
name, *aliases = key
|
|
48
|
+
else
|
|
49
|
+
name = key
|
|
50
|
+
aliases = []
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
name = name.to_s
|
|
54
|
+
default = value
|
|
55
|
+
|
|
56
|
+
type = case value
|
|
57
|
+
when Symbol
|
|
58
|
+
default = nil
|
|
59
|
+
if VALID_TYPES.include?(value)
|
|
60
|
+
value
|
|
61
|
+
elsif required = (value == :required) # rubocop:disable Lint/AssignmentInCondition
|
|
62
|
+
:string
|
|
63
|
+
end
|
|
64
|
+
when TrueClass, FalseClass
|
|
65
|
+
:boolean
|
|
66
|
+
when Numeric
|
|
67
|
+
:numeric
|
|
68
|
+
when Hash, Array, String
|
|
69
|
+
value.class.name.downcase.to_sym
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
new(name.to_s, required: required, type: type, default: default, aliases: aliases)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def switch_name
|
|
76
|
+
@switch_name ||= dasherized? ? name : dasherize(name)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def human_name
|
|
80
|
+
@human_name ||= dasherized? ? undasherize(name) : name
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def usage(padding = 0)
|
|
84
|
+
sample = if banner && !banner.to_s.empty?
|
|
85
|
+
"#{switch_name}=#{banner}".dup
|
|
86
|
+
else
|
|
87
|
+
switch_name
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
sample = "[#{sample}]".dup unless required?
|
|
91
|
+
|
|
92
|
+
if boolean? && name != "force" && !name.match(/\A(no|skip)[\-_]/)
|
|
93
|
+
sample << ", [#{dasherize('no-' + human_name)}], [#{dasherize('skip-' + human_name)}]"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
aliases_for_usage.ljust(padding) + sample
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def aliases_for_usage
|
|
100
|
+
if aliases.empty?
|
|
101
|
+
""
|
|
102
|
+
else
|
|
103
|
+
"#{aliases.join(', ')}, "
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def show_default?
|
|
108
|
+
case default
|
|
109
|
+
when TrueClass, FalseClass
|
|
110
|
+
true
|
|
111
|
+
else
|
|
112
|
+
super
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
VALID_TYPES.each do |type|
|
|
117
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
118
|
+
def #{type}?
|
|
119
|
+
self.type == #{type.inspect}
|
|
120
|
+
end
|
|
121
|
+
RUBY
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
protected
|
|
125
|
+
|
|
126
|
+
def validate!
|
|
127
|
+
raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
|
|
128
|
+
validate_default_type!
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def validate_default_type!
|
|
132
|
+
default_type = case @default
|
|
133
|
+
when nil
|
|
134
|
+
return
|
|
135
|
+
when TrueClass, FalseClass
|
|
136
|
+
required? ? :string : :boolean
|
|
137
|
+
when Numeric
|
|
138
|
+
:numeric
|
|
139
|
+
when Symbol
|
|
140
|
+
:string
|
|
141
|
+
when Hash, Array, String
|
|
142
|
+
@default.class.name.downcase.to_sym
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
expected_type = (@repeatable && @type != :hash) ? :array : @type
|
|
146
|
+
|
|
147
|
+
if default_type != expected_type
|
|
148
|
+
err = "Expected #{expected_type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})"
|
|
149
|
+
|
|
150
|
+
if @check_default_type
|
|
151
|
+
raise ArgumentError, err
|
|
152
|
+
elsif @check_default_type == nil
|
|
153
|
+
Bundler::Thor.deprecation_warning "#{err}.\n" +
|
|
154
|
+
"This will be rejected in the future unless you explicitly pass the options `check_default_type: false`" +
|
|
155
|
+
" or call `allow_incompatible_default_type!` in your code"
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def dasherized?
|
|
161
|
+
name.index("-") == 0
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def undasherize(str)
|
|
165
|
+
str.sub(/^-{1,2}/, "")
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def dasherize(str)
|
|
169
|
+
(str.length > 1 ? "--" : "-") + str.tr("_", "-")
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
private
|
|
173
|
+
|
|
174
|
+
def normalize_aliases(aliases)
|
|
175
|
+
Array(aliases).map { |short| short.to_s.sub(/^(?!\-)/, "-") }
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
class Bundler::Thor
|
|
2
|
+
class Options < Arguments #:nodoc:
|
|
3
|
+
LONG_RE = /^(--\w+(?:-\w+)*)$/
|
|
4
|
+
SHORT_RE = /^(-[a-z])$/i
|
|
5
|
+
EQ_RE = /^(--\w+(?:-\w+)*|-[a-z])=(.*)$/i
|
|
6
|
+
SHORT_SQ_RE = /^-([a-z]{2,})$/i # Allow either -x -v or -xv style for single char args
|
|
7
|
+
SHORT_NUM = /^(-[a-z])#{NUMERIC}$/i
|
|
8
|
+
OPTS_END = "--".freeze
|
|
9
|
+
|
|
10
|
+
# Receives a hash and makes it switches.
|
|
11
|
+
def self.to_switches(options)
|
|
12
|
+
options.map do |key, value|
|
|
13
|
+
case value
|
|
14
|
+
when true
|
|
15
|
+
"--#{key}"
|
|
16
|
+
when Array
|
|
17
|
+
"--#{key} #{value.map(&:inspect).join(' ')}"
|
|
18
|
+
when Hash
|
|
19
|
+
"--#{key} #{value.map { |k, v| "#{k}:#{v}" }.join(' ')}"
|
|
20
|
+
when nil, false
|
|
21
|
+
nil
|
|
22
|
+
else
|
|
23
|
+
"--#{key} #{value.inspect}"
|
|
24
|
+
end
|
|
25
|
+
end.compact.join(" ")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# Takes a hash of Bundler::Thor::Option and a hash with defaults.
|
|
29
|
+
#
|
|
30
|
+
# If +stop_on_unknown+ is true, #parse will stop as soon as it encounters
|
|
31
|
+
# an unknown option or a regular argument.
|
|
32
|
+
def initialize(hash_options = {}, defaults = {}, stop_on_unknown = false, disable_required_check = false, relations = {})
|
|
33
|
+
@stop_on_unknown = stop_on_unknown
|
|
34
|
+
@exclusives = (relations[:exclusive_option_names] || []).select{|array| !array.empty?}
|
|
35
|
+
@at_least_ones = (relations[:at_least_one_option_names] || []).select{|array| !array.empty?}
|
|
36
|
+
@disable_required_check = disable_required_check
|
|
37
|
+
options = hash_options.values
|
|
38
|
+
super(options)
|
|
39
|
+
|
|
40
|
+
# Add defaults
|
|
41
|
+
defaults.each do |key, value|
|
|
42
|
+
@assigns[key.to_s] = value
|
|
43
|
+
@non_assigned_required.delete(hash_options[key])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
@shorts = {}
|
|
47
|
+
@switches = {}
|
|
48
|
+
@extra = []
|
|
49
|
+
@stopped_parsing_after_extra_index = nil
|
|
50
|
+
@is_treated_as_value = false
|
|
51
|
+
|
|
52
|
+
options.each do |option|
|
|
53
|
+
@switches[option.switch_name] = option
|
|
54
|
+
|
|
55
|
+
option.aliases.each do |name|
|
|
56
|
+
@shorts[name] ||= option.switch_name
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def remaining
|
|
62
|
+
@extra
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def peek
|
|
66
|
+
return super unless @parsing_options
|
|
67
|
+
|
|
68
|
+
result = super
|
|
69
|
+
if result == OPTS_END
|
|
70
|
+
shift
|
|
71
|
+
@parsing_options = false
|
|
72
|
+
@stopped_parsing_after_extra_index ||= @extra.size
|
|
73
|
+
super
|
|
74
|
+
else
|
|
75
|
+
result
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def shift
|
|
80
|
+
@is_treated_as_value = false
|
|
81
|
+
super
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def unshift(arg, is_value: false)
|
|
85
|
+
@is_treated_as_value = is_value
|
|
86
|
+
super(arg)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def parse(args) # rubocop:disable Metrics/MethodLength
|
|
90
|
+
@pile = args.dup
|
|
91
|
+
@is_treated_as_value = false
|
|
92
|
+
@parsing_options = true
|
|
93
|
+
|
|
94
|
+
while peek
|
|
95
|
+
if parsing_options?
|
|
96
|
+
match, is_switch = current_is_switch?
|
|
97
|
+
shifted = shift
|
|
98
|
+
|
|
99
|
+
if is_switch
|
|
100
|
+
case shifted
|
|
101
|
+
when SHORT_SQ_RE
|
|
102
|
+
unshift($1.split("").map { |f| "-#{f}" })
|
|
103
|
+
next
|
|
104
|
+
when EQ_RE
|
|
105
|
+
unshift($2, is_value: true)
|
|
106
|
+
switch = $1
|
|
107
|
+
when SHORT_NUM
|
|
108
|
+
unshift($2)
|
|
109
|
+
switch = $1
|
|
110
|
+
when LONG_RE, SHORT_RE
|
|
111
|
+
switch = $1
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
switch = normalize_switch(switch)
|
|
115
|
+
option = switch_option(switch)
|
|
116
|
+
result = parse_peek(switch, option)
|
|
117
|
+
assign_result!(option, result)
|
|
118
|
+
elsif @stop_on_unknown
|
|
119
|
+
@parsing_options = false
|
|
120
|
+
@extra << shifted
|
|
121
|
+
@stopped_parsing_after_extra_index ||= @extra.size
|
|
122
|
+
@extra << shift while peek
|
|
123
|
+
break
|
|
124
|
+
elsif match
|
|
125
|
+
@extra << shifted
|
|
126
|
+
@extra << shift while peek && peek !~ /^-/
|
|
127
|
+
else
|
|
128
|
+
@extra << shifted
|
|
129
|
+
end
|
|
130
|
+
else
|
|
131
|
+
@extra << shift
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
check_requirement! unless @disable_required_check
|
|
136
|
+
check_exclusive!
|
|
137
|
+
check_at_least_one!
|
|
138
|
+
|
|
139
|
+
assigns = Bundler::Thor::CoreExt::HashWithIndifferentAccess.new(@assigns)
|
|
140
|
+
assigns.freeze
|
|
141
|
+
assigns
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def check_exclusive!
|
|
145
|
+
opts = @assigns.keys
|
|
146
|
+
# When option A and B are exclusive, if A and B are given at the same time,
|
|
147
|
+
# the difference of argument array size will decrease.
|
|
148
|
+
found = @exclusives.find{ |ex| (ex - opts).size < ex.size - 1 }
|
|
149
|
+
if found
|
|
150
|
+
names = names_to_switch_names(found & opts).map{|n| "'#{n}'"}
|
|
151
|
+
class_name = self.class.name.split("::").last.downcase
|
|
152
|
+
fail ExclusiveArgumentError, "Found exclusive #{class_name} #{names.join(", ")}"
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def check_at_least_one!
|
|
157
|
+
opts = @assigns.keys
|
|
158
|
+
# When at least one is required of the options A and B,
|
|
159
|
+
# if the both options were not given, none? would be true.
|
|
160
|
+
found = @at_least_ones.find{ |one_reqs| one_reqs.none?{ |o| opts.include? o} }
|
|
161
|
+
if found
|
|
162
|
+
names = names_to_switch_names(found).map{|n| "'#{n}'"}
|
|
163
|
+
class_name = self.class.name.split("::").last.downcase
|
|
164
|
+
fail AtLeastOneRequiredArgumentError, "Not found at least one of required #{class_name} #{names.join(", ")}"
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def check_unknown!
|
|
169
|
+
to_check = @stopped_parsing_after_extra_index ? @extra[0...@stopped_parsing_after_extra_index] : @extra
|
|
170
|
+
|
|
171
|
+
# an unknown option starts with - or -- and has no more --'s afterward.
|
|
172
|
+
unknown = to_check.select { |str| str =~ /^--?(?:(?!--).)*$/ }
|
|
173
|
+
raise UnknownArgumentError.new(@switches.keys, unknown) unless unknown.empty?
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
protected
|
|
177
|
+
|
|
178
|
+
# Option names changes to swith name or human name
|
|
179
|
+
def names_to_switch_names(names = [])
|
|
180
|
+
@switches.map do |_, o|
|
|
181
|
+
if names.include? o.name
|
|
182
|
+
o.respond_to?(:switch_name) ? o.switch_name : o.human_name
|
|
183
|
+
else
|
|
184
|
+
nil
|
|
185
|
+
end
|
|
186
|
+
end.compact
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def assign_result!(option, result)
|
|
190
|
+
if option.repeatable && option.type == :hash
|
|
191
|
+
(@assigns[option.human_name] ||= {}).merge!(result)
|
|
192
|
+
elsif option.repeatable
|
|
193
|
+
(@assigns[option.human_name] ||= []) << result
|
|
194
|
+
else
|
|
195
|
+
@assigns[option.human_name] = result
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# Check if the current value in peek is a registered switch.
|
|
200
|
+
#
|
|
201
|
+
# Two booleans are returned. The first is true if the current value
|
|
202
|
+
# starts with a hyphen; the second is true if it is a registered switch.
|
|
203
|
+
def current_is_switch?
|
|
204
|
+
return [false, false] if @is_treated_as_value
|
|
205
|
+
case peek
|
|
206
|
+
when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM
|
|
207
|
+
[true, switch?($1)]
|
|
208
|
+
when SHORT_SQ_RE
|
|
209
|
+
[true, $1.split("").any? { |f| switch?("-#{f}") }]
|
|
210
|
+
else
|
|
211
|
+
[false, false]
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def current_is_switch_formatted?
|
|
216
|
+
return false if @is_treated_as_value
|
|
217
|
+
case peek
|
|
218
|
+
when LONG_RE, SHORT_RE, EQ_RE, SHORT_NUM, SHORT_SQ_RE
|
|
219
|
+
true
|
|
220
|
+
else
|
|
221
|
+
false
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def current_is_value?
|
|
226
|
+
return true if @is_treated_as_value
|
|
227
|
+
peek && (!parsing_options? || super)
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def switch?(arg)
|
|
231
|
+
!switch_option(normalize_switch(arg)).nil?
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def switch_option(arg)
|
|
235
|
+
if match = no_or_skip?(arg) # rubocop:disable Lint/AssignmentInCondition
|
|
236
|
+
@switches[arg] || @switches["--#{match}"]
|
|
237
|
+
else
|
|
238
|
+
@switches[arg]
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# Check if the given argument is actually a shortcut.
|
|
243
|
+
#
|
|
244
|
+
def normalize_switch(arg)
|
|
245
|
+
(@shorts[arg] || arg).tr("_", "-")
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
def parsing_options?
|
|
249
|
+
peek
|
|
250
|
+
@parsing_options
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
# Parse boolean values which can be given as --foo=true or --foo for true values, or
|
|
254
|
+
# --foo=false, --no-foo or --skip-foo for false values.
|
|
255
|
+
#
|
|
256
|
+
def parse_boolean(switch)
|
|
257
|
+
if current_is_value?
|
|
258
|
+
if ["true", "TRUE", "t", "T", true].include?(peek)
|
|
259
|
+
shift
|
|
260
|
+
true
|
|
261
|
+
elsif ["false", "FALSE", "f", "F", false].include?(peek)
|
|
262
|
+
shift
|
|
263
|
+
false
|
|
264
|
+
else
|
|
265
|
+
@switches.key?(switch) || !no_or_skip?(switch)
|
|
266
|
+
end
|
|
267
|
+
else
|
|
268
|
+
@switches.key?(switch) || !no_or_skip?(switch)
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
# Parse the value at the peek analyzing if it requires an input or not.
|
|
273
|
+
#
|
|
274
|
+
def parse_peek(switch, option)
|
|
275
|
+
if parsing_options? && (current_is_switch_formatted? || last?)
|
|
276
|
+
if option.boolean?
|
|
277
|
+
# No problem for boolean types
|
|
278
|
+
elsif no_or_skip?(switch)
|
|
279
|
+
return nil # User set value to nil
|
|
280
|
+
elsif option.string? && !option.required?
|
|
281
|
+
# Return the default if there is one, else the human name
|
|
282
|
+
return option.lazy_default || option.default || option.human_name
|
|
283
|
+
elsif option.lazy_default
|
|
284
|
+
return option.lazy_default
|
|
285
|
+
else
|
|
286
|
+
raise MalformattedArgumentError, "No value provided for option '#{switch}'"
|
|
287
|
+
end
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
@non_assigned_required.delete(option)
|
|
291
|
+
send(:"parse_#{option.type}", switch)
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require "rake"
|
|
2
|
+
require "rake/dsl_definition"
|
|
3
|
+
|
|
4
|
+
class Bundler::Thor
|
|
5
|
+
# Adds a compatibility layer to your Bundler::Thor classes which allows you to use
|
|
6
|
+
# rake package tasks. For example, to use rspec rake tasks, one can do:
|
|
7
|
+
#
|
|
8
|
+
# require 'bundler/vendor/thor/lib/thor/rake_compat'
|
|
9
|
+
# require 'rspec/core/rake_task'
|
|
10
|
+
#
|
|
11
|
+
# class Default < Bundler::Thor
|
|
12
|
+
# include Bundler::Thor::RakeCompat
|
|
13
|
+
#
|
|
14
|
+
# RSpec::Core::RakeTask.new(:spec) do |t|
|
|
15
|
+
# t.spec_opts = ['--options', './.rspec']
|
|
16
|
+
# t.spec_files = FileList['spec/**/*_spec.rb']
|
|
17
|
+
# end
|
|
18
|
+
# end
|
|
19
|
+
#
|
|
20
|
+
module RakeCompat
|
|
21
|
+
include Rake::DSL if defined?(Rake::DSL)
|
|
22
|
+
|
|
23
|
+
def self.rake_classes
|
|
24
|
+
@rake_classes ||= []
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def self.included(base)
|
|
28
|
+
super(base)
|
|
29
|
+
# Hack. Make rakefile point to invoker, so rdoc task is generated properly.
|
|
30
|
+
rakefile = File.basename(caller[0].match(/(.*):\d+/)[1])
|
|
31
|
+
Rake.application.instance_variable_set(:@rakefile, rakefile)
|
|
32
|
+
rake_classes << base
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# override task on (main), for compatibility with Rake 0.9
|
|
38
|
+
instance_eval do
|
|
39
|
+
alias rake_namespace namespace
|
|
40
|
+
|
|
41
|
+
def task(*)
|
|
42
|
+
task = super
|
|
43
|
+
|
|
44
|
+
if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
|
|
45
|
+
non_namespaced_name = task.name.split(":").last
|
|
46
|
+
|
|
47
|
+
description = non_namespaced_name
|
|
48
|
+
description << task.arg_names.map { |n| n.to_s.upcase }.join(" ")
|
|
49
|
+
description.strip!
|
|
50
|
+
|
|
51
|
+
klass.desc description, Rake.application.last_description || non_namespaced_name
|
|
52
|
+
Rake.application.last_description = nil
|
|
53
|
+
klass.send :define_method, non_namespaced_name do |*args|
|
|
54
|
+
Rake::Task[task.name.to_sym].invoke(*args)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
task
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def namespace(name)
|
|
62
|
+
if klass = Bundler::Thor::RakeCompat.rake_classes.last # rubocop:disable Lint/AssignmentInCondition
|
|
63
|
+
const_name = Bundler::Thor::Util.camel_case(name.to_s).to_sym
|
|
64
|
+
klass.const_set(const_name, Class.new(Bundler::Thor))
|
|
65
|
+
new_klass = klass.const_get(const_name)
|
|
66
|
+
Bundler::Thor::RakeCompat.rake_classes << new_klass
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
super
|
|
70
|
+
Bundler::Thor::RakeCompat.rake_classes.pop
|
|
71
|
+
end
|
|
72
|
+
end
|