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,30 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class Router
|
|
3
|
+
class Scope
|
|
4
|
+
attr_reader :options, :parent, :level
|
|
5
|
+
def initialize(options = {}, parent = nil, level = 1)
|
|
6
|
+
@options = options
|
|
7
|
+
@parent = parent
|
|
8
|
+
@level = level
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def root?
|
|
12
|
+
@parent.nil?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def new(options={})
|
|
16
|
+
self.class.new(options, self, level + 1)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def full_namespace
|
|
20
|
+
ns = []
|
|
21
|
+
current = self
|
|
22
|
+
while current
|
|
23
|
+
ns.unshift(current.options[:namespace])
|
|
24
|
+
current = current.parent
|
|
25
|
+
end
|
|
26
|
+
ns.empty? ? nil : ns.join('/')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
# Base public methods get turned into Lambda functions.
|
|
4
|
+
#
|
|
5
|
+
# Jets::Rule::Base < Jets::Lambda::Functions
|
|
6
|
+
# Both Jets::Rule::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
7
|
+
# So the Jets::Rule::Dsl overrides some of the Jets::Lambda::Functions behavior.
|
|
8
|
+
module Jets::Rule
|
|
9
|
+
class Base < Jets::Lambda::Functions
|
|
10
|
+
include Dsl
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
def process(event, context, meth)
|
|
14
|
+
job = new(event, context, meth)
|
|
15
|
+
job.send(meth)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
# Jets::Rule::Base < Jets::Lambda::Functions
|
|
2
|
+
# Both Jets::Rule::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
3
|
+
# So the Jets::Rule::Dsl overrides some of the Jets::Lambda::Functions behavior.
|
|
4
|
+
#
|
|
5
|
+
# Implements:
|
|
6
|
+
#
|
|
7
|
+
# default_associated_resource_definition
|
|
8
|
+
#
|
|
9
|
+
module Jets::Rule::Dsl
|
|
10
|
+
extend ActiveSupport::Concern
|
|
11
|
+
|
|
12
|
+
included do
|
|
13
|
+
class << self
|
|
14
|
+
def rule_namespace(value=nil)
|
|
15
|
+
if value.nil?
|
|
16
|
+
@rule_namespace # getter
|
|
17
|
+
else
|
|
18
|
+
@rule_namespace = value # # setter
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Allows for different types of values. Examples:
|
|
23
|
+
#
|
|
24
|
+
# String: scope "AWS::EC2::SecurityGroup"
|
|
25
|
+
# Array: scope ["AWS::EC2::SecurityGroup"]
|
|
26
|
+
# Hash: scope {"ComplianceResourceTypes" => ["AWS::EC2::SecurityGroup"]}
|
|
27
|
+
def scope(value)
|
|
28
|
+
scope = case value
|
|
29
|
+
when String
|
|
30
|
+
{compliance_resource_types: [value]}
|
|
31
|
+
when Array
|
|
32
|
+
{compliance_resource_types: value}
|
|
33
|
+
else # default to hash
|
|
34
|
+
value
|
|
35
|
+
end
|
|
36
|
+
associated_properties(scope: scope)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Convenience method that set properties. List based on https://amzn.to/2oSph1P
|
|
40
|
+
# Not all properties are included because some properties are not meant to be set
|
|
41
|
+
# directly. For example, function_name is a calculated setting by Jets.
|
|
42
|
+
ASSOCIATED_PROPERTIES = %W[
|
|
43
|
+
config_rule_name
|
|
44
|
+
description
|
|
45
|
+
input_parameters
|
|
46
|
+
maximum_execution_frequency
|
|
47
|
+
]
|
|
48
|
+
define_associated_properties(ASSOCIATED_PROPERTIES)
|
|
49
|
+
alias_method :desc, :description
|
|
50
|
+
|
|
51
|
+
def default_associated_resource_definition(meth)
|
|
52
|
+
config_rule_definition(meth)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def config_rule_definition(meth)
|
|
56
|
+
resource = Jets::Resource::Config::ConfigRule.new(self, meth, associated_properties)
|
|
57
|
+
resource.definition # returns a definition to be added by associated_resources
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def managed_rule(name)
|
|
61
|
+
name = name.to_s
|
|
62
|
+
managed_rule = Jets::Resource::Config::ManagedRule.new(self, name, associated_properties)
|
|
63
|
+
resource(managed_rule.definition) # Sets @associated_resources
|
|
64
|
+
|
|
65
|
+
# The key to not register the task to all_tasks to avoid creating a Lambda function.
|
|
66
|
+
# Instead we store it in all_managed_rules.
|
|
67
|
+
register_managed_rule(name, managed_rule.definition)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Creates a task but registers it to all_managed_rules instead of all_tasks
|
|
71
|
+
# because we do not want Lambda functions to be created.
|
|
72
|
+
def register_managed_rule(name, definition)
|
|
73
|
+
|
|
74
|
+
# Mimic task to grab base_replacements, namely namespace.
|
|
75
|
+
# Do not actually use the task to create a Lambda function for managed rules.
|
|
76
|
+
# Only using the task for base_replacements.
|
|
77
|
+
resources = [definition]
|
|
78
|
+
meth = name
|
|
79
|
+
task = Jets::Lambda::Task.new(self.name, meth,
|
|
80
|
+
resources: resources,
|
|
81
|
+
replacements: replacements(meth))
|
|
82
|
+
all_managed_rules[name] = { definition: definition, replacements: task.replacements }
|
|
83
|
+
clear_properties
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Override lambda/dsl.rb to add config_rule_name also
|
|
87
|
+
def replacements(meth)
|
|
88
|
+
name_without_rule = self.name.underscore.gsub(/_rule$/,'')
|
|
89
|
+
config_rule_name = "#{name_without_rule}_#{meth}".dasherize
|
|
90
|
+
{
|
|
91
|
+
config_rule_name: config_rule_name
|
|
92
|
+
}
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# AWS managed rules are not actual Lambda functions and require their own storage.
|
|
96
|
+
def all_managed_rules
|
|
97
|
+
@all_managed_rules ||= ActiveSupport::OrderedHash.new
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def managed_rules
|
|
101
|
+
all_managed_rules.values
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Override Lambda::Dsl.build? to account for possible managed_rules
|
|
105
|
+
def build?
|
|
106
|
+
!tasks.empty? || !managed_rules.empty?
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
module Jets
|
|
6
|
+
module SpecHelpers
|
|
7
|
+
attr_reader :request, :response
|
|
8
|
+
def initialize(*)
|
|
9
|
+
super
|
|
10
|
+
@request = Request.new(:get, '/', {}, Params.new)
|
|
11
|
+
@response = nil # will be set after http_call
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
rest_methods = %w[get post put patch delete]
|
|
15
|
+
rest_methods.each do |meth|
|
|
16
|
+
define_method(meth) do |path, **params|
|
|
17
|
+
http_call(method: meth, path: path, **params)
|
|
18
|
+
end
|
|
19
|
+
# Example:
|
|
20
|
+
# def get(path, **params)
|
|
21
|
+
# http_call(method: :get, path: path, **params)
|
|
22
|
+
# end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def http_call(method:, path:, **params)
|
|
26
|
+
request.method = method.to_sym
|
|
27
|
+
request.path = path
|
|
28
|
+
request.headers.deep_merge!(params.delete(:headers) || {})
|
|
29
|
+
|
|
30
|
+
request.params.body_params = params.delete(:params) || params || {}
|
|
31
|
+
|
|
32
|
+
request.params.query_params = params.delete(:query)
|
|
33
|
+
request.params.query_params ||= params if request.method == :get
|
|
34
|
+
request.params.query_params ||= {}
|
|
35
|
+
|
|
36
|
+
request.params.path_params = params
|
|
37
|
+
|
|
38
|
+
@response = request.dispatch!
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def fixture_path(filename)
|
|
42
|
+
"#{Jets.root}/spec/fixtures/#{filename}"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def fixture_file(filename)
|
|
46
|
+
File.new(fixture_path(filename))
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
require "rspec"
|
|
52
|
+
RSpec.configure do |c|
|
|
53
|
+
c.include Jets::SpecHelpers
|
|
54
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
module SpecHelpers
|
|
3
|
+
class Params
|
|
4
|
+
attr_accessor :path_params, :body_params, :query_params
|
|
5
|
+
def initialize(path_params={}, body_params={}, query_params={})
|
|
6
|
+
@path_params, @body_params, @query_params = path_params, body_params, query_params
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
module SpecHelpers
|
|
3
|
+
class Request
|
|
4
|
+
attr_accessor :method, :path, :headers, :params
|
|
5
|
+
def initialize(method, path, headers={}, params={})
|
|
6
|
+
@method, @path, @headers, @params = method, path, headers, params
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def event
|
|
10
|
+
json = {}
|
|
11
|
+
id_params = path.scan(%r{:([^/]+)}).flatten
|
|
12
|
+
expanded_path = path.dup
|
|
13
|
+
path_parameters = {}
|
|
14
|
+
|
|
15
|
+
id_params.each do |id_param|
|
|
16
|
+
raise "missing param: :#{id_param}" unless params.path_params.include? id_param.to_sym
|
|
17
|
+
|
|
18
|
+
path_param_value = params.path_params[id_param.to_sym]
|
|
19
|
+
raise "Path param :#{id_param} value cannot be blank" if path_param_value.blank?
|
|
20
|
+
|
|
21
|
+
expanded_path.gsub!(":#{id_param}", path_param_value.to_s)
|
|
22
|
+
path_parameters.deep_merge!(id_param => path_param_value.to_s)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
json['resource'] = path
|
|
26
|
+
json['path'] = expanded_path
|
|
27
|
+
json['httpMethod'] = method.to_s.upcase
|
|
28
|
+
json['pathParameters'] = path_parameters
|
|
29
|
+
json['headers'] = (headers || {}).stringify_keys
|
|
30
|
+
|
|
31
|
+
if method != :get
|
|
32
|
+
json['headers']['Content-Type'] = 'application/x-www-form-urlencoded'
|
|
33
|
+
body = Rack::Multipart.build_multipart(params.body_params)
|
|
34
|
+
|
|
35
|
+
if body
|
|
36
|
+
json['headers']['Content-Length'] ||= body.length.to_s
|
|
37
|
+
json['headers']['Content-Type'] = "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}"
|
|
38
|
+
else
|
|
39
|
+
body = Rack::Utils.build_nested_query(params.body_params)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
json['body'] = Base64.encode64(body)
|
|
43
|
+
json['isBase64Encoded'] = true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
params.query_params.each do |key, value|
|
|
47
|
+
json['queryStringParameters'] ||= {}
|
|
48
|
+
json['queryStringParameters'][key.to_s] = value.to_s
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
json
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def find_route!
|
|
55
|
+
path = self.path
|
|
56
|
+
path = path[0..-2] if path.end_with? '/'
|
|
57
|
+
path = path[1..-1] if path.start_with? '/'
|
|
58
|
+
|
|
59
|
+
route = Jets::Router.routes.find { |r| r.path == path && r.method == method.to_s.upcase }
|
|
60
|
+
raise "Route not found: #{method.to_s.upcase} #{path}" if route.blank?
|
|
61
|
+
|
|
62
|
+
route
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def dispatch!
|
|
66
|
+
route = find_route!
|
|
67
|
+
controller = Object.const_get(route.controller_name).new(event, {}, route.action_name)
|
|
68
|
+
response = controller.dispatch!
|
|
69
|
+
|
|
70
|
+
if !response.is_a?(Array) || response.size != 3
|
|
71
|
+
raise "Expected response to be an array of size 3. Are you rendering correctly?"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
Response.new(response[0].to_i, response[2].read)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
data/lib/jets/stack.rb
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
class Stack
|
|
3
|
+
include Main::Dsl
|
|
4
|
+
include Parameter::Dsl
|
|
5
|
+
include Output::Dsl
|
|
6
|
+
include Resource::Dsl
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
extend Memoist
|
|
10
|
+
|
|
11
|
+
# Track all command subclasses.
|
|
12
|
+
def subclasses
|
|
13
|
+
@subclasses ||= []
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def inherited(base)
|
|
17
|
+
super
|
|
18
|
+
self.subclasses << base if base.name
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# klass = Jets::Stack.new_class("Bucket3")
|
|
22
|
+
def new_class(class_name, &block)
|
|
23
|
+
# https://stackoverflow.com/questions/4113479/dynamic-class-definition-with-a-class-name
|
|
24
|
+
# Defining the constant this way gets around: SyntaxError: dynamic constant assignment error
|
|
25
|
+
klass = Class.new(Jets::Stack) # First klass is an anonymous class. IE: class.name is nil
|
|
26
|
+
klass = Object.const_set(class_name, klass) # now klass is a named class
|
|
27
|
+
Jets::Stack.subclasses << klass # mimic inherited hook because
|
|
28
|
+
|
|
29
|
+
# Must run class_eval after adding to subclasses in order for the resource declarations in the
|
|
30
|
+
# so that the resources get registered to the right subclass.
|
|
31
|
+
klass.class_eval(&block)
|
|
32
|
+
klass # return klass
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Build it to figure out if we need to build the stack for the SharedBuilder
|
|
36
|
+
def build?
|
|
37
|
+
empty = template == {"Parameters"=>{"IamRole"=>{"Type"=>"String"}, "S3Bucket"=>{"Type"=>"String"}}}
|
|
38
|
+
!empty
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def functions
|
|
42
|
+
stack = new
|
|
43
|
+
# All the & because resources might be nil
|
|
44
|
+
templates = stack.resources&.map(&:template)&.select do |t|
|
|
45
|
+
attributes = t.values.first
|
|
46
|
+
attributes['Type'] == 'AWS::Lambda::Function'
|
|
47
|
+
end
|
|
48
|
+
templates ||= []
|
|
49
|
+
templates.map { |t| Function.new(t) }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def template
|
|
53
|
+
# Pretty funny looking, creating an instance of stack to be passed to the Builder.
|
|
54
|
+
# Another way of looking at it:
|
|
55
|
+
#
|
|
56
|
+
# stack = new # MyStack.new
|
|
57
|
+
# builder = Jets::Stack::Builder.new(stack)
|
|
58
|
+
#
|
|
59
|
+
builder = Jets::Stack::Builder.new(new)
|
|
60
|
+
builder.template
|
|
61
|
+
end
|
|
62
|
+
memoize :template
|
|
63
|
+
|
|
64
|
+
# Eager loading the app/shared resources to ensure shared resources have been registered.
|
|
65
|
+
# Not being used anymore but keeping around just in case for now.
|
|
66
|
+
def eager_load_shared_resources!
|
|
67
|
+
Dir.glob("#{Jets.root}/app/shared/**").each do |path|
|
|
68
|
+
next if path.include?("app/shared/functions")
|
|
69
|
+
Jets::Autoloaders.main.preload(path)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def lookup(logical_id)
|
|
74
|
+
looker.output(logical_id)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def looker
|
|
78
|
+
Jets::Stack::Output::Lookup.new(self)
|
|
79
|
+
end
|
|
80
|
+
memoize :looker
|
|
81
|
+
|
|
82
|
+
def output_keys
|
|
83
|
+
outputs = new.outputs || []
|
|
84
|
+
outputs.map(&:template).map {|o| o.keys.first}
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Builder
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
def initialize(stack)
|
|
6
|
+
@stack = stack
|
|
7
|
+
@template = {} # will build this structure up
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def template
|
|
11
|
+
build_section(:parameters)
|
|
12
|
+
build_section(:resources)
|
|
13
|
+
build_section(:outputs)
|
|
14
|
+
Jets::Camelizer.transform(@template)
|
|
15
|
+
end
|
|
16
|
+
memoize :template
|
|
17
|
+
|
|
18
|
+
def build_section(section)
|
|
19
|
+
elements = build_elements(section)
|
|
20
|
+
return unless elements
|
|
21
|
+
|
|
22
|
+
if section == :parameters
|
|
23
|
+
elements["GemLayer"] = {"Type"=>"String"} unless Jets.poly_only?
|
|
24
|
+
end
|
|
25
|
+
@template[section] = elements
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def build_elements(section)
|
|
29
|
+
# s is a "section element". Examples:
|
|
30
|
+
#
|
|
31
|
+
# Jets::Stack::Parameter
|
|
32
|
+
# Jets::Stack::Resource
|
|
33
|
+
# Jets::Stack::Output
|
|
34
|
+
#
|
|
35
|
+
section_elements = @stack.send(section)
|
|
36
|
+
return unless section_elements
|
|
37
|
+
|
|
38
|
+
section_elements.inject({}) do |template_section, s|
|
|
39
|
+
template_section.merge(s.template)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|