jets 4.0.17 → 5.0.0.beta1
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 +4 -4
- data/.gitignore +5 -1
- data/CHANGELOG.md +52 -23
- data/Gemfile +1 -5
- data/LICENSE.txt +1 -1
- data/Rakefile +3 -3
- data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
- data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
- data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
- data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
- data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
- data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
- data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
- data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
- data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
- data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
- data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
- data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
- data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
- data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
- data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
- data/engines/internal/app/views/layouts/application.html.erb +51 -0
- data/engines/internal/lib/internal/actiondispatch.rb +39 -0
- data/engines/internal/lib/internal/actionmailer.rb +51 -0
- data/engines/internal/lib/internal/actionview.rb +152 -0
- data/engines/internal/lib/internal/activerecord.rb +37 -0
- data/engines/internal/lib/internal/activesupport.rb +47 -0
- data/engines/internal/lib/internal/engine.rb +13 -0
- data/engines/internal/lib/internal/i18n_engine.rb +19 -0
- data/engines/internal/lib/internal/jets_controller.rb +46 -0
- data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
- data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
- data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
- data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
- data/exe/jets +1 -10
- data/jets.gemspec +29 -27
- data/lib/jets/app_loader.rb +77 -0
- data/lib/jets/application/bootstrap.rb +100 -0
- data/lib/jets/application/configuration/defaults.rb +256 -0
- data/lib/jets/application/configuration.rb +494 -0
- data/lib/jets/application/default_middleware_stack.rb +140 -0
- data/lib/jets/application/dummy_erb_compiler.rb +18 -0
- data/lib/jets/application/finisher.rb +266 -0
- data/lib/jets/application/routes_reloader.rb +80 -0
- data/lib/jets/application.rb +515 -198
- data/lib/jets/authorizer/base.rb +1 -0
- data/lib/jets/authorizer/dsl.rb +15 -11
- data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
- data/lib/jets/autoloaders/gem.rb +70 -0
- data/lib/jets/autoloaders/inflector.rb +21 -0
- data/lib/jets/autoloaders.rb +38 -101
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/backtrace_cleaner.rb +27 -0
- data/lib/jets/booter.rb +29 -176
- data/lib/jets/builders/code_builder.rb +45 -117
- data/lib/jets/builders/code_size.rb +1 -0
- data/lib/jets/builders/gem_replacer.rb +5 -6
- data/lib/jets/builders/handler_generator.rb +34 -14
- data/lib/jets/builders/lambda_layer.rb +2 -7
- data/lib/jets/builders/purger.rb +1 -1
- data/lib/jets/builders/rack_packager.rb +1 -1
- data/lib/jets/builders/ruby_packager.rb +32 -21
- data/lib/jets/builders/shim_vars/app.rb +10 -6
- data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
- data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
- data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
- data/lib/jets/bundle.rb +2 -9
- data/lib/jets/cfn/base.rb +82 -0
- data/lib/jets/cfn/builder/api/base.rb +12 -0
- data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
- data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
- data/lib/jets/cfn/builder/api/mapping.rb +54 -0
- data/lib/jets/cfn/builder/api/methods.rb +72 -0
- data/lib/jets/cfn/builder/api/paged.rb +30 -0
- data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
- data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
- data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
- data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
- data/lib/jets/cfn/builder/api/resources.rb +40 -0
- data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
- data/lib/jets/cfn/builder/controller.rb +28 -0
- data/lib/jets/cfn/builder/function.rb +9 -0
- data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
- data/lib/jets/cfn/builder/job.rb +10 -0
- data/lib/jets/cfn/builder/nested.rb +130 -0
- data/lib/jets/cfn/builder/one_controller.rb +53 -0
- data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
- data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
- data/lib/jets/cfn/builder/post_process.rb +25 -0
- data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
- data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
- data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
- data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
- data/lib/jets/cfn/deployment.rb +45 -0
- data/lib/jets/cfn/download.rb +39 -0
- data/lib/jets/cfn/params/api/base.rb +39 -0
- data/lib/jets/cfn/params/api/cors.rb +10 -0
- data/lib/jets/cfn/params/api/methods.rb +69 -0
- data/lib/jets/cfn/params/api/resources.rb +28 -0
- data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
- data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
- data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
- data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
- data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
- data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
- data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
- data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
- data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
- data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
- data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
- data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
- data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
- data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
- data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
- data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
- data/lib/jets/cfn/resource/lambda/function.rb +266 -0
- data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
- data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
- data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
- data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
- data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
- data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
- data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
- data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
- data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
- data/lib/jets/cfn/resource/nested/base.rb +38 -0
- data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
- data/lib/jets/cfn/resource/one/function.rb +66 -0
- data/lib/jets/cfn/resource/one/permission.rb +17 -0
- data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
- data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
- data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
- data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
- data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
- data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
- data/lib/jets/cfn/resource.rb +8 -0
- data/lib/jets/cfn/ship.rb +20 -19
- data/lib/jets/cfn/template.rb +89 -0
- data/lib/jets/cfn/upload.rb +40 -37
- data/lib/jets/cli.rb +28 -210
- data/lib/jets/command/actions.rb +49 -0
- data/lib/jets/command/api_helpers.rb +41 -0
- data/lib/jets/command/aws_helpers.rb +26 -0
- data/lib/jets/command/base.rb +204 -0
- data/lib/jets/command/behavior.rb +83 -0
- data/lib/jets/command/environment_argument.rb +42 -0
- data/lib/jets/command/help/call.md +48 -0
- data/lib/jets/{commands → command}/help/deploy.md +1 -1
- data/lib/jets/command/help/logs.md +21 -0
- data/lib/jets/{commands → command}/help/new.md +3 -4
- data/lib/jets/command/help/projects.md +6 -0
- data/lib/jets/command/help/releases.md +37 -0
- data/lib/jets/command/help/rollback.md +5 -0
- data/lib/jets/command/help/routes.md +15 -0
- data/lib/jets/command/help/stacks.md +6 -0
- data/lib/jets/command/help.rb +17 -0
- data/lib/jets/command/helpers/editor.rb +35 -0
- data/lib/jets/command.rb +133 -0
- data/lib/jets/commands/application/application_command.rb +40 -0
- data/lib/jets/commands/build/build_command.rb +33 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
- data/lib/jets/commands/call/autoload_guesser.rb +2 -2
- data/lib/jets/commands/call/base_guesser.rb +4 -4
- data/lib/jets/commands/call/call_command.rb +27 -0
- data/lib/jets/commands/call/caller.rb +184 -0
- data/lib/jets/commands/call/guesser.rb +1 -1
- data/lib/jets/commands/clean/base.rb +1 -1
- data/lib/jets/commands/clean/build.rb +1 -1
- data/lib/jets/commands/clean/clean_command.rb +15 -0
- data/lib/jets/commands/clean/log.rb +1 -1
- data/lib/jets/commands/configure/configure_command.rb +9 -0
- data/lib/jets/commands/console/console_command.rb +38 -0
- data/lib/jets/commands/credentials/USAGE +103 -0
- data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
- data/lib/jets/commands/credentials/credentials_command.rb +139 -0
- data/lib/jets/commands/db/system/change/change_command.rb +24 -0
- data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
- data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
- data/lib/jets/commands/delete/delete_command.rb +155 -0
- data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
- data/lib/jets/commands/dev/dev_command.rb +19 -0
- data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
- data/lib/jets/commands/encrypted/USAGE +46 -0
- data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
- data/lib/jets/commands/gems/gems_command.rb +14 -0
- data/lib/jets/commands/generate/generate_command.rb +95 -0
- data/lib/jets/commands/help/USAGE +20 -0
- data/lib/jets/commands/help/help_command.rb +15 -0
- data/lib/jets/commands/initializers/initializers_command.rb +19 -0
- data/lib/jets/commands/logs/logs_command.rb +45 -0
- data/lib/jets/commands/new/new_command.rb +19 -0
- data/lib/jets/commands/notes/notes_command.rb +30 -0
- data/lib/jets/commands/plugin/plugin_command.rb +45 -0
- data/lib/jets/commands/projects/projects_command.rb +30 -0
- data/lib/jets/commands/rake/rake_command.rb +59 -0
- data/lib/jets/commands/releases/releases_command.rb +72 -0
- data/lib/jets/commands/rollback/rollback_command.rb +41 -0
- data/lib/jets/commands/routes/routes_command.rb +19 -0
- data/lib/jets/commands/runner/runner_command.rb +60 -0
- data/lib/jets/commands/server/server_command.rb +291 -0
- data/lib/jets/commands/stacks/stacks_command.rb +39 -0
- data/lib/jets/commands/status/status_command.rb +9 -0
- data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
- data/lib/jets/commands/version/version_command.rb +11 -0
- data/lib/jets/commands.rb +17 -0
- data/lib/jets/configuration.rb +166 -0
- data/lib/jets/controller/base.rb +105 -183
- data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
- data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
- data/lib/jets/controller/compat/caching.rb +13 -0
- data/lib/jets/controller/compat/future.rb +13 -0
- data/lib/jets/controller/compat/route_set.rb +47 -0
- data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
- data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
- data/lib/jets/controller/decorate/logging.rb +90 -0
- data/lib/jets/controller/decorate/redirecting.rb +16 -0
- data/lib/jets/controller/decorate/url_for.rb +10 -0
- data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
- data/lib/jets/controller/handler.rb +41 -0
- data/lib/jets/controller/middleware/main.rb +16 -8
- data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
- data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
- data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
- data/lib/jets/controller/rack_adapter/action.rb +35 -0
- data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
- data/lib/jets/controller/request/compat/params.rb +144 -0
- data/lib/jets/controller/request/compat/request.rb +125 -0
- data/lib/jets/controller/request.rb +35 -18
- data/lib/jets/controller/response/compat/response.rb +67 -0
- data/lib/jets/controller/response.rb +91 -8
- data/lib/jets/core.rb +136 -51
- data/lib/jets/core_ext/kernel.rb +2 -2
- data/lib/jets/core_ext/symbol.rb +5 -0
- data/lib/jets/core_ext.rb +4 -0
- data/lib/jets/dev_caching.rb +44 -0
- data/lib/jets/dotenv/ssm.rb +2 -2
- data/lib/jets/dotenv.rb +2 -1
- data/lib/jets/engine/configuration.rb +96 -0
- data/lib/jets/engine/turbines.rb +23 -0
- data/lib/jets/engine.rb +380 -0
- data/lib/jets/exception_reporting.rb +43 -0
- data/lib/jets/generators/job/job_generator.rb +41 -0
- data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
- data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
- data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
- data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
- data/lib/jets/generators/overrides/app/USAGE +38 -0
- data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
- data/lib/jets/generators/overrides/app/helpers.rb +143 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
- data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
- data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
- data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
- data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
- data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
- data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
- data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
- data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
- data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
- data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
- data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
- data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
- data/lib/jets/generators.rb +112 -0
- data/lib/jets/info.rb +116 -0
- data/lib/jets/initializable.rb +95 -0
- data/lib/jets/job/base.rb +3 -2
- data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
- data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
- data/lib/jets/job/dsl/iot_event.rb +6 -6
- data/lib/jets/job/dsl/kinesis_event.rb +5 -5
- data/lib/jets/job/dsl/log_event.rb +2 -2
- data/lib/jets/job/dsl/rule_event.rb +7 -4
- data/lib/jets/job/dsl/s3_event.rb +1 -1
- data/lib/jets/job/dsl/sns_event.rb +6 -6
- data/lib/jets/job/dsl/sqs_event.rb +11 -11
- data/lib/jets/klass.rb +5 -6
- data/lib/jets/lambda/definition.rb +118 -0
- data/lib/jets/lambda/dsl/warnings.rb +57 -0
- data/lib/jets/lambda/dsl.rb +64 -53
- data/lib/jets/lambda/function.rb +3 -3
- data/lib/jets/lambda/function_constructor.rb +6 -6
- data/lib/jets/lambda/functions.rb +36 -1
- data/lib/jets/mega/request/source.rb +1 -2
- data/lib/jets/mega/request.rb +4 -4
- data/lib/jets/names.rb +31 -15
- data/lib/jets/overrides/dummy/rails.rb +11 -0
- data/lib/jets/overrides/lambda/marshaller.rb +10 -0
- data/lib/jets/overrides/puma.rb +10 -0
- data/lib/jets/paths.rb +243 -0
- data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
- data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
- data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
- data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
- data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
- data/lib/jets/preheat.rb +12 -25
- data/lib/jets/processors/deducer.rb +2 -2
- data/lib/jets/processors/main_processor.rb +6 -13
- data/lib/jets/rack/logger.rb +77 -0
- data/lib/jets/router/compat/route_set.rb +177 -0
- data/lib/jets/router/dsl/mount.rb +40 -6
- data/lib/jets/router/dsl.rb +125 -105
- data/lib/jets/router/engine_mount.rb +36 -0
- data/lib/jets/router/help.rb +130 -0
- data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
- data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
- data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
- data/lib/jets/router/matcher.rb +135 -16
- data/lib/jets/router/resources/options.rb +6 -4
- data/lib/jets/router/route/after_initialize.rb +64 -0
- data/lib/jets/router/route/as.rb +93 -0
- data/lib/jets/router/route/authorizer.rb +1 -0
- data/lib/jets/router/route/compat.rb +45 -0
- data/lib/jets/router/route/info.rb +74 -0
- data/lib/jets/router/route/node.rb +137 -0
- data/lib/jets/router/route/path.rb +93 -0
- data/lib/jets/router/route.rb +109 -106
- data/lib/jets/router/route_set.rb +214 -0
- data/lib/jets/router/scope.rb +204 -69
- data/lib/jets/router/state.rb +36 -16
- data/lib/jets/router/util.rb +1 -31
- data/lib/jets/router.rb +64 -162
- data/lib/jets/ruby_version_check.rb +15 -0
- data/lib/jets/rule/base.rb +1 -0
- data/lib/jets/rule/dsl.rb +7 -7
- data/lib/jets/secrets.rb +110 -0
- data/lib/jets/spec_helpers/controllers/request.rb +22 -16
- data/lib/jets/spec_helpers/controllers.rb +32 -24
- data/lib/jets/spec_helpers.rb +0 -6
- data/lib/jets/stack/builder.rb +3 -2
- data/lib/jets/stack/definition.rb +1 -4
- data/lib/jets/stack/function.rb +2 -2
- data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
- data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
- data/lib/jets/stack/main/dsl/lambda.rb +26 -20
- data/lib/jets/stack/main/dsl/sqs.rb +2 -2
- data/lib/jets/stack/output/lookup.rb +1 -1
- data/lib/jets/stack/output.rb +2 -2
- data/lib/jets/stack/parameter.rb +2 -2
- data/lib/jets/stack/resource.rb +3 -3
- data/lib/jets/stack/s3_event.rb +51 -37
- data/lib/jets/stack.rb +1 -1
- data/lib/jets/tasks/engine.rake +85 -0
- data/lib/jets/tasks/framework.rake +66 -0
- data/lib/jets/tasks/log.rake +41 -0
- data/lib/jets/tasks/middleware.rake +9 -0
- data/lib/jets/tasks/misc.rake +81 -0
- data/lib/jets/tasks/statistics.rake +37 -0
- data/lib/jets/tasks/tmp.rake +51 -0
- data/lib/jets/tasks/yarn.rake +29 -0
- data/lib/jets/tasks/zeitwerk.rake +61 -0
- data/lib/jets/tasks.rb +18 -0
- data/lib/jets/turbine/configurable.rb +36 -0
- data/lib/jets/turbine/configuration.rb +101 -0
- data/lib/jets/turbine.rb +164 -20
- data/lib/jets/util/camelize.rb +24 -0
- data/lib/jets/version.rb +1 -1
- data/lib/jets.rb +7 -16
- metadata +410 -362
- data/bin/release +0 -9
- data/lib/jets/application/defaults.rb +0 -230
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
- data/lib/jets/builders/reconfigure_rails.rb +0 -114
- data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
- data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
- data/lib/jets/cfn/builders/controller_builder.rb +0 -50
- data/lib/jets/cfn/builders/function_builder.rb +0 -14
- data/lib/jets/cfn/builders/job_builder.rb +0 -14
- data/lib/jets/cfn/builders/page_builder.rb +0 -80
- data/lib/jets/cfn/built_template.rb +0 -15
- data/lib/jets/cfn/template_source.rb +0 -64
- data/lib/jets/commands/base.rb +0 -145
- data/lib/jets/commands/call.rb +0 -185
- data/lib/jets/commands/clean.rb +0 -19
- data/lib/jets/commands/configure.rb +0 -51
- data/lib/jets/commands/console.rb +0 -18
- data/lib/jets/commands/db/environment-task.rake +0 -3
- data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
- data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
- data/lib/jets/commands/db/tasks.rb +0 -34
- data/lib/jets/commands/db.rb +0 -13
- data/lib/jets/commands/dbconsole.rb +0 -134
- data/lib/jets/commands/delete.rb +0 -136
- data/lib/jets/commands/dynamodb/migrate.rb +0 -9
- data/lib/jets/commands/dynamodb/migrator.rb +0 -36
- data/lib/jets/commands/dynamodb.rb +0 -19
- data/lib/jets/commands/gems.rb +0 -13
- data/lib/jets/commands/help/call.md +0 -69
- data/lib/jets/commands/help/dynamodb/generate.md +0 -52
- data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
- data/lib/jets/commands/help/routes.md +0 -16
- data/lib/jets/commands/help.rb +0 -9
- data/lib/jets/commands/import/base.rb +0 -49
- data/lib/jets/commands/import/cheatsheet.rb +0 -35
- data/lib/jets/commands/import/rack.rb +0 -16
- data/lib/jets/commands/import/rails.rb +0 -74
- data/lib/jets/commands/import/sequence.rb +0 -90
- data/lib/jets/commands/import/templates/config/database.yml +0 -30
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
- data/lib/jets/commands/import.rb +0 -12
- data/lib/jets/commands/main.rb +0 -169
- data/lib/jets/commands/markdown/creator.rb +0 -58
- data/lib/jets/commands/markdown/index.rb +0 -27
- data/lib/jets/commands/markdown/page.rb +0 -125
- data/lib/jets/commands/markdown/shell.rb +0 -11
- data/lib/jets/commands/new.rb +0 -173
- data/lib/jets/commands/rake_command.rb +0 -61
- data/lib/jets/commands/rake_tasks.rb +0 -50
- data/lib/jets/commands/runner.rb +0 -16
- data/lib/jets/commands/sequence.rb +0 -104
- data/lib/jets/commands/stack_info.rb +0 -30
- data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.env.test +0 -3
- data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
- data/lib/jets/commands/templates/skeleton/Procfile +0 -7
- data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
- data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
- data/lib/jets/commands/upgrade/version1.rb +0 -136
- data/lib/jets/commands/upgrade.rb +0 -105
- data/lib/jets/commands/webpacker_template.rb +0 -18
- data/lib/jets/controller/callbacks.rb +0 -73
- data/lib/jets/controller/cookies/jar.rb +0 -269
- data/lib/jets/controller/cookies.rb +0 -38
- data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
- data/lib/jets/controller/error.rb +0 -4
- data/lib/jets/controller/forgery_protection.rb +0 -43
- data/lib/jets/controller/layout.rb +0 -17
- data/lib/jets/controller/middleware/cors.rb +0 -60
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
- data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
- data/lib/jets/controller/middleware/reloader.rb +0 -15
- data/lib/jets/controller/parameters_filter.rb +0 -29
- data/lib/jets/controller/params.rb +0 -117
- data/lib/jets/controller/redirection.rb +0 -61
- data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
- data/lib/jets/controller/rendering.rb +0 -96
- data/lib/jets/controller/stage.rb +0 -34
- data/lib/jets/controller.rb +0 -3
- data/lib/jets/db.rb +0 -15
- data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
- data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
- data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
- data/lib/jets/generator.rb +0 -112
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
- data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
- data/lib/jets/lambda/task.rb +0 -111
- data/lib/jets/logger.rb +0 -21
- data/lib/jets/middleware/configurator.rb +0 -84
- data/lib/jets/middleware/default_stack.rb +0 -53
- data/lib/jets/middleware/layer.rb +0 -34
- data/lib/jets/middleware/stack.rb +0 -77
- data/lib/jets/middleware.rb +0 -33
- data/lib/jets/overrides/rails/action_controller.rb +0 -13
- data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
- data/lib/jets/overrides/rails/common_methods.rb +0 -13
- data/lib/jets/overrides/rails/migration_checker.rb +0 -34
- data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
- data/lib/jets/overrides/rails/url_helper.rb +0 -88
- data/lib/jets/overrides/rails.rb +0 -6
- data/lib/jets/rack_server.rb +0 -86
- data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
- data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
- data/lib/jets/resource/api_gateway/cors.rb +0 -61
- data/lib/jets/resource/api_gateway/method.rb +0 -102
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
- data/lib/jets/resource/base.rb +0 -28
- data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
- data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
- data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
- data/lib/jets/resource/child_stack/api_resource.rb +0 -54
- data/lib/jets/resource/child_stack/base.rb +0 -24
- data/lib/jets/resource/lambda/function.rb +0 -221
- data/lib/jets/resource/logs/subscription_filter.rb +0 -31
- data/lib/jets/resource/permission.rb +0 -45
- data/lib/jets/resource.rb +0 -71
- data/lib/jets/router/error.rb +0 -4
- data/lib/jets/router/finder.rb +0 -47
- data/lib/jets/router/helpers/core_helper.rb +0 -27
- data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
- data/lib/jets/router/helpers.rb +0 -4
- data/lib/jets/router/method_creator/code.rb +0 -99
- data/lib/jets/router/method_creator/edit.rb +0 -12
- data/lib/jets/router/method_creator/generic.rb +0 -11
- data/lib/jets/router/method_creator/index.rb +0 -48
- data/lib/jets/router/method_creator/new.rb +0 -12
- data/lib/jets/router/method_creator/root.rb +0 -15
- data/lib/jets/router/method_creator/show.rb +0 -12
- data/lib/jets/router/method_creator.rb +0 -50
- data/lib/jets/turbo/database_yaml.rb +0 -41
- data/lib/jets/turbo/project/.gitignore +0 -12
- data/lib/jets/turbo/project/.jetskeep +0 -1
- data/lib/jets/turbo/project/Gemfile +0 -16
- data/lib/jets/turbo/project/Rakefile +0 -2
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
- data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
- data/lib/jets/turbo/project/config/application.rb +0 -5
- data/lib/jets/turbo/project/config/routes.rb +0 -4
- data/lib/jets/turbo/project/config.ru +0 -5
- data/lib/jets/turbo/rails.rb +0 -127
- data/lib/jets/turbo/templates/config/database.yml +0 -30
- data/lib/jets/turbo.rb +0 -56
- data/readme/prerelease.md +0 -6
- data/readme/testing.md +0 -60
- /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
- /data/lib/jets/{commands → command}/help/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
- /data/lib/jets/{commands → command}/help/console.md +0 -0
- /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
- /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
- /data/lib/jets/{commands → command}/help/delete.md +0 -0
- /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
- /data/lib/jets/{commands → command}/help/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
- /data/lib/jets/{commands → command}/help/runner.md +0 -0
- /data/lib/jets/{commands → command}/help/server.md +0 -0
- /data/lib/jets/{commands → command}/help/status.md +0 -0
- /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
- /data/lib/jets/{commands → command}/help/url.md +0 -0
- /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
- /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Jets::Router::Helpers::NamedRoutes
|
|
2
|
+
class Proxy
|
|
3
|
+
include AddFullUrl
|
|
4
|
+
|
|
5
|
+
def initialize(view_context, helpers_module)
|
|
6
|
+
@helpers = helpers_class(helpers_module).new(view_context)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# * The helpers_module is passed as a argument to give the anonymous class
|
|
10
|
+
# access via closure at include time.
|
|
11
|
+
# * view_context is passed at initialize to provide access at instantiation time.
|
|
12
|
+
def helpers_class(helpers_module)
|
|
13
|
+
Class.new do
|
|
14
|
+
include helpers_module # IE: Generated::MainAppHelpers
|
|
15
|
+
def initialize(view_context)
|
|
16
|
+
@view_context = view_context
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Important:
|
|
20
|
+
#
|
|
21
|
+
# * The add_full_url method needs url_options.
|
|
22
|
+
# Without url_options the proxy methods are unavailable and creates
|
|
23
|
+
# an infinite loop with method_missing.
|
|
24
|
+
# * request is needed for add_apigw_stage? to check request correctly
|
|
25
|
+
# Otherwise, gems like kingsman, that use the named routes proxy methods,
|
|
26
|
+
# won't get able to get the correct url with the stage name prepended.
|
|
27
|
+
#
|
|
28
|
+
# The request is the main reason an anonymous class is used since the
|
|
29
|
+
# view_context has included modules like ApigwStage that assume a
|
|
30
|
+
# request method is available.
|
|
31
|
+
delegate :url_options, :request, :event, to: :@view_context
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# No need to check respond_to? and call raise NoMethodError again because anonymous
|
|
36
|
+
# class will already return a undefined method error.
|
|
37
|
+
#
|
|
38
|
+
# It's annoying that we need to add_full_url here because
|
|
39
|
+
# the proxy calls the url methods with a module view_context instead
|
|
40
|
+
# of the controller or view_context instance. So we don't have access to
|
|
41
|
+
# the request and url_options. The url_options are only available in the controller
|
|
42
|
+
# or view_context instance.
|
|
43
|
+
#
|
|
44
|
+
# So we call the path method instead and then add_full_url here.
|
|
45
|
+
# Not calling the url method directly because could add the full url twice,
|
|
46
|
+
# when the user is setting the default_url_options.
|
|
47
|
+
# Also calling the url method would cause an error because request and url_options
|
|
48
|
+
# is not available.
|
|
49
|
+
#
|
|
50
|
+
# The logic is a bit convoluted but it works. Rails does something similar
|
|
51
|
+
# with their RoutesProxy class and view_context.url_options.
|
|
52
|
+
def method_missing(method_name, *args)
|
|
53
|
+
path_name = method_name.to_s.sub(/_url$/, '_path').to_sym
|
|
54
|
+
path = @helpers.send(path_name, *args)
|
|
55
|
+
if method_name.to_s.end_with?('_url')
|
|
56
|
+
options = args.extract_options!
|
|
57
|
+
options.merge!(path: path)
|
|
58
|
+
options = url_options.merge(options)
|
|
59
|
+
add_full_url(options)
|
|
60
|
+
else
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
data/lib/jets/router/matcher.rb
CHANGED
|
@@ -1,19 +1,101 @@
|
|
|
1
|
-
|
|
1
|
+
module Jets::Router
|
|
2
2
|
class Matcher
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :routes
|
|
6
|
+
def initialize(route_set=Jets.application.routes)
|
|
7
|
+
@route_set = route_set
|
|
8
|
+
@routes = route_set.ordered_routes
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def request_path
|
|
12
|
+
# Ensure leading slash
|
|
13
|
+
# Be more forgiving and allow the request_path to be passed in without a leading slash.
|
|
14
|
+
# Note: request PATH_INFO will always have a leading slash, but just in case.
|
|
15
|
+
# This is also covered in specs.
|
|
16
|
+
return unless @request_path
|
|
17
|
+
@request_path.starts_with?('/') ? @request_path : "/#{@request_path}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def request_method
|
|
21
|
+
@request_method.to_s.upcase if @request_method
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Precedence:
|
|
25
|
+
# 1. Routes with no captures get highest precedence: posts/new
|
|
26
|
+
# 2. Then we consider the routes with captures: post/:id
|
|
27
|
+
#
|
|
28
|
+
# Within these 2 groups we consider the routes with the longest path first
|
|
29
|
+
# since posts/:id and posts/:id/edit can both match.
|
|
30
|
+
def find_by_request(request, request_method=nil)
|
|
31
|
+
@request = request # @request is used to check constraints
|
|
32
|
+
# Checking the request_method_from_hidden_method_field so that handler can find the right route
|
|
33
|
+
# super early in the process. Otherwise lambda routes to the wrong controller action.
|
|
34
|
+
@request_method = request_method || @request.request_method_from_hidden_method_field || @request.request_method.to_s.upcase
|
|
35
|
+
@request_path = @request.path
|
|
36
|
+
route = find_route
|
|
37
|
+
match_constraints(route) if route
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Simpler version of find_by_request that does not check constraints.
|
|
41
|
+
# Used by Jets::Controller::Middleware::Mimic and called super-early on.
|
|
42
|
+
# Does not have access to @request object and path_params
|
|
43
|
+
def find_by_env(env)
|
|
44
|
+
@env = env
|
|
45
|
+
@request_method = env["REQUEST_METHOD"] || "GET"
|
|
46
|
+
@request_path = env["PATH_INFO"]
|
|
47
|
+
find_route
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def find_by_controller_action(controller, action)
|
|
51
|
+
controller = "#{controller.camelize}Controller"
|
|
52
|
+
routes.find do |r|
|
|
53
|
+
r.controller_name == controller.to_s &&
|
|
54
|
+
r.action_name == action.to_s
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def find_route
|
|
59
|
+
routes.each do |r|
|
|
60
|
+
if r.engine
|
|
61
|
+
route = find_engine_route(r)
|
|
62
|
+
return route if route
|
|
63
|
+
else
|
|
64
|
+
found = match?(r)
|
|
65
|
+
return r if found
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
nil
|
|
6
69
|
end
|
|
7
70
|
|
|
71
|
+
def find_engine_route(route)
|
|
72
|
+
return unless mount
|
|
73
|
+
|
|
74
|
+
engine_matcher = self.class.new(route.engine.route_set)
|
|
75
|
+
engine_route = if @request
|
|
76
|
+
engine_matcher.find_by_request(@request, @request_method)
|
|
77
|
+
else
|
|
78
|
+
engine_matcher.find_by_env(@env)
|
|
79
|
+
end
|
|
80
|
+
# save original engine for route.extract_parameters later
|
|
81
|
+
engine_route.original_engine = route.engine if engine_route
|
|
82
|
+
engine_route
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def mount
|
|
86
|
+
EngineMount.find_by(request_path: request_path)
|
|
87
|
+
end
|
|
88
|
+
memoize :mount
|
|
89
|
+
|
|
8
90
|
def match?(route)
|
|
9
|
-
# Immediately stop checking when the request
|
|
91
|
+
# Immediately stop checking when the request http_method: GET, POST, ANY, etc
|
|
10
92
|
# doesnt match.
|
|
11
|
-
|
|
12
|
-
return false if method != route.method && route.method != "ANY"
|
|
93
|
+
return false if request_method != route.http_method && route.http_method != "ANY"
|
|
13
94
|
|
|
14
95
|
route_path = route.path
|
|
96
|
+
route_path = "#{mount.at}#{route_path}" if mount
|
|
15
97
|
|
|
16
|
-
if
|
|
98
|
+
if request_path == route_path
|
|
17
99
|
# regular string match detection
|
|
18
100
|
return true # exact route matches are highest precedence
|
|
19
101
|
end
|
|
@@ -21,18 +103,54 @@ class Jets::Router
|
|
|
21
103
|
# Check path for route capture and wildcard matches:
|
|
22
104
|
# A colon (:) means the variable has a variable
|
|
23
105
|
if route_path.include?(':') # 2nd highest precedence
|
|
24
|
-
capture_detection(route_path,
|
|
106
|
+
capture_detection(route_path, request_path) # early return true or false
|
|
25
107
|
# A star (*) means the variable has a glob
|
|
26
108
|
elsif route_path.include?('*') # lowest precedence
|
|
27
|
-
proxy_detection(route_path,
|
|
109
|
+
proxy_detection(route_path, request_path) # early return true or false
|
|
28
110
|
else
|
|
29
111
|
false # reach here, means no route matched
|
|
30
112
|
end
|
|
31
113
|
end
|
|
32
114
|
|
|
33
|
-
|
|
115
|
+
def match_constraints(route)
|
|
116
|
+
return unless route
|
|
117
|
+
constraints_matches?(route) ? route : nil
|
|
118
|
+
end
|
|
34
119
|
|
|
35
|
-
|
|
120
|
+
# Matcher called in mimic.rb before mimic event is available
|
|
121
|
+
# We need to extract the parameters from the possible matching route directly
|
|
122
|
+
# since event is unavailable.
|
|
123
|
+
def constraints_matches?(route)
|
|
124
|
+
# Matcher is used super-early when request not yet available.
|
|
125
|
+
# Cannot check constraints because we dont have the request object.
|
|
126
|
+
# To build a request object, would need to build a mimic event and it's not yet available.
|
|
127
|
+
return true if @request.nil?
|
|
128
|
+
|
|
129
|
+
constraints = route.constraints
|
|
130
|
+
return true if constraints.blank?
|
|
131
|
+
|
|
132
|
+
if constraints.is_a?(Hash)
|
|
133
|
+
parameters = route.extract_parameters(request_path) # extract directly
|
|
134
|
+
constraints.any? do |key, value|
|
|
135
|
+
key = key.to_s
|
|
136
|
+
if value.is_a?(Regexp)
|
|
137
|
+
value.match(parameters[key])
|
|
138
|
+
else # String
|
|
139
|
+
if parameters[key]
|
|
140
|
+
value == parameters[key]
|
|
141
|
+
elsif @request.respond_to?(key)
|
|
142
|
+
value == @request.send(key)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
elsif constraints.respond_to?(:call)
|
|
147
|
+
constraints.call(@request)
|
|
148
|
+
elsif constraints.respond_to?(:matches?)
|
|
149
|
+
constraints.matches?(@request)
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
private
|
|
36
154
|
|
|
37
155
|
# catchall/globbing/wildcard/proxy routes. Examples:
|
|
38
156
|
#
|
|
@@ -40,7 +158,7 @@ class Jets::Router
|
|
|
40
158
|
# get "others/*rest", to: "others#show"
|
|
41
159
|
# get "*catchall", to: "public_files#show" # last catchall route for Jets
|
|
42
160
|
#
|
|
43
|
-
def proxy_detection(route_path,
|
|
161
|
+
def proxy_detection(route_path, request_path)
|
|
44
162
|
# drop the proxy_segment
|
|
45
163
|
leading_path = route_path.split('/')[0..-2].join('/')
|
|
46
164
|
|
|
@@ -61,10 +179,11 @@ class Jets::Router
|
|
|
61
179
|
|
|
62
180
|
pattern = "^#{leading_path}"
|
|
63
181
|
regexp = Regexp.new(pattern)
|
|
64
|
-
|
|
182
|
+
|
|
183
|
+
!!regexp.match(request_path) # could be true or false
|
|
65
184
|
end
|
|
66
185
|
|
|
67
|
-
def capture_detection(route_path,
|
|
186
|
+
def capture_detection(route_path, request_path)
|
|
68
187
|
# changes path to a string used for a regexp
|
|
69
188
|
# posts/:id/edit => posts\/(.*)\/edit
|
|
70
189
|
regexp_string = route_path.split('/').map do |s|
|
|
@@ -75,7 +194,7 @@ class Jets::Router
|
|
|
75
194
|
|
|
76
195
|
regexp = Regexp.new(regexp_string)
|
|
77
196
|
|
|
78
|
-
!!regexp.match(
|
|
197
|
+
!!regexp.match(request_path) # could be true or false
|
|
79
198
|
end
|
|
80
199
|
end
|
|
81
200
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
module Jets::Router::Resources
|
|
2
2
|
class Options < Base
|
|
3
3
|
def build(action)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
# Important to create a copy of the options since we are mutating it
|
|
5
|
+
# The original options are used for resources and resource scope
|
|
6
|
+
options = @options.dup
|
|
7
|
+
# Remove special options from getting to create_route. For some reason .slice! doesnt work
|
|
7
8
|
options.delete(:only)
|
|
8
9
|
options.delete(:except)
|
|
9
|
-
options[:
|
|
10
|
+
controller = options[:singular_resource] ? @name.to_s.pluralize : @name
|
|
11
|
+
options[:to] = "#{controller}##{action}"
|
|
10
12
|
options
|
|
11
13
|
end
|
|
12
14
|
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module AfterInitialize
|
|
3
|
+
def after_initialize
|
|
4
|
+
normalize_to_option!
|
|
5
|
+
normalize_path_option!
|
|
6
|
+
normalize_id_constraint!
|
|
7
|
+
check_on_option!
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Possibly infer to option from the path. Example:
|
|
11
|
+
#
|
|
12
|
+
# get 'posts/index'
|
|
13
|
+
# get 'posts', to: 'posts#index'
|
|
14
|
+
#
|
|
15
|
+
# get 'posts/show'
|
|
16
|
+
# get 'posts', to: 'posts#show'
|
|
17
|
+
#
|
|
18
|
+
def normalize_to_option!
|
|
19
|
+
return if @options[:to]
|
|
20
|
+
|
|
21
|
+
path = @options[:path].to_s
|
|
22
|
+
return unless path.include?('/')
|
|
23
|
+
|
|
24
|
+
path = path.delete_prefix('/') # remove leading slash
|
|
25
|
+
items = path.split('/')
|
|
26
|
+
if items.size == 2
|
|
27
|
+
@options[:to] = items.join('#')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def normalize_path_option!
|
|
32
|
+
path = @options[:path]
|
|
33
|
+
resource_name = @scope.resource_name
|
|
34
|
+
if path.is_a?(Symbol) and resource_name # Treat as controller action
|
|
35
|
+
# Only supported with used within scope, resource, resources block
|
|
36
|
+
action = path # IE: get :list => action = :list
|
|
37
|
+
controller = @scope.virtual_controller
|
|
38
|
+
# infer and set to option if not set
|
|
39
|
+
@options[:to] ||= "#{controller}##{action}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# override
|
|
43
|
+
@options.merge!(path: escape_path(path)) if path
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def normalize_id_constraint!
|
|
47
|
+
if @options[:id] && !@options[:constraints]
|
|
48
|
+
@options[:constraints] = { id: @options[:id] }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def check_on_option!
|
|
53
|
+
if @options[:on] && !%w[resources resource].include?(@scope.from.to_s)
|
|
54
|
+
raise Jets::Router::Error.new("ERROR: The `on:` option can only be used within a resource or resources block")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def escape_path(path)
|
|
59
|
+
path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
|
|
60
|
+
path = "/#{path}" unless path.starts_with?('/')
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module As
|
|
3
|
+
def as
|
|
4
|
+
return nil if @options[:as] == :disabled
|
|
5
|
+
return @options[:engine].engine_name if @options[:engine]
|
|
6
|
+
return unless @options[:root] || [:get, :post, :patch, :put, :delete].include?(@options[:http_method])
|
|
7
|
+
|
|
8
|
+
as = scoped_as
|
|
9
|
+
as = add_underscore_path(as)
|
|
10
|
+
as = add_action(as)
|
|
11
|
+
as = add_root(as)
|
|
12
|
+
as
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def scoped_as
|
|
16
|
+
list = []
|
|
17
|
+
@scope.from_top.each do |scope|
|
|
18
|
+
node = Node.new(self, scope)
|
|
19
|
+
|
|
20
|
+
as = node.resolved_as
|
|
21
|
+
as = as.to_s.singularize if node.has_param?
|
|
22
|
+
list << as if as && node.append_as?
|
|
23
|
+
end
|
|
24
|
+
list.reject!(&:blank?) # IE: list [:posts, :comments]
|
|
25
|
+
list.unshift(@options[:as]) if @options[:as]
|
|
26
|
+
list.join('_').gsub('/','_') unless list.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# IE: posts/:id/edit => posts
|
|
30
|
+
# Using this convention so that regular routes under namespace and path
|
|
31
|
+
# can be reassemble as if they were under resources
|
|
32
|
+
def add_underscore_path(as)
|
|
33
|
+
if as.nil? && @scope.needs_controller_path? # only consider leaf scope
|
|
34
|
+
@options[:as] || underscore_path_before_param
|
|
35
|
+
else
|
|
36
|
+
as
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# IE: posts/:id/edit => posts
|
|
41
|
+
# Using this convention so that regular routes under namespace and path
|
|
42
|
+
# can be reassemble as if they were under resources
|
|
43
|
+
def underscore_path_before_param
|
|
44
|
+
action_suffixes = %w[new edit] # edit in case of singular resource
|
|
45
|
+
parts = []
|
|
46
|
+
path = @options[:path].to_s
|
|
47
|
+
return nil if path.include?('*') || !path.ascii_only? # IE: get '*catchall', to: 'public_files#show'
|
|
48
|
+
|
|
49
|
+
path = path.delete_prefix('/')
|
|
50
|
+
path.split('/').each do |part|
|
|
51
|
+
if part.starts_with?(':') || part.starts_with?('*') || action_suffixes.include?(part)
|
|
52
|
+
break
|
|
53
|
+
end
|
|
54
|
+
parts << part
|
|
55
|
+
end
|
|
56
|
+
parts.map! { |p| p.gsub(/[^a-zA-Z0-9]/,'_') }
|
|
57
|
+
path = parts.join('_').squeeze('_')
|
|
58
|
+
if action_suffixes.include?(@info.action)
|
|
59
|
+
path.singularize
|
|
60
|
+
else
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def add_action(resource)
|
|
66
|
+
resource = resource.to_s
|
|
67
|
+
return resource if resource.blank?
|
|
68
|
+
|
|
69
|
+
as_name = @options[:as] || @info.action
|
|
70
|
+
as_name = as_name.to_s.delete_prefix('/') if as_name
|
|
71
|
+
|
|
72
|
+
if %w[new edit].include?(@info.action) && @options[:as].nil?
|
|
73
|
+
"#{as_name}_#{resource.singularize}" # IE: new_post
|
|
74
|
+
elsif %[index create].include?(@info.action)
|
|
75
|
+
resource # IE: posts
|
|
76
|
+
elsif %w[show edit update destroy].include?(as_name)
|
|
77
|
+
"#{resource.singularize}" # IE: post
|
|
78
|
+
elsif is_collection?(@scope) && @options[:as].nil?
|
|
79
|
+
"#{as_name}_#{resource}" # IE: list_post
|
|
80
|
+
elsif (is_member?(@scope) || @scope.from == :resource) && @options[:as].nil?
|
|
81
|
+
"#{as_name}_#{resource.singularize}" # IE: rate_post
|
|
82
|
+
elsif @scope.resource_name && @options[:as].nil?
|
|
83
|
+
"#{resource.singularize}_#{as_name}" # IE: post_list
|
|
84
|
+
else
|
|
85
|
+
resource # IE: post
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def add_root(as)
|
|
90
|
+
@options[:root] ? 'root' : as
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -31,6 +31,7 @@ class Jets::Router::Route
|
|
|
31
31
|
module ModuleMethods
|
|
32
32
|
def logical_id(authorizer, prefix_class: true)
|
|
33
33
|
klass, meth = authorizer.split("#")
|
|
34
|
+
klass += "_authorizer"
|
|
34
35
|
words = [meth, "authorizer"]
|
|
35
36
|
words.unshift(klass) if prefix_class
|
|
36
37
|
words.join('_').camelize # logical_id
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# Work in progress. Considering making Jets Route more compatiable with Rails Route.
|
|
3
|
+
# Then will be able to leverage Rails RouteWrapper for presenting the routes for /jets/info/routes.
|
|
4
|
+
# Ran into Route#path method that is a bit of work to make compatiable.
|
|
5
|
+
# Leaving this here for the future.
|
|
6
|
+
module Compat
|
|
7
|
+
extend Memoist
|
|
8
|
+
|
|
9
|
+
# Interface based on Rails ActionDispatch::Routing::Endpoint
|
|
10
|
+
class App # :nodoc:
|
|
11
|
+
def initialize(route)
|
|
12
|
+
@route = route
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def dispatcher?; false; end
|
|
16
|
+
def redirect?; false; end
|
|
17
|
+
def matches?(req); true; end
|
|
18
|
+
def app; self; end
|
|
19
|
+
def rack_app; app; end
|
|
20
|
+
|
|
21
|
+
def engine?
|
|
22
|
+
@route.engine?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def app
|
|
27
|
+
App.new(self)
|
|
28
|
+
end
|
|
29
|
+
memoize :app
|
|
30
|
+
|
|
31
|
+
# Rails interface method for ActionDispatch::Routing::RouteWrapper
|
|
32
|
+
def name
|
|
33
|
+
as || ''
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Rails interface method for ActionDispatch::Routing::RouteWrapper
|
|
37
|
+
def verb
|
|
38
|
+
http_method
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def internal
|
|
42
|
+
!!@options[:internal]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# Organize to.controller and to.action into a class
|
|
3
|
+
# so don't have to keep repeating the logic.
|
|
4
|
+
class Info
|
|
5
|
+
def initialize(options, scope)
|
|
6
|
+
@options, @scope = options, scope
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# IE: posts
|
|
10
|
+
def controller
|
|
11
|
+
return if @options[:engine] # IE: { engine: Blorgh::Engine, path: "/blog" }
|
|
12
|
+
|
|
13
|
+
controller = if @options[:controller]
|
|
14
|
+
@options[:controller]
|
|
15
|
+
elsif @options[:to]
|
|
16
|
+
@options[:to].split('#').first # IE: posts#index => posts
|
|
17
|
+
elsif @scope.virtual_controller
|
|
18
|
+
@scope.virtual_controller
|
|
19
|
+
else # {"/jets/info/properties"=>"jets/info#properties"}
|
|
20
|
+
map = @options.find { |k,v| k.is_a?(String) }
|
|
21
|
+
path, to = map[0], map[1]
|
|
22
|
+
to.split('#').first
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if controller.starts_with?('/')
|
|
26
|
+
# absolute controller path specified. use without scope adjustments
|
|
27
|
+
return controller.delete_prefix('/') # remove leading slash
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# no controller found yet, imply from the scope
|
|
31
|
+
segments = scoped_module_segments
|
|
32
|
+
segments << controller if controller
|
|
33
|
+
segments.compact.join('/') # add module
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# IE: index
|
|
37
|
+
def action
|
|
38
|
+
if @options.key?(:action)
|
|
39
|
+
@options[:action].to_s
|
|
40
|
+
elsif is_collection?(@scope) || is_member?(@scope)
|
|
41
|
+
@options[:path].to_s.delete_prefix('/') # action
|
|
42
|
+
elsif @options[:on] && @options[:on] != :member && @options[:on] != :collection
|
|
43
|
+
@options[:on].to_s
|
|
44
|
+
elsif @options[:to]
|
|
45
|
+
@options[:to].split('#').last
|
|
46
|
+
else # {"/"=>"jets/welcome#index", :internal=>true}
|
|
47
|
+
map = @options.find { |k,v| k.is_a?(String) }
|
|
48
|
+
path, to = map[0], map[1]
|
|
49
|
+
to.split('#').last
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def scoped_module_segments
|
|
54
|
+
segments = []
|
|
55
|
+
@scope.from_top.each do |scope|
|
|
56
|
+
segments << scope.module if scope.module
|
|
57
|
+
if @scope == scope # last scope node
|
|
58
|
+
last_segment = @options[:module]
|
|
59
|
+
segments << last_segment if last_segment
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
segments
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def is_collection?(scope)
|
|
66
|
+
scope.from == :collection || @options[:on] == :collection
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def is_member?(scope)
|
|
70
|
+
scope.from == :member || @options[:on] == :member
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|