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
data/lib/jets/controller/base.rb
CHANGED
|
@@ -1,195 +1,117 @@
|
|
|
1
|
+
require "action_controller"
|
|
2
|
+
require "action_controller/log_subscriber"
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
require "active_support/callbacks"
|
|
5
|
+
require "abstract_controller/callbacks"
|
|
1
6
|
require "json"
|
|
2
7
|
require "rack/utils" # Rack::Utils.parse_nested_query
|
|
3
8
|
|
|
4
9
|
# Controller public methods get turned into Lambda functions.
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
include ActiveSupport::Rescuable
|
|
8
|
-
include Authorization
|
|
9
|
-
include Callbacks
|
|
10
|
-
include Cookies
|
|
11
|
-
include ForgeryProtection
|
|
12
|
-
include Jets::Router::Helpers
|
|
13
|
-
include Layout
|
|
14
|
-
include Params
|
|
15
|
-
include Rendering
|
|
16
|
-
|
|
17
|
-
delegate :headers, to: :request
|
|
18
|
-
delegate :set_header, to: :response
|
|
19
|
-
attr_reader :request, :response
|
|
20
|
-
attr_accessor :session
|
|
21
|
-
def initialize(event, context={}, meth)
|
|
22
|
-
super
|
|
23
|
-
@request = Request.new(event, context)
|
|
24
|
-
@response = Response.new
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Overrides Base.process
|
|
28
|
-
def self.process(event, context={}, meth)
|
|
29
|
-
controller = new(event, context, meth)
|
|
30
|
-
# Using send because process! is private method in Jets::RackController so
|
|
31
|
-
# it doesnt create a lambda function. It's doesnt matter what scope process!
|
|
32
|
-
# is in Controller::Base because Jets lambda functions inheritance doesnt
|
|
33
|
-
# include methods in Controller::Base.
|
|
34
|
-
# TODO: Can process! be a protected method to avoid this?
|
|
35
|
-
controller.send(:process!)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
# One key difference between process! vs dispatch!
|
|
39
|
-
#
|
|
40
|
-
# process! - takes the request through the middleware stack
|
|
41
|
-
# dispatch! - does not
|
|
42
|
-
#
|
|
43
|
-
# Most of the time, you want process! instead of dispatch!
|
|
44
|
-
#
|
|
45
|
-
def process!
|
|
46
|
-
adapter = Jets::Controller::Rack::Adapter.new(event, context)
|
|
47
|
-
adapter.rack_vars(
|
|
48
|
-
'jets.controller' => self,
|
|
49
|
-
'lambda.context' => context,
|
|
50
|
-
'lambda.event' => event,
|
|
51
|
-
'lambda.meth' => meth,
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
# adapter.process calls
|
|
55
|
-
#
|
|
56
|
-
# Jets.application.call(env)
|
|
57
|
-
#
|
|
58
|
-
# and that goes through the middleware stacks. The last middleware stack is Jets::Controller::Middleware::Main
|
|
59
|
-
#
|
|
60
|
-
# class Jets::Controller::Middleware::Main
|
|
61
|
-
# def call!
|
|
62
|
-
# setup
|
|
63
|
-
# @controller.dispatch! # Returns triplet
|
|
64
|
-
# end
|
|
65
|
-
# end
|
|
66
|
-
#
|
|
67
|
-
adapter.process # Returns API Gateway hash structure
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
# One key difference between process! vs dispatch!
|
|
71
|
-
#
|
|
72
|
-
# process! - takes the request through the middleware stack
|
|
73
|
-
# dispatch! - does not
|
|
74
|
-
#
|
|
75
|
-
# dispatch! is useful for megamode or mounted applications
|
|
76
|
-
#
|
|
77
|
-
def dispatch!
|
|
78
|
-
method_override!
|
|
79
|
-
|
|
80
|
-
t1 = Time.now
|
|
81
|
-
log_start
|
|
82
|
-
|
|
83
|
-
begin
|
|
84
|
-
if run_before_actions(break_if: -> { @rendered })
|
|
85
|
-
send(@meth)
|
|
86
|
-
action_completed = true
|
|
87
|
-
else
|
|
88
|
-
Jets.logger.info "Filter chain halted as #{@last_callback_name} rendered or redirected"
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
triplet = ensure_render
|
|
92
|
-
run_after_actions if action_completed
|
|
93
|
-
rescue Exception => exception
|
|
94
|
-
rescue_with_handler(exception) || raise
|
|
95
|
-
triplet = ensure_render
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
took = Time.now - t1
|
|
99
|
-
status = triplet[0]
|
|
100
|
-
log_finish(status: status, took: took)
|
|
101
|
-
triplet # status, headers, body
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Override @meth when POST with _method=delete
|
|
105
|
-
# By the time processing reaches dispatch which calls method_override!
|
|
106
|
-
# The Rack::MethodOverride middleware has overriden env['REQUEST_METHOD'] with DELETE
|
|
107
|
-
# and set env['rack.methodoverride.original_method']
|
|
108
|
-
def method_override!
|
|
109
|
-
env = request.env
|
|
110
|
-
if env['rack.methodoverride.original_method'] && env['REQUEST_METHOD'] == 'DELETE'
|
|
111
|
-
@original_meth = @meth
|
|
112
|
-
@meth = "delete"
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def processing_log
|
|
117
|
-
processing = "Processing #{self.class.name}##{@meth}"
|
|
118
|
-
processing << " (original method #{@original_meth})" if @original_meth
|
|
119
|
-
processing
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
# Documented interface method, careful not to rename
|
|
123
|
-
def log_start
|
|
124
|
-
# JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
|
|
125
|
-
ip = request.ip
|
|
126
|
-
Jets.logger.info "Started #{@event['httpMethod']} \"#{@event['path']}\" for #{ip} at #{Time.now}"
|
|
127
|
-
Jets.logger.info processing_log
|
|
128
|
-
Jets.logger.info " Event: #{event_log}"
|
|
129
|
-
Jets.logger.info " Parameters: #{JSON.dump(filtered_parameters.to_h)}"
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Documented interface method, careful not to rename
|
|
133
|
-
def log_finish(options={})
|
|
134
|
-
status, took = options[:status], options[:took]
|
|
135
|
-
Jets.logger.info "Completed Status Code #{status} in #{took}s"
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def event_log
|
|
139
|
-
display_event = @event.dup
|
|
10
|
+
module Jets::Controller
|
|
11
|
+
DEFAULT_CONTENT_TYPE = "text/html; charset=utf-8"
|
|
140
12
|
|
|
141
|
-
|
|
142
|
-
display_event['body'] = '[BASE64_ENCODED]'
|
|
143
|
-
else
|
|
144
|
-
display_event['body'] = parameter_filter.filter_json(display_event['body'])
|
|
145
|
-
end
|
|
13
|
+
class RoutingError < StandardError; end
|
|
146
14
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
15
|
+
class Base < Jets::Lambda::Functions
|
|
16
|
+
# Make Jets controller "compatible" with Rails
|
|
17
|
+
# Note: Rolling include into a single Compat module causes naming conflicts with ActionController and AbstractController.
|
|
18
|
+
# So we include each module individually. It's clearer this way anyway.
|
|
19
|
+
include Compat::AbstractController::Base
|
|
20
|
+
include Compat::ActionController::Metal
|
|
21
|
+
include Compat::RouteSet
|
|
22
|
+
include Compat::Caching
|
|
23
|
+
include Compat::Future
|
|
24
|
+
|
|
25
|
+
# Order matters due to use of super and the module included chain.
|
|
26
|
+
include AbstractController::Rendering # at top to normalize render options asap
|
|
27
|
+
include AbstractController::Translation
|
|
28
|
+
include AbstractController::AssetPaths
|
|
29
|
+
|
|
30
|
+
include ActionController::Helpers
|
|
31
|
+
include Jets::Router::Helpers::NamedRoutes
|
|
32
|
+
|
|
33
|
+
include ActionController::UrlFor # includes ActionDispatch::Routing::UrlFor
|
|
34
|
+
include ActionController::Redirecting
|
|
35
|
+
include ActionView::Layouts # includes ActionView::Rendering
|
|
36
|
+
include ActionController::Rendering
|
|
37
|
+
include ActionController::Renderers::All # for use_renderers :json, :js, :xml
|
|
38
|
+
include ActionController::ConditionalGet
|
|
39
|
+
include ActionController::EtagWithTemplateDigest
|
|
40
|
+
include ActionController::EtagWithFlash
|
|
41
|
+
include ActionController::Caching
|
|
42
|
+
include ActionController::MimeResponds
|
|
43
|
+
include ActionController::ImplicitRender # includes BasicImplicitRender action_controller/metal/basic_implicit_render.rb
|
|
44
|
+
include ActionController::StrongParameters
|
|
45
|
+
include ActionController::ParameterEncoding
|
|
46
|
+
include ActionController::Cookies
|
|
47
|
+
include ActionController::Flash
|
|
48
|
+
include ActionController::FormBuilder
|
|
49
|
+
include ActionController::RequestForgeryProtection
|
|
50
|
+
include ActionController::ContentSecurityPolicy
|
|
51
|
+
include ActionController::PermissionsPolicy
|
|
52
|
+
# include ActionController::Streaming # not supported
|
|
53
|
+
# include ActionController::DataStreaming # not supported
|
|
54
|
+
include ActionController::HttpAuthentication::Basic::ControllerMethods
|
|
55
|
+
include ActionController::HttpAuthentication::Digest::ControllerMethods
|
|
56
|
+
include ActionController::HttpAuthentication::Token::ControllerMethods
|
|
57
|
+
# include ActionController::DefaultHeaders # not needed
|
|
58
|
+
include ActionController::Logging # log_at: ability to change log level
|
|
59
|
+
|
|
60
|
+
# More Jets overrides and customizations
|
|
61
|
+
include Handler # Lambda Handler process! method. Runs on AWS only.
|
|
62
|
+
include RackAdapter::Action # action rack method
|
|
63
|
+
|
|
64
|
+
# Before callbacks should also be executed as early as possible, so
|
|
65
|
+
# also include them at the bottom.
|
|
66
|
+
include AbstractController::Callbacks
|
|
67
|
+
|
|
68
|
+
# Must near bottom because decorating Rails behavior
|
|
69
|
+
include Decorate::Authorization # APIGW Authorizers
|
|
70
|
+
include Decorate::UrlFor # add_apigw_stage
|
|
71
|
+
include Decorate::Redirecting # add_apigw_stage
|
|
72
|
+
include Decorate::Logging
|
|
73
|
+
|
|
74
|
+
# Append rescue at the bottom to wrap as much as possible.
|
|
75
|
+
include ActionController::Rescue
|
|
76
|
+
|
|
77
|
+
# Add instrumentations hooks at the bottom, to ensure they instrument
|
|
78
|
+
# all the methods properly.
|
|
79
|
+
include ActionController::Instrumentation # TODO: figure why notifications dont work
|
|
80
|
+
|
|
81
|
+
# Params wrapper should come before instrumentation so they are
|
|
82
|
+
# properly showed in logs
|
|
83
|
+
include ActionController::ParamsWrapper
|
|
84
|
+
|
|
85
|
+
def initialize(event, context, meth, rack_env)
|
|
86
|
+
# Passing in rack env so the same rack env (same object id) is used.
|
|
87
|
+
# This is important for:
|
|
88
|
+
# 1. Constraints lambda procs
|
|
89
|
+
# 2. Controller.action rack methods
|
|
90
|
+
@event = event
|
|
91
|
+
@context = context
|
|
92
|
+
@meth = meth
|
|
93
|
+
@rack_env = rack_env
|
|
94
|
+
@_request = Jets::Controller::Request.new(event: event, rack_env: @rack_env)
|
|
95
|
+
# Note: Rails sets request.route in the Rails::Engine#build_request instead.
|
|
96
|
+
# The Jets request class is built slightly differently, so set it here.
|
|
97
|
+
# The request.routes method is need to that url_helpers work in generally.
|
|
98
|
+
# It's just how Rails ActionView implements url_helpers.
|
|
99
|
+
@_request.routes = self.class._routes
|
|
100
|
+
@_response = Jets::Controller::Response.new
|
|
101
|
+
@_response.request = @request
|
|
102
|
+
# Jets::Controller::Base#initialize interface is different than ActionController::Controller::Base.
|
|
103
|
+
# The super call goes to ActionController modules that can decorate and call super again.
|
|
104
|
+
# At the end of the module chain is Jets::Controller::Compat::ActionController::Metal#initialize
|
|
105
|
+
# which goes back to the original Jets::Lambda::Functions#initialize(event, context, meth) interface.
|
|
106
|
+
super() # ActionController::Base#initialize() interface
|
|
150
107
|
end
|
|
151
108
|
|
|
152
|
-
|
|
153
|
-
def json_dump(data)
|
|
154
|
-
JSON.dump(data)
|
|
155
|
-
rescue Encoding::UndefinedConversionError
|
|
156
|
-
data['body'] = '[BINARY]'
|
|
157
|
-
JSON.dump(data)
|
|
158
|
-
end
|
|
109
|
+
abstract!
|
|
159
110
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
klass = self.class
|
|
163
|
-
while klass != Jets::Controller::Base
|
|
164
|
-
paths << klass.controller_path
|
|
165
|
-
klass = klass.superclass
|
|
166
|
-
end
|
|
167
|
-
paths
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def controller_name
|
|
171
|
-
self.class.to_s.underscore
|
|
172
|
-
end
|
|
111
|
+
use_renderers :json, :js, :xml
|
|
112
|
+
end
|
|
173
113
|
|
|
174
|
-
|
|
175
|
-
@meth
|
|
176
|
-
end
|
|
114
|
+
# See Jets::Controller::Compat::ActionController::Metal dispatch! method
|
|
177
115
|
|
|
178
|
-
|
|
179
|
-
class << self
|
|
180
|
-
def internal(value=nil)
|
|
181
|
-
if !value.nil?
|
|
182
|
-
self.internal_controller = value
|
|
183
|
-
else
|
|
184
|
-
self.internal_controller
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def helper_method(*meths)
|
|
189
|
-
meths.each do |meth|
|
|
190
|
-
Jets::Router::Helpers.define_helper_method(meth)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
end
|
|
116
|
+
ActiveSupport.run_load_hooks(:jets_controller, Base)
|
|
195
117
|
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require "abstract_controller/error"
|
|
2
|
+
require "active_support/configurable"
|
|
3
|
+
require "active_support/descendants_tracker"
|
|
4
|
+
require "active_support/core_ext/module/anonymous"
|
|
5
|
+
require "active_support/core_ext/module/attr_internal"
|
|
6
|
+
|
|
7
|
+
module Jets::Controller::Compat::AbstractController
|
|
8
|
+
module Base
|
|
9
|
+
extend ActiveSupport::Concern
|
|
10
|
+
include ActiveSupport::Configurable
|
|
11
|
+
|
|
12
|
+
delegate :action_methods,
|
|
13
|
+
:controller_name,
|
|
14
|
+
:controller_path,
|
|
15
|
+
to: :class
|
|
16
|
+
class_methods do
|
|
17
|
+
# A list of method names that should be considered actions. This
|
|
18
|
+
# includes all public instance methods on a controller, less
|
|
19
|
+
# any internal methods (see internal_methods), adding back in
|
|
20
|
+
# any methods that are internal, but still exist on the class
|
|
21
|
+
# itself.
|
|
22
|
+
#
|
|
23
|
+
# ==== Returns
|
|
24
|
+
# * <tt>Set</tt> - A set of all methods that should be considered actions.
|
|
25
|
+
def action_methods
|
|
26
|
+
@action_methods ||= begin
|
|
27
|
+
# All public instance methods of this class, including ancestors
|
|
28
|
+
methods = (public_instance_methods(true) -
|
|
29
|
+
# Except for public instance methods of Base and its ancestors
|
|
30
|
+
internal_methods +
|
|
31
|
+
# Be sure to include shadowed public instance methods of this class
|
|
32
|
+
public_instance_methods(false))
|
|
33
|
+
|
|
34
|
+
methods.map!(&:to_s)
|
|
35
|
+
|
|
36
|
+
methods.to_set
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# A list of all internal methods for a controller. This finds the first
|
|
41
|
+
# abstract superclass of a controller, and gets a list of all public
|
|
42
|
+
# instance methods on that abstract class. Public instance methods of
|
|
43
|
+
# a controller would normally be considered action methods, so methods
|
|
44
|
+
# declared on abstract classes are being removed.
|
|
45
|
+
# (ActionController::Metal and ActionController::Base are defined as abstract)
|
|
46
|
+
def internal_methods
|
|
47
|
+
controller = self
|
|
48
|
+
|
|
49
|
+
controller = controller.superclass until controller.abstract?
|
|
50
|
+
controller.public_instance_methods(true)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def controller_name
|
|
54
|
+
@controller_name ||= name.demodulize.delete_suffix("Controller").underscore
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def controller_path
|
|
58
|
+
@controller_path ||= name.delete_suffix("Controller").underscore
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns true if the given controller is capable of rendering
|
|
62
|
+
# a path. A subclass of +AbstractController::Base+
|
|
63
|
+
# may return false. An Email controller for example does not
|
|
64
|
+
# support paths, only full URLs.
|
|
65
|
+
def supports_path?
|
|
66
|
+
true
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
##
|
|
71
|
+
# Returns the body of the HTTP response sent by the controller.
|
|
72
|
+
attr_internal :response_body
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# Returns the name of the action this controller is processing.
|
|
76
|
+
def action_name
|
|
77
|
+
@meth
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def available_action?(action_name)
|
|
81
|
+
self.class.action_methods.include?(action_name.to_s)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Tests if a response body is set. Used to determine if the
|
|
85
|
+
# +process_action+ callback needs to be terminated in
|
|
86
|
+
# AbstractController::Callbacks.
|
|
87
|
+
def performed?
|
|
88
|
+
if response_body.respond_to?(:each)
|
|
89
|
+
!response_body.compact.empty? # [""] is considered true
|
|
90
|
+
else # nil
|
|
91
|
+
!response_body.nil?
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def inspect # :nodoc:
|
|
96
|
+
"#<#{self.class.name}:#{'%#016x' % (object_id << 1)}>"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
private
|
|
100
|
+
# Returns true if the name can be considered an action because
|
|
101
|
+
# it has a method defined in the controller.
|
|
102
|
+
#
|
|
103
|
+
# ==== Parameters
|
|
104
|
+
# * <tt>name</tt> - The name of an action to be tested
|
|
105
|
+
def action_method?(name)
|
|
106
|
+
self.class.action_methods.include?(name)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Call the action. Override this in a subclass to modify the
|
|
110
|
+
# behavior around processing an action. This, and not #process,
|
|
111
|
+
# is the intended way to override action dispatching.
|
|
112
|
+
#
|
|
113
|
+
# Notice that the first argument is the method to be dispatched
|
|
114
|
+
# which is *not* necessarily the same as the action name.
|
|
115
|
+
def process_action
|
|
116
|
+
send_action(action_name) # to BasicImplicitRender#send_action => super (posts#index) or default_render
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Actually call the method associated with the action. Override
|
|
120
|
+
# this method if you wish to change how action methods are called,
|
|
121
|
+
# not to add additional behavior around it. For example, you would
|
|
122
|
+
# override #send_action if you want to inject arguments into the
|
|
123
|
+
# method.
|
|
124
|
+
alias send_action send
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
module Jets::Controller::Compat::ActionController
|
|
2
|
+
module Metal
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
delegate :commit_flash,
|
|
6
|
+
:filtered_parameters,
|
|
7
|
+
:parameter_filter,
|
|
8
|
+
:params,
|
|
9
|
+
:reset_session,
|
|
10
|
+
:session,
|
|
11
|
+
:session=,
|
|
12
|
+
:_routes,
|
|
13
|
+
to: :request
|
|
14
|
+
delegate :content_type,
|
|
15
|
+
:content_type=,
|
|
16
|
+
:get_header,
|
|
17
|
+
:headers,
|
|
18
|
+
:location,
|
|
19
|
+
:location=,
|
|
20
|
+
:media_type,
|
|
21
|
+
:response_code,
|
|
22
|
+
:set_header,
|
|
23
|
+
:status,
|
|
24
|
+
:status=,
|
|
25
|
+
:to_a,
|
|
26
|
+
to: :response
|
|
27
|
+
attr_internal :request, :response
|
|
28
|
+
|
|
29
|
+
alias :response_code :status # :nodoc:
|
|
30
|
+
|
|
31
|
+
# End of the module include chain.
|
|
32
|
+
# Go back from the ActionController::Base#initialize() interface
|
|
33
|
+
# to the original Jets::Lambda::Functions#initialize(event, context, meth) interface
|
|
34
|
+
def initialize
|
|
35
|
+
super(@event, @context, @meth)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# One key difference between process! vs dispatch!
|
|
39
|
+
#
|
|
40
|
+
# process! - takes the request through the middleware stack
|
|
41
|
+
# dispatch! - does not
|
|
42
|
+
#
|
|
43
|
+
# dispatch! is useful for megamode or mounted applications
|
|
44
|
+
#
|
|
45
|
+
def dispatch!
|
|
46
|
+
# extend Jets.application.routes.url_helpers
|
|
47
|
+
# extend Blorgh::Engine.routes.url_helpers
|
|
48
|
+
|
|
49
|
+
# ActionView::Base.send :include, Jets.application.routes.url_helpers
|
|
50
|
+
# ActionView::Base.send :include, Blorgh::Engine.routes.url_helpers
|
|
51
|
+
# extend Jets.application.routes.mounted_helpers
|
|
52
|
+
|
|
53
|
+
method_override!
|
|
54
|
+
process_action
|
|
55
|
+
commit_flash
|
|
56
|
+
response.to_a
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Override @meth when POST with _method=delete
|
|
60
|
+
# By the time processing reaches dispatch which calls method_override!
|
|
61
|
+
# The Rack::MethodOverride middleware has overriden env['REQUEST_METHOD'] with DELETE
|
|
62
|
+
# and set env['rack.methodoverride.original_method']
|
|
63
|
+
def method_override!
|
|
64
|
+
env = request.env
|
|
65
|
+
if env['rack.methodoverride.original_method'] && env['REQUEST_METHOD'] == 'DELETE'
|
|
66
|
+
@original_meth = @meth
|
|
67
|
+
@meth = "destroy"
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Not using rack.response.body directly because its value is wrapped in an Array, IE: [body]
|
|
72
|
+
# and ActionController components check response_body assuming it can be nil or a String.
|
|
73
|
+
# So we assign the String at the controller.response_body level and [body] at the
|
|
74
|
+
# the Response#body= level.
|
|
75
|
+
def response_body=(body)
|
|
76
|
+
body = [body] unless body.nil? || body.respond_to?(:each)
|
|
77
|
+
return unless body
|
|
78
|
+
response.body = body
|
|
79
|
+
super
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Unsure how Rails defines this but this is the Rails behavior according to the Kingsman/Devise port
|
|
83
|
+
def response=(triplet)
|
|
84
|
+
if triplet.is_a?(Array)
|
|
85
|
+
status, headers, body = triplet
|
|
86
|
+
self.status = status
|
|
87
|
+
self.headers.merge!(headers)
|
|
88
|
+
self.response_body = body
|
|
89
|
+
else
|
|
90
|
+
self.response_body = triplet # string
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Tests if render or redirect has already happened.
|
|
95
|
+
def performed?
|
|
96
|
+
response_body || response.committed?
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Jets::Controller::Compat
|
|
2
|
+
# Got most from AbstractController::Caching and ActionController::Caching
|
|
3
|
+
module Caching
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
delegate :perform_caching, to: :class
|
|
7
|
+
class_methods do
|
|
8
|
+
def perform_caching
|
|
9
|
+
Jets.config.controller.perform_caching
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Jets::Controller::Compat
|
|
2
|
+
module Future
|
|
3
|
+
# raise_on_missing_callback_actions will be called in Rails 7.1
|
|
4
|
+
def raise_on_missing_callback_actions
|
|
5
|
+
puts <<~EOL
|
|
6
|
+
raise_on_missing_callback_actions called, Jets defaults to true so
|
|
7
|
+
when we upgrade to Rails 7.1 components it'll trigger and will
|
|
8
|
+
fix any issues. Also will need to make it configurable.
|
|
9
|
+
EOL
|
|
10
|
+
true
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Jets::Controller::Compat
|
|
2
|
+
module RouteSet
|
|
3
|
+
# Override behavior from ActionDispatch::Routing::UrlFor
|
|
4
|
+
#
|
|
5
|
+
# When Jets include ActionDispatch::Routing::UrlFor is in the Jets::Controller::Base class
|
|
6
|
+
# It sets @_routes = nil
|
|
7
|
+
#
|
|
8
|
+
# We need to set @_routes to the Jets::Controller::Request routes object
|
|
9
|
+
# to provide a Jets custom routes object that's compatiable the Rails routes object.
|
|
10
|
+
#
|
|
11
|
+
# Why does @_routes have to be set?
|
|
12
|
+
#
|
|
13
|
+
# How this works is a bit hard to follow. Here's the current trace with actionpack 7.0.8
|
|
14
|
+
#
|
|
15
|
+
# Here's where controller render goes from controller-land to view-land.
|
|
16
|
+
#
|
|
17
|
+
# action_controller/metal/rendering.rb:158:in `render_to_body'
|
|
18
|
+
# action_view/rendering.rb:114:in `render_to_body'
|
|
19
|
+
#
|
|
20
|
+
# In action_view/rendering.rb render_to_body => _render_template is called and
|
|
21
|
+
# a view_context is created.
|
|
22
|
+
#
|
|
23
|
+
# def view_context
|
|
24
|
+
# view_context_class.new(lookup_context, view_assigns, self)
|
|
25
|
+
# end
|
|
26
|
+
#
|
|
27
|
+
# self is the <PostsController>. The controller instance is the _routes is used.
|
|
28
|
+
# The view_context_class is somehow a wrapped anonymous class that has the
|
|
29
|
+
# ActionView::Base#initialize method.
|
|
30
|
+
#
|
|
31
|
+
# Usage:
|
|
32
|
+
#
|
|
33
|
+
# module Jets::Controller
|
|
34
|
+
# class Base < Jets::Lambda::Functions
|
|
35
|
+
# ...
|
|
36
|
+
# include Compat::RouteSet::ControllerPrepend
|
|
37
|
+
# ...
|
|
38
|
+
# include ActionController::UrlFor # includes ActionDispatch::Routing::UrlFor
|
|
39
|
+
# ...
|
|
40
|
+
# include Compat::RouteSet::ControllerAppend
|
|
41
|
+
#
|
|
42
|
+
def initialize(*)
|
|
43
|
+
@_routes = self.class._routes # set by inherited hook in JetsTurbines::RoutesHelpers.with
|
|
44
|
+
super
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Jets::Controller::Decorate
|
|
2
|
+
module ApigwStage
|
|
3
|
+
def add_apigw_stage(url)
|
|
4
|
+
return url unless add_apigw_stage?
|
|
5
|
+
stage_name = ENV['JETS_APIGW_STAGE'] || Jets::Cfn::Resource::ApiGateway::Deployment.stage_name
|
|
6
|
+
uri = URI.parse(url)
|
|
7
|
+
path = uri.path
|
|
8
|
+
original_ends_with_slash = path.ends_with?('/')
|
|
9
|
+
path = "/#{path}" unless path.starts_with?('/')
|
|
10
|
+
segments = path.split('/')
|
|
11
|
+
# unless to prevent stage name being added twice if url_for is called twice on the same string
|
|
12
|
+
segments.insert(1, stage_name) unless segments[1] == stage_name
|
|
13
|
+
new_path = segments.join('/') # modified path
|
|
14
|
+
new_path = "#{new_path}/" if !new_path.ends_with?('/') && original_ends_with_slash
|
|
15
|
+
uri.path = new_path
|
|
16
|
+
uri.to_s
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def add_apigw_stage?
|
|
20
|
+
return true if ENV['JETS_APIGW_STAGE']
|
|
21
|
+
return false if ENV['JETS_TEST']
|
|
22
|
+
return false unless request # nil for `importmap json` cli and actionmailer
|
|
23
|
+
|
|
24
|
+
# Using request.host which might be different than event['headers']['Host'] when config.app.domain is set.
|
|
25
|
+
# This means that visiting the APIGW domain name directly will not prepend the stage name
|
|
26
|
+
# to the helper method urls. This is ok since the APIGW domain name is not used in production.
|
|
27
|
+
# It's a compromise since we cannot pass the CloudFront host to APIGW.
|
|
28
|
+
# Rather have the CloudFront user-friendly domain name work than APIGW domain name.
|
|
29
|
+
# Examples:
|
|
30
|
+
# https://djvojd3em5.execute-api.us-west-2.amazonaws.com/dev/
|
|
31
|
+
# https://friendly.domain.com/
|
|
32
|
+
host = request.host
|
|
33
|
+
on_cloud9 = !!(host =~ /cloud9\..*\.amazonaws\.com/)
|
|
34
|
+
return false if on_cloud9
|
|
35
|
+
|
|
36
|
+
host.include?('amazonaws.com')
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|