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,62 @@
|
|
|
1
|
+
class Jets::Resource::Lambda::Function
|
|
2
|
+
module Environment
|
|
3
|
+
def env_properties
|
|
4
|
+
env_vars = Jets::Dotenv.load!(true)
|
|
5
|
+
variables = environment.merge(env_vars)
|
|
6
|
+
check_reserved_variables!(variables)
|
|
7
|
+
{environment: { variables: variables }}
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def environment
|
|
11
|
+
env = Jets.config.environment ? Jets.config.environment.to_h : {}
|
|
12
|
+
env.deep_merge(jets_env)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# These jets env variables are special variables that get included to keeps some state
|
|
16
|
+
def jets_env
|
|
17
|
+
env = {}
|
|
18
|
+
env[:JETS_ENV] = Jets.env.to_s
|
|
19
|
+
env[:JETS_ENV_EXTRA] = Jets.config.env_extra if Jets.config.env_extra
|
|
20
|
+
env[:JETS_PROJECT_NAME] = ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME']
|
|
21
|
+
env[:JETS_STAGE] = Jets::Resource::ApiGateway::Deployment.stage_name
|
|
22
|
+
env[:JETS_AWS_ACCOUNT] = Jets.aws.account
|
|
23
|
+
env
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
def check_reserved_variables!(variables)
|
|
28
|
+
found_reserved_vars = variables.keys & reserved_variables
|
|
29
|
+
return if found_reserved_vars.empty?
|
|
30
|
+
|
|
31
|
+
puts "You have configured some environment variables that are reserved by AWS Lambda.".color(:red)
|
|
32
|
+
puts found_reserved_vars
|
|
33
|
+
puts "The deployment to AWS Lambda will failed when using reserved variables."
|
|
34
|
+
puts "Please remove these reserved variables. "
|
|
35
|
+
puts "More info: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables"
|
|
36
|
+
exit 1
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables
|
|
40
|
+
def reserved_variables
|
|
41
|
+
%w[
|
|
42
|
+
_HANDLER
|
|
43
|
+
AWS_REGION
|
|
44
|
+
AWS_EXECUTION_ENV
|
|
45
|
+
AWS_LAMBDA_FUNCTION_NAME
|
|
46
|
+
AWS_LAMBDA_FUNCTION_MEMORY_SIZE
|
|
47
|
+
AWS_LAMBDA_FUNCTION_VERSION
|
|
48
|
+
AWS_LAMBDA_LOG_GROUP_NAME
|
|
49
|
+
AWS_LAMBDA_LOG_STREAM_NAME
|
|
50
|
+
AWS_ACCESS_KEY_ID
|
|
51
|
+
AWS_SECRET_ACCESS_KEY
|
|
52
|
+
AWS_SESSION_TOKEN
|
|
53
|
+
TZ
|
|
54
|
+
LAMBDA_TASK_ROOT
|
|
55
|
+
LAMBDA_RUNTIME_DIR
|
|
56
|
+
AWS_LAMBDA_RUNTIME_API
|
|
57
|
+
]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Jets::Resource::Lambda
|
|
2
|
+
class GemLayer < LayerVersion
|
|
3
|
+
def description
|
|
4
|
+
"Jets Ruby Gems"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def layer_name
|
|
8
|
+
# Do not include the Jets.extra_env to group the layers in same app together
|
|
9
|
+
"#{Jets.config.short_env}-#{Jets.config.project_name}-gems"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def code_s3_key
|
|
13
|
+
checksum = Jets::Builders::Md5.checksums["stage/opt"]
|
|
14
|
+
"jets/code/opt-#{checksum}.zip" # s3_key
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Type: "AWS::Lambda::LayerVersion"
|
|
2
|
+
# Properties:
|
|
3
|
+
# CompatibleRuntimes:
|
|
4
|
+
# - String
|
|
5
|
+
# - ...
|
|
6
|
+
# Content:
|
|
7
|
+
# Content
|
|
8
|
+
# Description: String
|
|
9
|
+
# LayerName: String
|
|
10
|
+
# LicenseInfo: String
|
|
11
|
+
module Jets::Resource::Lambda
|
|
12
|
+
class LayerVersion < Jets::Resource::Base
|
|
13
|
+
def definition
|
|
14
|
+
{
|
|
15
|
+
layer_version_logical_id => {
|
|
16
|
+
type: "AWS::Lambda::LayerVersion",
|
|
17
|
+
properties: {
|
|
18
|
+
content: {
|
|
19
|
+
s3_bucket: s3_bucket,
|
|
20
|
+
s3_key: code_s3_key,
|
|
21
|
+
},
|
|
22
|
+
description: description,
|
|
23
|
+
layer_name: layer_name,
|
|
24
|
+
license_info: "MIT",
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def s3_bucket
|
|
31
|
+
"!Ref S3Bucket"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def layer_version_logical_id
|
|
35
|
+
self.class.name.split('::').last
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def outputs
|
|
39
|
+
{
|
|
40
|
+
logical_id => "!Ref #{logical_id}",
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# CloudFormation Log Subscription docs: https://amzn.to/2SNiSpr
|
|
2
|
+
module Jets::Resource::Logs
|
|
3
|
+
class SubscriptionFilter < Jets::Resource::Base
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
log_logical_id => {
|
|
11
|
+
type: "AWS::Logs::SubscriptionFilter",
|
|
12
|
+
properties: merged_properties,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
18
|
+
def merged_properties
|
|
19
|
+
{
|
|
20
|
+
destination_arn: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
21
|
+
filter_pattern: "", # matches everything https://amzn.to/2N3b39I
|
|
22
|
+
# log_group_name: string # will be set by log_event
|
|
23
|
+
# role_arn: string # only required for kinensis, we dont use this for Lambda
|
|
24
|
+
}.deep_merge(@props)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def log_logical_id
|
|
28
|
+
"{namespace}_subscription_filter"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class Jets::Resource
|
|
2
|
+
class Permission < Jets::Resource::Base
|
|
3
|
+
def initialize(replacements, associated_resource)
|
|
4
|
+
@replacements = replacements
|
|
5
|
+
@associated_resource = associated_resource
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
logical_id = permission_logical_id
|
|
10
|
+
|
|
11
|
+
definition = {
|
|
12
|
+
logical_id => {
|
|
13
|
+
type: "AWS::Lambda::Permission",
|
|
14
|
+
properties: {
|
|
15
|
+
function_name: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
16
|
+
action: "lambda:InvokeFunction",
|
|
17
|
+
principal: principal
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
# From AWS docs: https://amzn.to/2N0QXQL
|
|
23
|
+
# source_arn is "not supported by all event sources"
|
|
24
|
+
definition[logical_id][:properties][:source_arn] = source_arn if source_arn
|
|
25
|
+
|
|
26
|
+
definition
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def permission_logical_id
|
|
30
|
+
logical_id = "{namespace}_permission"
|
|
31
|
+
md = @associated_resource.logical_id.match(/(\d+)$/)
|
|
32
|
+
counter = md[1] if md
|
|
33
|
+
[logical_id, counter].compact.join('').underscore
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Auto-detect principal from the associated resources.
|
|
37
|
+
def principal
|
|
38
|
+
Replacer.principal_map(@associated_resource.type)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def source_arn
|
|
42
|
+
Replacer.source_arn_map(@associated_resource.type)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
class Jets::Resource
|
|
2
|
+
class Replacer
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
def initialize(replacements={})
|
|
6
|
+
@replacements = replacements
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Replace placeholder hash values with replacements. This does a deep replacement
|
|
10
|
+
# to the hash values. The replacement "key" is the string value within the value.
|
|
11
|
+
#
|
|
12
|
+
# Example:
|
|
13
|
+
#
|
|
14
|
+
# attributes = {whatever: "foo REPLACE_KEY bar" }
|
|
15
|
+
# replace_placeholders(attributes, REPLACE_KEY: "blah:arn")
|
|
16
|
+
# => {whatever: "foo blah:arn bar" }
|
|
17
|
+
#
|
|
18
|
+
# Also, we always replace the special {namespace} value in the hash values. Example:
|
|
19
|
+
#
|
|
20
|
+
# attributes = {whatever: "{namespace}LambdaFunction" }
|
|
21
|
+
# replace_placeholders(attributes, {})
|
|
22
|
+
# => {whatever: "foo PostsControllerIndexLambdaFunction bar" }
|
|
23
|
+
#
|
|
24
|
+
def replace_placeholders(attributes)
|
|
25
|
+
update_values(attributes)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def update_values(original)
|
|
29
|
+
case original
|
|
30
|
+
when Array
|
|
31
|
+
original.map { |v| update_values(v) }
|
|
32
|
+
when Hash
|
|
33
|
+
initializer = original.map do |k, v|
|
|
34
|
+
[k, update_values(v)]
|
|
35
|
+
end
|
|
36
|
+
Hash[initializer]
|
|
37
|
+
else
|
|
38
|
+
replace_value(original)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def replace_value(value)
|
|
43
|
+
# Dont perform replacement on Integers
|
|
44
|
+
return value if value.is_a?(Integer)
|
|
45
|
+
# return value unless value.is_a?(String) or value.is_a?(Symbol)
|
|
46
|
+
|
|
47
|
+
value = value.to_s # normalize to String
|
|
48
|
+
@replacements.each do |k,v|
|
|
49
|
+
# IE: Replaces {namespace} => SecurityJobCheck
|
|
50
|
+
value = value.gsub("{#{k}}", v)
|
|
51
|
+
end
|
|
52
|
+
value
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class << self
|
|
56
|
+
# Examples:
|
|
57
|
+
# "AWS::Events::Rule" => "events.amazonaws.com",
|
|
58
|
+
# "AWS::Config::ConfigRule" => "config.amazonaws.com",
|
|
59
|
+
# "AWS::ApiGateway::Method" => "apigateway.amazonaws.com"
|
|
60
|
+
def principal_map(type)
|
|
61
|
+
service = type.split('::')[1].downcase
|
|
62
|
+
service = special_principal_map(service)
|
|
63
|
+
"#{service}.amazonaws.com"
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def special_principal_map(service)
|
|
67
|
+
# special map
|
|
68
|
+
# s3_event actually uses sns topic events to trigger a Lambda function
|
|
69
|
+
map = { "s3" => "sns" }
|
|
70
|
+
map[service] || service
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
# From AWS docs: https://amzn.to/2N0QXQL
|
|
74
|
+
# source_arn is "not supported by all event sources"
|
|
75
|
+
#
|
|
76
|
+
# When it is not available the resource definition should add it.
|
|
77
|
+
def source_arn_map(type)
|
|
78
|
+
map = {
|
|
79
|
+
"AWS::ApiGateway::Method" => "!Sub arn:aws:execute-api:${AWS::Region}:${AWS::AccountId}:${RestApi}/*/*",
|
|
80
|
+
}
|
|
81
|
+
map[type]
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# CloudFormation Docs AWS::Route53::RecordSet: https://amzn.to/2BtP9s5
|
|
2
|
+
#
|
|
3
|
+
# Example:
|
|
4
|
+
#
|
|
5
|
+
# DnsRecord:
|
|
6
|
+
# Type: AWS::Route53::RecordSet
|
|
7
|
+
# Properties:
|
|
8
|
+
# HostedZoneName: !Ref 'HostedZoneResource'
|
|
9
|
+
# Comment: DNS name for my instance.
|
|
10
|
+
# Name: !Join ['', [!Ref 'Ec2Instance', ., !Ref 'AWS::Region', ., !Ref 'HostedZone', .]]
|
|
11
|
+
# Type: A
|
|
12
|
+
# TTL: '900'
|
|
13
|
+
# ResourceRecords:
|
|
14
|
+
# - !GetAtt Ec2Instance.PublicIp
|
|
15
|
+
module Jets::Resource::Route53
|
|
16
|
+
class RecordSet < Jets::Resource::Base
|
|
17
|
+
def definition
|
|
18
|
+
{
|
|
19
|
+
dns_record: {
|
|
20
|
+
type: "AWS::Route53::RecordSet",
|
|
21
|
+
properties: {
|
|
22
|
+
hosted_zone_name: hosted_zone_name,
|
|
23
|
+
comment: "DNS record managed by Jets",
|
|
24
|
+
name: name,
|
|
25
|
+
type: "CNAME",
|
|
26
|
+
ttl: "60",
|
|
27
|
+
resource_records: [
|
|
28
|
+
cname,
|
|
29
|
+
],
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def cname
|
|
36
|
+
if endpoint_types.include?("REGIONAL")
|
|
37
|
+
"!GetAtt DomainName.RegionalDomainName"
|
|
38
|
+
else
|
|
39
|
+
"!GetAtt DomainName.DistributionDomainName"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def domain_name
|
|
44
|
+
Jets::Resource::ApiGateway::DomainName.new
|
|
45
|
+
end
|
|
46
|
+
memoize :domain_name
|
|
47
|
+
|
|
48
|
+
def endpoint_types
|
|
49
|
+
domain_name.endpoint_types
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# IE: demo-dev.mydomain.com
|
|
53
|
+
def name
|
|
54
|
+
# Weird looking but correct: domain_name is object and domain_name is also method
|
|
55
|
+
domain_name.domain_name
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# IE: mydomain.com
|
|
59
|
+
def hosted_zone_name
|
|
60
|
+
name = Jets.config.domain.hosted_zone_name
|
|
61
|
+
name.ends_with?('.') ? name : "#{name}." # add trailing period if missing
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def outputs
|
|
65
|
+
{
|
|
66
|
+
"DnsRecord" => "!Ref DnsRecord",
|
|
67
|
+
}
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Jets::Resource::S3
|
|
2
|
+
class Bucket < Jets::Resource::Base
|
|
3
|
+
attr_reader :bucket_logical_id
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
@bucket_logical_id = props.delete(:logical_id) || "{namespace}_s3_bucket"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def definition
|
|
10
|
+
{
|
|
11
|
+
bucket_logical_id => {
|
|
12
|
+
type: "AWS::S3::Bucket",
|
|
13
|
+
properties: @props,
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def outputs
|
|
19
|
+
{
|
|
20
|
+
bucket_logical_id => "!Ref #{bucket_logical_id.to_s.camelize}",
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# CloudFormation SNS Subscription docs: https://amzn.to/2SJtN3C
|
|
2
|
+
module Jets::Resource::Sns
|
|
3
|
+
class Subscription < Jets::Resource::Base
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
subscription_logical_id => {
|
|
11
|
+
type: "AWS::SNS::Subscription",
|
|
12
|
+
properties: merged_properties,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
18
|
+
def merged_properties
|
|
19
|
+
{
|
|
20
|
+
endpoint: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
21
|
+
protocol: "lambda",
|
|
22
|
+
}.deep_merge(@props)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def subscription_logical_id
|
|
26
|
+
"{namespace}_sns_subscription"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# CloudFormation SNS Topic docs: https://amzn.to/2MYbUZc
|
|
2
|
+
module Jets::Resource::Sns
|
|
3
|
+
class Topic < Jets::Resource::Base
|
|
4
|
+
def initialize(props={})
|
|
5
|
+
@props = props # associated_properties from dsl.rb
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
topic_logical_id => {
|
|
11
|
+
type: "AWS::SNS::Topic",
|
|
12
|
+
properties: merged_properties,
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Do not name this method properties, that is a computed method of `Jets::Resource::Base`
|
|
18
|
+
def merged_properties
|
|
19
|
+
display_name = "{namespace} Topic"[0..99] # limit is 100 chars
|
|
20
|
+
{
|
|
21
|
+
display_name: display_name,
|
|
22
|
+
# Not setting subscription this way but instead with a SNS::Subscription resource so the interface
|
|
23
|
+
# is consistent. Leaving comment in here to remind me and in case decide to change this.
|
|
24
|
+
# subscription: [
|
|
25
|
+
# endpoint: "!GetAtt {namespace}LambdaFunction.Arn",
|
|
26
|
+
# protocol: "lambda"
|
|
27
|
+
# ]
|
|
28
|
+
}.deep_merge(@props)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def topic_logical_id
|
|
32
|
+
"{namespace}_sns_topic"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|