omg-railties 8.0.0.alpha3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGELOG.md +171 -0
- data/MIT-LICENSE +20 -0
- data/RDOC_MAIN.md +99 -0
- data/README.rdoc +39 -0
- data/exe/rails +10 -0
- data/lib/minitest/rails_plugin.rb +140 -0
- data/lib/rails/all.rb +21 -0
- data/lib/rails/api/generator.rb +38 -0
- data/lib/rails/api/task.rb +235 -0
- data/lib/rails/app_loader.rb +77 -0
- data/lib/rails/application/bootstrap.rb +118 -0
- data/lib/rails/application/configuration.rb +659 -0
- data/lib/rails/application/default_middleware_stack.rb +140 -0
- data/lib/rails/application/dummy_config.rb +19 -0
- data/lib/rails/application/finisher.rb +238 -0
- data/lib/rails/application/routes_reloader.rb +79 -0
- data/lib/rails/application.rb +658 -0
- data/lib/rails/application_controller.rb +28 -0
- data/lib/rails/autoloaders/inflector.rb +21 -0
- data/lib/rails/autoloaders.rb +48 -0
- data/lib/rails/backtrace_cleaner.rb +42 -0
- data/lib/rails/cli.rb +21 -0
- data/lib/rails/code_statistics.rb +159 -0
- data/lib/rails/code_statistics_calculator.rb +99 -0
- data/lib/rails/command/actions.rb +52 -0
- data/lib/rails/command/base.rb +185 -0
- data/lib/rails/command/behavior.rb +84 -0
- data/lib/rails/command/environment_argument.rb +56 -0
- data/lib/rails/command/helpers/editor.rb +40 -0
- data/lib/rails/command.rb +172 -0
- data/lib/rails/commands/about/about_command.rb +14 -0
- data/lib/rails/commands/app/update_command.rb +94 -0
- data/lib/rails/commands/application/application_command.rb +33 -0
- data/lib/rails/commands/boot/boot_command.rb +14 -0
- data/lib/rails/commands/console/console_command.rb +91 -0
- data/lib/rails/commands/console/irb_console.rb +136 -0
- data/lib/rails/commands/credentials/USAGE +73 -0
- data/lib/rails/commands/credentials/credentials_command/diffing.rb +53 -0
- data/lib/rails/commands/credentials/credentials_command.rb +139 -0
- data/lib/rails/commands/db/system/change/change_command.rb +26 -0
- data/lib/rails/commands/dbconsole/dbconsole_command.rb +88 -0
- data/lib/rails/commands/destroy/destroy_command.rb +29 -0
- data/lib/rails/commands/dev/dev_command.rb +14 -0
- data/lib/rails/commands/devcontainer/devcontainer_command.rb +39 -0
- data/lib/rails/commands/encrypted/USAGE +23 -0
- data/lib/rails/commands/encrypted/encrypted_command.rb +98 -0
- data/lib/rails/commands/gem_help/USAGE +16 -0
- data/lib/rails/commands/gem_help/gem_help_command.rb +13 -0
- data/lib/rails/commands/generate/generate_command.rb +30 -0
- data/lib/rails/commands/help/USAGE +17 -0
- data/lib/rails/commands/help/help_command.rb +34 -0
- data/lib/rails/commands/initializers/initializers_command.rb +20 -0
- data/lib/rails/commands/middleware/middleware_command.rb +17 -0
- data/lib/rails/commands/new/new_command.rb +21 -0
- data/lib/rails/commands/notes/notes_command.rb +30 -0
- data/lib/rails/commands/plugin/plugin_command.rb +47 -0
- data/lib/rails/commands/rake/rake_command.rb +55 -0
- data/lib/rails/commands/restart/restart_command.rb +14 -0
- data/lib/rails/commands/routes/routes_command.rb +49 -0
- data/lib/rails/commands/runner/USAGE +22 -0
- data/lib/rails/commands/runner/runner_command.rb +81 -0
- data/lib/rails/commands/secret/secret_command.rb +13 -0
- data/lib/rails/commands/server/server_command.rb +290 -0
- data/lib/rails/commands/stats/stats_command.rb +19 -0
- data/lib/rails/commands/test/USAGE +14 -0
- data/lib/rails/commands/test/test_command.rb +81 -0
- data/lib/rails/commands/unused_routes/unused_routes_command.rb +75 -0
- data/lib/rails/commands/version/version_command.rb +12 -0
- data/lib/rails/commands.rb +18 -0
- data/lib/rails/configuration.rb +170 -0
- data/lib/rails/console/app.rb +8 -0
- data/lib/rails/console/helpers.rb +8 -0
- data/lib/rails/console/methods.rb +23 -0
- data/lib/rails/deprecator.rb +7 -0
- data/lib/rails/dev_caching.rb +44 -0
- data/lib/rails/engine/commands.rb +9 -0
- data/lib/rails/engine/configuration.rb +138 -0
- data/lib/rails/engine/lazy_route_set.rb +109 -0
- data/lib/rails/engine/railties.rb +23 -0
- data/lib/rails/engine/updater.rb +21 -0
- data/lib/rails/engine.rb +760 -0
- data/lib/rails/gem_version.rb +17 -0
- data/lib/rails/generators/actions/create_migration.rb +75 -0
- data/lib/rails/generators/actions.rb +528 -0
- data/lib/rails/generators/active_model.rb +94 -0
- data/lib/rails/generators/app_base.rb +806 -0
- data/lib/rails/generators/app_name.rb +39 -0
- data/lib/rails/generators/base.rb +432 -0
- data/lib/rails/generators/database.rb +287 -0
- data/lib/rails/generators/erb/authentication/authentication_generator.rb +15 -0
- data/lib/rails/generators/erb/authentication/templates/views/passwords/edit.html.erb +9 -0
- data/lib/rails/generators/erb/authentication/templates/views/passwords/new.html.erb +8 -0
- data/lib/rails/generators/erb/authentication/templates/views/sessions/new.html.erb +11 -0
- data/lib/rails/generators/erb/controller/controller_generator.rb +24 -0
- data/lib/rails/generators/erb/controller/templates/view.html.erb.tt +2 -0
- data/lib/rails/generators/erb/mailer/mailer_generator.rb +41 -0
- data/lib/rails/generators/erb/mailer/templates/layout.html.erb.tt +13 -0
- data/lib/rails/generators/erb/mailer/templates/layout.text.erb.tt +1 -0
- data/lib/rails/generators/erb/mailer/templates/view.html.erb.tt +5 -0
- data/lib/rails/generators/erb/mailer/templates/view.text.erb.tt +3 -0
- data/lib/rails/generators/erb/scaffold/scaffold_generator.rb +34 -0
- data/lib/rails/generators/erb/scaffold/templates/_form.html.erb.tt +37 -0
- data/lib/rails/generators/erb/scaffold/templates/edit.html.erb.tt +12 -0
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb.tt +16 -0
- data/lib/rails/generators/erb/scaffold/templates/new.html.erb.tt +11 -0
- data/lib/rails/generators/erb/scaffold/templates/partial.html.erb.tt +17 -0
- data/lib/rails/generators/erb/scaffold/templates/show.html.erb.tt +10 -0
- data/lib/rails/generators/erb.rb +26 -0
- data/lib/rails/generators/generated_attribute.rb +274 -0
- data/lib/rails/generators/migration.rb +71 -0
- data/lib/rails/generators/model_helpers.rb +62 -0
- data/lib/rails/generators/named_base.rb +227 -0
- data/lib/rails/generators/rails/app/USAGE +31 -0
- data/lib/rails/generators/rails/app/app_generator.rb +678 -0
- data/lib/rails/generators/rails/app/templates/Dockerfile.tt +119 -0
- data/lib/rails/generators/rails/app/templates/Gemfile.tt +83 -0
- data/lib/rails/generators/rails/app/templates/README.md.tt +24 -0
- data/lib/rails/generators/rails/app/templates/Rakefile.tt +6 -0
- data/lib/rails/generators/rails/app/templates/app/assets/stylesheets/application.css.tt +15 -0
- data/lib/rails/generators/rails/app/templates/app/controllers/application_controller.rb.tt +6 -0
- data/lib/rails/generators/rails/app/templates/app/helpers/application_helper.rb.tt +2 -0
- data/lib/rails/generators/rails/app/templates/app/jobs/application_job.rb.tt +7 -0
- data/lib/rails/generators/rails/app/templates/app/mailers/application_mailer.rb.tt +4 -0
- data/lib/rails/generators/rails/app/templates/app/models/application_record.rb.tt +3 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/application.html.erb.tt +33 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.html.erb.tt +13 -0
- data/lib/rails/generators/rails/app/templates/app/views/layouts/mailer.text.erb.tt +1 -0
- data/lib/rails/generators/rails/app/templates/app/views/pwa/manifest.json.erb.tt +22 -0
- data/lib/rails/generators/rails/app/templates/app/views/pwa/service-worker.js +26 -0
- data/lib/rails/generators/rails/app/templates/bin/brakeman.tt +6 -0
- data/lib/rails/generators/rails/app/templates/bin/dev.tt +1 -0
- data/lib/rails/generators/rails/app/templates/bin/rails.tt +3 -0
- data/lib/rails/generators/rails/app/templates/bin/rake.tt +3 -0
- data/lib/rails/generators/rails/app/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/app/templates/bin/setup.tt +45 -0
- data/lib/rails/generators/rails/app/templates/bin/thrust.tt +4 -0
- data/lib/rails/generators/rails/app/templates/config/application.rb.tt +42 -0
- data/lib/rails/generators/rails/app/templates/config/boot.rb.tt +6 -0
- data/lib/rails/generators/rails/app/templates/config/cable.yml.tt +10 -0
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml.tt +82 -0
- data/lib/rails/generators/rails/app/templates/config/databases/postgresql.yml.tt +114 -0
- data/lib/rails/generators/rails/app/templates/config/databases/sqlite3.yml.tt +72 -0
- data/lib/rails/generators/rails/app/templates/config/databases/trilogy.yml.tt +82 -0
- data/lib/rails/generators/rails/app/templates/config/deploy.yml.tt +107 -0
- data/lib/rails/generators/rails/app/templates/config/environment.rb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +89 -0
- data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +125 -0
- data/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt +62 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +7 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/content_security_policy.rb.tt +25 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/cors.rb.tt +16 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/filter_parameter_logging.rb.tt +8 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/inflections.rb.tt +16 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_8_0.rb.tt +25 -0
- data/lib/rails/generators/rails/app/templates/config/locales/en.yml +31 -0
- data/lib/rails/generators/rails/app/templates/config/puma.rb.tt +43 -0
- data/lib/rails/generators/rails/app/templates/config/routes.rb.tt +16 -0
- data/lib/rails/generators/rails/app/templates/config/storage.yml.tt +34 -0
- data/lib/rails/generators/rails/app/templates/config.ru.tt +6 -0
- data/lib/rails/generators/rails/app/templates/db/seeds.rb.tt +9 -0
- data/lib/rails/generators/rails/app/templates/docker-entrypoint.tt +16 -0
- data/lib/rails/generators/rails/app/templates/dockerignore.tt +56 -0
- data/lib/rails/generators/rails/app/templates/env.erb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/gitattributes.tt +9 -0
- data/lib/rails/generators/rails/app/templates/github/ci.yml.tt +138 -0
- data/lib/rails/generators/rails/app/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/app/templates/gitignore.tt +38 -0
- data/lib/rails/generators/rails/app/templates/node-version.tt +1 -0
- data/lib/rails/generators/rails/app/templates/public/400.html +67 -0
- data/lib/rails/generators/rails/app/templates/public/404.html +67 -0
- data/lib/rails/generators/rails/app/templates/public/406-unsupported-browser.html +66 -0
- data/lib/rails/generators/rails/app/templates/public/422.html +67 -0
- data/lib/rails/generators/rails/app/templates/public/500.html +66 -0
- data/lib/rails/generators/rails/app/templates/public/icon.png +0 -0
- data/lib/rails/generators/rails/app/templates/public/icon.svg +3 -0
- data/lib/rails/generators/rails/app/templates/public/robots.txt +1 -0
- data/lib/rails/generators/rails/app/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/app/templates/ruby-version.tt +1 -0
- data/lib/rails/generators/rails/app/templates/test/application_system_test_case.rb.tt +5 -0
- data/lib/rails/generators/rails/app/templates/test/test_helper.rb.tt +21 -0
- data/lib/rails/generators/rails/application_record/application_record_generator.rb +13 -0
- data/lib/rails/generators/rails/authentication/USAGE +6 -0
- data/lib/rails/generators/rails/authentication/authentication_generator.rb +54 -0
- data/lib/rails/generators/rails/authentication/templates/controllers/concerns/authentication.rb +55 -0
- data/lib/rails/generators/rails/authentication/templates/controllers/passwords_controller.rb +33 -0
- data/lib/rails/generators/rails/authentication/templates/controllers/sessions_controller.rb +21 -0
- data/lib/rails/generators/rails/authentication/templates/mailers/passwords_mailer.rb +6 -0
- data/lib/rails/generators/rails/authentication/templates/models/current.rb +4 -0
- data/lib/rails/generators/rails/authentication/templates/models/session.rb +3 -0
- data/lib/rails/generators/rails/authentication/templates/models/user.rb +6 -0
- data/lib/rails/generators/rails/authentication/templates/test/mailers/previews/passwords_mailer_preview.rb +7 -0
- data/lib/rails/generators/rails/authentication/templates/views/passwords_mailer/reset.html.erb +4 -0
- data/lib/rails/generators/rails/authentication/templates/views/passwords_mailer/reset.text.erb +2 -0
- data/lib/rails/generators/rails/benchmark/USAGE +19 -0
- data/lib/rails/generators/rails/benchmark/benchmark_generator.rb +30 -0
- data/lib/rails/generators/rails/benchmark/templates/benchmark.rb.tt +15 -0
- data/lib/rails/generators/rails/controller/USAGE +26 -0
- data/lib/rails/generators/rails/controller/controller_generator.rb +42 -0
- data/lib/rails/generators/rails/controller/templates/controller.rb.tt +9 -0
- data/lib/rails/generators/rails/credentials/credentials_generator.rb +61 -0
- data/lib/rails/generators/rails/credentials/templates/credentials.yml.tt +12 -0
- data/lib/rails/generators/rails/db/system/change/change_generator.rb +206 -0
- data/lib/rails/generators/rails/devcontainer/devcontainer_generator.rb +168 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/Dockerfile.tt +3 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/compose.yaml.tt +47 -0
- data/lib/rails/generators/rails/devcontainer/templates/devcontainer/devcontainer.json.tt +37 -0
- data/lib/rails/generators/rails/encrypted_file/encrypted_file_generator.rb +31 -0
- data/lib/rails/generators/rails/encryption_key_file/encryption_key_file_generator.rb +57 -0
- data/lib/rails/generators/rails/generator/USAGE +13 -0
- data/lib/rails/generators/rails/generator/generator_generator.rb +27 -0
- data/lib/rails/generators/rails/generator/templates/%file_name%_generator.rb.tt +3 -0
- data/lib/rails/generators/rails/generator/templates/USAGE.tt +8 -0
- data/lib/rails/generators/rails/generator/templates/templates/.empty_directory +0 -0
- data/lib/rails/generators/rails/helper/USAGE +12 -0
- data/lib/rails/generators/rails/helper/helper_generator.rb +20 -0
- data/lib/rails/generators/rails/helper/templates/helper.rb.tt +4 -0
- data/lib/rails/generators/rails/integration_test/USAGE +10 -0
- data/lib/rails/generators/rails/integration_test/integration_test_generator.rb +9 -0
- data/lib/rails/generators/rails/master_key/master_key_generator.rb +53 -0
- data/lib/rails/generators/rails/migration/USAGE +45 -0
- data/lib/rails/generators/rails/migration/migration_generator.rb +14 -0
- data/lib/rails/generators/rails/model/model_generator.rb +18 -0
- data/lib/rails/generators/rails/plugin/USAGE +21 -0
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +499 -0
- data/lib/rails/generators/rails/plugin/templates/%name%.gemspec.tt +28 -0
- data/lib/rails/generators/rails/plugin/templates/Gemfile.tt +23 -0
- data/lib/rails/generators/rails/plugin/templates/MIT-LICENSE.tt +20 -0
- data/lib/rails/generators/rails/plugin/templates/README.md.tt +28 -0
- data/lib/rails/generators/rails/plugin/templates/Rakefile.tt +14 -0
- data/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/app/helpers/%namespaced_name%/application_helper.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/app/jobs/%namespaced_name%/application_job.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/app/mailers/%namespaced_name%/application_mailer.rb.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/app/models/%namespaced_name%/application_record.rb.tt +6 -0
- data/lib/rails/generators/rails/plugin/templates/app/views/layouts/%namespaced_name%/application.html.erb.tt +17 -0
- data/lib/rails/generators/rails/plugin/templates/bin/rails.tt +15 -0
- data/lib/rails/generators/rails/plugin/templates/bin/rubocop.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/bin/test.tt +4 -0
- data/lib/rails/generators/rails/plugin/templates/config/routes.rb.tt +6 -0
- data/lib/rails/generators/rails/plugin/templates/github/ci.yml.tt +103 -0
- data/lib/rails/generators/rails/plugin/templates/github/dependabot.yml +12 -0
- data/lib/rails/generators/rails/plugin/templates/gitignore.tt +14 -0
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/railtie.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/version.rb.tt +1 -0
- data/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%.rb.tt +8 -0
- data/lib/rails/generators/rails/plugin/templates/lib/tasks/%namespaced_name%_tasks.rake.tt +4 -0
- data/lib/rails/generators/rails/plugin/templates/rails/boot.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/rails/routes.rb.tt +3 -0
- data/lib/rails/generators/rails/plugin/templates/rails/stylesheets.css +15 -0
- data/lib/rails/generators/rails/plugin/templates/rubocop.yml.tt +8 -0
- data/lib/rails/generators/rails/plugin/templates/test/%namespaced_name%_test.rb.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/test/application_system_test_case.rb.tt +5 -0
- data/lib/rails/generators/rails/plugin/templates/test/integration/navigation_test.rb.tt +7 -0
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb.tt +21 -0
- data/lib/rails/generators/rails/resource/USAGE +23 -0
- data/lib/rails/generators/rails/resource/resource_generator.rb +27 -0
- data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +23 -0
- data/lib/rails/generators/rails/scaffold/USAGE +41 -0
- data/lib/rails/generators/rails/scaffold/scaffold_generator.rb +18 -0
- data/lib/rails/generators/rails/scaffold_controller/USAGE +19 -0
- data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +56 -0
- data/lib/rails/generators/rails/scaffold_controller/templates/api_controller.rb.tt +57 -0
- data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb.tt +64 -0
- data/lib/rails/generators/rails/script/USAGE +18 -0
- data/lib/rails/generators/rails/script/script_generator.rb +18 -0
- data/lib/rails/generators/rails/script/templates/script.rb.tt +3 -0
- data/lib/rails/generators/rails/system_test/USAGE +10 -0
- data/lib/rails/generators/rails/system_test/system_test_generator.rb +9 -0
- data/lib/rails/generators/rails/task/USAGE +9 -0
- data/lib/rails/generators/rails/task/task_generator.rb +13 -0
- data/lib/rails/generators/rails/task/templates/task.rb.tt +8 -0
- data/lib/rails/generators/resource_helpers.rb +82 -0
- data/lib/rails/generators/test_case.rb +37 -0
- data/lib/rails/generators/test_unit/controller/controller_generator.rb +19 -0
- data/lib/rails/generators/test_unit/controller/templates/functional_test.rb.tt +23 -0
- data/lib/rails/generators/test_unit/generator/generator_generator.rb +27 -0
- data/lib/rails/generators/test_unit/generator/templates/generator_test.rb.tt +16 -0
- data/lib/rails/generators/test_unit/helper/helper_generator.rb +11 -0
- data/lib/rails/generators/test_unit/integration/integration_generator.rb +20 -0
- data/lib/rails/generators/test_unit/integration/templates/integration_test.rb.tt +9 -0
- data/lib/rails/generators/test_unit/job/job_generator.rb +20 -0
- data/lib/rails/generators/test_unit/job/templates/unit_test.rb.tt +9 -0
- data/lib/rails/generators/test_unit/mailer/mailer_generator.rb +28 -0
- data/lib/rails/generators/test_unit/mailer/templates/functional_test.rb.tt +23 -0
- data/lib/rails/generators/test_unit/mailer/templates/preview.rb.tt +14 -0
- data/lib/rails/generators/test_unit/model/model_generator.rb +37 -0
- data/lib/rails/generators/test_unit/model/templates/fixtures.yml.tt +29 -0
- data/lib/rails/generators/test_unit/model/templates/unit_test.rb.tt +9 -0
- data/lib/rails/generators/test_unit/plugin/plugin_generator.rb +15 -0
- data/lib/rails/generators/test_unit/plugin/templates/%file_name%_test.rb.tt +7 -0
- data/lib/rails/generators/test_unit/plugin/templates/test_helper.rb +2 -0
- data/lib/rails/generators/test_unit/scaffold/scaffold_generator.rb +82 -0
- data/lib/rails/generators/test_unit/scaffold/templates/api_functional_test.rb.tt +44 -0
- data/lib/rails/generators/test_unit/scaffold/templates/functional_test.rb.tt +54 -0
- data/lib/rails/generators/test_unit/scaffold/templates/system_test.rb.tt +57 -0
- data/lib/rails/generators/test_unit/system/system_generator.rb +24 -0
- data/lib/rails/generators/test_unit/system/templates/application_system_test_case.rb.tt +5 -0
- data/lib/rails/generators/test_unit/system/templates/system_test.rb.tt +9 -0
- data/lib/rails/generators/test_unit.rb +10 -0
- data/lib/rails/generators/testing/assertions.rb +147 -0
- data/lib/rails/generators/testing/behavior.rb +116 -0
- data/lib/rails/generators/testing/setup_and_teardown.rb +20 -0
- data/lib/rails/generators.rb +327 -0
- data/lib/rails/health_controller.rb +55 -0
- data/lib/rails/info.rb +105 -0
- data/lib/rails/info_controller.rb +71 -0
- data/lib/rails/initializable.rb +95 -0
- data/lib/rails/mailers_controller.rb +122 -0
- data/lib/rails/paths.rb +246 -0
- data/lib/rails/plugin/test.rb +9 -0
- data/lib/rails/pwa_controller.rb +15 -0
- data/lib/rails/rack/logger.rb +88 -0
- data/lib/rails/rack/silence_request.rb +33 -0
- data/lib/rails/rack.rb +8 -0
- data/lib/rails/rackup/server.rb +15 -0
- data/lib/rails/railtie/configurable.rb +36 -0
- data/lib/rails/railtie/configuration.rb +114 -0
- data/lib/rails/railtie.rb +302 -0
- data/lib/rails/source_annotation_extractor.rb +214 -0
- data/lib/rails/tasks/engine.rake +85 -0
- data/lib/rails/tasks/framework.rake +34 -0
- data/lib/rails/tasks/log.rake +41 -0
- data/lib/rails/tasks/misc.rake +68 -0
- data/lib/rails/tasks/statistics.rake +23 -0
- data/lib/rails/tasks/tmp.rake +51 -0
- data/lib/rails/tasks/yarn.rake +29 -0
- data/lib/rails/tasks/zeitwerk.rake +41 -0
- data/lib/rails/tasks.rb +17 -0
- data/lib/rails/templates/layouts/application.html.erb +51 -0
- data/lib/rails/templates/rails/info/notes.html.erb +65 -0
- data/lib/rails/templates/rails/info/properties.html.erb +1 -0
- data/lib/rails/templates/rails/info/routes.html.erb +9 -0
- data/lib/rails/templates/rails/mailers/email.html.erb +201 -0
- data/lib/rails/templates/rails/mailers/index.html.erb +15 -0
- data/lib/rails/templates/rails/mailers/mailer.html.erb +12 -0
- data/lib/rails/templates/rails/welcome/index.html.erb +93 -0
- data/lib/rails/test_help.rb +47 -0
- data/lib/rails/test_unit/line_filtering.rb +13 -0
- data/lib/rails/test_unit/railtie.rb +25 -0
- data/lib/rails/test_unit/reporter.rb +121 -0
- data/lib/rails/test_unit/runner.rb +209 -0
- data/lib/rails/test_unit/test_parser.rb +133 -0
- data/lib/rails/test_unit/testing.rake +39 -0
- data/lib/rails/testing/maintain_test_schema.rb +16 -0
- data/lib/rails/version.rb +10 -0
- data/lib/rails/welcome_controller.rb +11 -0
- data/lib/rails/zeitwerk_checker.rb +15 -0
- data/lib/rails.rb +130 -0
- metadata +518 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Ruby on Rails <%= Rails.version %></title>
|
5
|
+
<meta charset="utf-8">
|
6
|
+
<meta name="viewport" content="width=device-width">
|
7
|
+
|
8
|
+
<link rel="icon" href="/icon.png" type="image/png">
|
9
|
+
<link rel="apple-touch-icon" href="/icon.png" sizes="512x512">
|
10
|
+
|
11
|
+
<style type="text/css">
|
12
|
+
* {
|
13
|
+
box-sizing: border-box;
|
14
|
+
margin: 0;
|
15
|
+
padding: 0;
|
16
|
+
}
|
17
|
+
|
18
|
+
body {
|
19
|
+
align-items: center;
|
20
|
+
background-color: #F0E7E9;
|
21
|
+
background-image: url(data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEwMjQiIHZpZXdCb3g9IjAgMCAxNDQwIDEwMjQiIHdpZHRoPSIxNDQwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Im0xNDQwIDUxMC4wMDA2NDh2LTUxMC4wMDA2NDhoLTE0NDB2Mzg0LjAwMDY0OGM0MTcuMzExOTM5IDEzMS4xNDIxNzkgODkxIDE3MS41MTMgMTQ0MCAxMjZ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+);
|
22
|
+
background-position: center center;
|
23
|
+
background-repeat: no-repeat;
|
24
|
+
background-size: cover;
|
25
|
+
color: #261B23;
|
26
|
+
display: flex;
|
27
|
+
flex-direction: column;
|
28
|
+
font-family: Sans-Serif;
|
29
|
+
font-size: calc(0.9em + 0.5vw);
|
30
|
+
font-style: normal;
|
31
|
+
font-weight: 400;
|
32
|
+
justify-content: center;
|
33
|
+
line-height: 1.25;
|
34
|
+
min-height: 100vh;
|
35
|
+
text-align: center;
|
36
|
+
}
|
37
|
+
|
38
|
+
nav {
|
39
|
+
font-size: 0;
|
40
|
+
height: 20vw;
|
41
|
+
line-height: 0;
|
42
|
+
max-height: 280px;
|
43
|
+
max-width: 280px;
|
44
|
+
min-height: 86px;
|
45
|
+
min-width: 86px;
|
46
|
+
width: 20vw;
|
47
|
+
}
|
48
|
+
|
49
|
+
nav a {
|
50
|
+
background: #D30001;
|
51
|
+
border-radius: 100%;
|
52
|
+
display: flex;
|
53
|
+
transition: background 0.25s cubic-bezier(0.33, 1, 0.68, 1);
|
54
|
+
filter: drop-shadow(0 20px 13px rgb(0 0 0 / 0.03)) drop-shadow(0 8px 5px rgb(0 0 0 / 0.08));
|
55
|
+
}
|
56
|
+
|
57
|
+
nav a:hover {
|
58
|
+
background: #261B23;
|
59
|
+
}
|
60
|
+
|
61
|
+
nav a img {
|
62
|
+
height: auto;
|
63
|
+
max-width: 100%;
|
64
|
+
width: 100%;
|
65
|
+
cursor: pointer;
|
66
|
+
}
|
67
|
+
|
68
|
+
ul {
|
69
|
+
bottom: 0;
|
70
|
+
left: 0;
|
71
|
+
list-style: none;
|
72
|
+
margin: 0 2rem 2rem 2rem;
|
73
|
+
position: absolute;
|
74
|
+
right: 0;
|
75
|
+
}
|
76
|
+
</style>
|
77
|
+
</head>
|
78
|
+
|
79
|
+
<body>
|
80
|
+
<nav>
|
81
|
+
<a href="https://rubyonrails.org" target="_blank">
|
82
|
+
<img alt="" src="data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjExMiIgdmlld0JveD0iMCAwIDExMiAxMTIiIHdpZHRoPSIxMTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMC4wODIzNTcgNDguOTk5NTQwM3Y0LjExMzUwMzRoLTcuMzAwMzM4OHYxLjg5ODU0aDMuNjg0MDcxN2MxLjk3MjUwOTEgMCA0LjA3MjUzNDEgMS40NjY0MzExIDQuMTk3OTk3MSAzLjk2NjUxMjRsLjAwNTkxMy4yMzczOTc3djEuNTgyMTE2N2MtLjA4NzgyNCAzLjAwNzk1OS0yLjU0MzEyMTEgNC4xMzkwMDE4LTQuMDcxNTM4OSA0LjIwMTE3NzNsLS4xMzIzNzEyLjAwMjczMjhoLTcuMzkwNzQ1MXYtNC4wOTA5MDE4bDcuNDgxMTUxOC0uMDIyNjAxNnYtMS45ODg5NDY3aC0zLjQ4MDY1NjdjLTEuNzc1MjU4MyAwLTQuMDgxODMyMS0xLjMzODkxNTMtNC4yMTk5OTQyLTMuOTU0OTIwMWwtLjAwNjUxNzYtLjI0ODk5di0xLjQyMzkwNWMwLTIuNjk4MjQwMiAyLjI3ODIxMjktNC4xODI4NTMgNC4wNjU0NjQtNC4yNjc4NDkxbC4xNjEwNDc4LS4wMDM4NjZ6bS0xOC42OTE1NzkgMHYxMS44NjU4NzUyaDYuMTcwMjU1MXY0LjEzNjEwNTFoLTEwLjczNTc5MTl2LTE2LjAwMTk4MDN6bS02LjQ0MTQ3NTEgMHYxNi4wMDE5ODAzaC00LjU4ODEzODV2LTE2LjAwMTk4MDN6bS0xNS4yMTA5MjIgMGg0LjQwNzMyNTFsLjE4NzcyNC4wMDY2ODEyYy4wMzM4NjA5LjAwMjI3MzUuMDY4OTQ1Ny4wMDUxNDk5LjEwNTE2MDEuMDA4NjY0M2wuMjMwMDg3NS4wMjkwMTc4YzEuMjkxMzgyOS4xOTg1NDc2IDMuNTQ2MzgxNiAxLjEyMTM4MTYgMy42NzUxNzA4IDMuOTA2ODU4N2wuMDA1NzY3Ny4yNTI2ODgxdjExLjc5ODA3MDJoLTQuMjcxNzE1MXYtMi44MjUyMDg0aC00LjEzNjEwNTF2Mi44MjUyMDg0aC00LjQwNzMyNTF2LTExLjc5ODA3MDJjMC0xLjMxODQzMDYgMS4wMDQwODI2LTQuMDQ2ODQ5NSAzLjk0Njg5OS00LjE5NzQxMXptLTE5LjczOTg1MTktLjAwMjc1ODEgOC41ODAxODU3LjAwMDU3NDkuMjM4OTIzNC4wMzY3NDYyLjE0Nzk0NTkuMDI5NDE3LjI3NDExNjEuMDY1MzU4Mi4yMTI1MTk4LjA1OTkwNjguMjMyMzIyNS4wNzQ3MTgyYy4wNDAxNzkzLjAxMzc3MDQuMDgxMDQwMi4wMjgyMjAxLjEyMjUxMS4wNDMzODA0bC4yNTU1NjkxLjA5OTczNzYuMjY2NzYxOC4xMTgyODUyYzEuMzU2MDUxNS42NDAyODY2IDMuMDAyNjg1NSAyLjAzMjE1ODMgMy4wMDI2ODU1IDUuMDE2Mjk0IDAgMy4xODMwNzgxLTEuNTQ2NTI0MSA0LjUwMTQ4OTktMi42OTg4MzYyIDUuMDQyMDQ3N2wtLjIxMDk2NTEuMDkyNTA0NS0uMTk4ODgyOC4wNzU4NjU1LS4xODM5NTc3LjA2MDgxODYtLjE2NjE4OTguMDQ3MzYzNi0uMjA5NzUwOC4wNDkzMDAxLS4yNTk2NDkzLjA0MTgzNjMgNS4wMDU2ODk1IDUuMDUwNTgzNmgtNi4zNzQ5NTg5bC0zLjcyNjIwODMtMy44NjA4OTA2djMuODYwODkwNmgtNC4zMDk4MzE0em0yMi4wMDcwNjAzLTMuMDg2OTE5My40NDQ5OTE3LjQyMjY4MDctLjI0Mjk2OC4xNzc5ODgxLS4zNDgyMzMxLjI2OTMzNjUtLjE5OTg1NzMuMTYyOTIwNGMtNS4yMzk4OTY3LTMuODc0NTcxNS05LjY0NzY0NTQtNS40MjIxNDA5LTEzLjE5NzExOS01LjgxNTM1MzdsLS41MjU5ODA3LS4wNTA0NzA4Yy0xLjAzOTA3NDItLjA4NDIxMjYtMi4wMDA3ODYxLS4wNjk4MTAxLTIuODg0NDMwMi4wMTE1NDYybC0uNDM1MzEzMi4wNDYxMTExYy0uMDcxNDY2OC4wMDg1NjYyLS4xNDIzOTA3LjAxNzU2MDgtLjIxMjc3MTIuMDI2OTY1M2wtLjQxNTc1OTUuMDYxMjAwNS0uNDAyNjk5MS4wNzAxNjA3LS4zODk2MTk0LjA3ODI0MTUtLjM3NjUxOTguMDg1NDQyN2MtLjA2MTY2MDYuMDE0NzkxNy0uMTIyNzc0Ni4wMjk4NDY4LS4xODMzNDE1LjA0NTE0N2wtLjM1NjgzMzkuMDk0NTk1Ny0uMzQzNjg1NC4wOTk1OTgyLS4zMzA1MTc0LjEwMzcyMTMtLjMxNzMyOTcuMTA2OTY0OS0uMzA0MTIyNS4xMDkzMjktLjI5MDg5NTYuMTEwODEzNy0uNDExNTAwMi4xNjcwODAzLS41MDIxOTAyLjIxOTc2MTUtLjY1MzM3MzYuMzA4ODk1Ni0uNjEwMTA1LjMwMDU2NzVjLTQuNjk4ODg2NiAyLjYyMTk3ODgtNi44NTM5Mjk0IDYuODQ2MDcxMS03Ljc2ODIwMDIgMTAuODg2NjQ2M2wtLjEyMjMxMDEuNTc1NzgzOGMtLjAzODA1MDQuMTkxMzgzMy0uMDczNDI3OC4zODIxNTc2LS4xMDYyNzMyLjU3MjEzMDFsLS4wOTEwODA0LjU2NzMxOTYtLjA3NjczMTguNTYxMzUyMS0uMDYzMjI3NS41NTQyMjc3Yy0uMDA5NDU5NC4wOTE3MTM0LS4wMTgzOTE0LjE4MzA4MTctLjAyNjgxMzQuMjc0MDgwOGwtLjA0NDU1NC41NDEzNzIyLS4wMzMxNjAxLjUzMTM1NTZjLS4wMDQ2MjQyLjA4NzY2MDMtLjAwODgwODcuMTc0ODU1MS0uMDEyNTcxMy4yNjE1NjAybC0uMDE3NjUyNS41MTQxNjE4LS4wMDgzNjkzLjUwMTI1MzEuMDAwMDY5Ni40ODcxODc2LjAxNDA4MDYuNzAxODc3OS4wMjgzMTk1LjY2MzcyMjkuMDM5NzA4OS42MjE2NjM3LjA0ODI0OTIuNTc1Njk5OS4wNTM5NDAyLjUyNTgzMTcuMDc1ODQ4MS42MTY3ODc5LjA3NDE0NjIuNTExOTM3LjA4MDAwMDIuNDc4Mzc1Ni4wNjg1OTk1LjM1NDA4NjNoLTE3Ljg1NTMxN2wuMDU4NDktLjQ0MTcyNTMuMDQ2MzM2OC0uMjk1MTQ0OC4wNjMwMjA2LS4zNjQ3MjQyLjExMzI4MTktLjU4OTIwNjkuMTA5Mzc4Ny0uNTE1MDkwNy4xODIwMjY1LS43Nzg1MDg4LjE2NjEzNzYtLjY0ODY3NzIuMTI1OTIzMy0uNDYxNTk0My4yMTMwNDc0LS43MzM4MjI1LjE1ODk2NTUtLjUxNTUwNDIuMTczMTcyOC0uNTM1NDY5OS4xODc5NDYzLS41NTQ1MjI2LjIwMzI4NTctLjU3MjY2Mi4yMTkxOTEzLS41ODk4ODgzLjIzNTY2MjgtLjYwNjIwMTQuMjUyNzAwNC0uNjIxNjAxMmMuMDQzNTY4LS4xMDQ4MzI4LjA4Nzg2OTQtLjIxMDI2OTEuMTMyOTE2Mi0uMzE2MjkwMWwuMjc5MzE4LS42NDI5ODg3LjI5Nzc3MDctLjY1NjEwNTYuMzE2Nzg5NC0uNjY4MzA5Mi4zMzYzNzQtLjY3OTU5OTcuMzU2NTI0OS0uNjg5OTc3Yy4zNjY3ODg5LS42OTQ4NjExLjc2NDY1MjktMS40MDM5MTg0IDEuMTk2MTM5My0yLjEyMzA2MjQgNC43NDYzNTAxLTcuOTEwNTgzNCAxMi44Mzc3NDY5LTEzLjkwMDAyNTIgMTkuNDE0ODMyLTE0LjQ4NzY2ODYgNS4wNDUzODA2LS41MDU0MDk0IDkuODkyNTQzNi45Mjc2ODIzIDEzLjk0NDM2MjggMi44Nzk2NDM1bC42NDk5ODU4LjMyMDg1ODIuNjM1NDc2OC4zMjg2MDkzLjYyMDQwMTkuMzM1MDE1Yy4xMDIxMTI2LjA1NjI5NDkuMjAzNTczNi4xMTI4MDA3LjMwNDM3MS4xNjk0ODkybC41OTY3Mjg2LjM0MjEwMTMuNTgwMjM5LjM0NTE0MzkuNTYzMTgzNi4zNDY4NDExLjU0NTU2MjQuMzQ3MTkzMi41MjczNzUzLjM0NjE5OTkuNTA4NjIyMy4zNDM4NjE0Yy4wODMxNzYyLjA1NzA0MDYuMTY1NTQ3NS4xMTM5Mjc3LjI0NzEwMi4xNzA2MzMzbC40Nzk0MzIuMzM3ODMxMi40NTkyNjQ0LjMzMjEyOTQuNDM4NTMxLjMyNTA4MjUuNDE3MjMxNy4zMTY2OTAyLjU4NDY3MzYuNDU2MzU2OS41MzM1Njc0LjQyOTkwNzEuNjI4NjIzNy41MjQyMTc5LjY0NjM0MzIuNTYxNDAxNXptLTMwLjcwMDEwNTYgMTQuNTcxMzI0MyAyLjQ0MDk4MDEuODgxNDY1Yy4xMTMwMDgzLjg4NTIzMTkuMjczMTAzNCAxLjcyMzM3NzEuNDQxMDQ2NCAyLjQ4ODI3NjFsLjEwMTM5MzYuNDQ5OTQwNi0yLjcxMjIwMDEtLjk3MTg3MTctLjAzMzgzNDctLjIxMjE2MTgtLjA2NjA0MjEtLjQ3NTU4NDMtLjA2MTE2MDEtLjU0MTIxOTVjLS4wNDgwMjg1LS40Nzc0NjAyLS4wODc1ODE0LTEuMDE5OTAwMy0uMTEwMTgzMS0xLjYxODg0NDR6bTMxLjUwNjcyMzktNy42NjE5NjUyaC0xLjUxNDMxMTdjLS45NDAwMjM4IDAtMS4yMzkxMjI0LjQwOTc3Mi0xLjMzNDI5MDEuNjcwNTM2bC0uMDI4MjI2Ni4wOTUwMzM5Yy0uMDAzMjM3LjAxNDA3My0uMDA1ODI2Ni4wMjcxNTI2LS4wMDc4OTgyLjAzOTA3MzJsLS4wMDgxNTczLjA3MTUyMzktLjAwMDEyOTUgMy45MTUzODY0aDQuMTM2MTA1MWwtLjAwMTg1MzMtMy45MzQ3Njk0LS4wMTAyNjEyLS4wNjY5OTEzLS4wMjU3MjA3LS4wOTg3MjQxYy0uMDgzNTM1Ny0uMjU5MTUwNy0uMzUwOTEzNS0uNjkxMDY4Ni0xLjIwNTI1NjUtLjY5MTA2ODZ6bS01MC40OTIxMjQyLjMzOTAyNSAyLjU5OTE5MTcuOTQ5MjctLjQwODY0MS45NTE1ODM5Yy0uMjEyNDg4Mi40OTk0NjQ0LS40Mjc3Nzk2IDEuMDE0ODE0Mi0uNjAzMzU3NSAxLjQ1Nzc0NWwtLjExODA4NDkuMzAyODcxMi0yLjU5OTE5MTctLjk0OTI3LjEzMjM2NjItLjM0NTMwMzMuMjU4Mzg4OS0uNjM5MjAzNC4zMDU3MTExLS43MjgxOTc0LjMyNTQ4NzUtLjc1MzYyNDRjLjAzNjI0MzgtLjA4Mjc5NDMuMDcyMzQzNy0uMTY0ODgyMy4xMDgxMjk3LS4yNDU4NzE2em0zNS40NDUxMjA5LS4xNDM0NDQ5aC0zLjQ1Njg0Mzl2My42NTg4NjczaDMuNDM0Mzk2OGwuMDU0NzEwNi0uMDI1MzkyLjA4NjU5ODQtLjA0ODg5ODMuMTE0NzUzNi0uMDc4NjgyMmMuMjkyNjQyOC0uMjIxMTQ0OC43MzE2MDcxLS43MTQ5Nzk3LjczMTYwNzEtMS42ODc2ODQ3cy0uNDI4OTg3OC0xLjQ1NjU2MzQtLjcxNDk3OTctMS42NzEwNTczbC0uMTEyMTQ1NS0uMDc2MDc0MS0uMDg0NjMwMy0uMDQ2OTMwMXptLTE1LjQ0MjY0NTYtLjc2MDYyMTggMS42MjczMjAxIDEuMjg4Mjk1MWMtLjE4MDgxMzQuNzA1MTcyLS4zMTgyMzE1IDEuNDEwMzQ0LS40MTIyNTQ1IDIuMTE1NTE2bC0uMDYyMzgwNi41Mjg4NzktMS44MzA3MzUtMS40NDY1MDY3Yy4xODA4MTM0LS44MTM2Ni4zODQyMjg0LTEuNjQ5OTIxNy42NzgwNS0yLjQ4NjE4MzR6bTQuMDAwNDk1MS02LjMwNTg2NTEgMS4wMTcwNzUgMS41MzY5MTM0Yy0uMzk3Nzg5My40MTU4NzA3LS43NjY2NDg1LjgzMTc0MTMtMS4wOTUwMDU1IDEuMjcwNzU2MWwtLjIzODQ5MjguMzMzOTYyMy0xLjA4NDg4MDEtMS42MjczMjAxYy40MDY4My0uNTE5ODM4My44ODE0NjUxLTEuMDM5Njc2NyAxLjQwMTMwMzQtMS41MTQzMTE3em0tMTYuMTgyNzkzNi0zLjM0NTA0NjcgMS42MDQ3MTgzIDEuNDAxMzAzNGMtLjQwNjgzLjQyMzc4MTItLjgwMDk0NjUuODcyOTg5NC0xLjE3MjgxNDYgMS4zMjg1NTQybC0uMzY0MDk4Ny40NTY5Nzc1LTEuNzQwMzI4NC0xLjQ5MTcxMDFjLjUxOTgzODMtLjU2NTA0MTYgMS4wODQ4OC0xLjEzMDA4MzMgMS42NzI1MjM0LTEuNjk1MTI1em0yMi4zOTgyNTIxLS4wOTA0MDY3LjQ5NzIzNjYgMS40OTE3MTAxYy0uNTI0MzU4Ni4xNjI3MzItMS4wNDg3MTczLjM2ODg1OTItMS41NzMwNzYuNjA2ODA5NWwtLjM5MzI2OS4xODQyNDg4LS41MTk4Mzg0LTEuNTU5NTE1Yy41NjUwNDE3LS4yNDg2MTg0IDEuMjIwNDkwMS0uNDk3MjM2NyAxLjk4ODk0NjgtLjcyMzI1MzR6bTUuMjg4NzktLjU0MjQ0Yy41Nzg2MDI3LjAzNjE2MjcgMS4xNzE2NzA1LjEwMTI1NTUgMS43NzkyMDMzLjIwNjg1MDVsLjQ1ODM2MTguMDg2OTcxMi0uMDkwNDA2NyAxLjQwMTMwMzRjLS41OTY2ODQtLjEyNjU2OTQtMS4xOTMzNjgtLjIwOTc0MzUtMS43OTAwNTItLjI0OTUyMjRsLS40NDc1MTMtLjAyMTY5NzZ6bS0xOC41NTU5Njg2LTYuMjM4MDYwMSAxLjAxNzA3NSAxLjU1OTUxNWMtLjQ0MDczMjUuMjIwMzY2My0uODY4NzUxNi40NjYxNTk0LTEuMzAzMTI3NC43Mjc4NDQzbC0uNDM3MjAxLjI2NjYyOTEtMS4wMzk2NzY3LTEuNTgyMTE2N2MuNjEwMjQ1LS4zNjE2MjY3IDEuMTk3ODg4NC0uNjc4MDUgMS43NjI5MzAxLS45NzE4NzE3em0xOC41MTA3NjUzLjYzMjg0NjcuMDkwNDA2Ny0xLjQ5MTcxLjQ0MzUwNzMuMTMwNTU2NC4zODM5ODAzLjEyMDMyNTIuMzI4NTQ1OC4xMDk5MDc5LjI3NzIwMzcuMDk5MzA0OC4zMjg0OTE1LjEyODY2OS4yOTY0ODguMTMyNzExMi4xMzQxNDUxLjA2OTU4MzgtLjA5MDQwNjcgMS41MTQzMTE3Yy0uNDgyMTY4OS0uMTk1ODgxMS0uOTY0MzM3OC0uMzgxNzE3LTEuNDUzMjAzNS0uNTU3NTA3OHptLTguNTQzNDMwMS0yLjgyNTIwODQuNDUyMDMzMyAxLjM3ODcwMTdoLS4yMjYwMTY3Yy0uNDkxNTg2MiAwLS45ODMxNzI1LjAxMjcxMzQtMS40NzQ3NTg4LjA0NzY3NTRsLS40OTE1ODYyLjA0MjczMTMtLjQyOTQzMTctMS4zMzM0OTg0Yy43NDU4NTUtLjA5MDQwNjcgMS40NjkxMDg0LS4xMzU2MSAyLjE2OTc2MDEtLjEzNTYxeiIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg==" />
|
83
|
+
</a>
|
84
|
+
</nav>
|
85
|
+
|
86
|
+
<ul>
|
87
|
+
<li><strong>Rails version:</strong> <%= Rails.version %></li>
|
88
|
+
<li><strong>Rack version:</strong> <%= Rack.release %></li>
|
89
|
+
<li><strong>Ruby version:</strong> <%= RUBY_DESCRIPTION %></li>
|
90
|
+
</ul>
|
91
|
+
</body>
|
92
|
+
|
93
|
+
</html>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :enddoc:
|
4
|
+
|
5
|
+
# Make double-sure the RAILS_ENV is not set to production,
|
6
|
+
# so fixtures aren't loaded into that environment
|
7
|
+
abort("Abort testing: Your Rails environment is running in production mode!") if Rails.env.production?
|
8
|
+
|
9
|
+
require "active_support/test_case"
|
10
|
+
require "rails/generators/test_case"
|
11
|
+
require "active_support/testing/autorun"
|
12
|
+
|
13
|
+
require "rails/testing/maintain_test_schema"
|
14
|
+
|
15
|
+
if defined?(ActiveRecord::Base)
|
16
|
+
require "active_record/testing/query_assertions"
|
17
|
+
ActiveSupport.on_load(:active_support_test_case) do
|
18
|
+
include ActiveRecord::TestDatabases
|
19
|
+
include ActiveRecord::TestFixtures
|
20
|
+
include ActiveRecord::Assertions::QueryAssertions
|
21
|
+
|
22
|
+
self.fixture_paths << "#{Rails.root}/test/fixtures/"
|
23
|
+
self.file_fixture_path = "#{Rails.root}/test/fixtures/files"
|
24
|
+
end
|
25
|
+
|
26
|
+
ActiveSupport.on_load(:action_dispatch_integration_test) do
|
27
|
+
self.fixture_paths += ActiveSupport::TestCase.fixture_paths
|
28
|
+
end
|
29
|
+
else
|
30
|
+
ActiveSupport.on_load(:active_support_test_case) do
|
31
|
+
self.file_fixture_path = "#{Rails.root}/test/fixtures/files"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
ActiveSupport.on_load(:action_controller_test_case) do
|
36
|
+
def before_setup
|
37
|
+
@routes = Rails.application.routes
|
38
|
+
super
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
ActiveSupport.on_load(:action_dispatch_integration_test) do
|
43
|
+
def before_setup
|
44
|
+
@routes = Rails.application.routes
|
45
|
+
super
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/test_unit/runner"
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
module LineFiltering # :nodoc:
|
7
|
+
def run(reporter, options = {})
|
8
|
+
options = options.merge(filter: Rails::TestUnit::Runner.compose_filter(self, options[:filter]))
|
9
|
+
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/test_unit/line_filtering"
|
4
|
+
|
5
|
+
module Rails
|
6
|
+
class TestUnitRailtie < Rails::Railtie
|
7
|
+
config.app_generators do |c|
|
8
|
+
c.test_framework :test_unit, fixture: true,
|
9
|
+
fixture_replacement: nil
|
10
|
+
|
11
|
+
c.integration_tool :test_unit
|
12
|
+
c.system_tests :test_unit
|
13
|
+
end
|
14
|
+
|
15
|
+
initializer "test_unit.line_filtering" do
|
16
|
+
ActiveSupport.on_load(:active_support_test_case) {
|
17
|
+
ActiveSupport::TestCase.extend Rails::LineFiltering
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
rake_tasks do
|
22
|
+
load "rails/test_unit/testing.rake"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/core_ext/class/attribute"
|
4
|
+
require "minitest"
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
class TestUnitReporter < Minitest::StatisticsReporter
|
8
|
+
class_attribute :app_root
|
9
|
+
class_attribute :executable, default: "bin/rails test"
|
10
|
+
|
11
|
+
def prerecord(test_class, test_name)
|
12
|
+
super
|
13
|
+
if options[:verbose]
|
14
|
+
io.print "%s#%s = " % [test_class.name, test_name]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def record(result)
|
19
|
+
super
|
20
|
+
|
21
|
+
if options[:verbose]
|
22
|
+
io.puts color_output(format_line(result), by: result)
|
23
|
+
else
|
24
|
+
io.print color_output(result.result_code, by: result)
|
25
|
+
end
|
26
|
+
|
27
|
+
if output_inline? && result.failure && (!result.skipped? || options[:verbose])
|
28
|
+
io.puts
|
29
|
+
io.puts
|
30
|
+
io.puts color_output(result, by: result)
|
31
|
+
io.puts
|
32
|
+
io.puts format_rerun_snippet(result)
|
33
|
+
io.puts
|
34
|
+
end
|
35
|
+
|
36
|
+
if fail_fast? && result.failure && !result.skipped?
|
37
|
+
raise Interrupt
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def report
|
42
|
+
return if output_inline? || filtered_results.empty?
|
43
|
+
io.puts
|
44
|
+
io.puts "Failed tests:"
|
45
|
+
io.puts
|
46
|
+
io.puts aggregated_results
|
47
|
+
end
|
48
|
+
|
49
|
+
def aggregated_results # :nodoc:
|
50
|
+
filtered_results.map { |result| format_rerun_snippet(result) }.join "\n"
|
51
|
+
end
|
52
|
+
|
53
|
+
def filtered_results
|
54
|
+
if options[:verbose]
|
55
|
+
results
|
56
|
+
else
|
57
|
+
results.reject(&:skipped?)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def relative_path_for(file)
|
62
|
+
if app_root
|
63
|
+
file.sub(/^#{app_root}\/?/, "")
|
64
|
+
else
|
65
|
+
file
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def output_inline?
|
71
|
+
options[:output_inline]
|
72
|
+
end
|
73
|
+
|
74
|
+
def fail_fast?
|
75
|
+
options[:fail_fast]
|
76
|
+
end
|
77
|
+
|
78
|
+
def format_line(result)
|
79
|
+
"%.2f s = %s" % [result.time, result.result_code]
|
80
|
+
end
|
81
|
+
|
82
|
+
def format_rerun_snippet(result)
|
83
|
+
location, line = if result.respond_to?(:source_location)
|
84
|
+
result.source_location
|
85
|
+
else
|
86
|
+
result.method(result.name).source_location
|
87
|
+
end
|
88
|
+
|
89
|
+
"#{executable} #{relative_path_for(location)}:#{line}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def app_root
|
93
|
+
@app_root ||= self.class.app_root ||
|
94
|
+
if defined?(ENGINE_ROOT)
|
95
|
+
ENGINE_ROOT
|
96
|
+
elsif Rails.respond_to?(:root)
|
97
|
+
Rails.root
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def colored_output?
|
102
|
+
options[:color] && io.respond_to?(:tty?) && io.tty?
|
103
|
+
end
|
104
|
+
|
105
|
+
codes = { red: 31, green: 32, yellow: 33 }
|
106
|
+
COLOR_BY_RESULT_CODE = {
|
107
|
+
"." => codes[:green],
|
108
|
+
"E" => codes[:red],
|
109
|
+
"F" => codes[:red],
|
110
|
+
"S" => codes[:yellow]
|
111
|
+
}
|
112
|
+
|
113
|
+
def color_output(string, by:)
|
114
|
+
if colored_output?
|
115
|
+
"\e[#{COLOR_BY_RESULT_CODE[by.result_code]}m#{string}\e[0m"
|
116
|
+
else
|
117
|
+
string
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "shellwords"
|
4
|
+
require "rake/file_list"
|
5
|
+
require "active_support"
|
6
|
+
require "active_support/core_ext/module/attribute_accessors"
|
7
|
+
require "active_support/core_ext/range"
|
8
|
+
require "rails/test_unit/test_parser"
|
9
|
+
|
10
|
+
module Rails
|
11
|
+
module TestUnit
|
12
|
+
class InvalidTestError < StandardError
|
13
|
+
def initialize(path, suggestion)
|
14
|
+
super(<<~MESSAGE.squish)
|
15
|
+
Could not load test file: #{path}.
|
16
|
+
#{suggestion}
|
17
|
+
MESSAGE
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Runner
|
22
|
+
TEST_FOLDERS = [:models, :helpers, :channels, :controllers, :mailers, :integration, :jobs, :mailboxes]
|
23
|
+
PATH_ARGUMENT_PATTERN = %r"^(?!/.+/$)[.\w]*[/\\]"
|
24
|
+
mattr_reader :filters, default: []
|
25
|
+
|
26
|
+
class << self
|
27
|
+
def attach_before_load_options(opts)
|
28
|
+
opts.on("--warnings", "-w", "Run with Ruby warnings enabled") { }
|
29
|
+
opts.on("-e", "--environment ENV", "Run tests in the ENV environment") { }
|
30
|
+
end
|
31
|
+
|
32
|
+
def parse_options(argv)
|
33
|
+
# Perform manual parsing and cleanup since option parser raises on unknown options.
|
34
|
+
env_index = argv.index("--environment") || argv.index("-e")
|
35
|
+
if env_index
|
36
|
+
argv.delete_at(env_index)
|
37
|
+
environment = argv.delete_at(env_index).strip
|
38
|
+
end
|
39
|
+
ENV["RAILS_ENV"] = environment || "test"
|
40
|
+
|
41
|
+
w_index = argv.index("--warnings") || argv.index("-w")
|
42
|
+
$VERBOSE = argv.delete_at(w_index) if w_index
|
43
|
+
end
|
44
|
+
|
45
|
+
def run_from_rake(test_command, argv = [])
|
46
|
+
# Ensure the tests run during the Rake Task action, not when the process exits
|
47
|
+
success = system("rails", test_command, *argv, *Shellwords.split(ENV["TESTOPTS"] || ""))
|
48
|
+
success || exit(false)
|
49
|
+
end
|
50
|
+
|
51
|
+
def run(argv = [])
|
52
|
+
load_tests(argv)
|
53
|
+
|
54
|
+
require "active_support/testing/autorun"
|
55
|
+
end
|
56
|
+
|
57
|
+
def load_tests(argv)
|
58
|
+
patterns = extract_filters(argv)
|
59
|
+
tests = list_tests(patterns)
|
60
|
+
tests.to_a.each do |path|
|
61
|
+
abs_path = File.expand_path(path)
|
62
|
+
require abs_path
|
63
|
+
rescue LoadError => exception
|
64
|
+
if exception.path == abs_path
|
65
|
+
all_tests = list_tests([default_test_glob])
|
66
|
+
corrections = DidYouMean::SpellChecker.new(dictionary: all_tests).correct(path)
|
67
|
+
|
68
|
+
if corrections.empty?
|
69
|
+
raise exception
|
70
|
+
end
|
71
|
+
raise InvalidTestError.new(path, DidYouMean::Formatter.message_for(corrections))
|
72
|
+
else
|
73
|
+
raise
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def compose_filter(runnable, filter)
|
79
|
+
filter = normalize_declarative_test_filter(filter)
|
80
|
+
|
81
|
+
if filters.any? { |_, lines| lines.any? }
|
82
|
+
CompositeFilter.new(runnable, filter, filters)
|
83
|
+
else
|
84
|
+
filter
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
def extract_filters(argv)
|
90
|
+
# Extract absolute and relative paths but skip -n /.*/ regexp filters.
|
91
|
+
argv.filter_map do |path|
|
92
|
+
next unless path_argument?(path)
|
93
|
+
|
94
|
+
path = path.tr("\\", "/")
|
95
|
+
case
|
96
|
+
when /(:\d+(-\d+)?)+$/.match?(path)
|
97
|
+
file, *lines = path.split(":")
|
98
|
+
filters << [ file, lines ]
|
99
|
+
file
|
100
|
+
when Dir.exist?(path)
|
101
|
+
"#{path}/**/*_test.rb"
|
102
|
+
else
|
103
|
+
filters << [ path, [] ]
|
104
|
+
path
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def default_test_glob
|
110
|
+
ENV["DEFAULT_TEST"] || "test/**/*_test.rb"
|
111
|
+
end
|
112
|
+
|
113
|
+
def default_test_exclude_glob
|
114
|
+
ENV["DEFAULT_TEST_EXCLUDE"] || "test/{system,dummy,fixtures}/**/*_test.rb"
|
115
|
+
end
|
116
|
+
|
117
|
+
def regexp_filter?(arg)
|
118
|
+
arg.start_with?("/") && arg.end_with?("/")
|
119
|
+
end
|
120
|
+
|
121
|
+
def path_argument?(arg)
|
122
|
+
PATH_ARGUMENT_PATTERN.match?(arg)
|
123
|
+
end
|
124
|
+
|
125
|
+
def list_tests(patterns)
|
126
|
+
tests = Rake::FileList[patterns.any? ? patterns : default_test_glob]
|
127
|
+
tests.exclude(default_test_exclude_glob) if patterns.empty?
|
128
|
+
tests
|
129
|
+
end
|
130
|
+
|
131
|
+
def normalize_declarative_test_filter(filter)
|
132
|
+
if filter.is_a?(String)
|
133
|
+
if regexp_filter?(filter)
|
134
|
+
# Minitest::Spec::DSL#it does not replace whitespace in method
|
135
|
+
# names, so match unmodified method names as well.
|
136
|
+
filter = filter.gsub(/\s+/, "_").delete_suffix("/") + "|" + filter.delete_prefix("/")
|
137
|
+
elsif !filter.start_with?("test_")
|
138
|
+
filter = "test_#{filter.gsub(/\s+/, "_")}"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
filter
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
class CompositeFilter # :nodoc:
|
147
|
+
attr_reader :named_filter
|
148
|
+
|
149
|
+
def initialize(runnable, filter, patterns)
|
150
|
+
@runnable = runnable
|
151
|
+
@named_filter = derive_named_filter(filter)
|
152
|
+
@filters = [ @named_filter, *derive_line_filters(patterns) ].compact
|
153
|
+
end
|
154
|
+
|
155
|
+
# minitest uses === to find matching filters.
|
156
|
+
def ===(method)
|
157
|
+
@filters.any? { |filter| filter === method }
|
158
|
+
end
|
159
|
+
|
160
|
+
private
|
161
|
+
def derive_named_filter(filter)
|
162
|
+
if filter.respond_to?(:named_filter)
|
163
|
+
filter.named_filter
|
164
|
+
elsif filter =~ %r%/(.*)/% # Regexp filtering copied from minitest.
|
165
|
+
Regexp.new $1
|
166
|
+
elsif filter.is_a?(String)
|
167
|
+
filter
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def derive_line_filters(patterns)
|
172
|
+
patterns.flat_map do |file, lines|
|
173
|
+
if lines.empty?
|
174
|
+
Filter.new(@runnable, file, nil) if file
|
175
|
+
else
|
176
|
+
lines.map { |line| Filter.new(@runnable, file, line) }
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
class Filter # :nodoc:
|
183
|
+
def initialize(runnable, file, line_or_range)
|
184
|
+
@runnable, @file = runnable, File.expand_path(file)
|
185
|
+
if line_or_range
|
186
|
+
first, last = line_or_range.split("-").map(&:to_i)
|
187
|
+
last ||= first
|
188
|
+
@line_range = Range.new(first, last)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def ===(method)
|
193
|
+
return unless @runnable.method_defined?(method)
|
194
|
+
|
195
|
+
if @line_range
|
196
|
+
test_file, test_range = definition_for(@runnable.instance_method(method))
|
197
|
+
test_file == @file && @line_range.overlaps?(test_range)
|
198
|
+
else
|
199
|
+
@runnable.instance_method(method).source_location.first == @file
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
private
|
204
|
+
def definition_for(method)
|
205
|
+
TestParser.definition_for(method)
|
206
|
+
end
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "prism"
|
5
|
+
rescue LoadError
|
6
|
+
# If Prism isn't available (because of using an older Ruby version) then we'll
|
7
|
+
# define a fallback parser using ripper.
|
8
|
+
end
|
9
|
+
|
10
|
+
if defined?(Prism)
|
11
|
+
module Rails
|
12
|
+
module TestUnit
|
13
|
+
# Parse a test file to extract the line ranges of all tests in both
|
14
|
+
# method-style (def test_foo) and declarative-style (test "foo" do)
|
15
|
+
module TestParser
|
16
|
+
# Helper to translate a method object into the path and line range where
|
17
|
+
# the method was defined.
|
18
|
+
def self.definition_for(method)
|
19
|
+
filepath, start_line = method.source_location
|
20
|
+
queue = [Prism.parse_file(filepath).value]
|
21
|
+
|
22
|
+
while (node = queue.shift)
|
23
|
+
case node.type
|
24
|
+
when :def_node
|
25
|
+
if node.location.start_line == start_line
|
26
|
+
return [filepath, start_line..node.location.end_line]
|
27
|
+
end
|
28
|
+
when :call_node
|
29
|
+
if node.location.start_line == start_line
|
30
|
+
return [filepath, start_line..node.location.end_line]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
queue.concat(node.compact_child_nodes)
|
35
|
+
end
|
36
|
+
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# If we have Prism, then we don't need to define the fallback parser using
|
44
|
+
# ripper.
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
require "ripper"
|
49
|
+
|
50
|
+
module Rails
|
51
|
+
module TestUnit
|
52
|
+
# Parse a test file to extract the line ranges of all tests in both
|
53
|
+
# method-style (def test_foo) and declarative-style (test "foo" do)
|
54
|
+
class TestParser < Ripper # :nodoc:
|
55
|
+
# Helper to translate a method object into the path and line range where
|
56
|
+
# the method was defined.
|
57
|
+
def self.definition_for(method_obj)
|
58
|
+
path, begin_line = method_obj.source_location
|
59
|
+
begins_to_ends = new(File.read(path), path).parse
|
60
|
+
return unless end_line = begins_to_ends[begin_line]
|
61
|
+
[path, (begin_line..end_line)]
|
62
|
+
end
|
63
|
+
|
64
|
+
def initialize(*)
|
65
|
+
# A hash mapping the 1-indexed line numbers that tests start on to where they end.
|
66
|
+
@begins_to_ends = {}
|
67
|
+
super
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse
|
71
|
+
super
|
72
|
+
@begins_to_ends
|
73
|
+
end
|
74
|
+
|
75
|
+
# method test e.g. `def test_some_description`
|
76
|
+
# This event's first argument gets the `ident` node containing the method
|
77
|
+
# name, which we have overridden to return the line number of the ident
|
78
|
+
# instead.
|
79
|
+
def on_def(begin_line, *)
|
80
|
+
@begins_to_ends[begin_line] = lineno
|
81
|
+
end
|
82
|
+
|
83
|
+
# Everything past this point is to support declarative tests, which
|
84
|
+
# require more work to get right because of the many different ways
|
85
|
+
# methods can be invoked in ruby, all of which are parsed differently.
|
86
|
+
#
|
87
|
+
# The approach is just to store the current line number when the
|
88
|
+
# "test" method is called and pass it up the tree so it's available at
|
89
|
+
# the point when we also know the line where the associated block ends.
|
90
|
+
|
91
|
+
def on_method_add_block(begin_line, end_line)
|
92
|
+
if begin_line && end_line
|
93
|
+
@begins_to_ends[begin_line] = end_line
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def on_command_call(*, begin_lineno, _args)
|
98
|
+
begin_lineno
|
99
|
+
end
|
100
|
+
|
101
|
+
def first_arg(arg, *)
|
102
|
+
arg
|
103
|
+
end
|
104
|
+
|
105
|
+
def just_lineno(*)
|
106
|
+
lineno
|
107
|
+
end
|
108
|
+
|
109
|
+
alias on_method_add_arg first_arg
|
110
|
+
alias on_command first_arg
|
111
|
+
alias on_stmts_add first_arg
|
112
|
+
alias on_arg_paren first_arg
|
113
|
+
alias on_bodystmt first_arg
|
114
|
+
|
115
|
+
alias on_ident just_lineno
|
116
|
+
alias on_do_block just_lineno
|
117
|
+
alias on_stmts_new just_lineno
|
118
|
+
alias on_brace_block just_lineno
|
119
|
+
|
120
|
+
def on_args_new
|
121
|
+
[]
|
122
|
+
end
|
123
|
+
|
124
|
+
def on_args_add(parts, part)
|
125
|
+
parts << part
|
126
|
+
end
|
127
|
+
|
128
|
+
def on_args_add_block(args, *rest)
|
129
|
+
args.first
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "minitest"
|
4
|
+
require "rails/test_unit/runner"
|
5
|
+
|
6
|
+
task default: :test
|
7
|
+
|
8
|
+
desc "Run all tests in test folder except system ones"
|
9
|
+
task :test do
|
10
|
+
Rails::TestUnit::Runner.run_from_rake("test", Array(ENV["TEST"]))
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :test do
|
14
|
+
task :prepare do
|
15
|
+
# Placeholder task for other Railtie and plugins to enhance.
|
16
|
+
# If used with Active Record, this task runs before the database schema is synchronized.
|
17
|
+
end
|
18
|
+
|
19
|
+
task run: %w[test]
|
20
|
+
|
21
|
+
desc "Reset the database and run `bin/rails test`"
|
22
|
+
task :db do
|
23
|
+
success = system({ "RAILS_ENV" => ENV.fetch("RAILS_ENV", "test") }, "rake", "db:test:prepare", "test")
|
24
|
+
success || exit(false)
|
25
|
+
end
|
26
|
+
|
27
|
+
[
|
28
|
+
*Rails::TestUnit::Runner::TEST_FOLDERS,
|
29
|
+
:all,
|
30
|
+
:generators,
|
31
|
+
:units,
|
32
|
+
:functionals,
|
33
|
+
:system,
|
34
|
+
].each do |name|
|
35
|
+
task name do
|
36
|
+
Rails::TestUnit::Runner.run_from_rake("test:#{name}")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|