jets_bb_fork 0.0.4
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 +7 -0
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +68 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +72 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +22 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +734 -0
- data/CONDUCT.md +1 -0
- data/CONTRIBUTING.md +1 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +24 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets_bb_fork +14 -0
- data/jets.gemspec +68 -0
- data/lib/jets.rb +27 -0
- data/lib/jets/application.rb +216 -0
- data/lib/jets/application/defaults.rb +172 -0
- data/lib/jets/autoloaders.rb +97 -0
- data/lib/jets/aws_info.rb +113 -0
- data/lib/jets/aws_services.rb +65 -0
- data/lib/jets/aws_services/global_memoist.rb +57 -0
- data/lib/jets/aws_services/s3_bucket.rb +34 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +119 -0
- data/lib/jets/builders/code_builder.rb +399 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +76 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +69 -0
- data/lib/jets/builders/md5.rb +60 -0
- data/lib/jets/builders/md5_zip.rb +61 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +51 -0
- data/lib/jets/builders/rackup_wrappers/rackup +19 -0
- data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/ruby_packager.rb +207 -0
- data/lib/jets/builders/shim_vars/app.rb +78 -0
- data/lib/jets/builders/shim_vars/base.rb +25 -0
- data/lib/jets/builders/shim_vars/shared.rb +37 -0
- data/lib/jets/builders/templates/handler.rb +12 -0
- data/lib/jets/builders/tidy.rb +107 -0
- data/lib/jets/builders/util.rb +31 -0
- data/lib/jets/bundle.rb +82 -0
- data/lib/jets/camelizer.rb +71 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
- data/lib/jets/cfn/builders/controller_builder.rb +42 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +137 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/paged.rb +37 -0
- data/lib/jets/cfn/builders/parent_builder.rb +100 -0
- data/lib/jets/cfn/builders/rule_builder.rb +24 -0
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/cfn/ship.rb +185 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +194 -0
- data/lib/jets/commands/base.rb +146 -0
- data/lib/jets/commands/build.rb +234 -0
- data/lib/jets/commands/call.rb +169 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +136 -0
- data/lib/jets/commands/call/base_guesser.rb +60 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +19 -0
- data/lib/jets/commands/clean/base.rb +24 -0
- data/lib/jets/commands/clean/build.rb +13 -0
- data/lib/jets/commands/clean/log.rb +107 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +44 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +143 -0
- data/lib/jets/commands/deploy.rb +141 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/gems.rb +21 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +61 -0
- data/lib/jets/commands/help/clean/build.md +5 -0
- data/lib/jets/commands/help/clean/log.md +5 -0
- data/lib/jets/commands/help/console.md +18 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +9 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/destroy.md +16 -0
- data/lib/jets/commands/help/dynamodb/generate.md +52 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/gems/check.md +8 -0
- data/lib/jets/commands/help/generate.md +22 -0
- data/lib/jets/commands/help/import/rack.md +13 -0
- data/lib/jets/commands/help/import/rails.md +11 -0
- data/lib/jets/commands/help/new.md +42 -0
- data/lib/jets/commands/help/routes.md +16 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/help/server.md +15 -0
- data/lib/jets/commands/help/status.md +14 -0
- data/lib/jets/commands/help/upgrade.md +5 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/import.rb +12 -0
- data/lib/jets/commands/import/base.rb +49 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rack.rb +16 -0
- data/lib/jets/commands/import/rails.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +157 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +157 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +46 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +99 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +38 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +11 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/upgrade.rb +145 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
- data/lib/jets/commands/url.rb +68 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/controller/base.rb +108 -0
- data/lib/jets/controller/callbacks.rb +68 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +116 -0
- data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/controller/middleware/local/route_matcher.rb +106 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack/adapter.rb +88 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +79 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +33 -0
- data/lib/jets/core.rb +149 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/dotenv/ssm.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +48 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +157 -0
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
- data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
- data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
- data/lib/jets/job/base.rb +39 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
- data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
- data/lib/jets/job/dsl/iot_event.rb +24 -0
- data/lib/jets/job/dsl/kinesis_event.rb +46 -0
- data/lib/jets/job/dsl/log_event.rb +15 -0
- data/lib/jets/job/dsl/rule_event.rb +75 -0
- data/lib/jets/job/dsl/s3_event.rb +36 -0
- data/lib/jets/job/dsl/sns_event.rb +54 -0
- data/lib/jets/job/dsl/sqs_event.rb +96 -0
- data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
- data/lib/jets/job/helpers/log_event_helper.rb +17 -0
- data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda/dsl.rb +419 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +34 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +139 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +51 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/naming.rb +49 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +13 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
- data/lib/jets/overrides/rails/url_helper.rb +25 -0
- data/lib/jets/poly_fun.rb +73 -0
- data/lib/jets/poly_fun/base_executor.rb +125 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/preheat.rb +117 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +61 -0
- data/lib/jets/rack_server.rb +86 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +71 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
- data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
- data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
- data/lib/jets/resource/api_gateway/cors.rb +61 -0
- data/lib/jets/resource/api_gateway/deployment.rb +78 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
- data/lib/jets/resource/api_gateway/method.rb +98 -0
- data/lib/jets/resource/api_gateway/resource.rb +101 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +37 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
- data/lib/jets/resource/child_stack/app_class.rb +107 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +92 -0
- data/lib/jets/resource/config/config_rule.rb +74 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +47 -0
- data/lib/jets/resource/iam/class_role.rb +74 -0
- data/lib/jets/resource/iam/function_role.rb +54 -0
- data/lib/jets/resource/iam/managed_policy.rb +22 -0
- data/lib/jets/resource/iam/policy_document.rb +41 -0
- data/lib/jets/resource/iot/topic_rule.rb +34 -0
- data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
- data/lib/jets/resource/lambda/function.rb +214 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -0
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +44 -0
- data/lib/jets/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +85 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3/bucket.rb +24 -0
- data/lib/jets/resource/sns/subscription.rb +29 -0
- data/lib/jets/resource/sns/topic.rb +35 -0
- data/lib/jets/resource/sns/topic_policy.rb +40 -0
- data/lib/jets/resource/sqs/queue.rb +21 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +177 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +54 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +78 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/depends/item.rb +9 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/main/dsl.rb +28 -0
- data/lib/jets/stack/main/dsl/base.rb +49 -0
- data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/dsl/iam.rb +8 -0
- data/lib/jets/stack/main/dsl/lambda.rb +83 -0
- data/lib/jets/stack/main/dsl/s3.rb +12 -0
- data/lib/jets/stack/main/dsl/sns.rb +16 -0
- data/lib/jets/stack/main/dsl/sqs.rb +10 -0
- data/lib/jets/stack/output.rb +35 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo.rb +55 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/util.rb +38 -0
- data/lib/jets/version.rb +3 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1004 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Jets::Processors::Deducer class figures out information that allows the
|
|
2
|
+
# controller or job to be called. Sme key methods for deducer:
|
|
3
|
+
#
|
|
4
|
+
# code - code to instance eval. IE: PostsController.new(event, context).index
|
|
5
|
+
# path - full path to the app code. IE: #{Jets.root}app/controllers/posts_controller.rb
|
|
6
|
+
#
|
|
7
|
+
class Jets::Processors::Deducer
|
|
8
|
+
def initialize(handler)
|
|
9
|
+
@handler = handler # handlers/controllers/posts.show
|
|
10
|
+
# @handler_path: "handlers/controllers/posts"
|
|
11
|
+
# @handler_method: "show"
|
|
12
|
+
@handler_path, @handler_method = @handler.split('.')
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def code
|
|
16
|
+
# code: "PostsController.process(event, context, meth: "show")"
|
|
17
|
+
# code: "HardJob.process(event, context, meth: "dig")"
|
|
18
|
+
%|#{class_name}.process(event, context, "#{@handler_method}")|
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Input: @handler_path: handlers/jobs/hard_job.rb
|
|
22
|
+
# Output: #{Jets.root/app/jobs/hard_job.rb
|
|
23
|
+
def path
|
|
24
|
+
@handler_path.sub("handlers", "app") + ".rb"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# process_type is key. It can be either "controller" or "job". It is used to
|
|
28
|
+
# deduce the rest of the methods: code, path.
|
|
29
|
+
def process_type
|
|
30
|
+
if shared?
|
|
31
|
+
"function" # all app/shared/functions are always function process_type
|
|
32
|
+
else
|
|
33
|
+
@handler.split('/')[1].singularize # controller, job, rule, etc
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def shared?
|
|
38
|
+
@handler.include?("/shared/functions")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Example underscored_class_name:
|
|
42
|
+
# class_name = underscored_class_name
|
|
43
|
+
# class_name = class_name # PostsController
|
|
44
|
+
def class_name
|
|
45
|
+
regexp = shared? ?
|
|
46
|
+
Regexp.new(".*handlers/shared/functions/") :
|
|
47
|
+
Regexp.new(".*handlers/#{process_type.pluralize}/")
|
|
48
|
+
|
|
49
|
+
# Example regexp:
|
|
50
|
+
# /.*handlers\/controllers\//
|
|
51
|
+
# /.*handlers\/jobs\//
|
|
52
|
+
class_name = @handler_path.sub(regexp, "")
|
|
53
|
+
# Example class names:
|
|
54
|
+
# posts_controller
|
|
55
|
+
# hard_job
|
|
56
|
+
# hello
|
|
57
|
+
# hello_function
|
|
58
|
+
|
|
59
|
+
class_name.camelize
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def load_class
|
|
63
|
+
Jets::Klass.from_path(path)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'stringio'
|
|
3
|
+
|
|
4
|
+
# Node shim calls this class to process both controllers and jobs
|
|
5
|
+
class Jets::Processors::MainProcessor
|
|
6
|
+
attr_reader :event, :context, :handler
|
|
7
|
+
def initialize(event, context, handler)
|
|
8
|
+
@event = event
|
|
9
|
+
@context = context
|
|
10
|
+
@handler = handler
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
# Use the handler to deduce app code to run.
|
|
15
|
+
# Example handlers: handlers/controllers/posts.create, handlers/jobs/sleep.perform
|
|
16
|
+
#
|
|
17
|
+
# deducer = Jets::Processors::Deducer.new("handlers/controllers/posts.create")
|
|
18
|
+
#
|
|
19
|
+
deducer = Jets::Processors::Deducer.new(handler)
|
|
20
|
+
begin
|
|
21
|
+
# Examples:
|
|
22
|
+
# deducer.code => PostsController.process(event, context, "show")
|
|
23
|
+
# deducer.path => app/controllers/posts_controller.rb
|
|
24
|
+
#
|
|
25
|
+
# deducer.code => HardJob.process(event, context, "dig")
|
|
26
|
+
# deducer.path => app/jobs/hard_job.rb
|
|
27
|
+
#
|
|
28
|
+
# deducer.code => HelloFunction.process(event, context, "world")
|
|
29
|
+
# deducer.path => app/functions/hello.rb
|
|
30
|
+
deducer.load_class
|
|
31
|
+
# result = PostsController.process(event, context, "create")
|
|
32
|
+
result = instance_eval(deducer.code, deducer.path)
|
|
33
|
+
result = HashWithIndifferentAccess.new(result) if result.is_a?(Hash)
|
|
34
|
+
|
|
35
|
+
Jets.increase_call_count
|
|
36
|
+
|
|
37
|
+
if result.is_a?(Hash) && result["headers"]
|
|
38
|
+
# API Gateway is okay with the header values as Integers but
|
|
39
|
+
# ELBs are more strict about this and require the header values to be Strings
|
|
40
|
+
result["headers"]["x-jets-call-count"] = Jets.call_count.to_s
|
|
41
|
+
result["headers"]["x-jets-prewarm-count"] = Jets.prewarm_count.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
result
|
|
45
|
+
rescue Exception => e
|
|
46
|
+
unless ENV['TEST']
|
|
47
|
+
# Customize error message slightly so nodejs shim can process the
|
|
48
|
+
# returned error message.
|
|
49
|
+
# The "RubyError: " is a marker that the javascript shim scans for.
|
|
50
|
+
$stderr.puts("RubyError: #{e.class}: #{e.message}") # js needs this as the first line
|
|
51
|
+
backtrace = e.backtrace.map {|l| " #{l}" }
|
|
52
|
+
$stderr.puts(backtrace)
|
|
53
|
+
# No need to having error in stderr above anymore because errors are handled in memory
|
|
54
|
+
# at ruby_server.rb but keeping around for posterity.
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
Jets.on_exception(e)
|
|
58
|
+
raise(e) # raise error to ruby_server.rb to rescue and handle
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class RackServer
|
|
3
|
+
def self.start(options={})
|
|
4
|
+
new(options).start
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def initialize(options={})
|
|
8
|
+
@options = options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def start
|
|
12
|
+
return unless File.exist?("#{rack_project}/config.ru")
|
|
13
|
+
puts "Starting additional rack server for the project under the rack subfolder..." if ENV['JETS_DEBUG']
|
|
14
|
+
|
|
15
|
+
if ENV['FOREGROUND']
|
|
16
|
+
serve
|
|
17
|
+
return
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Reaching here means we'll run the server in the background.
|
|
21
|
+
# Handle daemonzing ourselves because it keeps the stdout of the 2nd
|
|
22
|
+
# rack server. The rackup --daemonize option ends up hiding the output.
|
|
23
|
+
pid = Process.fork
|
|
24
|
+
if pid.nil?
|
|
25
|
+
# we're in the child process
|
|
26
|
+
serve
|
|
27
|
+
else
|
|
28
|
+
# we're in the parent process
|
|
29
|
+
Process.detach(pid) # dettached but still in the "foreground" since bin/rackup runs in the foreground
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Runs in the child process
|
|
34
|
+
def serve
|
|
35
|
+
# Note, looks like stopping jets server with Ctrl-C sends the TERM signal
|
|
36
|
+
# down to the sub bin/rackup command cleans up the child process fine.
|
|
37
|
+
Bundler.with_clean_env do
|
|
38
|
+
args = ''
|
|
39
|
+
# only forward the host option, port is always 9292 for simplicity
|
|
40
|
+
if @options[:host]
|
|
41
|
+
args << " --host #{@options[:host]}"
|
|
42
|
+
else
|
|
43
|
+
args << " --host 127.0.0.1" # using the default localhost is not starting up https://stackoverflow.com/questions/4356646/address-family-not-supported-by-protocol-family
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
|
|
48
|
+
puts "=> #{command}".color(:green)
|
|
49
|
+
system(command)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# blocks until rack server is up
|
|
54
|
+
def wait_for_socket
|
|
55
|
+
return unless Jets.rack?
|
|
56
|
+
|
|
57
|
+
retries = 0
|
|
58
|
+
max_retries = 30 # 15 seconds at a delay of 0.5s
|
|
59
|
+
delay = 0.5
|
|
60
|
+
if ENV['C9_USER'] # overrides for local testing
|
|
61
|
+
max_retries = 3
|
|
62
|
+
delay = 3
|
|
63
|
+
end
|
|
64
|
+
begin
|
|
65
|
+
server = TCPSocket.new('localhost', 9292)
|
|
66
|
+
server.close
|
|
67
|
+
rescue Errno::ECONNREFUSED, Errno::EAFNOSUPPORT
|
|
68
|
+
puts "Unable to connect to localhost:9292. Delay for #{delay} and will try to connect again." if ENV['JETS_DEBUG']
|
|
69
|
+
sleep(delay)
|
|
70
|
+
retries += 1
|
|
71
|
+
if retries < max_retries
|
|
72
|
+
retry
|
|
73
|
+
else
|
|
74
|
+
puts "Giving up on trying to connect to localhost:9292"
|
|
75
|
+
return false
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
puts "Connected to localhost:9292 successfully"
|
|
79
|
+
true
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def rack_project
|
|
83
|
+
"#{Jets.root}/rack"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
data/lib/jets/rdoc.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
module Rdoc
|
|
3
|
+
# Use for both jets.gemspec and rake rdoc task
|
|
4
|
+
def options
|
|
5
|
+
exclude = %w[
|
|
6
|
+
docs
|
|
7
|
+
spec
|
|
8
|
+
vendor
|
|
9
|
+
core.rb
|
|
10
|
+
.js
|
|
11
|
+
templates
|
|
12
|
+
commands
|
|
13
|
+
internal
|
|
14
|
+
support
|
|
15
|
+
Dockerfile
|
|
16
|
+
Dockerfile.base
|
|
17
|
+
Gemfile
|
|
18
|
+
Gemfile.lock
|
|
19
|
+
Guardfile
|
|
20
|
+
LICENSE
|
|
21
|
+
Procfile
|
|
22
|
+
Rakefile
|
|
23
|
+
bin
|
|
24
|
+
]
|
|
25
|
+
exclude = exclude.map { |word| ['-x', word] }.flatten
|
|
26
|
+
["-m", "README.md", "--markup", "tomdoc"] + exclude
|
|
27
|
+
end
|
|
28
|
+
extend self
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
class Jets::Resource
|
|
2
|
+
extend Memoist
|
|
3
|
+
|
|
4
|
+
attr_reader :definition, :replacements
|
|
5
|
+
def initialize(definition, replacements={})
|
|
6
|
+
@definition = definition
|
|
7
|
+
@replacements = replacements
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def template
|
|
11
|
+
standarize(definition)
|
|
12
|
+
end
|
|
13
|
+
memoize :template
|
|
14
|
+
|
|
15
|
+
# CloudFormation Resources reference: https://amzn.to/2NKg6ip
|
|
16
|
+
def standarize(*definition)
|
|
17
|
+
Standardizer.new(definition).template
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def logical_id
|
|
21
|
+
id = template.keys.first
|
|
22
|
+
# replace possible {namespace} in the logical id
|
|
23
|
+
id = replacer.replace_value(id)
|
|
24
|
+
id = Jets::Camelizer.camelize(id)
|
|
25
|
+
|
|
26
|
+
Jets::Resource.truncate_id(id)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.truncate_id(id)
|
|
30
|
+
# Api Gateway resource name has a limit of 64 characters.
|
|
31
|
+
# Yet it throws not found when ID is longer than 62 characters and I don't know why.
|
|
32
|
+
# To keep it safe, let's stick to the 62 characters limit.
|
|
33
|
+
if id.size > 62
|
|
34
|
+
"#{id[0..55]}#{Digest::MD5.hexdigest(id)[0..5]}"
|
|
35
|
+
else
|
|
36
|
+
id
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def type
|
|
41
|
+
attributes['Type']
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def properties
|
|
45
|
+
attributes['Properties']
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def attributes
|
|
49
|
+
attributes = template.values.first
|
|
50
|
+
attributes = replacer.replace_placeholders(attributes)
|
|
51
|
+
Jets::Camelizer.transform(attributes)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def parameters
|
|
55
|
+
{}
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def outputs
|
|
59
|
+
{}
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def replacer
|
|
63
|
+
Replacer.new(replacements)
|
|
64
|
+
end
|
|
65
|
+
memoize :replacer
|
|
66
|
+
|
|
67
|
+
def permission
|
|
68
|
+
Permission.new(replacements, self)
|
|
69
|
+
end
|
|
70
|
+
memoize :permission
|
|
71
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
2
|
+
class Function < Jets::Resource::Base
|
|
3
|
+
include Jets::Resource::Lambda::Function::Environment
|
|
4
|
+
|
|
5
|
+
def definition
|
|
6
|
+
{
|
|
7
|
+
base_path_function: {
|
|
8
|
+
type: "AWS::Lambda::Function",
|
|
9
|
+
properties: {
|
|
10
|
+
function_name: function_name,
|
|
11
|
+
code: {
|
|
12
|
+
s3_bucket: "!Ref S3Bucket",
|
|
13
|
+
s3_key: code_s3_key,
|
|
14
|
+
},
|
|
15
|
+
role: "!GetAtt BasePathRole.Arn",
|
|
16
|
+
handler: handler,
|
|
17
|
+
runtime: "ruby2.5",
|
|
18
|
+
timeout: 60,
|
|
19
|
+
memory_size: 1536,
|
|
20
|
+
environment: env_properties[:environment],
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def function_name
|
|
27
|
+
method = "jets-base-path"
|
|
28
|
+
# need to add the deployment timestamp because or else function name collides between deploys
|
|
29
|
+
timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
|
|
30
|
+
"#{Jets.config.project_namespace}-#{method}-#{timestamp}"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def handler
|
|
34
|
+
"handlers/functions/jets/base_path.lambda_handler"
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def code_s3_key
|
|
38
|
+
checksum = Jets::Builders::Md5.checksums["stage/code"]
|
|
39
|
+
"jets/code/code-#{checksum}.zip" # s3_key
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CloudFormation Docs AWS::ApiGateway::DomainName: https://amzn.to/2BsrSqo
|
|
2
|
+
#
|
|
3
|
+
# Example:
|
|
4
|
+
#
|
|
5
|
+
# Type: AWS::ApiGateway::BasePathMapping
|
|
6
|
+
# Properties:
|
|
7
|
+
# BasePath: String
|
|
8
|
+
# DomainName: String
|
|
9
|
+
# RestApiId: String
|
|
10
|
+
# Stage: String
|
|
11
|
+
#
|
|
12
|
+
# Currently unable to add base path mapping in-place with CloudFormation.
|
|
13
|
+
# The workaround for this is to do it post deployment with raw API calls outside
|
|
14
|
+
# of CloudFormation. Leaving this around for now in case there's a workaround
|
|
15
|
+
# to get this into CloudFormation instead of raw API calls. Some notes:
|
|
16
|
+
# * Also tried to change the domain name of to something like demo-dev-[random].mydomain.com
|
|
17
|
+
# That does not work because the domain name has to match the route53 record exactly.
|
|
18
|
+
#
|
|
19
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
20
|
+
class Mapping < Jets::Resource::Base
|
|
21
|
+
def definition
|
|
22
|
+
function_logical_id = "BasePathFunction" # lambda function that supports custom resource
|
|
23
|
+
{
|
|
24
|
+
base_path_mapping: {
|
|
25
|
+
type: "Custom::BasePathMapping",
|
|
26
|
+
properties: {
|
|
27
|
+
service_token: "!GetAtt #{function_logical_id}.Arn",
|
|
28
|
+
# base_path: '', # empty path represents root
|
|
29
|
+
# domain_name: "!Ref DomainName",
|
|
30
|
+
# rest_api_id: "!Ref RestApi", # since this is in the Deployment template
|
|
31
|
+
# stage: Deployment.stage_name,
|
|
32
|
+
},
|
|
33
|
+
depends_on: Jets::Resource::ApiGateway::Deployment.logical_id,
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def outputs
|
|
39
|
+
{
|
|
40
|
+
"BasePathMapping" => "!Ref BasePathMapping",
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway::BasePath
|
|
2
|
+
class Role < Jets::Resource::Base
|
|
3
|
+
extend Memoist
|
|
4
|
+
include Jets::AwsServices
|
|
5
|
+
|
|
6
|
+
def definition
|
|
7
|
+
{
|
|
8
|
+
base_path_role: {
|
|
9
|
+
type: "AWS::IAM::Role",
|
|
10
|
+
properties: {
|
|
11
|
+
role_name: role_name,
|
|
12
|
+
path: "/",
|
|
13
|
+
assume_role_policy_document: {
|
|
14
|
+
version: "2012-10-17",
|
|
15
|
+
statement: [{
|
|
16
|
+
effect: "Allow",
|
|
17
|
+
principal: {service: ["lambda.amazonaws.com"]},
|
|
18
|
+
action: ["sts:AssumeRole"]}
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
policies: [
|
|
22
|
+
policy_name: "#{role_name}-policy",
|
|
23
|
+
policy_document: policy_document,
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def policy_document
|
|
31
|
+
project_namespace = Jets.config.project_namespace
|
|
32
|
+
default_policy_statements = Jets::Application.default_iam_policy # Array of Hashes
|
|
33
|
+
apigateway = [{
|
|
34
|
+
action: [ "apigateway:*" ],
|
|
35
|
+
effect: "Allow",
|
|
36
|
+
resource: "arn:aws:apigateway:#{Jets.aws.region}::/restapis/*", # scoped to all restapis because this changes
|
|
37
|
+
},{
|
|
38
|
+
action: [ "apigateway:*" ],
|
|
39
|
+
effect: "Allow",
|
|
40
|
+
resource: "arn:aws:apigateway:#{Jets.aws.region}::/domainnames/*", # scoped to all restapis because this changes
|
|
41
|
+
}]
|
|
42
|
+
cloudformation = [{
|
|
43
|
+
action: ["cloudformation:DescribeStacks"],
|
|
44
|
+
effect: "Allow",
|
|
45
|
+
resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
|
|
46
|
+
}]
|
|
47
|
+
|
|
48
|
+
# Combine the statements
|
|
49
|
+
{
|
|
50
|
+
version: '2012-10-17',
|
|
51
|
+
statement: default_policy_statements + apigateway + cloudformation
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Duplicated in rest_api/change_detection.rb, base_path/role.rb, rest_api/routes.rb
|
|
56
|
+
def rest_api_id
|
|
57
|
+
stack_name = Jets::Naming.parent_stack_name
|
|
58
|
+
return "RestApi" unless stack_exists?(stack_name)
|
|
59
|
+
|
|
60
|
+
stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
|
|
61
|
+
|
|
62
|
+
api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
|
|
63
|
+
|
|
64
|
+
# resources = cfn.describe_stack_resources(stack_name: api_gateway_stack_arn).stack_resources
|
|
65
|
+
stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
|
|
66
|
+
rest_api_id = lookup(stack[:outputs], "RestApi")
|
|
67
|
+
end
|
|
68
|
+
memoize :rest_api_id
|
|
69
|
+
|
|
70
|
+
def role_name
|
|
71
|
+
# TODO: dont think we should change the role name every time but have to right now because the deployment logical id changes
|
|
72
|
+
timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
|
|
73
|
+
"#{Jets.config.project_namespace}-base-path-mapping-#{timestamp}"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|