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,20 @@
|
|
|
1
|
+
require "bundler/setup"
|
|
2
|
+
require "jets"
|
|
3
|
+
Jets.once # runs once in lambda execution context
|
|
4
|
+
|
|
5
|
+
<%# # IE: handlers/controllers/up_controller.index -%>
|
|
6
|
+
<% handler = @vars.handler_base + '.#{action}' -%>
|
|
7
|
+
def lambda_handler(event:, context:)
|
|
8
|
+
if event['_prewarm']
|
|
9
|
+
Jets.process(event, context, nil)
|
|
10
|
+
return
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
<% if @vars.process_type == "controller" -%>
|
|
14
|
+
if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
15
|
+
route = Jets::Router.find_route_by_event(event)
|
|
16
|
+
event["pathParameters"] = route.rebuild_path_parameters(event) # override
|
|
17
|
+
end
|
|
18
|
+
<% end -%>
|
|
19
|
+
Jets.process(event, context, "<%= handler -%>")
|
|
20
|
+
end
|
|
@@ -7,6 +7,12 @@ Jets.once # runs once in lambda execution context
|
|
|
7
7
|
meth = handler.split('.').last
|
|
8
8
|
-%>
|
|
9
9
|
def <%= meth -%>(event:, context:)
|
|
10
|
+
<% if @vars.process_type == "controller" -%>
|
|
11
|
+
if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
12
|
+
route = Jets::Router.find_route_by_event(event)
|
|
13
|
+
event["pathParameters"] = route.rebuild_path_parameters(event) # override
|
|
14
|
+
end
|
|
15
|
+
<% end -%>
|
|
10
16
|
Jets.process(event, context, "<%= handler -%>")
|
|
11
17
|
end
|
|
12
18
|
<% end %>
|
data/lib/jets/bundle.rb
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
require "jets/turbo"
|
|
2
|
-
|
|
3
1
|
module Jets
|
|
4
2
|
# Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
|
|
5
3
|
module Bundle
|
|
@@ -16,7 +14,7 @@ module Jets
|
|
|
16
14
|
#
|
|
17
15
|
def setup
|
|
18
16
|
return unless jets_project?
|
|
19
|
-
return unless
|
|
17
|
+
return unless gemfile?
|
|
20
18
|
Kernel.require "bundler/setup"
|
|
21
19
|
Bundler.setup # Same as Bundler.setup(:default)
|
|
22
20
|
rescue LoadError => e
|
|
@@ -40,7 +38,7 @@ module Jets
|
|
|
40
38
|
# project with another Gemfile, the load errors will also be rescued.
|
|
41
39
|
def require
|
|
42
40
|
return unless jets_project?
|
|
43
|
-
return unless
|
|
41
|
+
return unless gemfile?
|
|
44
42
|
Kernel.require "bundler/setup"
|
|
45
43
|
Bundler.require(*bundler_groups)
|
|
46
44
|
rescue LoadError => e
|
|
@@ -66,11 +64,6 @@ module Jets
|
|
|
66
64
|
EOL
|
|
67
65
|
end
|
|
68
66
|
|
|
69
|
-
# Also check for Afterburner mode since in that mode jets is a standalone tool.
|
|
70
|
-
def bundler_enabled?
|
|
71
|
-
!Jets::Turbo.afterburner? && gemfile?
|
|
72
|
-
end
|
|
73
|
-
|
|
74
67
|
def gemfile?
|
|
75
68
|
ENV['BUNDLE_GEMFILE'] || File.exist?("Gemfile")
|
|
76
69
|
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Classes that inherit from this method should NOT define and override:
|
|
2
|
+
#
|
|
3
|
+
# logical_id
|
|
4
|
+
# type
|
|
5
|
+
# properties
|
|
6
|
+
# attributes
|
|
7
|
+
#
|
|
8
|
+
# These are computed methods that derive their values from the resource definition itself.
|
|
9
|
+
# Overriding these methods will remove the computed logical which handles things
|
|
10
|
+
# like camelizing and replacements.
|
|
11
|
+
module Jets::Cfn
|
|
12
|
+
class Base
|
|
13
|
+
extend Memoist
|
|
14
|
+
include Jets::Util::Camelize
|
|
15
|
+
|
|
16
|
+
# interface method
|
|
17
|
+
def replacements
|
|
18
|
+
@replacements || {}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def replacer
|
|
22
|
+
Resource::Replacer.new(replacements)
|
|
23
|
+
end
|
|
24
|
+
memoize :replacer
|
|
25
|
+
|
|
26
|
+
def template
|
|
27
|
+
standarize(definition)
|
|
28
|
+
end
|
|
29
|
+
memoize :template
|
|
30
|
+
|
|
31
|
+
# CloudFormation Resources reference: https://amzn.to/2NKg6ip
|
|
32
|
+
def standarize(*definition)
|
|
33
|
+
Resource::Standardizer.new(definition).template
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def logical_id
|
|
37
|
+
id = template.keys.first
|
|
38
|
+
id = replacer.replace_value(id) # IE: replace possible {namespace} in the logical id
|
|
39
|
+
Jets::Camelizer.camelize(id) # logical id limit is 256 chars
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def type
|
|
43
|
+
attributes[:Type]
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def properties
|
|
47
|
+
attributes[:Properties]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def attributes
|
|
51
|
+
attributes = template.values.first
|
|
52
|
+
attributes = replacer.replace_placeholders(attributes)
|
|
53
|
+
camelize(attributes)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def parameters
|
|
57
|
+
{}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def outputs
|
|
61
|
+
{}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def permission
|
|
65
|
+
Resource::Lambda::Permission.new(replacements, self)
|
|
66
|
+
end
|
|
67
|
+
memoize :permission
|
|
68
|
+
|
|
69
|
+
class << self
|
|
70
|
+
def truncate_id(id, postfix = '')
|
|
71
|
+
# Api Gateway resource name has a limit of 64 characters.
|
|
72
|
+
# Yet it throws not found when ID is longer than 62 characters and I don't know why.
|
|
73
|
+
# To keep it safe, let's stick to the 62 characters limit.
|
|
74
|
+
if id.size + postfix.size > 62
|
|
75
|
+
"#{id[0..(55 - postfix.size)]}#{Digest::MD5.hexdigest(id)[0..5]}#{postfix}"
|
|
76
|
+
else
|
|
77
|
+
"#{id}#{postfix}"
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Base
|
|
3
|
+
extend Memoist
|
|
4
|
+
include Jets::Cfn::Builder::Interface
|
|
5
|
+
include Jets::AwsServices
|
|
6
|
+
|
|
7
|
+
def initialize(options={})
|
|
8
|
+
@options = options
|
|
9
|
+
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -1,21 +1,11 @@
|
|
|
1
|
-
module Jets::Cfn::
|
|
2
|
-
class
|
|
3
|
-
|
|
4
|
-
include Jets::AwsServices
|
|
5
|
-
|
|
6
|
-
def initialize(options={})
|
|
7
|
-
@options = options
|
|
8
|
-
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# compose is an interface method
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Deployment < Base
|
|
3
|
+
# interface method
|
|
12
4
|
def compose
|
|
13
|
-
deployment = Jets::Resource::ApiGateway::Deployment.new
|
|
5
|
+
deployment = Jets::Cfn::Resource::ApiGateway::Deployment.new
|
|
14
6
|
add_resource(deployment)
|
|
15
7
|
add_parameters(deployment.parameters)
|
|
16
8
|
add_outputs(deployment.outputs)
|
|
17
|
-
|
|
18
|
-
add_base_path_mapping
|
|
19
9
|
end
|
|
20
10
|
|
|
21
11
|
# Because Jets generates a new timestamped logical id for the API Deployment
|
|
@@ -30,27 +20,27 @@ module Jets::Cfn::Builders
|
|
|
30
20
|
def add_base_path_mapping
|
|
31
21
|
return unless Jets.custom_domain?
|
|
32
22
|
|
|
33
|
-
function = Jets::Resource::ApiGateway::BasePath::Function.new
|
|
23
|
+
function = Jets::Cfn::Resource::ApiGateway::BasePath::Function.new
|
|
34
24
|
add_resource(function)
|
|
35
25
|
add_outputs(function.outputs)
|
|
36
26
|
|
|
37
|
-
mapping = Jets::Resource::ApiGateway::BasePath::Mapping.new
|
|
27
|
+
mapping = Jets::Cfn::Resource::ApiGateway::BasePath::Mapping.new
|
|
38
28
|
add_resource(mapping)
|
|
39
29
|
add_outputs(mapping.outputs)
|
|
40
30
|
|
|
41
|
-
iam_role = Jets::Resource::ApiGateway::BasePath::Role.new
|
|
31
|
+
iam_role = Jets::Cfn::Resource::ApiGateway::BasePath::Role.new
|
|
42
32
|
add_resource(iam_role)
|
|
43
33
|
add_outputs(iam_role.outputs)
|
|
44
34
|
end
|
|
45
35
|
|
|
46
|
-
#
|
|
36
|
+
# interface method
|
|
47
37
|
def template_path
|
|
48
38
|
Jets::Names.api_deployment_template_path
|
|
49
39
|
end
|
|
50
40
|
|
|
51
|
-
# do not
|
|
41
|
+
# do not write a template if routes are empty
|
|
52
42
|
def write
|
|
53
|
-
super unless Jets::Router.
|
|
43
|
+
super unless Jets::Router.no_routes?
|
|
54
44
|
end
|
|
55
45
|
end
|
|
56
46
|
end
|
|
@@ -1,40 +1,30 @@
|
|
|
1
|
-
module Jets::Cfn::
|
|
2
|
-
class
|
|
3
|
-
|
|
4
|
-
include Interface
|
|
5
|
-
include Jets::AwsServices
|
|
6
|
-
|
|
7
|
-
def initialize(options={})
|
|
8
|
-
@options = options
|
|
9
|
-
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# compose is an interface method
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Gateway < Base
|
|
3
|
+
# interface method
|
|
13
4
|
def compose
|
|
14
|
-
add_gateway_routes # "child template": build before add_gateway_rest_api. RestApi logical id and change detection is dependent on it.
|
|
15
5
|
add_gateway_rest_api # changes parent template
|
|
16
6
|
add_custom_domain # changes parent template
|
|
17
7
|
end
|
|
18
8
|
|
|
19
|
-
#
|
|
9
|
+
# interface method
|
|
20
10
|
def template_path
|
|
21
11
|
Jets::Names.api_gateway_template_path
|
|
22
12
|
end
|
|
23
13
|
|
|
24
|
-
# do
|
|
14
|
+
# do write a template if routes are empty
|
|
25
15
|
def write
|
|
26
|
-
super unless Jets::Router.
|
|
16
|
+
super unless Jets::Router.no_routes?
|
|
27
17
|
end
|
|
28
18
|
|
|
29
19
|
# If the are routes in config/routes.rb add Gateway API in parent stack
|
|
30
20
|
def add_gateway_rest_api
|
|
31
|
-
rest_api = Jets::Resource::ApiGateway::RestApi.new
|
|
21
|
+
rest_api = Jets::Cfn::Resource::ApiGateway::RestApi.new
|
|
32
22
|
add_resource(rest_api)
|
|
33
23
|
add_outputs(rest_api.outputs)
|
|
34
24
|
|
|
35
|
-
deployment = Jets::Resource::ApiGateway::Deployment.new
|
|
25
|
+
deployment = Jets::Cfn::Resource::ApiGateway::Deployment.new
|
|
36
26
|
outputs = deployment.outputs(true)
|
|
37
|
-
add_output(
|
|
27
|
+
add_output(:RestApiUrl, Value: outputs[:RestApiUrl])
|
|
38
28
|
end
|
|
39
29
|
|
|
40
30
|
def add_custom_domain
|
|
@@ -48,7 +38,7 @@ module Jets::Cfn::Builders
|
|
|
48
38
|
end
|
|
49
39
|
|
|
50
40
|
def add_route53_dns
|
|
51
|
-
dns = Jets::Resource::Route53::RecordSet.new
|
|
41
|
+
dns = Jets::Cfn::Resource::Route53::RecordSet.new
|
|
52
42
|
if !existing_domain_name?(dns.domain_name) or existing_dns_record_on_stack?
|
|
53
43
|
add_resource(dns)
|
|
54
44
|
add_outputs(dns.outputs)
|
|
@@ -56,10 +46,10 @@ module Jets::Cfn::Builders
|
|
|
56
46
|
end
|
|
57
47
|
|
|
58
48
|
def create_domain_name
|
|
59
|
-
resource = Jets::Resource::ApiGateway::DomainName.new
|
|
49
|
+
resource = Jets::Cfn::Resource::ApiGateway::DomainName.new
|
|
60
50
|
|
|
61
51
|
return {
|
|
62
|
-
|
|
52
|
+
DomainName: resource.domain_name
|
|
63
53
|
} if (existing_domain_name?(resource) and !existing_domain_name_on_stack?)
|
|
64
54
|
|
|
65
55
|
add_resource(resource)
|
|
@@ -67,9 +57,9 @@ module Jets::Cfn::Builders
|
|
|
67
57
|
end
|
|
68
58
|
|
|
69
59
|
def existing_domain_name?(resource)
|
|
70
|
-
apigateway.get_domain_name(
|
|
60
|
+
apigateway.get_domain_name(
|
|
71
61
|
domain_name: resource.domain_name
|
|
72
|
-
|
|
62
|
+
)
|
|
73
63
|
true
|
|
74
64
|
# IE: Aws::APIGateway::Errors::NotFoundException Invalid domain name identifier specified
|
|
75
65
|
rescue Aws::APIGateway::Errors::NotFoundException
|
|
@@ -110,18 +100,5 @@ module Jets::Cfn::Builders
|
|
|
110
100
|
nil
|
|
111
101
|
end
|
|
112
102
|
memoize :api_gateway_physical_resource_id
|
|
113
|
-
|
|
114
|
-
# Adds route related Resources and Outputs
|
|
115
|
-
# Delegates to ApiResourcesBuilder
|
|
116
|
-
PAGE_LIMIT = Integer(ENV['JETS_AWS_OUTPUTS_LIMIT'] || 200) # Allow override for testing
|
|
117
|
-
def add_gateway_routes
|
|
118
|
-
# Reject homepage. Otherwise we have 200 - 1 resources on the first page.
|
|
119
|
-
# There's a next call in ApiResources.add_gateway_resources to skip the homepage.
|
|
120
|
-
page_builder = Jets::Cfn::Builders::PageBuilder.new
|
|
121
|
-
pages = page_builder.build
|
|
122
|
-
pages.each_with_index do |paths, i|
|
|
123
|
-
ApiResourcesBuilder.new(@options, paths, i+1).build
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
103
|
end
|
|
127
104
|
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Mapping < Base
|
|
3
|
+
# interface method
|
|
4
|
+
def compose
|
|
5
|
+
add_parameters(parameters)
|
|
6
|
+
add_base_path_mapping
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def parameters
|
|
10
|
+
p = {
|
|
11
|
+
GemLayer: "GemLayer",
|
|
12
|
+
IamRole: "IamRole",
|
|
13
|
+
RestApi: "RestApi",
|
|
14
|
+
S3Bucket: "S3Bucket",
|
|
15
|
+
}
|
|
16
|
+
p[:DomainName] = "DomainName" if Jets.custom_domain?
|
|
17
|
+
p[:BasePath] = "BasePath"
|
|
18
|
+
p
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Because Jets generates a new timestamped logical id for the API Deployment
|
|
22
|
+
# resource it also creates a new root base path mapping and fails. Additionally,
|
|
23
|
+
# the base path mapping depends on the API Deploy for the stage name.
|
|
24
|
+
#
|
|
25
|
+
# We resolve this by using a custom resource that does an in-place update.
|
|
26
|
+
#
|
|
27
|
+
# Note, also tried to change the domain name of to something like demo-dev-[random].mydomain.com
|
|
28
|
+
# but that does not work because the domain name has to match the route53 record exactly.
|
|
29
|
+
#
|
|
30
|
+
def add_base_path_mapping
|
|
31
|
+
function = Jets::Cfn::Resource::ApiGateway::BasePath::Function.new
|
|
32
|
+
add_resource(function)
|
|
33
|
+
add_outputs(function.outputs)
|
|
34
|
+
|
|
35
|
+
mapping = Jets::Cfn::Resource::ApiGateway::BasePath::Mapping.new
|
|
36
|
+
add_resource(mapping)
|
|
37
|
+
add_outputs(mapping.outputs)
|
|
38
|
+
|
|
39
|
+
iam_role = Jets::Cfn::Resource::ApiGateway::BasePath::Role.new
|
|
40
|
+
add_resource(iam_role)
|
|
41
|
+
add_outputs(iam_role.outputs)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# interface method
|
|
45
|
+
def template_path
|
|
46
|
+
Jets::Names.api_mapping_template_path
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# do not write a template unless custom domain is used
|
|
50
|
+
def write
|
|
51
|
+
super if Jets.custom_domain?
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Methods < Paged
|
|
3
|
+
# interface method
|
|
4
|
+
def compose
|
|
5
|
+
return if routes.empty?
|
|
6
|
+
add_api_methods
|
|
7
|
+
add_api_gateway_parameters
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Resources Example (only showing keys we care about):
|
|
11
|
+
#
|
|
12
|
+
# UpIndexGetApiMethod:
|
|
13
|
+
# Type: AWS::ApiGateway::Method
|
|
14
|
+
# Properties:
|
|
15
|
+
# ResourceId: !Ref UpApiResource
|
|
16
|
+
# RestApiId: !Ref RestApi
|
|
17
|
+
# Integration:
|
|
18
|
+
# Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${UpControllerIndexLambdaFunction}/invocations
|
|
19
|
+
#
|
|
20
|
+
def add_api_methods
|
|
21
|
+
routes.each_with_index do |route, i|
|
|
22
|
+
method = Jets::Cfn::Resource::ApiGateway::Method.new(route)
|
|
23
|
+
add_resource(method)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def add_api_gateway_parameters
|
|
28
|
+
api_methods = Jets::Cfn::Params::Api::Methods.new(template: @template)
|
|
29
|
+
api_methods.params.each do |key, _|
|
|
30
|
+
add_parameter(key)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def routes
|
|
35
|
+
ensure_one_apigw_method_proxy_routes!
|
|
36
|
+
@items.map do |uid|
|
|
37
|
+
Jets::Router.routes.find do |route|
|
|
38
|
+
route.path == "/" && route.path == uid.split('|').last || # root route. any http method works
|
|
39
|
+
"#{route.http_method}|#{route.path}" == uid # Match the method and path. IE: GET|posts/:id
|
|
40
|
+
end
|
|
41
|
+
end.compact
|
|
42
|
+
end
|
|
43
|
+
memoize :routes
|
|
44
|
+
|
|
45
|
+
# Only add missing root route with one_apigw_method_for_all_routes setting.
|
|
46
|
+
# Add the root route because that's how it works locally.
|
|
47
|
+
# With one_apigw_method_for_all_routes, it all goes to one lambda function
|
|
48
|
+
# and routing is determined by config/routes.rb
|
|
49
|
+
def ensure_one_apigw_method_proxy_routes!
|
|
50
|
+
return unless Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
51
|
+
|
|
52
|
+
# find before modifications
|
|
53
|
+
catchall_route = Jets::Router.routes.find { |route| route.path =~ /^\/\*/ }
|
|
54
|
+
root_route = Jets::Router.routes.find { |route| route.http_method == "GET" && route.path == "/" }
|
|
55
|
+
|
|
56
|
+
# modifications
|
|
57
|
+
unless catchall_route
|
|
58
|
+
# Note: catchall to route does not matter. In one_apigw_method_for_all_routes mode it all goes to one lambda function
|
|
59
|
+
# and then gets routed by config/routes.rb
|
|
60
|
+
Jets::Router.routes << Jets::Router::Route.new(path: '/*catchall', http_method: 'ANY', to: 'jets/public#show')
|
|
61
|
+
end
|
|
62
|
+
if !root_route && catchall_route
|
|
63
|
+
Jets::Router.routes << Jets::Router::Route.new(path: '/', http_method: 'GET', to: catchall_route.to)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# template_path is an interface method
|
|
68
|
+
def template_path
|
|
69
|
+
Jets::Names.api_methods_template_path(@page_number)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api
|
|
2
|
+
class Paged < Base
|
|
3
|
+
class << self
|
|
4
|
+
def build_pages(options={})
|
|
5
|
+
# IE: Pages::Methods.pages Pages::Resources.pages
|
|
6
|
+
pages_class.pages.each do |page|
|
|
7
|
+
# Key builder here:
|
|
8
|
+
# Jets::Cfn::Builder::Api::Methods
|
|
9
|
+
# Jets::Cfn::Builder::Api::Resources
|
|
10
|
+
new(options.merge(page: page)).build
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Examples:
|
|
15
|
+
# Pages::Methods.new(options)
|
|
16
|
+
# Pages::Resources.new(options)
|
|
17
|
+
def pages_class
|
|
18
|
+
class_name = self.to_s.gsub(/.*::Api::/, '') # IE: Methods or Resources
|
|
19
|
+
"Jets::Cfn::Builder::Api::Pages::#{class_name}".constantize
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def initialize(options={})
|
|
24
|
+
super
|
|
25
|
+
@page = options[:page]
|
|
26
|
+
@items = @page.items # interface method: Cors: paths, Resources: paths, Methods: routes
|
|
27
|
+
@page_number = @page.number # interface method
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api::Pages
|
|
2
|
+
class Base
|
|
3
|
+
class_attribute :pages
|
|
4
|
+
@@pages = {}
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
extend Memoist
|
|
8
|
+
|
|
9
|
+
# Returns: Array<Page>
|
|
10
|
+
def pages
|
|
11
|
+
return @@pages[self.name] if @@pages[self.name]
|
|
12
|
+
|
|
13
|
+
pages = []
|
|
14
|
+
uids_map = build_uids_map
|
|
15
|
+
uids_map.each do |uid, existing_page|
|
|
16
|
+
if existing_page
|
|
17
|
+
pages[existing_page] ||= []
|
|
18
|
+
pages[existing_page] << uid
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
pages.compact! # not using page 0 so need to compact to remove the first nil element
|
|
22
|
+
|
|
23
|
+
# Remove existing uids from uids_map. Leave behind new uids
|
|
24
|
+
pages.each do |page|
|
|
25
|
+
page.each do |i|
|
|
26
|
+
uids_map.delete(i)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Fill up available space in each page so all existing pages are full
|
|
31
|
+
keys = uids_map.keys
|
|
32
|
+
pages.each do |page|
|
|
33
|
+
break if keys.empty?
|
|
34
|
+
while page.size < page_limit
|
|
35
|
+
uid = keys.shift
|
|
36
|
+
break if uid.nil?
|
|
37
|
+
page << uid
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Add remaining slices to new additional pages
|
|
42
|
+
pages += keys.each_slice(page_limit).to_a
|
|
43
|
+
|
|
44
|
+
@@pages[self.name] = []
|
|
45
|
+
pages.each_with_index do |uids, i|
|
|
46
|
+
# Note: page number starts at 1
|
|
47
|
+
# Because of this we need to do a pages.compact! above to remove the first nil element. Feel this is easier for follow for us humans.
|
|
48
|
+
@@pages[self.name] << Page.new(items: uids, number: i+1)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
@@pages[self.name]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Build map that has uids as keys and page number as value
|
|
55
|
+
# For Resources, the uid is the path
|
|
56
|
+
# Example: {"a1"=>0, "a2"=>0, "b1"=>1, "b2"=>1, "c1"=>2, "c2"=>2}
|
|
57
|
+
# For Methods, the uid is the method|path
|
|
58
|
+
# Example: {"GET|a1"=>0, "GET|a2"=>0, "GET|b1"=>1, "GET|b2"=>1, "GET|c1"=>2, "GET|c2"=>2}
|
|
59
|
+
def build_uids_map
|
|
60
|
+
map = {}
|
|
61
|
+
# uids is interface method
|
|
62
|
+
uids.each do |uid|
|
|
63
|
+
map[uid] = find_page_index(uid)
|
|
64
|
+
end
|
|
65
|
+
map
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def find_page_index(new_uid)
|
|
69
|
+
slices = previously_deployed || []
|
|
70
|
+
slices.each_with_index do |slice, page_number|
|
|
71
|
+
items = slice["items"]
|
|
72
|
+
items.find do |old_uid|
|
|
73
|
+
return page_number if old_uid == new_uid # found
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
nil # not found
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def previously_deployed
|
|
80
|
+
state = Jets::Router::State.new
|
|
81
|
+
name = self.to_s.split('::').last.downcase
|
|
82
|
+
deployed = state.load(name) # IE: state.load("resources") or state.load("methods")
|
|
83
|
+
deployed
|
|
84
|
+
end
|
|
85
|
+
memoize :previously_deployed
|
|
86
|
+
|
|
87
|
+
# Relevant CloudFormation limits:
|
|
88
|
+
# Resources 500
|
|
89
|
+
# Parameters 200
|
|
90
|
+
# Outputs 200
|
|
91
|
+
# For API Gateway Methods template,
|
|
92
|
+
# Lambda Functions and APIGW Resources are passed in as parameters.
|
|
93
|
+
# Each APIGW Method can use 2 parameters.
|
|
94
|
+
# So use page limit of 100 to provide a buffer.
|
|
95
|
+
# Technically, can use a different limit for Resources and Cors templates,
|
|
96
|
+
# but keeping all at 100 for consistency.
|
|
97
|
+
#
|
|
98
|
+
# JETS_API_PAGE_LIMIT is based on that
|
|
99
|
+
# https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
|
|
100
|
+
def page_limit
|
|
101
|
+
Integer(ENV['JETS_API_PAGE_LIMIT'] || 100)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api::Pages
|
|
2
|
+
class Methods < Base
|
|
3
|
+
class << self
|
|
4
|
+
# interface method
|
|
5
|
+
def uids
|
|
6
|
+
if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
7
|
+
return ['ANY|/', 'ANY|/*catchall']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
routes = Jets::Router.routes
|
|
11
|
+
routes.map do |route|
|
|
12
|
+
"#{route.http_method}|#{route.path}" # IE: GET|posts/:id
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api::Pages
|
|
2
|
+
# Note: Do not use, it behaves differently in Ruby 2 v Ruby 3
|
|
3
|
+
# Page = Struct.new(:items, :number)
|
|
4
|
+
#
|
|
5
|
+
# In Ruby 2, assigning an Array to items creates an extra :items key in the structure
|
|
6
|
+
#
|
|
7
|
+
# #<struct Page items={:items=>["*catchall", "posts"],
|
|
8
|
+
#
|
|
9
|
+
# In Ruby 3, assigning an Array to items.
|
|
10
|
+
#
|
|
11
|
+
# #<struct Page items=["*catchall", "posts"], number=1>
|
|
12
|
+
#
|
|
13
|
+
class Page
|
|
14
|
+
attr_accessor :items, :number
|
|
15
|
+
def initialize(items:, number:)
|
|
16
|
+
@items, @number = items, number
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Jets::Cfn::Builder::Api::Pages
|
|
2
|
+
class Resources < Base
|
|
3
|
+
class << self
|
|
4
|
+
# interface method
|
|
5
|
+
def uids
|
|
6
|
+
if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
7
|
+
return ['/', '/*catchall']
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Note: Do not use
|
|
11
|
+
# Jets::Router.routes.map(&:path)
|
|
12
|
+
# It does not include all the top of the leaves. Example:
|
|
13
|
+
# admin is not included
|
|
14
|
+
# admin/new is included
|
|
15
|
+
# Also, do not include the root/homepage path. It's already created
|
|
16
|
+
# in api-gateway.yml
|
|
17
|
+
Jets::Router.all_paths.reject { |p| p.blank? }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|