jets 4.0.17 → 5.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +5 -1
- data/CHANGELOG.md +52 -23
- data/Gemfile +1 -5
- data/LICENSE.txt +1 -1
- data/Rakefile +3 -3
- data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
- data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
- data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
- data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
- data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
- data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
- data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
- data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
- data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
- data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
- data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
- data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
- data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
- data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
- data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
- data/engines/internal/app/views/layouts/application.html.erb +51 -0
- data/engines/internal/lib/internal/actiondispatch.rb +39 -0
- data/engines/internal/lib/internal/actionmailer.rb +51 -0
- data/engines/internal/lib/internal/actionview.rb +152 -0
- data/engines/internal/lib/internal/activerecord.rb +37 -0
- data/engines/internal/lib/internal/activesupport.rb +47 -0
- data/engines/internal/lib/internal/engine.rb +13 -0
- data/engines/internal/lib/internal/i18n_engine.rb +19 -0
- data/engines/internal/lib/internal/jets_controller.rb +46 -0
- data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
- data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
- data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
- data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
- data/exe/jets +1 -10
- data/jets.gemspec +29 -27
- data/lib/jets/app_loader.rb +77 -0
- data/lib/jets/application/bootstrap.rb +100 -0
- data/lib/jets/application/configuration/defaults.rb +256 -0
- data/lib/jets/application/configuration.rb +494 -0
- data/lib/jets/application/default_middleware_stack.rb +140 -0
- data/lib/jets/application/dummy_erb_compiler.rb +18 -0
- data/lib/jets/application/finisher.rb +266 -0
- data/lib/jets/application/routes_reloader.rb +80 -0
- data/lib/jets/application.rb +515 -198
- data/lib/jets/authorizer/base.rb +1 -0
- data/lib/jets/authorizer/dsl.rb +15 -11
- data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
- data/lib/jets/autoloaders/gem.rb +70 -0
- data/lib/jets/autoloaders/inflector.rb +21 -0
- data/lib/jets/autoloaders.rb +38 -101
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/backtrace_cleaner.rb +27 -0
- data/lib/jets/booter.rb +29 -176
- data/lib/jets/builders/code_builder.rb +45 -117
- data/lib/jets/builders/code_size.rb +1 -0
- data/lib/jets/builders/gem_replacer.rb +5 -6
- data/lib/jets/builders/handler_generator.rb +34 -14
- data/lib/jets/builders/lambda_layer.rb +2 -7
- data/lib/jets/builders/purger.rb +1 -1
- data/lib/jets/builders/rack_packager.rb +1 -1
- data/lib/jets/builders/ruby_packager.rb +32 -21
- data/lib/jets/builders/shim_vars/app.rb +10 -6
- data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
- data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
- data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
- data/lib/jets/bundle.rb +2 -9
- data/lib/jets/cfn/base.rb +82 -0
- data/lib/jets/cfn/builder/api/base.rb +12 -0
- data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
- data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
- data/lib/jets/cfn/builder/api/mapping.rb +54 -0
- data/lib/jets/cfn/builder/api/methods.rb +72 -0
- data/lib/jets/cfn/builder/api/paged.rb +30 -0
- data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
- data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
- data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
- data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
- data/lib/jets/cfn/builder/api/resources.rb +40 -0
- data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
- data/lib/jets/cfn/builder/controller.rb +28 -0
- data/lib/jets/cfn/builder/function.rb +9 -0
- data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
- data/lib/jets/cfn/builder/job.rb +10 -0
- data/lib/jets/cfn/builder/nested.rb +130 -0
- data/lib/jets/cfn/builder/one_controller.rb +53 -0
- data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
- data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
- data/lib/jets/cfn/builder/post_process.rb +25 -0
- data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
- data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
- data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
- data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
- data/lib/jets/cfn/deployment.rb +45 -0
- data/lib/jets/cfn/download.rb +39 -0
- data/lib/jets/cfn/params/api/base.rb +39 -0
- data/lib/jets/cfn/params/api/cors.rb +10 -0
- data/lib/jets/cfn/params/api/methods.rb +69 -0
- data/lib/jets/cfn/params/api/resources.rb +28 -0
- data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
- data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
- data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
- data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
- data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
- data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
- data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
- data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
- data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
- data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
- data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
- data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
- data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
- data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
- data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
- data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
- data/lib/jets/cfn/resource/lambda/function.rb +266 -0
- data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
- data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
- data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
- data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
- data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
- data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
- data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
- data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
- data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
- data/lib/jets/cfn/resource/nested/base.rb +38 -0
- data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
- data/lib/jets/cfn/resource/one/function.rb +66 -0
- data/lib/jets/cfn/resource/one/permission.rb +17 -0
- data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
- data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
- data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
- data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
- data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
- data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
- data/lib/jets/cfn/resource.rb +8 -0
- data/lib/jets/cfn/ship.rb +20 -19
- data/lib/jets/cfn/template.rb +89 -0
- data/lib/jets/cfn/upload.rb +40 -37
- data/lib/jets/cli.rb +28 -210
- data/lib/jets/command/actions.rb +49 -0
- data/lib/jets/command/api_helpers.rb +41 -0
- data/lib/jets/command/aws_helpers.rb +26 -0
- data/lib/jets/command/base.rb +204 -0
- data/lib/jets/command/behavior.rb +83 -0
- data/lib/jets/command/environment_argument.rb +42 -0
- data/lib/jets/command/help/call.md +48 -0
- data/lib/jets/{commands → command}/help/deploy.md +1 -1
- data/lib/jets/command/help/logs.md +21 -0
- data/lib/jets/{commands → command}/help/new.md +3 -4
- data/lib/jets/command/help/projects.md +6 -0
- data/lib/jets/command/help/releases.md +37 -0
- data/lib/jets/command/help/rollback.md +5 -0
- data/lib/jets/command/help/routes.md +15 -0
- data/lib/jets/command/help/stacks.md +6 -0
- data/lib/jets/command/help.rb +17 -0
- data/lib/jets/command/helpers/editor.rb +35 -0
- data/lib/jets/command.rb +133 -0
- data/lib/jets/commands/application/application_command.rb +40 -0
- data/lib/jets/commands/build/build_command.rb +33 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
- data/lib/jets/commands/call/autoload_guesser.rb +2 -2
- data/lib/jets/commands/call/base_guesser.rb +4 -4
- data/lib/jets/commands/call/call_command.rb +27 -0
- data/lib/jets/commands/call/caller.rb +184 -0
- data/lib/jets/commands/call/guesser.rb +1 -1
- data/lib/jets/commands/clean/base.rb +1 -1
- data/lib/jets/commands/clean/build.rb +1 -1
- data/lib/jets/commands/clean/clean_command.rb +15 -0
- data/lib/jets/commands/clean/log.rb +1 -1
- data/lib/jets/commands/configure/configure_command.rb +9 -0
- data/lib/jets/commands/console/console_command.rb +38 -0
- data/lib/jets/commands/credentials/USAGE +103 -0
- data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
- data/lib/jets/commands/credentials/credentials_command.rb +139 -0
- data/lib/jets/commands/db/system/change/change_command.rb +24 -0
- data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
- data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
- data/lib/jets/commands/delete/delete_command.rb +155 -0
- data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
- data/lib/jets/commands/dev/dev_command.rb +19 -0
- data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
- data/lib/jets/commands/encrypted/USAGE +46 -0
- data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
- data/lib/jets/commands/gems/gems_command.rb +14 -0
- data/lib/jets/commands/generate/generate_command.rb +95 -0
- data/lib/jets/commands/help/USAGE +20 -0
- data/lib/jets/commands/help/help_command.rb +15 -0
- data/lib/jets/commands/initializers/initializers_command.rb +19 -0
- data/lib/jets/commands/logs/logs_command.rb +45 -0
- data/lib/jets/commands/new/new_command.rb +19 -0
- data/lib/jets/commands/notes/notes_command.rb +30 -0
- data/lib/jets/commands/plugin/plugin_command.rb +45 -0
- data/lib/jets/commands/projects/projects_command.rb +30 -0
- data/lib/jets/commands/rake/rake_command.rb +59 -0
- data/lib/jets/commands/releases/releases_command.rb +72 -0
- data/lib/jets/commands/rollback/rollback_command.rb +41 -0
- data/lib/jets/commands/routes/routes_command.rb +19 -0
- data/lib/jets/commands/runner/runner_command.rb +60 -0
- data/lib/jets/commands/server/server_command.rb +291 -0
- data/lib/jets/commands/stacks/stacks_command.rb +39 -0
- data/lib/jets/commands/status/status_command.rb +9 -0
- data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
- data/lib/jets/commands/version/version_command.rb +11 -0
- data/lib/jets/commands.rb +17 -0
- data/lib/jets/configuration.rb +166 -0
- data/lib/jets/controller/base.rb +105 -183
- data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
- data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
- data/lib/jets/controller/compat/caching.rb +13 -0
- data/lib/jets/controller/compat/future.rb +13 -0
- data/lib/jets/controller/compat/route_set.rb +47 -0
- data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
- data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
- data/lib/jets/controller/decorate/logging.rb +90 -0
- data/lib/jets/controller/decorate/redirecting.rb +16 -0
- data/lib/jets/controller/decorate/url_for.rb +10 -0
- data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
- data/lib/jets/controller/handler.rb +41 -0
- data/lib/jets/controller/middleware/main.rb +16 -8
- data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
- data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
- data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
- data/lib/jets/controller/rack_adapter/action.rb +35 -0
- data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
- data/lib/jets/controller/request/compat/params.rb +144 -0
- data/lib/jets/controller/request/compat/request.rb +125 -0
- data/lib/jets/controller/request.rb +35 -18
- data/lib/jets/controller/response/compat/response.rb +67 -0
- data/lib/jets/controller/response.rb +91 -8
- data/lib/jets/core.rb +136 -51
- data/lib/jets/core_ext/kernel.rb +2 -2
- data/lib/jets/core_ext/symbol.rb +5 -0
- data/lib/jets/core_ext.rb +4 -0
- data/lib/jets/dev_caching.rb +44 -0
- data/lib/jets/dotenv/ssm.rb +2 -2
- data/lib/jets/dotenv.rb +2 -1
- data/lib/jets/engine/configuration.rb +96 -0
- data/lib/jets/engine/turbines.rb +23 -0
- data/lib/jets/engine.rb +380 -0
- data/lib/jets/exception_reporting.rb +43 -0
- data/lib/jets/generators/job/job_generator.rb +41 -0
- data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
- data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
- data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
- data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
- data/lib/jets/generators/overrides/app/USAGE +38 -0
- data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
- data/lib/jets/generators/overrides/app/helpers.rb +143 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
- data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
- data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
- data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
- data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
- data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
- data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
- data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
- data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
- data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
- data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
- data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
- data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
- data/lib/jets/generators.rb +112 -0
- data/lib/jets/info.rb +116 -0
- data/lib/jets/initializable.rb +95 -0
- data/lib/jets/job/base.rb +3 -2
- data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
- data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
- data/lib/jets/job/dsl/iot_event.rb +6 -6
- data/lib/jets/job/dsl/kinesis_event.rb +5 -5
- data/lib/jets/job/dsl/log_event.rb +2 -2
- data/lib/jets/job/dsl/rule_event.rb +7 -4
- data/lib/jets/job/dsl/s3_event.rb +1 -1
- data/lib/jets/job/dsl/sns_event.rb +6 -6
- data/lib/jets/job/dsl/sqs_event.rb +11 -11
- data/lib/jets/klass.rb +5 -6
- data/lib/jets/lambda/definition.rb +118 -0
- data/lib/jets/lambda/dsl/warnings.rb +57 -0
- data/lib/jets/lambda/dsl.rb +64 -53
- data/lib/jets/lambda/function.rb +3 -3
- data/lib/jets/lambda/function_constructor.rb +6 -6
- data/lib/jets/lambda/functions.rb +36 -1
- data/lib/jets/mega/request/source.rb +1 -2
- data/lib/jets/mega/request.rb +4 -4
- data/lib/jets/names.rb +31 -15
- data/lib/jets/overrides/dummy/rails.rb +11 -0
- data/lib/jets/overrides/lambda/marshaller.rb +10 -0
- data/lib/jets/overrides/puma.rb +10 -0
- data/lib/jets/paths.rb +243 -0
- data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
- data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
- data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
- data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
- data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
- data/lib/jets/preheat.rb +12 -25
- data/lib/jets/processors/deducer.rb +2 -2
- data/lib/jets/processors/main_processor.rb +6 -13
- data/lib/jets/rack/logger.rb +77 -0
- data/lib/jets/router/compat/route_set.rb +177 -0
- data/lib/jets/router/dsl/mount.rb +40 -6
- data/lib/jets/router/dsl.rb +125 -105
- data/lib/jets/router/engine_mount.rb +36 -0
- data/lib/jets/router/help.rb +130 -0
- data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
- data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
- data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
- data/lib/jets/router/matcher.rb +135 -16
- data/lib/jets/router/resources/options.rb +6 -4
- data/lib/jets/router/route/after_initialize.rb +64 -0
- data/lib/jets/router/route/as.rb +93 -0
- data/lib/jets/router/route/authorizer.rb +1 -0
- data/lib/jets/router/route/compat.rb +45 -0
- data/lib/jets/router/route/info.rb +74 -0
- data/lib/jets/router/route/node.rb +137 -0
- data/lib/jets/router/route/path.rb +93 -0
- data/lib/jets/router/route.rb +109 -106
- data/lib/jets/router/route_set.rb +214 -0
- data/lib/jets/router/scope.rb +204 -69
- data/lib/jets/router/state.rb +36 -16
- data/lib/jets/router/util.rb +1 -31
- data/lib/jets/router.rb +64 -162
- data/lib/jets/ruby_version_check.rb +15 -0
- data/lib/jets/rule/base.rb +1 -0
- data/lib/jets/rule/dsl.rb +7 -7
- data/lib/jets/secrets.rb +110 -0
- data/lib/jets/spec_helpers/controllers/request.rb +22 -16
- data/lib/jets/spec_helpers/controllers.rb +32 -24
- data/lib/jets/spec_helpers.rb +0 -6
- data/lib/jets/stack/builder.rb +3 -2
- data/lib/jets/stack/definition.rb +1 -4
- data/lib/jets/stack/function.rb +2 -2
- data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
- data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
- data/lib/jets/stack/main/dsl/lambda.rb +26 -20
- data/lib/jets/stack/main/dsl/sqs.rb +2 -2
- data/lib/jets/stack/output/lookup.rb +1 -1
- data/lib/jets/stack/output.rb +2 -2
- data/lib/jets/stack/parameter.rb +2 -2
- data/lib/jets/stack/resource.rb +3 -3
- data/lib/jets/stack/s3_event.rb +51 -37
- data/lib/jets/stack.rb +1 -1
- data/lib/jets/tasks/engine.rake +85 -0
- data/lib/jets/tasks/framework.rake +66 -0
- data/lib/jets/tasks/log.rake +41 -0
- data/lib/jets/tasks/middleware.rake +9 -0
- data/lib/jets/tasks/misc.rake +81 -0
- data/lib/jets/tasks/statistics.rake +37 -0
- data/lib/jets/tasks/tmp.rake +51 -0
- data/lib/jets/tasks/yarn.rake +29 -0
- data/lib/jets/tasks/zeitwerk.rake +61 -0
- data/lib/jets/tasks.rb +18 -0
- data/lib/jets/turbine/configurable.rb +36 -0
- data/lib/jets/turbine/configuration.rb +101 -0
- data/lib/jets/turbine.rb +164 -20
- data/lib/jets/util/camelize.rb +24 -0
- data/lib/jets/version.rb +1 -1
- data/lib/jets.rb +7 -16
- metadata +410 -362
- data/bin/release +0 -9
- data/lib/jets/application/defaults.rb +0 -230
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
- data/lib/jets/builders/reconfigure_rails.rb +0 -114
- data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
- data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
- data/lib/jets/cfn/builders/controller_builder.rb +0 -50
- data/lib/jets/cfn/builders/function_builder.rb +0 -14
- data/lib/jets/cfn/builders/job_builder.rb +0 -14
- data/lib/jets/cfn/builders/page_builder.rb +0 -80
- data/lib/jets/cfn/built_template.rb +0 -15
- data/lib/jets/cfn/template_source.rb +0 -64
- data/lib/jets/commands/base.rb +0 -145
- data/lib/jets/commands/call.rb +0 -185
- data/lib/jets/commands/clean.rb +0 -19
- data/lib/jets/commands/configure.rb +0 -51
- data/lib/jets/commands/console.rb +0 -18
- data/lib/jets/commands/db/environment-task.rake +0 -3
- data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
- data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
- data/lib/jets/commands/db/tasks.rb +0 -34
- data/lib/jets/commands/db.rb +0 -13
- data/lib/jets/commands/dbconsole.rb +0 -134
- data/lib/jets/commands/delete.rb +0 -136
- data/lib/jets/commands/dynamodb/migrate.rb +0 -9
- data/lib/jets/commands/dynamodb/migrator.rb +0 -36
- data/lib/jets/commands/dynamodb.rb +0 -19
- data/lib/jets/commands/gems.rb +0 -13
- data/lib/jets/commands/help/call.md +0 -69
- data/lib/jets/commands/help/dynamodb/generate.md +0 -52
- data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
- data/lib/jets/commands/help/routes.md +0 -16
- data/lib/jets/commands/help.rb +0 -9
- data/lib/jets/commands/import/base.rb +0 -49
- data/lib/jets/commands/import/cheatsheet.rb +0 -35
- data/lib/jets/commands/import/rack.rb +0 -16
- data/lib/jets/commands/import/rails.rb +0 -74
- data/lib/jets/commands/import/sequence.rb +0 -90
- data/lib/jets/commands/import/templates/config/database.yml +0 -30
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
- data/lib/jets/commands/import.rb +0 -12
- data/lib/jets/commands/main.rb +0 -169
- data/lib/jets/commands/markdown/creator.rb +0 -58
- data/lib/jets/commands/markdown/index.rb +0 -27
- data/lib/jets/commands/markdown/page.rb +0 -125
- data/lib/jets/commands/markdown/shell.rb +0 -11
- data/lib/jets/commands/new.rb +0 -173
- data/lib/jets/commands/rake_command.rb +0 -61
- data/lib/jets/commands/rake_tasks.rb +0 -50
- data/lib/jets/commands/runner.rb +0 -16
- data/lib/jets/commands/sequence.rb +0 -104
- data/lib/jets/commands/stack_info.rb +0 -30
- data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.env.test +0 -3
- data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
- data/lib/jets/commands/templates/skeleton/Procfile +0 -7
- data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
- data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
- data/lib/jets/commands/upgrade/version1.rb +0 -136
- data/lib/jets/commands/upgrade.rb +0 -105
- data/lib/jets/commands/webpacker_template.rb +0 -18
- data/lib/jets/controller/callbacks.rb +0 -73
- data/lib/jets/controller/cookies/jar.rb +0 -269
- data/lib/jets/controller/cookies.rb +0 -38
- data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
- data/lib/jets/controller/error.rb +0 -4
- data/lib/jets/controller/forgery_protection.rb +0 -43
- data/lib/jets/controller/layout.rb +0 -17
- data/lib/jets/controller/middleware/cors.rb +0 -60
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
- data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
- data/lib/jets/controller/middleware/reloader.rb +0 -15
- data/lib/jets/controller/parameters_filter.rb +0 -29
- data/lib/jets/controller/params.rb +0 -117
- data/lib/jets/controller/redirection.rb +0 -61
- data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
- data/lib/jets/controller/rendering.rb +0 -96
- data/lib/jets/controller/stage.rb +0 -34
- data/lib/jets/controller.rb +0 -3
- data/lib/jets/db.rb +0 -15
- data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
- data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
- data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
- data/lib/jets/generator.rb +0 -112
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
- data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
- data/lib/jets/lambda/task.rb +0 -111
- data/lib/jets/logger.rb +0 -21
- data/lib/jets/middleware/configurator.rb +0 -84
- data/lib/jets/middleware/default_stack.rb +0 -53
- data/lib/jets/middleware/layer.rb +0 -34
- data/lib/jets/middleware/stack.rb +0 -77
- data/lib/jets/middleware.rb +0 -33
- data/lib/jets/overrides/rails/action_controller.rb +0 -13
- data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
- data/lib/jets/overrides/rails/common_methods.rb +0 -13
- data/lib/jets/overrides/rails/migration_checker.rb +0 -34
- data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
- data/lib/jets/overrides/rails/url_helper.rb +0 -88
- data/lib/jets/overrides/rails.rb +0 -6
- data/lib/jets/rack_server.rb +0 -86
- data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
- data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
- data/lib/jets/resource/api_gateway/cors.rb +0 -61
- data/lib/jets/resource/api_gateway/method.rb +0 -102
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
- data/lib/jets/resource/base.rb +0 -28
- data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
- data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
- data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
- data/lib/jets/resource/child_stack/api_resource.rb +0 -54
- data/lib/jets/resource/child_stack/base.rb +0 -24
- data/lib/jets/resource/lambda/function.rb +0 -221
- data/lib/jets/resource/logs/subscription_filter.rb +0 -31
- data/lib/jets/resource/permission.rb +0 -45
- data/lib/jets/resource.rb +0 -71
- data/lib/jets/router/error.rb +0 -4
- data/lib/jets/router/finder.rb +0 -47
- data/lib/jets/router/helpers/core_helper.rb +0 -27
- data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
- data/lib/jets/router/helpers.rb +0 -4
- data/lib/jets/router/method_creator/code.rb +0 -99
- data/lib/jets/router/method_creator/edit.rb +0 -12
- data/lib/jets/router/method_creator/generic.rb +0 -11
- data/lib/jets/router/method_creator/index.rb +0 -48
- data/lib/jets/router/method_creator/new.rb +0 -12
- data/lib/jets/router/method_creator/root.rb +0 -15
- data/lib/jets/router/method_creator/show.rb +0 -12
- data/lib/jets/router/method_creator.rb +0 -50
- data/lib/jets/turbo/database_yaml.rb +0 -41
- data/lib/jets/turbo/project/.gitignore +0 -12
- data/lib/jets/turbo/project/.jetskeep +0 -1
- data/lib/jets/turbo/project/Gemfile +0 -16
- data/lib/jets/turbo/project/Rakefile +0 -2
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
- data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
- data/lib/jets/turbo/project/config/application.rb +0 -5
- data/lib/jets/turbo/project/config/routes.rb +0 -4
- data/lib/jets/turbo/project/config.ru +0 -5
- data/lib/jets/turbo/rails.rb +0 -127
- data/lib/jets/turbo/templates/config/database.yml +0 -30
- data/lib/jets/turbo.rb +0 -56
- data/readme/prerelease.md +0 -6
- data/readme/testing.md +0 -60
- /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
- /data/lib/jets/{commands → command}/help/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
- /data/lib/jets/{commands → command}/help/console.md +0 -0
- /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
- /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
- /data/lib/jets/{commands → command}/help/delete.md +0 -0
- /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
- /data/lib/jets/{commands → command}/help/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
- /data/lib/jets/{commands → command}/help/runner.md +0 -0
- /data/lib/jets/{commands → command}/help/server.md +0 -0
- /data/lib/jets/{commands → command}/help/status.md +0 -0
- /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
- /data/lib/jets/{commands → command}/help/url.md +0 -0
- /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
- /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
|
@@ -0,0 +1,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,17 +1,38 @@
|
|
|
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,
|
|
@@ -25,7 +46,9 @@ class Jets::Controller::Middleware::Local
|
|
|
25
46
|
}
|
|
26
47
|
end
|
|
27
48
|
memoize :event
|
|
49
|
+
alias convert event
|
|
28
50
|
|
|
51
|
+
protected
|
|
29
52
|
# Annoying. The headers part of the AWS Lambda proxy structure
|
|
30
53
|
# does not consisently use the same casing scheme for the header keys.
|
|
31
54
|
# Sometimes it looks like this:
|
|
@@ -78,19 +101,21 @@ class Jets::Controller::Middleware::Local
|
|
|
78
101
|
end
|
|
79
102
|
|
|
80
103
|
def query_string_parameters
|
|
81
|
-
@env['QUERY_STRING']
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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 || {}
|
|
85
109
|
end
|
|
110
|
+
alias multi_value_query_string_parameters query_string_parameters
|
|
86
111
|
|
|
87
|
-
def multi_value_query_string_parameters
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
end
|
|
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
|
|
94
119
|
|
|
95
120
|
# To get the post body:
|
|
96
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
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
require 'kramdown'
|
|
2
2
|
|
|
3
3
|
# Handles mimicing of API Gateway to Lambda function call locally
|
|
4
|
+
# Logic in the opposite direction: Jets::Controller::Handler::Apigw#rack_vars
|
|
4
5
|
module Jets::Controller::Middleware
|
|
5
|
-
class
|
|
6
|
+
class Mimic
|
|
6
7
|
extend Memoist
|
|
7
8
|
|
|
8
9
|
def initialize(app)
|
|
@@ -10,21 +11,30 @@ module Jets::Controller::Middleware
|
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def call(env)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
matcher = Jets::Router::Matcher.new
|
|
15
|
+
route = matcher.find_by_env(env) # simpler version does not check constraints
|
|
16
|
+
return not_found(env) unless route
|
|
17
|
+
|
|
18
|
+
# Make instance available so we dont not have to pass it around.
|
|
19
|
+
# Also important to assign to instance variables so values are memoized in variables
|
|
20
|
+
# So the mimic logic work because @env.merge! does not happened
|
|
21
|
+
# until end. We do not want apigw.controller to create a new controller instance
|
|
22
|
+
# with a different object_id
|
|
23
|
+
apigw = Apigw.new(route, env) # takes rack env and converts to API Gateway event structure
|
|
24
|
+
@controller = apigw.controller
|
|
25
|
+
@meth = apigw.meth
|
|
26
|
+
@event = apigw.event
|
|
27
|
+
@context = apigw.context
|
|
17
28
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@controller, @meth, @event = mimic.controller, mimic.meth, mimic.event
|
|
29
|
+
route = matcher.find_by_request(@controller.request) # need request object to check constraints
|
|
30
|
+
return not_found(env) unless route
|
|
21
31
|
|
|
22
32
|
if route.to == 'jets/rack#process' # megamode
|
|
23
33
|
# Bypass the Jets middlewares since it could interfere with the Rack
|
|
24
34
|
# application's middleware stack.
|
|
25
35
|
#
|
|
26
|
-
#
|
|
27
|
-
# but passing the
|
|
36
|
+
# Jets sends back a transfer-encoding=chunked. Curling Jets directly works,
|
|
37
|
+
# but passing the Jets response back through this middleware results in errors.
|
|
28
38
|
# Disable chunking responses by deleting the transfer-encoding response header.
|
|
29
39
|
# Would like to understand why this happens this better, if someone can explain please let me know.
|
|
30
40
|
status, headers, body = @controller.dispatch! # jets/rack_controller
|
|
@@ -36,21 +46,30 @@ module Jets::Controller::Middleware
|
|
|
36
46
|
elsif polymorphic_function?
|
|
37
47
|
run_polymophic_function
|
|
38
48
|
else # Normal Jets request
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
unless on_aws?(env)
|
|
50
|
+
# Only set these variables when running locally and not on AWS.
|
|
51
|
+
# On AWS, these are set by the Jets::Controller::Handler::Apigw#rack_vars
|
|
52
|
+
env.merge!(
|
|
53
|
+
'jets.controller' => @controller, # mimic controller instance
|
|
54
|
+
'jets.context' => @context, # mimic context
|
|
55
|
+
'jets.event' => @event, # mimic event
|
|
56
|
+
'jets.meth' => @meth,
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
@app.call(env) # goes to all middleware all the way to Jets::Controller::Middleware::Main
|
|
41
60
|
end
|
|
42
61
|
end
|
|
43
62
|
|
|
44
63
|
# Never hit when calling polymorphic function on AWS Lambda. Can only get called with the local server.
|
|
45
64
|
def polymorphic_function?
|
|
46
65
|
return false if ENV['_HANDLER'] # slight speed improvement on Lambda
|
|
47
|
-
polymorphic_function.
|
|
66
|
+
polymorphic_function.definition.lang != :ruby
|
|
48
67
|
end
|
|
49
68
|
|
|
50
69
|
def polymorphic_function
|
|
51
|
-
# Abusing
|
|
70
|
+
# Abusing Poly to run polymorphic code, should call LambdaExecutor directly
|
|
52
71
|
# after reworking LambdaExecutor so it has a better interface.
|
|
53
|
-
Jets::
|
|
72
|
+
Jets::Poly.new(@controller.class, @meth)
|
|
54
73
|
end
|
|
55
74
|
memoize :polymorphic_function
|
|
56
75
|
|
|
@@ -62,13 +81,8 @@ module Jets::Controller::Middleware
|
|
|
62
81
|
[status, headers, body] # triplet
|
|
63
82
|
end
|
|
64
83
|
|
|
65
|
-
# Modifies env the in the same way real call from AWS lambda would modify env
|
|
66
|
-
def mimic_aws_lambda!(env, vars)
|
|
67
|
-
env.merge!(vars)
|
|
68
|
-
env
|
|
69
|
-
end
|
|
70
|
-
|
|
71
84
|
def on_aws?(env)
|
|
85
|
+
return true if ENV['ON_AWS']
|
|
72
86
|
return false if Jets.env.test? # usually with test we're passing in full API Gateway fixtures with the HTTP_X_AMZN_TRACE_ID
|
|
73
87
|
return false if ENV['JETS_ELB'] # If we're using an ELB and Jets is inside a container running jets server, we don't want to pretend we're on AWS.
|
|
74
88
|
on_cloud9 = !!(env['HTTP_HOST'] =~ /cloud9\..*\.amazonaws\.com/)
|
|
@@ -85,36 +99,7 @@ module Jets::Controller::Middleware
|
|
|
85
99
|
end
|
|
86
100
|
|
|
87
101
|
def not_found(env)
|
|
88
|
-
|
|
89
|
-
body = <<~HTML
|
|
90
|
-
<!DOCTYPE html>
|
|
91
|
-
<html>
|
|
92
|
-
<head>
|
|
93
|
-
<meta charset="utf-8">
|
|
94
|
-
<title>Route not found</title>
|
|
95
|
-
</head>
|
|
96
|
-
<body>
|
|
97
|
-
#{message}
|
|
98
|
-
</body>
|
|
99
|
-
</html>
|
|
100
|
-
HTML
|
|
101
|
-
StringIO.new(body)
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Show pretty route table for user to help with debugging in non-production mode
|
|
105
|
-
def routes_table
|
|
106
|
-
routes = Jets::Router.routes
|
|
107
|
-
|
|
108
|
-
return "Your routes table is empty." if routes.empty?
|
|
109
|
-
|
|
110
|
-
text = "Verb | Path | Controller#action\n"
|
|
111
|
-
text << "--- | --- | ---\n"
|
|
112
|
-
routes.each do |route|
|
|
113
|
-
text << "#{route.method} | #{route.path} | #{route.to}\n"
|
|
114
|
-
end
|
|
115
|
-
html = Kramdown::Document.new(text).to_html
|
|
116
|
-
puts html
|
|
117
|
-
html
|
|
102
|
+
raise Jets::Controller::RoutingError, "No route matches #{env['PATH_INFO'].inspect}"
|
|
118
103
|
end
|
|
119
104
|
end
|
|
120
105
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Jets::Controller::RackAdapter
|
|
2
|
+
module Action
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
class_methods do
|
|
6
|
+
def action(name)
|
|
7
|
+
lambda do |env|
|
|
8
|
+
route = find_first_route_for_action(name)
|
|
9
|
+
env['PATH_INFO'] = route_path(route)
|
|
10
|
+
controller = new({}, {}, name, env)
|
|
11
|
+
controller.dispatch! # does not go through middleware stack
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Find first route to be used for PATH_INFO.
|
|
16
|
+
# This allows engine_delegate to work properly.
|
|
17
|
+
def find_first_route_for_action(name)
|
|
18
|
+
Jets::Router.routes.find do |r|
|
|
19
|
+
route_controller_path, route_action_name = r.to.split('#')
|
|
20
|
+
route_controller_path == controller_path && route_action_name == name.to_s
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def route_path(route)
|
|
25
|
+
if route
|
|
26
|
+
path = route.path
|
|
27
|
+
path = "/#{path}" unless path.starts_with?('/')
|
|
28
|
+
else
|
|
29
|
+
path = "/#{controller_path}##{name} (action proc)"
|
|
30
|
+
end
|
|
31
|
+
path
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|