jets 3.1.0 → 5.0.0
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/.github/FUNDING.yml +1 -0
- data/.gitignore +5 -1
- data/CHANGELOG.md +141 -0
- data/Gemfile +1 -5
- data/LICENSE.txt +1 -1
- data/README.md +21 -43
- data/Rakefile +3 -3
- data/backers.md +0 -5
- 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/engines/internal/app/functions/jets/base_path.rb +109 -0
- data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
- 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 +16 -13
- 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 -199
- 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_info.rb +2 -2
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/aws_services.rb +8 -0
- data/lib/jets/backtrace_cleaner.rb +27 -0
- data/lib/jets/booter.rb +30 -118
- data/lib/jets/builders/code_builder.rb +64 -122
- data/lib/jets/builders/code_size.rb +1 -0
- data/lib/jets/builders/gem_replacer.rb +6 -12
- 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 +54 -10
- 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} +11 -21
- data/lib/jets/cfn/builder/api/gateway.rb +104 -0
- 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/builder/interface.rb +146 -0
- 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/builder/parent.rb +149 -0
- 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} +5 -4
- 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 +14 -4
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
- 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 +27 -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 +22 -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/cfn/resource/iam/base_role_definition.rb +56 -0
- 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/cfn/resource/iam/policy.rb +31 -0
- 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 +9 -7
- 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 +30 -16
- data/lib/jets/cfn/status.rb +1 -1
- data/lib/jets/cfn/template.rb +89 -0
- data/lib/jets/cfn/upload.rb +26 -23
- data/lib/jets/cli.rb +28 -203
- 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/runner.md +40 -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 +5 -5
- 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 +4 -4
- 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} +30 -49
- 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/url_command.rb +92 -0
- 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} +41 -4
- 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 -18
- 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 +153 -50
- data/lib/jets/core_ext/file.rb +9 -0
- 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 +5 -2
- data/lib/jets/dotenv.rb +4 -3
- 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/erb.rb +1 -1
- 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 +139 -0
- data/lib/jets/generators/overrides/app/templates/.env +10 -0
- data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +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/inflections.rb +1 -1
- data/lib/jets/info.rb +116 -0
- data/lib/jets/initializable.rb +95 -0
- data/lib/jets/job/base.rb +5 -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/job/helpers/sns_event_helper.rb +8 -0
- data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
- 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 +73 -54
- 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/hash_converter.rb +2 -2
- data/lib/jets/mega/request/source.rb +1 -2
- data/lib/jets/mega/request.rb +4 -4
- data/lib/jets/names.rb +79 -0
- 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 +26 -33
- 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 +140 -17
- 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 -90
- data/lib/jets/router/route_set.rb +214 -0
- data/lib/jets/router/scope.rb +204 -69
- data/lib/jets/router/state.rb +67 -0
- data/lib/jets/router/util.rb +1 -31
- data/lib/jets/router.rb +64 -150
- 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 -19
- 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/tmp_loader.rb +1 -1
- 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/util/yamler.rb +16 -0
- data/lib/jets/version.rb +1 -1
- data/lib/jets.rb +8 -14
- metadata +444 -347
- data/.python-version +0 -1
- data/.ruby-version +0 -1
- data/bin/release +0 -9
- data/lib/jets/application/defaults.rb +0 -200
- 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_gateway_builder.rb +0 -123
- data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
- data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
- 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/interface.rb +0 -133
- data/lib/jets/cfn/builders/job_builder.rb +0 -14
- data/lib/jets/cfn/builders/parent_builder.rb +0 -130
- data/lib/jets/cfn/built_template.rb +0 -15
- data/lib/jets/cfn/template_source.rb +0 -61
- data/lib/jets/commands/base.rb +0 -145
- data/lib/jets/commands/call.rb +0 -182
- data/lib/jets/commands/clean.rb +0 -19
- data/lib/jets/commands/configure.rb +0 -51
- data/lib/jets/commands/console.rb +0 -12
- 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/runner.md +0 -17
- 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 -166
- 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 -105
- 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 -71
- 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 -19
- 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/url.rb +0 -69
- 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/functions/jets/base_path.rb +0 -18
- data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
- 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/naming.rb +0 -63
- 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/iam/base_role_definition.rb +0 -47
- 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/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,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
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Jets::Controller::Decorate
|
|
2
|
+
module Logging
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
# A little bit tricky. Jets::Controller::Base includes AbstractController::Logger
|
|
7
|
+
# via ActionController::Redirecting.
|
|
8
|
+
# AbstractController::Logger defines a config_accessor :logger
|
|
9
|
+
# This results in logger being nil. We set it to logger here to correct it.
|
|
10
|
+
# Unsure why this does not happen with ActionController::Base though.
|
|
11
|
+
delegate :logger, to: Jets # fixes logger but Rails doesnt need this
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def dispatch!
|
|
15
|
+
t1 = Time.now
|
|
16
|
+
log_start
|
|
17
|
+
triplet = super # Abstract#dispatch!
|
|
18
|
+
took = Time.now - t1
|
|
19
|
+
log_finish status: status, took: took
|
|
20
|
+
triplet
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def processing_log
|
|
24
|
+
processing = "Processing #{self.class.name}##{@meth}"
|
|
25
|
+
processing << " (original method #{@original_meth})" if @original_meth
|
|
26
|
+
processing
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Documented interface method, careful not to rename
|
|
30
|
+
def log_start
|
|
31
|
+
# Commented out Started because Jets::Rack::Logger middleware handles now
|
|
32
|
+
# ip = request.ip
|
|
33
|
+
# logger.info "Started (Jets) #{request.request_method} \"#{request.path}\" for #{ip} at #{Time.now}"
|
|
34
|
+
|
|
35
|
+
logger.info processing_log
|
|
36
|
+
logger.info " Raw Event: #{@event}" if ENV['JETS_LOG_RAW_EVENT']
|
|
37
|
+
logger.info " Event: #{event_log}" if log_event?
|
|
38
|
+
params = filtered_parameters.to_h.except('controller', 'action')
|
|
39
|
+
# JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
|
|
40
|
+
logger.info " Parameters: #{JSON.dump(params)}" unless params.empty?
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def log_event?
|
|
44
|
+
return false if ENV['JETS_LOG_EVENT'] == '0'
|
|
45
|
+
Jets.config.logging.event
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Documented interface method, careful not to rename
|
|
49
|
+
def log_finish(options={})
|
|
50
|
+
status, took = options[:status], options[:took]
|
|
51
|
+
logger.info "Completed Status Code #{status} in #{"%.3f" % took}s"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def event_log
|
|
55
|
+
event = @event.dup # clone to display event
|
|
56
|
+
|
|
57
|
+
if event['isBase64Encoded']
|
|
58
|
+
event['body'] = '[BASE64_ENCODED]'
|
|
59
|
+
else
|
|
60
|
+
event['body'] = filter_json_log(event['body'])
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
event["multiValueQueryStringParameters"] = parameter_filter.filter(event['multiValueQueryStringParameters']) if event['multiValueQueryStringParameters']
|
|
64
|
+
event["pathParameters"] = parameter_filter.filter(event['pathParameters']) if event['pathParameters']
|
|
65
|
+
event["queryStringParameters"] = parameter_filter.filter(event['queryStringParameters']) if event['queryStringParameters']
|
|
66
|
+
json_dump_log(event)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Append _log to reduce chance of name collision with user defined methods
|
|
70
|
+
def filter_json_log(json_text)
|
|
71
|
+
return json_text if json_text.blank?
|
|
72
|
+
|
|
73
|
+
begin
|
|
74
|
+
hash_params = JSON.parse(json_text)
|
|
75
|
+
filtered_params = parameter_filter.filter(hash_params)
|
|
76
|
+
JSON.dump(filtered_params)
|
|
77
|
+
rescue JSON::ParserError
|
|
78
|
+
'[FILTERED]'
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Handles binary data safely
|
|
83
|
+
def json_dump_log(data)
|
|
84
|
+
JSON.dump(data)
|
|
85
|
+
rescue Encoding::UndefinedConversionError
|
|
86
|
+
data['body'] = '[BINARY]'
|
|
87
|
+
JSON.dump(data)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Jets::Controller::Decorate
|
|
2
|
+
module Redirecting
|
|
3
|
+
include ApigwStage
|
|
4
|
+
|
|
5
|
+
def _compute_redirect_to_location(request, options) # :nodoc:
|
|
6
|
+
adjust = options.respond_to?(:to_str) || options.is_a?(String)
|
|
7
|
+
options = add_apigw_stage(options) if adjust
|
|
8
|
+
super
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def redirect_back(fallback_location: '/')
|
|
12
|
+
location = request.headers["Referer"] || fallback_location
|
|
13
|
+
redirect_to location
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -1,31 +1,49 @@
|
|
|
1
1
|
require 'base64'
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
# Also, logic in the opposite direction: Jets::Controller::Middleware::Mimic::Apigw
|
|
4
|
+
# Only called by AWS Lambda before it runs through the middlewares.
|
|
5
|
+
module Jets::Controller::Handler
|
|
6
|
+
class Apigw
|
|
5
7
|
extend Memoist
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@event, @context = event, context
|
|
9
|
+
attr_reader :event, :context, :controller, :meth, :rack_env
|
|
10
|
+
def initialize(event, context, controller, meth, rack_env)
|
|
11
|
+
@event = event
|
|
12
|
+
@context = context
|
|
13
|
+
@controller = controller
|
|
14
|
+
@meth = meth
|
|
15
|
+
@rack_env = rack_env
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
# 1. Convert API Gateway event event to Rack env
|
|
18
19
|
# 2. Process using full Rack middleware stack
|
|
19
20
|
# 3. Convert back to API gateway response structure payload
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
#
|
|
22
|
+
# Returns back API Gateway response hash structure
|
|
23
|
+
# Only called when running in AWS Lambda.
|
|
24
|
+
#
|
|
25
|
+
# Set the jets.* env variables so we have access to them in the middleware.
|
|
26
|
+
# The controller instance is called in the Main middleware.
|
|
27
|
+
# On AWS, will use original event and context.
|
|
28
|
+
# On local server, will use Middleware::Mimic event and context.
|
|
29
|
+
def process_through_middlewares
|
|
30
|
+
env = rack_env.merge(
|
|
31
|
+
'jets.controller' => @controller, # original controller instance from handler
|
|
32
|
+
'jets.context' => @context, # original AWS Lambda context
|
|
33
|
+
'jets.event' => @event, # original AWS Lambda event
|
|
34
|
+
'jets.meth' => @meth,
|
|
35
|
+
)
|
|
36
|
+
status, headers, body = Jets.application.call(env) # goes through full middleware stack
|
|
37
|
+
# middleware can handle Array or BodyProxy, APIGW require Strings
|
|
38
|
+
case body
|
|
39
|
+
when Rack::Files::Iterator
|
|
40
|
+
str = File.read(body.path)
|
|
41
|
+
else
|
|
42
|
+
# join for Rack::BodyProxy or Array
|
|
43
|
+
str = body.join
|
|
44
|
+
end
|
|
45
|
+
convert_to_api_gateway(status, headers, str)
|
|
27
46
|
end
|
|
28
|
-
memoize :env
|
|
29
47
|
|
|
30
48
|
# Transform the structure to AWS_PROXY compatible structure
|
|
31
49
|
# http://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
|
|
@@ -71,24 +89,5 @@ module Jets::Controller::Rack
|
|
|
71
89
|
# Can set JETS_ELB=1 for local testing
|
|
72
90
|
@event["requestContext"] && @event["requestContext"]["elb"] || ENV['JETS_ELB']
|
|
73
91
|
end
|
|
74
|
-
|
|
75
|
-
# Called from Jets::Controller::Base.process. Example:
|
|
76
|
-
#
|
|
77
|
-
# adapter.rack_vars(
|
|
78
|
-
# 'jets.controller' => self,
|
|
79
|
-
# 'lambda.context' => context,
|
|
80
|
-
# 'lambda.event' => event,
|
|
81
|
-
# 'lambda.meth' => meth,
|
|
82
|
-
# )
|
|
83
|
-
#
|
|
84
|
-
# Passes a these special variables so we have access to them in the middleware.
|
|
85
|
-
# The controller instance is called in the Main middleware.
|
|
86
|
-
# The lambda.* info is used by the Rack::Local middleware to create a mimiced
|
|
87
|
-
# controller for the local server.
|
|
88
|
-
#
|
|
89
|
-
def rack_vars(vars)
|
|
90
|
-
env.merge!(vars)
|
|
91
|
-
end
|
|
92
|
-
|
|
93
92
|
end
|
|
94
93
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Jets::Controller
|
|
2
|
+
# Only called by AWS Lambda before it runs through the middlewares.
|
|
3
|
+
module Handler
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
# One key difference between process! vs dispatch!
|
|
7
|
+
#
|
|
8
|
+
# process! - takes the request through the middleware stack
|
|
9
|
+
# dispatch! - does not
|
|
10
|
+
#
|
|
11
|
+
# Generally, we want to use process! so it goes through the middleware stacks.
|
|
12
|
+
#
|
|
13
|
+
# The last middleware stack is Jets::Controller::Middleware::Main
|
|
14
|
+
# Which comes back to dispatch! in this same Controller Base class.
|
|
15
|
+
#
|
|
16
|
+
# class Jets::Controller::Middleware::Main
|
|
17
|
+
# def call!
|
|
18
|
+
# setup
|
|
19
|
+
# @controller.dispatch! # Returns triplet
|
|
20
|
+
# end
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
def process!
|
|
24
|
+
apigw = Jets::Controller::Handler::Apigw.new(event, context, self, @meth, @rack_env)
|
|
25
|
+
apigw.process_through_middlewares # Returns API Gateway hash structure
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class_methods do
|
|
29
|
+
def process(event, context={}, meth)
|
|
30
|
+
rack_env = Jets::Controller::RackAdapter::Env.new(event, context).convert # convert to Rack env
|
|
31
|
+
controller = new(event, context, meth, rack_env)
|
|
32
|
+
# Using send because process! was a private method in Jets::RackController (old) so
|
|
33
|
+
# it doesnt create a lambda function. It's doesnt matter what scope process!
|
|
34
|
+
# is in Controller::Base because Jets lambda functions inheritance doesnt
|
|
35
|
+
# include methods in Controller::Base.
|
|
36
|
+
controller.send(:process!)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# All roads lead here
|
|
2
2
|
#
|
|
3
|
-
# 1. AWS Lambda: PostsController -
|
|
3
|
+
# 1. AWS Lambda: PostsController - Handler::Apigw - Jets.application.call
|
|
4
4
|
# 2. Local server: config.ru - run Jet.application - Jets.application.call
|
|
5
5
|
#
|
|
6
6
|
# Then eventually:
|
|
@@ -9,22 +9,30 @@
|
|
|
9
9
|
#
|
|
10
10
|
module Jets::Controller::Middleware
|
|
11
11
|
class Main
|
|
12
|
+
include Jets::ExceptionReporting
|
|
13
|
+
|
|
12
14
|
def initialize(env)
|
|
13
15
|
@env = env
|
|
14
|
-
@controller = env['jets.controller']
|
|
15
|
-
@
|
|
16
|
-
@
|
|
17
|
-
@meth = env['
|
|
16
|
+
@controller = env['jets.controller'] # original controller instance from handler or mimic
|
|
17
|
+
@context = env['jets.context'] # original AWS Lambda event or mimic context
|
|
18
|
+
@event = env['jets.event'] # original AWS Lambda event or mimic event
|
|
19
|
+
@meth = env['jets.meth']
|
|
18
20
|
end
|
|
19
21
|
|
|
20
22
|
def call
|
|
21
|
-
ENV['JETS_HOST'] = jets_host # Dirty to use what's essentially a global variable but unsure how else to achieve
|
|
22
23
|
dup.call!
|
|
23
24
|
end
|
|
24
25
|
|
|
26
|
+
# With exception reporting here instead of Controller::Base#process so any
|
|
27
|
+
# exception in the middleware stack is caught.
|
|
28
|
+
# Also using with_exception_reporting instead of
|
|
29
|
+
# prepend Jets::ExceptionReporting::Process because the method is call!
|
|
30
|
+
# not process. The interface is different.
|
|
25
31
|
def call!
|
|
26
|
-
|
|
27
|
-
|
|
32
|
+
with_exception_reporting do
|
|
33
|
+
setup
|
|
34
|
+
@controller.dispatch! # Returns triplet
|
|
35
|
+
end
|
|
28
36
|
end
|
|
29
37
|
|
|
30
38
|
# Common setup logical at this point of middleware processing right before
|
|
@@ -1,21 +1,43 @@
|
|
|
1
1
|
# Takes a Rack env and converts to ApiGateway event
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
# This runs only locally, when not on AWS Lambda
|
|
3
|
+
# Note: Logic in the opposite direction: Jets::Controller::Handler::Apigw#rack_vars
|
|
4
|
+
class Jets::Controller::Middleware::Mimic
|
|
5
|
+
class Apigw
|
|
4
6
|
extend Memoist
|
|
5
7
|
|
|
6
8
|
def initialize(route, env)
|
|
7
9
|
@route, @env = route, env
|
|
8
10
|
end
|
|
9
11
|
|
|
12
|
+
# Actual controller instance
|
|
13
|
+
def controller
|
|
14
|
+
controller_class = @route.controller_name.constantize
|
|
15
|
+
meth = @route.action_name
|
|
16
|
+
# must keep the same env as @env, rack env, else constraint lambda proc request will be different
|
|
17
|
+
controller_class.new(event, context, meth, @env)
|
|
18
|
+
end
|
|
19
|
+
memoize :controller # for same object_id in case apigw.controller is called twice
|
|
20
|
+
|
|
21
|
+
def meth
|
|
22
|
+
@route.action_name
|
|
23
|
+
end
|
|
24
|
+
memoize :meth
|
|
25
|
+
|
|
26
|
+
def context
|
|
27
|
+
LambdaContext.new
|
|
28
|
+
end
|
|
29
|
+
memoize :context
|
|
30
|
+
|
|
10
31
|
def event
|
|
11
|
-
resource = @route.path(:api_gateway) # posts/{id}/edit
|
|
32
|
+
resource = @route.path(:api_gateway) # /posts/{id}/edit
|
|
12
33
|
path = @env['PATH_INFO'].sub('/','') # remove beginning slash
|
|
13
34
|
{
|
|
14
|
-
"resource" =>
|
|
35
|
+
"resource" => resource, # "/posts/{id}/edit"
|
|
15
36
|
"path" => @env['PATH_INFO'], # /posts/tung/edit
|
|
16
37
|
"httpMethod" => @env['REQUEST_METHOD'], # GET
|
|
17
38
|
"headers" => request_headers,
|
|
18
39
|
"queryStringParameters" => query_string_parameters,
|
|
40
|
+
"multiValueQueryStringParameters" => multi_value_query_string_parameters,
|
|
19
41
|
"pathParameters" => @route.extract_parameters(path),
|
|
20
42
|
"stageVariables" => nil,
|
|
21
43
|
"requestContext" => {},
|
|
@@ -24,7 +46,9 @@ class Jets::Controller::Middleware::Local
|
|
|
24
46
|
}
|
|
25
47
|
end
|
|
26
48
|
memoize :event
|
|
49
|
+
alias convert event
|
|
27
50
|
|
|
51
|
+
protected
|
|
28
52
|
# Annoying. The headers part of the AWS Lambda proxy structure
|
|
29
53
|
# does not consisently use the same casing scheme for the header keys.
|
|
30
54
|
# Sometimes it looks like this:
|
|
@@ -78,7 +102,20 @@ class Jets::Controller::Middleware::Local
|
|
|
78
102
|
|
|
79
103
|
def query_string_parameters
|
|
80
104
|
Rack::Utils.parse_nested_query(@env['QUERY_STRING'])
|
|
105
|
+
# @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
|
|
106
|
+
# key, value = parameter.split('=')
|
|
107
|
+
# hash[key] = value
|
|
108
|
+
# end || {}
|
|
81
109
|
end
|
|
110
|
+
alias multi_value_query_string_parameters query_string_parameters
|
|
111
|
+
|
|
112
|
+
# def multi_value_query_string_parameters
|
|
113
|
+
# @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
|
|
114
|
+
# key, value = parameter.split('=')
|
|
115
|
+
# hash[key] = [] if hash[key].nil?
|
|
116
|
+
# hash[key] << value
|
|
117
|
+
# end || {}
|
|
118
|
+
# end
|
|
82
119
|
|
|
83
120
|
# To get the post body:
|
|
84
121
|
# rack.input: #<StringIO:0x007f8ccf8db9a0>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Jets::Controller::Middleware::Mimic
|
|
2
|
+
# This class uses method_missing to mimic for all possible future methods
|
|
3
|
+
# that AWS Lambda might add to the context object.
|
|
4
|
+
#
|
|
5
|
+
# The current methods available on the Lambda Context object:
|
|
6
|
+
# aws_request_id, invoked_function_arn, log_group_name,
|
|
7
|
+
# log_stream_name, function_name, memory_limit_in_mb, function_version,
|
|
8
|
+
# identity, client_context, deadline_ms
|
|
9
|
+
#
|
|
10
|
+
# Locally, example mimic values:
|
|
11
|
+
#
|
|
12
|
+
# context.aws_request_id "mimic lambda context: aws_request_id"
|
|
13
|
+
# context.invoked_function_arn "mimic lambda context: invoked_function_arn"
|
|
14
|
+
# context.log_group_name "mimic lambda context: log_group_name"
|
|
15
|
+
# context.log_stream_name "mimic lambda context: log_stream_name"
|
|
16
|
+
# context.function_name "mimic lambda context: function_name"
|
|
17
|
+
# context.memory_limit_in_mb "mimic lambda context: memory_limit_in_mb"
|
|
18
|
+
# context.function_version "mimic lambda context: function_version"
|
|
19
|
+
# context.identity "mimic lambda context: identity"
|
|
20
|
+
# context.client_context "mimic lambda context: client_context"
|
|
21
|
+
# context.deadline_ms "mimic lambda context: deadline_ms"
|
|
22
|
+
#
|
|
23
|
+
# On AWS, example real values:
|
|
24
|
+
#
|
|
25
|
+
# context.aws_request_id "b8357b1d-15f2-4197-9c6b-d6873be5eaba"
|
|
26
|
+
# context.invoked_function_arn "arn:aws:lambda:us-west-2:112233445566:function:demo-dev-controller"
|
|
27
|
+
# context.log_group_name "/aws/lambda/demo-dev-controller"
|
|
28
|
+
# context.log_stream_name "2023/09/10/[$LATEST]18323c481c674665b25496c329daa382"
|
|
29
|
+
# context.function_name "demo-dev-controller"
|
|
30
|
+
# context.memory_limit_in_mb "1536"
|
|
31
|
+
# context.function_version "$LATEST"
|
|
32
|
+
# context.identity nil
|
|
33
|
+
# context.client_context nil
|
|
34
|
+
# context.deadline_ms 1694353587386
|
|
35
|
+
#
|
|
36
|
+
class LambdaContext
|
|
37
|
+
def initialize(*)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def method_missing(method_name, *args)
|
|
41
|
+
"mimic lambda context: #{method_name}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|