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,19 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Output
|
|
3
|
+
module Dsl
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
def outputs
|
|
7
|
+
Output.definitions(self.class)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class_methods do
|
|
11
|
+
def output(*definition)
|
|
12
|
+
# self is subclass is the stack that inherits from Jets::Stack
|
|
13
|
+
# IE: ExampleStack < Jets::Stack
|
|
14
|
+
Output.new(self, *definition).register
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class Jets::Stack::Output
|
|
2
|
+
class Lookup
|
|
3
|
+
include Jets::AwsServices
|
|
4
|
+
|
|
5
|
+
def initialize(stack_subclass)
|
|
6
|
+
@stack_subclass = stack_subclass
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def output(logical_id)
|
|
10
|
+
child_stack_id = @stack_subclass.to_s.camelize
|
|
11
|
+
|
|
12
|
+
stack_arn = shared_stack_arn(child_stack_id)
|
|
13
|
+
resp = cfn.describe_stacks(stack_name: stack_arn)
|
|
14
|
+
child = resp.stacks.first
|
|
15
|
+
return unless child
|
|
16
|
+
|
|
17
|
+
output_value(child, logical_id)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Shared child stack arn
|
|
21
|
+
def shared_stack_arn(logical_id)
|
|
22
|
+
parent_stack = Jets.config.project_namespace
|
|
23
|
+
resp = cfn.describe_stacks(stack_name: parent_stack)
|
|
24
|
+
parent = resp.stacks.first
|
|
25
|
+
output_value(parent, logical_id)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def output_value(stack, key)
|
|
29
|
+
key = key.to_s.camelize
|
|
30
|
+
output = stack.outputs.find do |o|
|
|
31
|
+
o.output_key == key
|
|
32
|
+
end
|
|
33
|
+
output&.output_value
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# template - uses @definition to build a CloudFormation template section
|
|
4
|
+
#
|
|
5
|
+
class Jets::Stack
|
|
6
|
+
class Parameter
|
|
7
|
+
include Definition
|
|
8
|
+
|
|
9
|
+
def template
|
|
10
|
+
camelize(add_required(standarize(@definition)))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Type is the only required property: https://amzn.to/2x8W5aD
|
|
14
|
+
def standarize(definition)
|
|
15
|
+
first, second, _ = definition
|
|
16
|
+
if definition.size == 1 && first.is_a?(Hash) # long form
|
|
17
|
+
first # pass through
|
|
18
|
+
elsif definition.size == 2 && second.is_a?(Hash) # medium form
|
|
19
|
+
logical_id, properties = first, second
|
|
20
|
+
{ logical_id => properties }
|
|
21
|
+
elsif (definition.size == 2 && second.is_a?(String)) || # short form
|
|
22
|
+
definition.size == 1
|
|
23
|
+
logical_id = first
|
|
24
|
+
properties = second.is_a?(String) ? { default: second } : {}
|
|
25
|
+
{ logical_id => properties }
|
|
26
|
+
else # I dont know what form
|
|
27
|
+
raise "Invalid form provided. definition #{definition.inspect}"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def add_required(attributes)
|
|
32
|
+
properties = attributes.values.first
|
|
33
|
+
properties[:type] ||= 'String'
|
|
34
|
+
attributes
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Parameter
|
|
3
|
+
module Dsl
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
extend Memoist
|
|
6
|
+
|
|
7
|
+
def parameters
|
|
8
|
+
add_common_parameters
|
|
9
|
+
add_depends_on_parameters
|
|
10
|
+
Parameter.definitions(self.class)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def add_common_parameters
|
|
14
|
+
self.class.parameter(:iam_role)
|
|
15
|
+
self.class.parameter(:s3_bucket)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def add_depends_on_parameters
|
|
19
|
+
depends_on = self.class.depends_on
|
|
20
|
+
depends_on.each do |dependency|
|
|
21
|
+
dependency_outputs(dependency).each do |output|
|
|
22
|
+
self.class.parameter(output)
|
|
23
|
+
end
|
|
24
|
+
end if depends_on
|
|
25
|
+
end
|
|
26
|
+
memoize :add_depends_on_parameters # only run once
|
|
27
|
+
|
|
28
|
+
# Returns output keys associated with the stack. They are the resource logical ids.
|
|
29
|
+
def dependency_outputs(dependency)
|
|
30
|
+
dependency.to_s.camelize.constantize.output_keys
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class_methods do
|
|
34
|
+
def parameter(*definition)
|
|
35
|
+
# self is subclass is the stack that inherits from Jets::Stack
|
|
36
|
+
# IE: ExampleStack < Jets::Stack
|
|
37
|
+
Parameter.new(self, *definition).register
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# template - uses @definition to build a CloudFormation template section
|
|
4
|
+
#
|
|
5
|
+
class Jets::Stack
|
|
6
|
+
class Resource
|
|
7
|
+
include Definition
|
|
8
|
+
|
|
9
|
+
def template
|
|
10
|
+
template = camelize(standarize(@definition))
|
|
11
|
+
template = replace_placeholers(template)
|
|
12
|
+
template
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# CloudFormation Resources reference: https://amzn.to/2NKg6ip
|
|
16
|
+
def standarize(definition)
|
|
17
|
+
Jets::Resource::Standardizer.new(definition).template
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def replace_placeholers(template)
|
|
21
|
+
attributes = template.values.first
|
|
22
|
+
s3_key = attributes.dig('Properties','Code','S3Key')
|
|
23
|
+
if s3_key == "code_s3_key_placeholder"
|
|
24
|
+
checksum = Jets::Builders::Md5.checksums["stage/code"]
|
|
25
|
+
code_zip = "code-#{checksum}.zip"
|
|
26
|
+
attributes['Properties']['Code']['S3Key'] = "jets/code/#{code_zip}"
|
|
27
|
+
end
|
|
28
|
+
template
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Resource
|
|
3
|
+
module Dsl
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
|
|
6
|
+
def resources
|
|
7
|
+
Resource.definitions(self.class)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class_methods do
|
|
11
|
+
def resource(*definition)
|
|
12
|
+
# self is subclass is the stack that inherits from Jets::Stack
|
|
13
|
+
# IE: ExampleStack < Jets::Stack
|
|
14
|
+
Resource.new(self, *definition).register
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class S3Event
|
|
3
|
+
def initialize(bucket_name)
|
|
4
|
+
@bucket_name = bucket_name
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# Stack names can only contain alpha numeric chars.
|
|
8
|
+
# Bucket names are limit to 64 chars: https://amzn.to/2SIzvme
|
|
9
|
+
# Stack names are limit to 128 chars: https://amzn.to/2SFkrG0
|
|
10
|
+
# This gsub should handle this.
|
|
11
|
+
def stack_name
|
|
12
|
+
@bucket_name.gsub(/[^0-9a-z\-_]/i, '').gsub('-','_').camelize
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def build_stack
|
|
16
|
+
# assign to local variable so its available in the block
|
|
17
|
+
bucket = @bucket_name
|
|
18
|
+
|
|
19
|
+
Jets::Stack.new_class(stack_name) do
|
|
20
|
+
s3_bucket_configuration(:s3_bucket_configuration,
|
|
21
|
+
service_token: "!GetAtt JetsS3BucketConfig.Arn", # Cannot change this w/o changing the logical id
|
|
22
|
+
# These properties correspond to the ruby aws-sdk s3.put_bucket_notification_configuration
|
|
23
|
+
# in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
|
|
24
|
+
# bucket properties have a similiar structure but is slightly different so it can be confusing.
|
|
25
|
+
#
|
|
26
|
+
# Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
|
|
27
|
+
bucket: bucket,
|
|
28
|
+
notification_configuration: Jets.config.s3_event.notification_configuration,
|
|
29
|
+
) if Jets.config.s3_event.configure_bucket
|
|
30
|
+
|
|
31
|
+
# Important note: If we change the name of this function we should also change the
|
|
32
|
+
# logical id of the s3_bucket_configuration custom resource or we'll get this error:
|
|
33
|
+
# Modifying service token is not allowed.
|
|
34
|
+
function("jets/s3_bucket_config",
|
|
35
|
+
role: "!GetAtt BucketConfigIamRole.Arn",
|
|
36
|
+
layers: ["!Ref GemLayer"],
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
sns_topic(:sns_topic)
|
|
40
|
+
sns_topic_policy(:sns_topic_policy,
|
|
41
|
+
policy_document: {
|
|
42
|
+
version: "2012-10-17",
|
|
43
|
+
statement: {
|
|
44
|
+
effect: "Allow",
|
|
45
|
+
principal: { service: "s3.amazonaws.com"},
|
|
46
|
+
action: "sns:Publish",
|
|
47
|
+
resource: "!Ref SnsTopic",
|
|
48
|
+
condition: {
|
|
49
|
+
arn_like: {
|
|
50
|
+
"aws:SourceArn" => "!Sub arn:aws:s3:*:*:#{bucket}"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
topics: ["!Ref SnsTopic"],
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
iam_role(:bucket_config_iam_role,
|
|
59
|
+
assume_role_policy_document: {
|
|
60
|
+
version: '2012-10-17',
|
|
61
|
+
statement: [
|
|
62
|
+
effect: "Allow",
|
|
63
|
+
principal: {service: ["lambda.amazonaws.com"]},
|
|
64
|
+
action: ['sts:AssumeRole'],
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
path: "/",
|
|
68
|
+
managed_policy_arns: ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
|
|
69
|
+
policies: [
|
|
70
|
+
policy_name: "S3Policy",
|
|
71
|
+
policy_document: {
|
|
72
|
+
version: '2012-10-17',
|
|
73
|
+
statement: [
|
|
74
|
+
effect: "Allow",
|
|
75
|
+
action: [
|
|
76
|
+
's3:GetBucketNotification',
|
|
77
|
+
's3:PutBucketNotification',
|
|
78
|
+
],
|
|
79
|
+
resource: "*"
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class TmpLoader
|
|
3
|
+
include AwsServices
|
|
4
|
+
|
|
5
|
+
def self.load!
|
|
6
|
+
new.load
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def initialize(yaml_path=nil)
|
|
10
|
+
yaml_path ||= "#{Jets.root}/handlers/data.yml"
|
|
11
|
+
@data = YAML.load_file(yaml_path)
|
|
12
|
+
@s3_bucket = @data['s3_bucket']
|
|
13
|
+
@rack_zip = @data['rack_zip']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def load
|
|
17
|
+
rack
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def rack
|
|
21
|
+
return unless @rack_zip
|
|
22
|
+
download_and_extract(@rack_zip, '/tmp/rack')
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def download_and_extract(zip_file, folder_dest)
|
|
26
|
+
s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
|
|
27
|
+
download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
|
|
28
|
+
|
|
29
|
+
download(s3_key, download_path)
|
|
30
|
+
unzip(download_path, folder_dest)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def download(key, dest)
|
|
34
|
+
# https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
|
|
35
|
+
# stream object directly to disk
|
|
36
|
+
s3.get_object(response_target: dest,
|
|
37
|
+
bucket: @s3_bucket,
|
|
38
|
+
key: key)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def unzip(zipfile, folder_dest)
|
|
42
|
+
sh "unzip -qo #{zipfile} -d #{folder_dest}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def sh(command)
|
|
46
|
+
puts "=> #{command}"
|
|
47
|
+
success = system(command)
|
|
48
|
+
raise "Command #{command} failed" unless success
|
|
49
|
+
success
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
data/lib/jets/turbine.rb
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class Turbine
|
|
3
|
+
class_attribute :after_initializers
|
|
4
|
+
class_attribute :initializers
|
|
5
|
+
class_attribute :on_exceptions
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
def subclasses
|
|
9
|
+
@subclasses ||= []
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def inherited(base)
|
|
13
|
+
subclasses << base
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def after_initializer(label, &block)
|
|
17
|
+
self.after_initializers ||= {}
|
|
18
|
+
self.after_initializers[label] = block
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def initializer(label, &block)
|
|
22
|
+
self.initializers ||= {}
|
|
23
|
+
self.initializers[label] = block
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def on_exception(label, &block)
|
|
27
|
+
self.on_exceptions ||= {}
|
|
28
|
+
self.on_exceptions[label] = block
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def exception_reporter(label, &block)
|
|
32
|
+
on_exception(label, &block)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Make config available in Turbine. Note only available outside of hooks like initializers.
|
|
36
|
+
def config
|
|
37
|
+
Jets.application.config
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/jets/turbo.rb
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Jets
|
|
4
|
+
class Turbo
|
|
5
|
+
class << self
|
|
6
|
+
extend Memoist
|
|
7
|
+
|
|
8
|
+
# Relies on the cached side-effect since Jets afterburner will switch Jets.root and the result will be different
|
|
9
|
+
def afterburner?
|
|
10
|
+
new.rails?
|
|
11
|
+
end
|
|
12
|
+
memoize :afterburner?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Turbo charge mode
|
|
16
|
+
def charge
|
|
17
|
+
framework = detect
|
|
18
|
+
case framework
|
|
19
|
+
when :jets
|
|
20
|
+
# do nothing
|
|
21
|
+
when :rails
|
|
22
|
+
Rails.new.setup
|
|
23
|
+
else
|
|
24
|
+
# should never get here
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def detect
|
|
29
|
+
if rails?
|
|
30
|
+
:rails
|
|
31
|
+
elsif jets?
|
|
32
|
+
:jets
|
|
33
|
+
else
|
|
34
|
+
:unknown_framework
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def rails?
|
|
39
|
+
config_ru_contains?('run Rails.application')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def jets?
|
|
43
|
+
config_ru_contains?('run Jets.application')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def config_ru_contains?(value)
|
|
47
|
+
root = ENV["JETS_ROOT"] || Dir.pwd # Jets.root is not yet available
|
|
48
|
+
config_ru = "#{root}/config.ru"
|
|
49
|
+
return false unless File.exist?(config_ru)
|
|
50
|
+
|
|
51
|
+
lines = ::IO.readlines(config_ru)
|
|
52
|
+
!!lines.detect { |l| l.include?(value) }
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
class Jets::Turbo
|
|
2
|
+
class DatabaseYaml
|
|
3
|
+
def reconfigure
|
|
4
|
+
current_yaml = "#{Jets.root}/rack/config/database.yml"
|
|
5
|
+
return unless File.exist?(current_yaml)
|
|
6
|
+
|
|
7
|
+
vars = {}
|
|
8
|
+
current_database = YAML.load_file(current_yaml)
|
|
9
|
+
database_names = infer_database_name(current_database)
|
|
10
|
+
vars.merge!(database_names)
|
|
11
|
+
vars['adapter'] = current_database['development']['adapter']
|
|
12
|
+
|
|
13
|
+
path = File.expand_path("templates/config/database.yml", File.dirname(__FILE__))
|
|
14
|
+
content = Jets::Erb.result(path, vars)
|
|
15
|
+
IO.write(current_yaml, content)
|
|
16
|
+
# puts "Reconfigured #{current_yaml}" # uncomment to inspect and debug
|
|
17
|
+
rescue Exception => e
|
|
18
|
+
puts "WARNING: Was not able to generate a database.yml. Leaving your current one in place"
|
|
19
|
+
puts e.message
|
|
20
|
+
# If unable to copy the database.yml settings just slightly fail.
|
|
21
|
+
# Do this because really unsure what is in the current database.yml
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def infer_database_name(current_database)
|
|
25
|
+
vars = {}
|
|
26
|
+
%w[development test production].each do |env|
|
|
27
|
+
if !current_database[env]['database'].include?('<%') # already has ERB
|
|
28
|
+
vars["database_#{env}"] = current_database[env]['database']
|
|
29
|
+
else
|
|
30
|
+
lines = IO.readlines("#{Jets.root}/rack/config/application.rb")
|
|
31
|
+
module_line = lines.find { |l| l =~ /^module / }
|
|
32
|
+
app_module = module_line.gsub(/^module /,'').strip
|
|
33
|
+
app_name = app_module.underscore
|
|
34
|
+
vars["database_#{env}"] = "#{app_name}_#{env}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
vars
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|