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,136 @@
|
|
|
1
|
+
class Jets::Commands::Call
|
|
2
|
+
class AutoloadGuesser < BaseGuesser
|
|
3
|
+
def detect_class_name
|
|
4
|
+
# First guess the class name assuming simple
|
|
5
|
+
class_name = simple_detect_class_name
|
|
6
|
+
return class_name if class_name
|
|
7
|
+
|
|
8
|
+
guess_classes.each do |class_name_guess|
|
|
9
|
+
begin
|
|
10
|
+
class_name_guess.constantize
|
|
11
|
+
return class_name_guess # if there's no error then the class is found
|
|
12
|
+
rescue NameError
|
|
13
|
+
if out_of_guesses(class_name_guess)
|
|
14
|
+
# puts "Unable to find the class to call. Tried guessing: #{guess_classes[0..-2].join(', ')}."
|
|
15
|
+
# raise # re-raise NameError for now but maybe better to provide
|
|
16
|
+
# a custom error class, so we can rescue it and provide a
|
|
17
|
+
# friendly message to the user
|
|
18
|
+
else
|
|
19
|
+
next
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Can guess name by looking at underscore and dashes.
|
|
28
|
+
#
|
|
29
|
+
# Example:
|
|
30
|
+
#
|
|
31
|
+
# @provided_function_name: first_module-lost_controller-index
|
|
32
|
+
# return: FirstModule::LostController
|
|
33
|
+
#
|
|
34
|
+
def simple_detect_class_name
|
|
35
|
+
parts = @provided_function_name.split('-')
|
|
36
|
+
namespace = parts[0..-3].join('/')
|
|
37
|
+
controller = parts[-2..-2] # dont include the action
|
|
38
|
+
class_name = [namespace, controller].reject {|s| s.empty?}.compact.join('/').camelize
|
|
39
|
+
begin
|
|
40
|
+
class_name.constantize
|
|
41
|
+
return class_name
|
|
42
|
+
rescue NameError
|
|
43
|
+
nil
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def method_name
|
|
48
|
+
return @method_name if defined?(@method_name)
|
|
49
|
+
return nil unless class_name
|
|
50
|
+
|
|
51
|
+
underscored_class_name = class_name.underscore.gsub('/','_')
|
|
52
|
+
underscored_function_name = @provided_function_name.underscore.gsub('/','_')
|
|
53
|
+
meth = underscored_function_name.sub(underscored_class_name, '')
|
|
54
|
+
meth = meth.sub(/^[-_]/,'') # remove leading _ or -
|
|
55
|
+
|
|
56
|
+
if class_name.constantize.tasks.map(&:meth).include?(meth.to_sym)
|
|
57
|
+
@method_name = meth
|
|
58
|
+
else
|
|
59
|
+
@method_name_error ="#{class_name} class found but #{meth} method not found"
|
|
60
|
+
@method_name = nil
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Useful to printing out what was attempted to look up
|
|
65
|
+
def error_message
|
|
66
|
+
guesses = guess_classes
|
|
67
|
+
puts "Unable to find the function to call."
|
|
68
|
+
if class_name and !method_name
|
|
69
|
+
puts @method_name_error
|
|
70
|
+
else
|
|
71
|
+
puts "Tried: #{guesses.join(', ')}"
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def process_type
|
|
76
|
+
if @provided_function_name =~ /[-_]controller/
|
|
77
|
+
"controller"
|
|
78
|
+
elsif @provided_function_name =~ /[-_]job/
|
|
79
|
+
"job"
|
|
80
|
+
elsif @provided_function_name =~ /[-_]rule/
|
|
81
|
+
"rule"
|
|
82
|
+
else
|
|
83
|
+
"function"
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def process_type_pattern
|
|
88
|
+
Regexp.new("[-_]#{process_type}[-_](.*)")
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# Strips the action because we dont want it to guess the class name
|
|
92
|
+
# So:
|
|
93
|
+
# admin-related-pages => admin_related_pages_controller
|
|
94
|
+
def underscored_name
|
|
95
|
+
# strip action and concidentally the _controller_ string
|
|
96
|
+
name = @provided_function_name.sub(process_type_pattern,'')
|
|
97
|
+
# Ensure _controller or _job at the end except for simple functions
|
|
98
|
+
unless process_type == "function"
|
|
99
|
+
name = name.gsub('-','_') + "_#{process_type}"
|
|
100
|
+
end
|
|
101
|
+
name
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Guesses autoload paths.
|
|
105
|
+
#
|
|
106
|
+
# underscored_name: admin_related_pages_controller
|
|
107
|
+
# Returns:
|
|
108
|
+
# [
|
|
109
|
+
# "admin_related_pages_controller",
|
|
110
|
+
# "admin/related_pages_controller",
|
|
111
|
+
# "admin_related/pages_controller",
|
|
112
|
+
# "admin_related_pages/controller",
|
|
113
|
+
# ]
|
|
114
|
+
def autoload_paths
|
|
115
|
+
guesses = []
|
|
116
|
+
|
|
117
|
+
parts = underscored_name.split('_')
|
|
118
|
+
parts.size.times do |i|
|
|
119
|
+
namespace = i == 0 ? nil : parts[0..i-1].join('/')
|
|
120
|
+
class_path = parts[i..-1].join('_')
|
|
121
|
+
guesses << [namespace, class_path].compact.join('/')
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
guesses
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def guess_classes
|
|
128
|
+
autoload_paths.map(&:classify)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def out_of_guesses(guess)
|
|
132
|
+
guess.include?("::Controller")
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
end
|
|
136
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Subclasses of BaseGuessor must implement interface:
|
|
2
|
+
# detect_class_name
|
|
3
|
+
# method_name
|
|
4
|
+
# error_message
|
|
5
|
+
#
|
|
6
|
+
class Jets::Commands::Call
|
|
7
|
+
class BaseGuesser
|
|
8
|
+
include Jets::AwsServices
|
|
9
|
+
|
|
10
|
+
# provided_function_name:
|
|
11
|
+
# admin/related_pages_controller-list_all
|
|
12
|
+
# admin-related-pages-controller-list-all
|
|
13
|
+
def initialize(provided_function_name)
|
|
14
|
+
@provided_function_name = provided_function_name
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def class_name
|
|
18
|
+
return @class_name if @detection_ran
|
|
19
|
+
|
|
20
|
+
@class_name = detect_class_name
|
|
21
|
+
@detection_ran = true
|
|
22
|
+
@class_name
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def function_name
|
|
26
|
+
# Strip the project namespace if the user has accidentally added it
|
|
27
|
+
# Since we're going to automatically add it no matter what at the end
|
|
28
|
+
# and dont want the namespace to be included twice
|
|
29
|
+
@provided_function_name = @provided_function_name.sub("#{Jets.config.project_namespace}-", "")
|
|
30
|
+
|
|
31
|
+
code_path = class_name.underscore.gsub('/','-')
|
|
32
|
+
function_name = [Jets.config.project_namespace, code_path, method_name].join('-')
|
|
33
|
+
generated_function_name(function_name)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def generated_function_name(function_name)
|
|
37
|
+
if function_name.size > Jets::MAX_FUNCTION_NAME_SIZE # name generated by CloudFormation
|
|
38
|
+
logical_id = @class_name.gsub('::','')
|
|
39
|
+
app_stack_arn = lookup(parent_stack[:outputs], logical_id)
|
|
40
|
+
|
|
41
|
+
resources = stack_resources(app_stack_arn)
|
|
42
|
+
resource = resources.find { |r| r.logical_resource_id == method_name.camelize + "LambdaFunction" } # method_name only contains the method
|
|
43
|
+
resource.physical_resource_id # actual function name
|
|
44
|
+
else
|
|
45
|
+
function_name
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Class variable caches
|
|
50
|
+
@@stack_resources = {}
|
|
51
|
+
def stack_resources(stack_name)
|
|
52
|
+
@@stack_resources[stack_name] ||= cfn.describe_stack_resources(stack_name: stack_name).stack_resources
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
@@parent_stack = nil
|
|
56
|
+
def parent_stack
|
|
57
|
+
@@parent_stack ||= cfn.describe_stacks(stack_name: Jets::Naming.parent_stack_name).stacks.first
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Guesser transforms the user provided function name to the actual lambda
|
|
2
|
+
# function name.
|
|
3
|
+
#
|
|
4
|
+
# Allow for variety of different inputs to work:
|
|
5
|
+
# Simple:
|
|
6
|
+
# admin/pages_controller-index => admin-pages_controller-index
|
|
7
|
+
# admin-pages_controller-index => admin-pages_controller-index
|
|
8
|
+
#
|
|
9
|
+
# Complex, requires detecting the right class name:
|
|
10
|
+
# admin/related_pages_controller-list_all
|
|
11
|
+
# admin-related-pages-controller-list-all
|
|
12
|
+
#
|
|
13
|
+
# All still result in: admin-related_pages_controller-index
|
|
14
|
+
#
|
|
15
|
+
# The detection process follows. Given worse case:
|
|
16
|
+
# admin-related-pages-controller-list-all
|
|
17
|
+
#
|
|
18
|
+
# Know that the action comes after controller, try:
|
|
19
|
+
# AdminRelatedPagesController
|
|
20
|
+
# Admin::RelatedPagesController <= found stop guessing
|
|
21
|
+
#
|
|
22
|
+
# admin/related_pages_controller <= underscored
|
|
23
|
+
# admin/related_pages_controller-list_all <= add action back on
|
|
24
|
+
# admin-related_pages_controller-list_all <= gsub / - DONE
|
|
25
|
+
#
|
|
26
|
+
# Now we're at a point where we can start guessing
|
|
27
|
+
# function_name = detect_function_name(function_name)
|
|
28
|
+
class Jets::Commands::Call
|
|
29
|
+
class Guesser
|
|
30
|
+
delegate :class_name, :method_name, :error_message, :function_name,
|
|
31
|
+
to: :delegate_guesser
|
|
32
|
+
|
|
33
|
+
# Example of provided_function_name:
|
|
34
|
+
# admin/related_pages_controller-list_all
|
|
35
|
+
# admin-related-pages-controller-list-all
|
|
36
|
+
def initialize(provided_function_name)
|
|
37
|
+
@provided_function_name = provided_function_name
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def delegate_guesser
|
|
41
|
+
@delegate_guesser ||= if @provided_function_name =~ /[-_](controller|job|rule)/
|
|
42
|
+
AutoloadGuesser.new(@provided_function_name)
|
|
43
|
+
else
|
|
44
|
+
AnonymousGuesser.new(@provided_function_name)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Jets::Commands
|
|
2
|
+
class Clean < Jets::Commands::Base
|
|
3
|
+
class_option :noop, type: :boolean, desc: "noop or dry-run mode"
|
|
4
|
+
class_option :mute, type: :boolean, desc: "mute output"
|
|
5
|
+
class_option :sure, type: :boolean, desc: "bypass are you sure prompt"
|
|
6
|
+
|
|
7
|
+
desc "log", "Cleans CloudWatch log groups assocated with app"
|
|
8
|
+
long_desc Help.text('clean:log')
|
|
9
|
+
def log
|
|
10
|
+
Log.new(options).clean
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
desc "build", "Cleans jets build"
|
|
14
|
+
long_desc Help.text('clean:build')
|
|
15
|
+
def build
|
|
16
|
+
Build.new(options).clean
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
class Jets::Commands::Clean
|
|
2
|
+
class Base
|
|
3
|
+
def initialize(options={})
|
|
4
|
+
@options = options
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
private
|
|
8
|
+
def say(message)
|
|
9
|
+
prefix = 'NOOP ' if @options[:noop]
|
|
10
|
+
puts "#{prefix}#{message}" unless @options[:mute]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def are_you_sure?(message)
|
|
14
|
+
return true if @options[:sure]
|
|
15
|
+
|
|
16
|
+
puts "Are you sure that you want to #{message}? (y/N)"
|
|
17
|
+
yes = $stdin.gets.strip
|
|
18
|
+
unless yes =~ /^y/
|
|
19
|
+
puts "Phew that was close!"
|
|
20
|
+
exit 0
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# The thing that limits this implementation is that there needs to be at least
|
|
2
|
+
# one lambda function created from an internal jets function. Example:
|
|
3
|
+
#
|
|
4
|
+
# /aws/lambda/demo-dev-2-jets-preheat_job-warm
|
|
5
|
+
# /aws/lambda/demo-dev-2-jets-public_controller-show
|
|
6
|
+
#
|
|
7
|
+
# We're doing this because JETS_ENV_EXTRA environments can create additional matching
|
|
8
|
+
# log groups and we don't want to overly-aggressively delete them.
|
|
9
|
+
#
|
|
10
|
+
# The `keep_prefixes(log_group_names)` method calcuates the log groups to keep.
|
|
11
|
+
class Jets::Commands::Clean
|
|
12
|
+
class Log < Base
|
|
13
|
+
extend Memoist
|
|
14
|
+
include Jets::AwsServices
|
|
15
|
+
|
|
16
|
+
def clean
|
|
17
|
+
are_you_sure?("delete CloudWatch logs")
|
|
18
|
+
|
|
19
|
+
say "Removing CloudWatch logs for #{prefix_guess}..."
|
|
20
|
+
log_groups.each do |g|
|
|
21
|
+
next if keep_log_group?(g.log_group_name)
|
|
22
|
+
logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
|
|
23
|
+
say "Removed log group: #{g.log_group_name}"
|
|
24
|
+
end
|
|
25
|
+
say "Removed CloudWatch logs for #{prefix_guess}"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def clean_deploys
|
|
29
|
+
groups = deploy_log_groups.sort_by do |g|
|
|
30
|
+
g.log_group_name
|
|
31
|
+
end
|
|
32
|
+
# Keep the last 2 recent log groups so we can see the deleted logic
|
|
33
|
+
groups = groups[0..-3]
|
|
34
|
+
groups.each do |g|
|
|
35
|
+
logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def deploy_log_groups
|
|
40
|
+
log_groups.select do |g|
|
|
41
|
+
!keep_log_group?(g.log_group_name) &&
|
|
42
|
+
g.log_group_name.include?('jets-base-path')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
private
|
|
47
|
+
def prefix_guess
|
|
48
|
+
Jets::Naming.parent_stack_name
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def log_groups
|
|
52
|
+
groups, next_token = [], true
|
|
53
|
+
while next_token
|
|
54
|
+
next_token = nil if next_token == true # just at start the loop
|
|
55
|
+
resp = logs.describe_log_groups(
|
|
56
|
+
log_group_name_prefix: "/aws/lambda/#{prefix_guess}-",
|
|
57
|
+
next_token: next_token,
|
|
58
|
+
)
|
|
59
|
+
groups += resp.log_groups
|
|
60
|
+
next_token = resp.next_token
|
|
61
|
+
end
|
|
62
|
+
groups
|
|
63
|
+
end
|
|
64
|
+
memoize :log_groups
|
|
65
|
+
|
|
66
|
+
def log_group_names
|
|
67
|
+
log_groups.map(&:log_group_name)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def all_prefixes(log_group_names)
|
|
71
|
+
log_prefixes(log_group_names)
|
|
72
|
+
end
|
|
73
|
+
memoize :all_prefixes
|
|
74
|
+
|
|
75
|
+
# Check for the prefixes to keep. The slightly tricky thing to watch for is
|
|
76
|
+
# for the prefix matching addiitonal log groups that belong to other
|
|
77
|
+
# JETS_ENV_EXTRA=xxx created environments.
|
|
78
|
+
#
|
|
79
|
+
# We find and store the prefixes to keep so we don't over aggressively delete
|
|
80
|
+
# log groups.
|
|
81
|
+
def keep_prefixes(log_group_names)
|
|
82
|
+
names = log_group_names.reject do |name|
|
|
83
|
+
name =~ %r{/aws/lambda/#{prefix_guess}-jets}
|
|
84
|
+
end
|
|
85
|
+
log_prefixes(names)
|
|
86
|
+
end
|
|
87
|
+
memoize :keep_prefixes
|
|
88
|
+
|
|
89
|
+
# Strips -jets.* from the full log group name to leave only the prefix behind
|
|
90
|
+
def log_prefixes(names)
|
|
91
|
+
names = names.select do |name|
|
|
92
|
+
name.match(Regexp.new("#{prefix_guess}-.*jets"))
|
|
93
|
+
end
|
|
94
|
+
names.map do |name|
|
|
95
|
+
name.sub(/-jets.*/,'')
|
|
96
|
+
end.uniq.sort
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Check if it is safe to delete the log group
|
|
100
|
+
def keep_log_group?(log_group_name)
|
|
101
|
+
keep_prefixes = keep_prefixes(log_group_names)
|
|
102
|
+
!!keep_prefixes.detect do |keep_prefix|
|
|
103
|
+
log_group_name =~ Regexp.new(keep_prefix)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
class Jets::Commands::Console
|
|
2
|
+
def self.run
|
|
3
|
+
puts Jets::Booter.message
|
|
4
|
+
|
|
5
|
+
# Thanks: https://mutelight.org/bin-console
|
|
6
|
+
require "irb"
|
|
7
|
+
require "irb/completion"
|
|
8
|
+
|
|
9
|
+
ARGV.clear # https://stackoverflow.com/questions/33070092/irb-start-not-starting/33136762
|
|
10
|
+
IRB.start
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Jets::Commands
|
|
2
|
+
class Db < Jets::Commands::Base
|
|
3
|
+
desc "generate", "Creates a migration to change a db table"
|
|
4
|
+
long_desc Help.text('db:generate')
|
|
5
|
+
def generate(*args)
|
|
6
|
+
require "rails/generators"
|
|
7
|
+
require "rails/generators/active_record/migration/migration_generator"
|
|
8
|
+
|
|
9
|
+
generator = ActiveRecord::Generators::MigrationGenerator.new(args)
|
|
10
|
+
generator.create_migration_file
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|