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,137 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# The Node class groups logic that requires both of route and scope info.
|
|
3
|
+
# It does not really belong in either the Route or Scope class and
|
|
4
|
+
# requires both to do its job. So it gets its own class.
|
|
5
|
+
# This seems to help keep the Route and Scope classes simpler.
|
|
6
|
+
#
|
|
7
|
+
# An instance of this class is made available with each
|
|
8
|
+
# iteration of loop that processes the DSL scopes.
|
|
9
|
+
class Node
|
|
10
|
+
attr_reader :route, :scope, :leaf_scope
|
|
11
|
+
def initialize(route, scope)
|
|
12
|
+
@route, @scope = route, scope # scope is current scope of iteration
|
|
13
|
+
@info = route.info
|
|
14
|
+
@options = route.options
|
|
15
|
+
@leaf_scope = @route.scope # the route scope is the leaf scope
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def append_path?
|
|
19
|
+
has_path? && add_path_segment?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def append_param?
|
|
23
|
+
has_param? && add_path_segment?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def append_as?
|
|
27
|
+
has_path? && add_path_segment? ||
|
|
28
|
+
scope.from.nil? && scope.as
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Accounts for shallow scope. Example:
|
|
32
|
+
#
|
|
33
|
+
# resources :posts, shallow: true do
|
|
34
|
+
# resources :comments do
|
|
35
|
+
# resources :likes
|
|
36
|
+
# end
|
|
37
|
+
# end
|
|
38
|
+
#
|
|
39
|
+
# add_path_segment? = add_path_segment_considering_shallow?
|
|
40
|
+
#
|
|
41
|
+
def add_path_segment?
|
|
42
|
+
if param_action? && shallow_param_action?
|
|
43
|
+
leaf? # only add path segments for leaf
|
|
44
|
+
elsif paramless_action? && shallow_paramless_action?
|
|
45
|
+
leaf? || leaf_scope.real_parent?(scope)
|
|
46
|
+
else
|
|
47
|
+
true # default is to always path preceding path segments
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def shallow_param_action?
|
|
52
|
+
lookahead_shallow? || leaf_scope.any_parent_shallow?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def shallow_paramless_action?
|
|
56
|
+
lookahead_shallow?(parent: true) || scope.any_parent_shallow?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def lookahead_shallow?(parent: false)
|
|
60
|
+
next_scope = scope
|
|
61
|
+
while next_scope
|
|
62
|
+
check_scope = parent ? next_scope.parent : next_scope
|
|
63
|
+
# Important to check next_scope == leaf_scope
|
|
64
|
+
# Otherwise it'll collapse path segments for higher scopes also.
|
|
65
|
+
return true if check_scope.shallow? && next_scope == leaf_scope
|
|
66
|
+
next_scope = next_scope.next
|
|
67
|
+
end
|
|
68
|
+
false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def has_path?
|
|
72
|
+
scope.resolved_path && !scope.virtual?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def has_param?
|
|
76
|
+
return false if scope.root?
|
|
77
|
+
|
|
78
|
+
resolved_param && param_action? ||
|
|
79
|
+
scope.resource_descendent? && !leaf? ||
|
|
80
|
+
scope.resource_sibling? && !leaf?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def resolved_as
|
|
84
|
+
as = scope.as || scope.resource_name
|
|
85
|
+
# as = scope.as || scope.resource_name
|
|
86
|
+
if scope.resource_name
|
|
87
|
+
controller = nil # dont need controller. can infer from resources, namespace, etc
|
|
88
|
+
else # direct route method without scope or module only etc
|
|
89
|
+
controller = @info.controller.split('/').last if leaf? #&& as.nil?
|
|
90
|
+
end
|
|
91
|
+
[as, controller].compact.join('_')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def param_action?
|
|
95
|
+
@options[:on] == :member || scope.from == :member ||
|
|
96
|
+
%w[edit show update destroy].include?(@info.action)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def paramless_action?
|
|
100
|
+
@options[:on] == :collection || scope.from == :collection ||
|
|
101
|
+
%w[index new create].include?(@info.action)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def leaf?
|
|
105
|
+
scope == leaf_scope
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def resolved_path
|
|
109
|
+
scope.resolved_path
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def resolved_param
|
|
113
|
+
case scope.from
|
|
114
|
+
when :resources, :member
|
|
115
|
+
":#{param}"
|
|
116
|
+
else # :resource, :namespace, :path, :collection
|
|
117
|
+
nil
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# If a block has pass then we assume the resources will be nested and then prefix
|
|
122
|
+
# the param name with the resource. IE: post_id instead of id
|
|
123
|
+
# This avoids an API Gateway parent sibling variable collision.
|
|
124
|
+
def param
|
|
125
|
+
return scope.options[:param] if scope.options[:param]
|
|
126
|
+
|
|
127
|
+
if leaf? && Jets.config.routes.allow_sibling_conflicts
|
|
128
|
+
"id"
|
|
129
|
+
elsif scope.resource_descendent? ||
|
|
130
|
+
scope.resource_sibling? && scope.colliding_resource_sibling?
|
|
131
|
+
"#{scope.resource_name.to_s.singularize}_id"
|
|
132
|
+
else
|
|
133
|
+
"id"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module Path
|
|
3
|
+
# Note: The @options[:path] is missing prefix and is not support via direct create_route.
|
|
4
|
+
# This is because it can be added directly to the path. IE:
|
|
5
|
+
#
|
|
6
|
+
# get "myprefix/posts", to: "posts#index"
|
|
7
|
+
#
|
|
8
|
+
# Also, this helps to keep the method creator logic simpler.
|
|
9
|
+
#
|
|
10
|
+
def path(format=:jets)
|
|
11
|
+
segments = path_prefixes + [path_option]
|
|
12
|
+
segments = add_path_suffix(segments)
|
|
13
|
+
path = segments.reject(&:blank?).join('/')
|
|
14
|
+
format_path(format, path)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# When scope used directly. IE: not coming from namespace or resources
|
|
18
|
+
# When coming from namespace or resources, the path is already accounted for.
|
|
19
|
+
def path_prefixes
|
|
20
|
+
list = []
|
|
21
|
+
@scope.from_top.each do |scope|
|
|
22
|
+
node = Node.new(self, scope)
|
|
23
|
+
# Update @path_names as we walk down
|
|
24
|
+
@path_names.merge!(scope.options[:path_names] || {})
|
|
25
|
+
|
|
26
|
+
list << scope.resolved_path if node.append_path?
|
|
27
|
+
list << node.resolved_param if node.append_param?
|
|
28
|
+
end
|
|
29
|
+
list.reject!(&:blank?) # allows for path: '' to remove resource name from path
|
|
30
|
+
list
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def path_option
|
|
34
|
+
node = Node.new(self, @scope)
|
|
35
|
+
path = @options[:path].to_s.delete_prefix('/') # IE: new or edit
|
|
36
|
+
path.sub!(@scope.param_placeholder, ":#{node.resolved_param}")
|
|
37
|
+
path
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Accounts for path names options map. Example:
|
|
41
|
+
#
|
|
42
|
+
# {path_names: {new: "sign_up", edit: "edit"}}
|
|
43
|
+
#
|
|
44
|
+
# new posts/new => posts/sign_up
|
|
45
|
+
# edit posts/:id/edit => posts/:id/edit
|
|
46
|
+
#
|
|
47
|
+
def add_path_suffix(all_segments)
|
|
48
|
+
# rip apart last path as segments
|
|
49
|
+
# work with and modify segments to be returned
|
|
50
|
+
segments = all_segments.last.to_s.split('/')
|
|
51
|
+
current_suffix = segments.last
|
|
52
|
+
|
|
53
|
+
new_or_edit = %w[new edit].include?(current_suffix)
|
|
54
|
+
additional_action = @options[:on].is_a?(Symbol) && @options[:on] != :member && @options[:on] != :collection
|
|
55
|
+
will_replace = new_or_edit || additional_action
|
|
56
|
+
|
|
57
|
+
if will_replace
|
|
58
|
+
segments_without_last = all_segments[0..-2]
|
|
59
|
+
# reassemble path with additional on action
|
|
60
|
+
segments_without_last << @options[:on].to_s if additional_action
|
|
61
|
+
# reassemble with new suffix from path_names map
|
|
62
|
+
new_suffix = @path_names[current_suffix.to_sym] || current_suffix
|
|
63
|
+
segments_without_last << new_suffix
|
|
64
|
+
new_last = segments_without_last.join('/')
|
|
65
|
+
segments[-1] = new_last # replace
|
|
66
|
+
segments
|
|
67
|
+
else
|
|
68
|
+
all_segments # original
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def path_suffixes
|
|
73
|
+
list = []
|
|
74
|
+
list << action_suffix if action_suffix
|
|
75
|
+
list
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# IE: standard: posts/:id/edit
|
|
79
|
+
# api_gateway: posts/{id}/edit
|
|
80
|
+
def format_path(format, path)
|
|
81
|
+
path = case format
|
|
82
|
+
when :api_gateway
|
|
83
|
+
api_gateway_format(path)
|
|
84
|
+
when :raw
|
|
85
|
+
path
|
|
86
|
+
else # jets format
|
|
87
|
+
ensure_jets_format(path)
|
|
88
|
+
end
|
|
89
|
+
path = "/#{path}" unless path.starts_with?('/') # ensure starts with / be forgiving if / accidentally not included
|
|
90
|
+
path
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/jets/router/route.rb
CHANGED
|
@@ -1,114 +1,58 @@
|
|
|
1
1
|
# route = Jets::Router::Route.new(
|
|
2
2
|
# path: "posts",
|
|
3
|
-
#
|
|
3
|
+
# http_method: :get,
|
|
4
4
|
# to: "posts#index",
|
|
5
5
|
# )
|
|
6
|
-
|
|
6
|
+
module Jets::Router
|
|
7
7
|
class Route
|
|
8
|
-
|
|
8
|
+
extend Memoist
|
|
9
|
+
include Compat
|
|
10
|
+
include AfterInitialize
|
|
11
|
+
include As
|
|
9
12
|
include Authorizer
|
|
13
|
+
include Path
|
|
14
|
+
include Util
|
|
10
15
|
|
|
11
16
|
CAPTURE_REGEX = "([^/]*)" # as string
|
|
12
17
|
|
|
13
|
-
attr_reader :
|
|
18
|
+
attr_reader :options, :scope, :info, :defaults
|
|
19
|
+
attr_accessor :original_engine
|
|
14
20
|
def initialize(options, scope=Scope.new)
|
|
15
|
-
@options
|
|
16
|
-
@
|
|
17
|
-
@
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# For Grape apps, calling ActiveSupport to_json on a Grape class causes an infinite loop.
|
|
21
|
-
# Can reproduce with `GrapeApp.to_json`
|
|
22
|
-
# There's some type of collision between Grape and ActiveSupport to_json.
|
|
23
|
-
# Coerce mount_class option into a string so that when the route is serialized to JSON
|
|
24
|
-
# it is a string it won't cause an infinite loop. This allows the apigw routes to be
|
|
25
|
-
# saved to s3 and loaded back up at the end of a deploy.
|
|
26
|
-
# Related PR: smarter apigw routes paging calculation #635
|
|
27
|
-
# https://github.com/boltops-tools/jets/pull/635
|
|
28
|
-
# Debugging notes: https://gist.github.com/tongueroo/c9baa7e98d5ad68bbdd770fde4651963
|
|
29
|
-
@options[:mount_class] = @options[:mount_class].to_s if @options[:mount_class]
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Constantize back to the original class
|
|
33
|
-
def mount_class
|
|
34
|
-
@options[:mount_class].constantize
|
|
21
|
+
@options = options
|
|
22
|
+
@scope = scope
|
|
23
|
+
@info = Info.new(@options, @scope) # @info.action and @info.controller
|
|
24
|
+
after_initialize
|
|
25
|
+
@path_names = {}
|
|
35
26
|
end
|
|
36
27
|
|
|
37
|
-
def
|
|
38
|
-
|
|
39
|
-
# This is because it can be added directly to the path. IE:
|
|
40
|
-
#
|
|
41
|
-
# get "myprefix/posts", to: "posts#index"
|
|
42
|
-
#
|
|
43
|
-
# Also, this helps to keep the method creator logic more simple.
|
|
44
|
-
#
|
|
45
|
-
prefix = @scope.full_prefix
|
|
46
|
-
prefix = account_scope(prefix)
|
|
47
|
-
prefix = account_on(prefix)
|
|
48
|
-
|
|
49
|
-
path = [prefix, @options[:path]].compact.join('/')
|
|
50
|
-
path = path[1..-1] if path.starts_with?('/') # be more forgiving if / accidentally included
|
|
51
|
-
path
|
|
28
|
+
def to
|
|
29
|
+
engine || "#{@info.controller}##{@info.action}" # IE: posts#index
|
|
52
30
|
end
|
|
53
31
|
|
|
54
|
-
def
|
|
55
|
-
|
|
56
|
-
return prefix unless @options[:from_scope]
|
|
57
|
-
|
|
58
|
-
if @options[:singular_resource]
|
|
59
|
-
prefix.split('/')[0..-2].join('/')
|
|
60
|
-
else
|
|
61
|
-
prefix.split('/')[0..-3].join('/')
|
|
62
|
-
end
|
|
32
|
+
def engine
|
|
33
|
+
@options[:engine]
|
|
63
34
|
end
|
|
35
|
+
alias rack_app engine
|
|
64
36
|
|
|
65
|
-
def
|
|
66
|
-
|
|
67
|
-
if @options[:on] == :collection && @scope.from == :resources
|
|
68
|
-
prefix = prefix.split('/')[0..-2].join('/')
|
|
69
|
-
end
|
|
70
|
-
prefix == '' ? nil : prefix
|
|
37
|
+
def engine?
|
|
38
|
+
!!engine
|
|
71
39
|
end
|
|
72
40
|
|
|
73
|
-
def
|
|
74
|
-
|
|
75
|
-
mod = @options[:module] || @scope.full_module
|
|
76
|
-
controller = [mod, controller].compact.join('/') # add module
|
|
77
|
-
"#{controller}##{action}"
|
|
41
|
+
def endpoint
|
|
42
|
+
engine.to_s if engine
|
|
78
43
|
end
|
|
79
44
|
|
|
80
|
-
def
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
controller, action = get_controller_action(@options)
|
|
85
|
-
klass = if @options[:root]
|
|
86
|
-
Jets::Router::MethodCreator::Root
|
|
87
|
-
elsif %w[index edit show new].include?(action.to_s)
|
|
88
|
-
class_name = "Jets::Router::MethodCreator::#{action.camelize}"
|
|
89
|
-
class_name.constantize # Index, Show, Edit, New
|
|
90
|
-
else
|
|
91
|
-
Jets::Router::MethodCreator::Generic
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
klass.new(@options, @scope, controller).full_meth_name(nil)
|
|
45
|
+
def resolved_defaults
|
|
46
|
+
defaults = @options[:defaults] || {}
|
|
47
|
+
@scope.resolved_defaults.merge(defaults)
|
|
95
48
|
end
|
|
96
49
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def path(format=:jets)
|
|
100
|
-
case format
|
|
101
|
-
when :api_gateway
|
|
102
|
-
api_gateway_format(@path)
|
|
103
|
-
when :raw
|
|
104
|
-
@path
|
|
105
|
-
else # jets format
|
|
106
|
-
ensure_jets_format(@path)
|
|
107
|
-
end
|
|
50
|
+
def http_method
|
|
51
|
+
@options[:http_method].to_s.upcase
|
|
108
52
|
end
|
|
109
53
|
|
|
110
|
-
def
|
|
111
|
-
@options[:
|
|
54
|
+
def constraints
|
|
55
|
+
@options[:constraints] || @scope.resolved_constraints
|
|
112
56
|
end
|
|
113
57
|
|
|
114
58
|
def internal?
|
|
@@ -116,17 +60,18 @@ class Jets::Router
|
|
|
116
60
|
end
|
|
117
61
|
|
|
118
62
|
def homepage?
|
|
119
|
-
path == ''
|
|
63
|
+
path == '/'
|
|
120
64
|
end
|
|
121
65
|
|
|
122
66
|
# IE: PostsController
|
|
123
|
-
def controller_name
|
|
124
|
-
to.sub(/#.*/,'').camelize + "Controller"
|
|
125
|
-
end
|
|
126
|
-
|
|
127
67
|
# IE: index
|
|
128
|
-
|
|
129
|
-
|
|
68
|
+
delegate :action, :controller, :is_collection?, :is_member?, to: :@info
|
|
69
|
+
alias action_name action
|
|
70
|
+
|
|
71
|
+
# IE: PostsController
|
|
72
|
+
# Different from @info.action
|
|
73
|
+
def controller_name
|
|
74
|
+
"#{controller.camelize}Controller" if controller
|
|
130
75
|
end
|
|
131
76
|
|
|
132
77
|
# Checks to see if the corresponding controller exists. Useful to validate routes
|
|
@@ -134,32 +79,55 @@ class Jets::Router
|
|
|
134
79
|
def valid?
|
|
135
80
|
controller_class = begin
|
|
136
81
|
controller_name.constantize
|
|
137
|
-
rescue NameError
|
|
82
|
+
rescue NameError => e
|
|
138
83
|
return false
|
|
139
84
|
end
|
|
140
85
|
controller_class.lambda_functions.include?(action_name.to_sym)
|
|
141
86
|
end
|
|
142
87
|
|
|
88
|
+
# For Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
89
|
+
# Need to build the pathParameters for the API Gateway event.
|
|
90
|
+
def rebuild_path_parameters(event)
|
|
91
|
+
extracted = extract_parameters(event["path"])
|
|
92
|
+
if extracted
|
|
93
|
+
params = event["pathParameters"] || {}
|
|
94
|
+
params.merge(extracted)
|
|
95
|
+
else
|
|
96
|
+
event["pathParameters"] # pass through
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
143
100
|
# Extracts the path parameters from the actual path
|
|
144
101
|
# Only supports extracting 1 parameter. So:
|
|
145
102
|
#
|
|
146
|
-
#
|
|
103
|
+
# request_path: posts/tung/edit
|
|
147
104
|
# route.path: posts/:id/edit
|
|
148
105
|
#
|
|
149
106
|
# Returns:
|
|
150
107
|
# { id: "tung" }
|
|
151
|
-
def extract_parameters(
|
|
108
|
+
def extract_parameters(request_path)
|
|
109
|
+
request_path = "/#{request_path}" unless request_path.starts_with?('/') # be more forgiving if / accidentally not included
|
|
110
|
+
request_path = remove_engine_mount_at_path(request_path)
|
|
152
111
|
if path.include?(':')
|
|
153
|
-
extract_parameters_capture(
|
|
112
|
+
extract_parameters_capture(request_path)
|
|
154
113
|
elsif path.include?('*')
|
|
155
|
-
extract_parameters_proxy(
|
|
114
|
+
extract_parameters_proxy(request_path)
|
|
156
115
|
else
|
|
157
116
|
# Lambda AWS_PROXY sets null to the input request when there are no path parmeters
|
|
158
117
|
nil
|
|
159
118
|
end
|
|
160
119
|
end
|
|
161
120
|
|
|
162
|
-
def
|
|
121
|
+
def remove_engine_mount_at_path(request_path)
|
|
122
|
+
return request_path unless original_engine
|
|
123
|
+
|
|
124
|
+
mount = Jets::Router::EngineMount.find_by(engine: original_engine)
|
|
125
|
+
return request_path unless mount
|
|
126
|
+
|
|
127
|
+
request_path.sub(mount.at, '')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def extract_parameters_proxy(request_path)
|
|
163
131
|
# changes path to a string used for a regexp
|
|
164
132
|
# others/*proxy => others\/(.*)
|
|
165
133
|
# nested/others/*proxy => nested/others\/(.*)
|
|
@@ -168,9 +136,9 @@ class Jets::Router
|
|
|
168
136
|
# leading_path: nested/others
|
|
169
137
|
# capture everything after the leading_path as the value
|
|
170
138
|
regexp = Regexp.new("#{leading_path}/(.*)")
|
|
171
|
-
value =
|
|
139
|
+
value = request_path.match(regexp)[1]
|
|
172
140
|
else
|
|
173
|
-
value =
|
|
141
|
+
value = request_path
|
|
174
142
|
end
|
|
175
143
|
|
|
176
144
|
# the last segment without the '*' is the key
|
|
@@ -181,7 +149,7 @@ class Jets::Router
|
|
|
181
149
|
{ key => value }
|
|
182
150
|
end
|
|
183
151
|
|
|
184
|
-
def extract_parameters_capture(
|
|
152
|
+
def extract_parameters_capture(request_path)
|
|
185
153
|
# changes path to a string used for a regexp
|
|
186
154
|
# posts/:id/edit => posts\/(.*)\/edit
|
|
187
155
|
labels = []
|
|
@@ -197,14 +165,49 @@ class Jets::Router
|
|
|
197
165
|
regexp_string = "^#{regexp_string}$"
|
|
198
166
|
regexp = Regexp.new(regexp_string)
|
|
199
167
|
|
|
200
|
-
values = regexp.match(
|
|
168
|
+
values = regexp.match(request_path).captures
|
|
201
169
|
labels.map do |next_label|
|
|
202
170
|
[next_label, values.delete_at(0)]
|
|
203
171
|
end.to_h
|
|
204
172
|
end
|
|
205
173
|
|
|
206
|
-
|
|
207
|
-
|
|
174
|
+
# Prevents infinite loop when calling route.to_json for state.save("routes", ...)
|
|
175
|
+
def as_json(options= nil)
|
|
176
|
+
data = {
|
|
177
|
+
path: path,
|
|
178
|
+
http_method: http_method,
|
|
179
|
+
to: to,
|
|
180
|
+
}
|
|
181
|
+
data[:engine] = engine if engine
|
|
182
|
+
data[:internal] = internal if internal
|
|
183
|
+
data
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# To keep "self #{self}" more concise and helpful
|
|
187
|
+
# Use "self #{self.inspect}" more verbose info
|
|
188
|
+
def to_s
|
|
189
|
+
"#<Jets::Router::Route:#{object_id} @options=#{@options}>"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Old notes:
|
|
193
|
+
# For Grape apps, calling ActiveSupport to_json on a Grape class used to cause an infinite loop.
|
|
194
|
+
# Believe Grape fixed this issue. A GrapeApp.to_json now produces a string.
|
|
195
|
+
# No longer need to coerce to a string and back to a class.
|
|
196
|
+
#
|
|
197
|
+
# This is important because Sprocket::Environment.new cannot be coerced into a string or mounting wont work.
|
|
198
|
+
# This is used in sprockets-jets/lib/sprockets/jets/engine.rb
|
|
199
|
+
#
|
|
200
|
+
# Related PR: smarter apigw routes paging calculation #635
|
|
201
|
+
# https://github.com/boltops-tools/jets/pull/635
|
|
202
|
+
# Debugging notes: https://gist.github.com/tongueroo/c9baa7e98d5ad68bbdd770fde4651963
|
|
203
|
+
def mount_class
|
|
204
|
+
@options[:mount_class]
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
# For jets routes help table of routes
|
|
208
|
+
def mount_class_name
|
|
209
|
+
return unless mount_class
|
|
210
|
+
mount_class.class == Class ? mount_class : "#{mount_class.class}.new"
|
|
208
211
|
end
|
|
209
212
|
|
|
210
213
|
private
|