jets.benforeva 3.0.17.pre.mount.pre.fix
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/config.yml +92 -0
- data/.cody/README.md +13 -0
- data/.cody/docs/bin/build.sh +7 -0
- data/.cody/docs/bin/bundler_setup.sh +8 -0
- data/.cody/docs/bin/cli_docs.sh +6 -0
- data/.cody/docs/bin/git_commit.sh +27 -0
- data/.cody/docs/bin/git_setup.sh +12 -0
- data/.cody/docs/bin/subnav.sh +14 -0
- data/.cody/docs/buildspec.yml +10 -0
- data/.cody/docs/project.rb +10 -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 +14 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1035 -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 +212 -0
- data/Rakefile +24 -0
- data/backers.md +20 -0
- data/bin/release +9 -0
- data/exe/jets.benforeva +14 -0
- data/jets.benforeva.gemspec +71 -0
- data/lib/jets/application/defaults.rb +200 -0
- data/lib/jets/application.rb +240 -0
- data/lib/jets/authorizer/base.rb +36 -0
- data/lib/jets/authorizer/dsl.rb +69 -0
- data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
- data/lib/jets/autoloaders.rb +112 -0
- data/lib/jets/aws_info.rb +111 -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 +64 -0
- data/lib/jets/aws_services.rb +95 -0
- data/lib/jets/booter.rb +167 -0
- data/lib/jets/builders/code_builder.rb +410 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +89 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +68 -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/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/ruby_packager.rb +235 -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 +88 -0
- data/lib/jets/camelizer.rb +4 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
- data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
- data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
- data/lib/jets/cfn/builders/controller_builder.rb +50 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +133 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
- data/lib/jets/cfn/builders/parent_builder.rb +130 -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/builders/util/source.rb +21 -0
- data/lib/jets/cfn/built_template.rb +15 -0
- data/lib/jets/cfn/ship.rb +188 -0
- data/lib/jets/cfn/status.rb +10 -0
- data/lib/jets/cfn/template_source.rb +61 -0
- data/lib/jets/cfn/upload.rb +157 -0
- data/lib/jets/cli.rb +208 -0
- data/lib/jets/commands/base.rb +145 -0
- data/lib/jets/commands/build.rb +252 -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 +62 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/call.rb +182 -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 +111 -0
- data/lib/jets/commands/clean.rb +19 -0
- data/lib/jets/commands/configure.rb +51 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
- data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
- data/lib/jets/commands/db/tasks.rb +34 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/dbconsole.rb +134 -0
- data/lib/jets/commands/delete.rb +136 -0
- data/lib/jets/commands/deploy.rb +137 -0
- data/lib/jets/commands/dotenv.rb +9 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/gems.rb +13 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +69 -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/degenerate.md +16 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -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 +6 -0
- data/lib/jets/commands/help/generate.md +28 -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 +7 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/help.rb +9 -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 +30 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/import.rb +12 -0
- data/lib/jets/commands/main.rb +166 -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 +173 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +50 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +105 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
- data/lib/jets/commands/templates/skeleton/.env.test +3 -0
- data/lib/jets/commands/templates/skeleton/.env.tt +3 -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 +39 -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 +26 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -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/config.ru +5 -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 +23 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -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/upgrade/version1.rb +136 -0
- data/lib/jets/commands/upgrade.rb +105 -0
- data/lib/jets/commands/url.rb +69 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller/authorization.rb +91 -0
- data/lib/jets/controller/base.rb +175 -0
- data/lib/jets/controller/callbacks.rb +73 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
- data/lib/jets/controller/error.rb +4 -0
- data/lib/jets/controller/forgery_protection.rb +43 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -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 +22 -0
- data/lib/jets/controller/middleware/local.rb +120 -0
- data/lib/jets/controller/middleware/main.rb +53 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/parameters_filter.rb +29 -0
- data/lib/jets/controller/params.rb +117 -0
- data/lib/jets/controller/rack/adapter.rb +94 -0
- data/lib/jets/controller/rack/env.rb +122 -0
- data/lib/jets/controller/redirection.rb +51 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
- data/lib/jets/controller/rendering.rb +96 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +34 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/core.rb +157 -0
- data/lib/jets/core_ext/bundler.rb +7 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv/show.rb +11 -0
- data/lib/jets/dotenv/ssm.rb +64 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
- data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -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/generator.rb +112 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
- data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -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 +33 -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 +52 -0
- data/lib/jets/job/base.rb +49 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +67 -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/dsl.rb +40 -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 +404 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +39 -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/source.rb +21 -0
- data/lib/jets/mega/request.rb +163 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +53 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/naming.rb +63 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/rails/action_controller.rb +13 -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/migration_checker.rb +34 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
- data/lib/jets/overrides/rails/url_helper.rb +88 -0
- data/lib/jets/overrides/rails.rb +6 -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/poly_fun.rb +73 -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/api_gateway/authorizer.rb +82 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +49 -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 +80 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
- data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
- data/lib/jets/resource/api_gateway/method.rb +102 -0
- data/lib/jets/resource/api_gateway/resource.rb +82 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +64 -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 +58 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
- data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
- data/lib/jets/resource/child_stack/api_resource.rb +54 -0
- data/lib/jets/resource/child_stack/app_class.rb +149 -0
- data/lib/jets/resource/child_stack/authorizer.rb +40 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
- data/lib/jets/resource/child_stack/shared.rb +85 -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/environment.rb +62 -0
- data/lib/jets/resource/lambda/function.rb +221 -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 +98 -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/resource.rb +71 -0
- data/lib/jets/router/dsl/mount.rb +13 -0
- data/lib/jets/router/dsl.rb +144 -0
- data/lib/jets/router/error.rb +4 -0
- data/lib/jets/router/finder.rb +47 -0
- data/lib/jets/router/helpers/core_helper.rb +27 -0
- data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
- data/lib/jets/router/helpers.rb +4 -0
- data/lib/jets/router/matcher.rb +81 -0
- data/lib/jets/router/method_creator/code.rb +99 -0
- data/lib/jets/router/method_creator/edit.rb +12 -0
- data/lib/jets/router/method_creator/generic.rb +11 -0
- data/lib/jets/router/method_creator/index.rb +48 -0
- data/lib/jets/router/method_creator/new.rb +12 -0
- data/lib/jets/router/method_creator/root.rb +15 -0
- data/lib/jets/router/method_creator/show.rb +12 -0
- data/lib/jets/router/method_creator.rb +50 -0
- data/lib/jets/router/resources/base.rb +7 -0
- data/lib/jets/router/resources/filter.rb +15 -0
- data/lib/jets/router/resources/options.rb +13 -0
- data/lib/jets/router/route/authorizer.rb +57 -0
- data/lib/jets/router/route.rb +230 -0
- data/lib/jets/router/scope.rb +95 -0
- data/lib/jets/router/util.rb +38 -0
- data/lib/jets/router.rb +180 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +109 -0
- data/lib/jets/spec_helpers/controllers/params.rb +8 -0
- data/lib/jets/spec_helpers/controllers/request.rb +101 -0
- data/lib/jets/spec_helpers/controllers/response.rb +10 -0
- data/lib/jets/spec_helpers/controllers.rb +47 -0
- data/lib/jets/spec_helpers/fixtures.rb +11 -0
- data/lib/jets/spec_helpers.rb +21 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends/item.rb +26 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main/dsl/base.rb +63 -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/kinesis.rb +15 -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/main/dsl.rb +17 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/output.rb +35 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/tmp_loader.rb +53 -0
- data/lib/jets/turbine.rb +41 -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/application.rb +5 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +30 -0
- data/lib/jets/turbo.rb +56 -0
- data/lib/jets/util.rb +40 -0
- data/lib/jets/version.rb +3 -0
- data/lib/jets.rb +31 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1105 -0
|
@@ -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,109 @@
|
|
|
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
|
+
# Mimic task to grab base_replacements, namely namespace.
|
|
74
|
+
# Do not actually use the task to create a Lambda function for managed rules.
|
|
75
|
+
# Only using the task for base_replacements.
|
|
76
|
+
resources = [definition]
|
|
77
|
+
meth = name
|
|
78
|
+
task = Jets::Lambda::Task.new(self.name, meth,
|
|
79
|
+
resources: resources,
|
|
80
|
+
replacements: replacements(meth))
|
|
81
|
+
all_managed_rules[name] = { definition: definition, replacements: task.replacements }
|
|
82
|
+
clear_properties
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Override lambda/dsl.rb to add config_rule_name also
|
|
86
|
+
def replacements(meth)
|
|
87
|
+
name_without_rule = self.name.underscore.gsub(/_rule$/,'')
|
|
88
|
+
config_rule_name = "#{name_without_rule}_#{meth}".dasherize
|
|
89
|
+
{
|
|
90
|
+
config_rule_name: config_rule_name
|
|
91
|
+
}
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# AWS managed rules are not actual Lambda functions and require their own storage.
|
|
95
|
+
def all_managed_rules
|
|
96
|
+
@all_managed_rules ||= ActiveSupport::OrderedHash.new
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def managed_rules
|
|
100
|
+
all_managed_rules.values
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Override Lambda::Dsl.build? to account for possible managed_rules
|
|
104
|
+
def build?
|
|
105
|
+
!tasks.empty? || !managed_rules.empty?
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
module Jets::SpecHelpers::Controllers
|
|
2
|
+
class Params
|
|
3
|
+
attr_accessor :path_params, :body_params, :query_params
|
|
4
|
+
def initialize(path_params={}, body_params={}, query_params={})
|
|
5
|
+
@path_params, @body_params, @query_params = path_params, body_params, query_params
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
module Jets::SpecHelpers::Controllers
|
|
2
|
+
class Request
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_accessor :method, :path, :headers, :params
|
|
6
|
+
def initialize(method, path, headers={}, params={})
|
|
7
|
+
@method, @path, @headers, @params = method, path, headers, params
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def event
|
|
11
|
+
json = {}
|
|
12
|
+
id_params = route.path.scan(%r{:([^/]+)}).flatten
|
|
13
|
+
expanded_path = escape_path(path)
|
|
14
|
+
path_parameters = {}
|
|
15
|
+
|
|
16
|
+
id_params.each do |id_param|
|
|
17
|
+
raise "missing param: :#{id_param}" unless path_params.include? id_param.to_sym
|
|
18
|
+
|
|
19
|
+
path_param_value = path_params[id_param.to_sym]
|
|
20
|
+
raise "Path param :#{id_param} value cannot be blank" if path_param_value.blank?
|
|
21
|
+
|
|
22
|
+
escaped_path_param_value = CGI.escape(path_param_value.to_s)
|
|
23
|
+
expanded_path.gsub!(":#{id_param}", escaped_path_param_value)
|
|
24
|
+
path_parameters.deep_merge!(id_param => escaped_path_param_value)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
json['resource'] = escape_path(path)
|
|
28
|
+
json['path'] = expanded_path
|
|
29
|
+
json['httpMethod'] = method.to_s.upcase
|
|
30
|
+
json['pathParameters'] = path_parameters
|
|
31
|
+
json['headers'] = (headers || {}).stringify_keys
|
|
32
|
+
|
|
33
|
+
if method != :get
|
|
34
|
+
json['headers']['Content-Type'] ||= 'application/x-www-form-urlencoded'
|
|
35
|
+
|
|
36
|
+
if params.body_params.is_a? String
|
|
37
|
+
body = params.body_params
|
|
38
|
+
json['headers']['Content-Length'] ||= body.length.to_s
|
|
39
|
+
else
|
|
40
|
+
body = Rack::Multipart.build_multipart(params.body_params)
|
|
41
|
+
|
|
42
|
+
if body
|
|
43
|
+
json['headers']['Content-Length'] ||= body.length.to_s
|
|
44
|
+
json['headers']['Content-Type'] = "multipart/form-data; boundary=#{Rack::Multipart::MULTIPART_BOUNDARY}"
|
|
45
|
+
else
|
|
46
|
+
body = Rack::Utils.build_nested_query(params.body_params)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
json['body'] = Base64.encode64(body)
|
|
51
|
+
json['isBase64Encoded'] = true
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
params.query_params.each do |key, value|
|
|
55
|
+
json['queryStringParameters'] ||= {}
|
|
56
|
+
json['queryStringParameters'][key.to_s] = value.deep_dup
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
json
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def path_params
|
|
63
|
+
params.path_params.reverse_merge(extract_parameters)
|
|
64
|
+
end
|
|
65
|
+
memoize :path_params
|
|
66
|
+
|
|
67
|
+
def extract_parameters
|
|
68
|
+
route.extract_parameters(normalized_path).symbolize_keys
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def normalized_path
|
|
72
|
+
path = self.path
|
|
73
|
+
path = path[0..-2] if path.end_with? '/'
|
|
74
|
+
path = path[1..-1] if path.start_with? '/'
|
|
75
|
+
path
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def route
|
|
79
|
+
Jets::Router::Finder.new(normalized_path, method).run
|
|
80
|
+
end
|
|
81
|
+
memoize :route
|
|
82
|
+
|
|
83
|
+
def dispatch!
|
|
84
|
+
klass = Object.const_get(route.controller_name)
|
|
85
|
+
controller = klass.new(event, {}, route.action_name)
|
|
86
|
+
response = controller.process! # response is API Gateway Hash
|
|
87
|
+
|
|
88
|
+
unless response['statusCode'] && response['body']
|
|
89
|
+
raise "Expected response to an API Gateway Hash Structure. Are you rendering correctly?"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
Response.new(response) # converts APIGW hash to prettier object
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
private
|
|
96
|
+
|
|
97
|
+
def escape_path(path)
|
|
98
|
+
path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Jets::SpecHelpers
|
|
2
|
+
module Controllers
|
|
3
|
+
include Jets::Router::Helpers # must be at the top because response is overridden later
|
|
4
|
+
|
|
5
|
+
attr_reader :response
|
|
6
|
+
# Note: caching it like this instead of within the initialize results in the headers not being cached
|
|
7
|
+
# See: https://community.rubyonjets.com/t/is-jets-spechelpers-controllers-request-being-cached/244/2
|
|
8
|
+
def request
|
|
9
|
+
@request ||= Request.new(:get, '/', {}, Params.new)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
rest_methods = %w[get post put patch delete]
|
|
13
|
+
rest_methods.each do |meth|
|
|
14
|
+
define_method(meth) do |path, **params|
|
|
15
|
+
http_call(method: meth, path: path, **params)
|
|
16
|
+
end
|
|
17
|
+
# Example:
|
|
18
|
+
# def get(path, **params)
|
|
19
|
+
# http_call(method: :get, path: path, **params)
|
|
20
|
+
# end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def http_call(method:, path:, **params)
|
|
24
|
+
request.method = method.to_sym
|
|
25
|
+
request.path = path
|
|
26
|
+
request.headers.deep_merge!(params.delete(:headers) || {})
|
|
27
|
+
|
|
28
|
+
request.params.query_params = params.delete(:query)
|
|
29
|
+
|
|
30
|
+
if request.method == :get
|
|
31
|
+
request.params.body_params = {}
|
|
32
|
+
request.params.query_params ||= params.delete(:params)
|
|
33
|
+
request.params.query_params ||= params
|
|
34
|
+
else
|
|
35
|
+
request.params.body_params = params.delete(:body)
|
|
36
|
+
request.params.body_params ||= params.delete(:params)
|
|
37
|
+
request.params.body_params ||= params
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
request.params.query_params ||= {}
|
|
41
|
+
|
|
42
|
+
request.params.path_params = params
|
|
43
|
+
|
|
44
|
+
@response = request.dispatch!
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'base64'
|
|
4
|
+
|
|
5
|
+
module Jets
|
|
6
|
+
module SpecHelpers
|
|
7
|
+
include Fixtures
|
|
8
|
+
include Controllers
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
if File.exist?("#{Jets.root}/config/database.yml") && !ENV["SKIP_MIGRATION_CHECK"]
|
|
13
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = "#{Jets.root}/db"
|
|
14
|
+
ActiveRecord::Migration.extend ActiveRecord::MigrationChecker
|
|
15
|
+
ActiveRecord::Migration.prepare_test_db
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
require "rspec"
|
|
19
|
+
RSpec.configure do |c|
|
|
20
|
+
c.include Jets::SpecHelpers
|
|
21
|
+
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
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Class that include Definition should implement:
|
|
2
|
+
#
|
|
3
|
+
# template - method should use @definition to build a CloudFormation template section
|
|
4
|
+
#
|
|
5
|
+
class Jets::Stack
|
|
6
|
+
module Definition
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
# Example of usage that leads here:
|
|
10
|
+
#
|
|
11
|
+
# Parameter.new(self, *definition).register
|
|
12
|
+
#
|
|
13
|
+
# Which is defined in parameter/dsl.rb
|
|
14
|
+
#
|
|
15
|
+
# Example subclass: ExampleStack < Jets::Stack
|
|
16
|
+
def initialize(subclass, *definition)
|
|
17
|
+
@subclass = subclass.to_s # important to use to_s, dont want the object as keys in @definitions
|
|
18
|
+
@definition = definition.flatten
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def register
|
|
22
|
+
self.class.register(@subclass, *@definition)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def camelize(attributes)
|
|
26
|
+
Jets::Camelizer.transform(attributes)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class_methods do
|
|
30
|
+
def register(subclass, *definition)
|
|
31
|
+
@definitions ||= {}
|
|
32
|
+
@definitions[subclass.to_s] ||= []
|
|
33
|
+
# Create instance of the CloudFormation section class and register it. Examples:
|
|
34
|
+
# Stack::Parameter.new(definition)
|
|
35
|
+
# Stack::Resource.new(definition)
|
|
36
|
+
# Stack::Output.new(definition)
|
|
37
|
+
@definitions[subclass.to_s] << new(subclass, definition)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def definitions(subclass)
|
|
41
|
+
@definitions ||= {}
|
|
42
|
+
@definitions[subclass.to_s]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def all_definitions
|
|
46
|
+
@definitions
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Usage examples:
|
|
2
|
+
#
|
|
3
|
+
# Jets::Stack::Depends::Item.new(:custom)
|
|
4
|
+
# Jets::Stack::Depends::Item.new(:custom, :alert)
|
|
5
|
+
# Jets::Stack::Depends::Item.new(:custom, class_prefix: true)
|
|
6
|
+
# Jets::Stack::Depends::Item.new(:custom, :alert, class_prefix: true)
|
|
7
|
+
#
|
|
8
|
+
# The Jets::Stack::Depends#params uses the options to determine if the class prefix should be added.
|
|
9
|
+
#
|
|
10
|
+
class Jets::Stack::Depends
|
|
11
|
+
class Item
|
|
12
|
+
attr_reader :stack, :options
|
|
13
|
+
def initialize(stack, options={})
|
|
14
|
+
@stack = stack # should be underscore format. IE: admin/posts_controller
|
|
15
|
+
@options = options
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def logical_id
|
|
19
|
+
@stack.to_s.gsub('::','').gsub('/','_').camelize
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def class_name
|
|
23
|
+
@stack.to_s.camelize
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Depends
|
|
3
|
+
def initialize(items)
|
|
4
|
+
@items = items # Jets::Stack::Depends::Item - has stack and options properties
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def params
|
|
8
|
+
result = {}
|
|
9
|
+
@items.each do |item|
|
|
10
|
+
class_name = item.class_name
|
|
11
|
+
dependency_outputs(class_name).each do |output|
|
|
12
|
+
dependency_class = class_name.to_s.camelize
|
|
13
|
+
output_key = item.options[:class_prefix] ?
|
|
14
|
+
"#{dependency_class}#{output}" : # already camelized
|
|
15
|
+
output
|
|
16
|
+
|
|
17
|
+
output_value = "!GetAtt #{dependency_class}.Outputs.#{output}"
|
|
18
|
+
result[output_key] = output_value
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
result
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Returns CloudFormation template logical ids
|
|
25
|
+
def stack_list
|
|
26
|
+
@items.map(&:logical_id)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
def dependency_outputs(class_name)
|
|
31
|
+
class_name.to_s.camelize.constantize.output_keys
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
class Jets::Stack
|
|
2
|
+
class Function
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :template
|
|
6
|
+
def initialize(template)
|
|
7
|
+
@template = template
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def meth
|
|
11
|
+
attributes = @template.values.first
|
|
12
|
+
handler = attributes['Properties']['Handler']
|
|
13
|
+
handler.split('.').last
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def lang
|
|
17
|
+
return if internal?
|
|
18
|
+
|
|
19
|
+
if source_file
|
|
20
|
+
# Detect language from file extension
|
|
21
|
+
ext = File.extname(source_file).sub(/^\./,'').to_sym
|
|
22
|
+
lang_map[ext]
|
|
23
|
+
else
|
|
24
|
+
puts "WARN: Unable to find a source file for function. Looked at: #{search_expression}".color(:yellow)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def lang_map
|
|
29
|
+
{
|
|
30
|
+
rb: :ruby,
|
|
31
|
+
py: :python,
|
|
32
|
+
js: :node,
|
|
33
|
+
}
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def source_file
|
|
37
|
+
Dir.glob(search_expression).first
|
|
38
|
+
end
|
|
39
|
+
memoize :source_file
|
|
40
|
+
|
|
41
|
+
def search_expression
|
|
42
|
+
base_search_expression.sub('handlers/shared/', "#{Jets.root}/app/shared/")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def internal_search_expression
|
|
46
|
+
internal = File.expand_path("../internal", File.dirname(__FILE__))
|
|
47
|
+
base_search_expression.sub('handlers/shared/', "#{internal}/app/shared/")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def base_search_expression
|
|
51
|
+
attributes = @template.values.first
|
|
52
|
+
handler = attributes['Properties']['Handler']
|
|
53
|
+
handler.split('.')[0..-2].join('.') + '.*' # search_expression
|
|
54
|
+
# Example: handlers/shared/functions/jets/s3_bucket_config.*
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Internal flag is mainly used to disable WARN messages
|
|
58
|
+
def internal?
|
|
59
|
+
!!Dir.glob(internal_search_expression).first
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Relative path
|
|
63
|
+
# app/shared/functions/kevin.py => handlers/shared/functions/kevin.py
|
|
64
|
+
def handler_dest
|
|
65
|
+
return unless source_file
|
|
66
|
+
source_file.sub(%r{.*/app/}, "handlers/")
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Jets::Stack::Main::Dsl
|
|
2
|
+
module Base
|
|
3
|
+
def ref(value)
|
|
4
|
+
"!Ref #{value.to_s.camelize}"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# Examples:
|
|
8
|
+
# get_attr("logical_id.attribute")
|
|
9
|
+
# get_attr("logical_id", "attribute")
|
|
10
|
+
# get_attr(["logical_id", "attribute"])
|
|
11
|
+
def get_att(*item)
|
|
12
|
+
item = item.flatten
|
|
13
|
+
options = item.last.is_a?(Hash) ? item.pop : {}
|
|
14
|
+
|
|
15
|
+
# list is an Array
|
|
16
|
+
list = if item.size == 1
|
|
17
|
+
item.first.split('.')
|
|
18
|
+
else
|
|
19
|
+
item
|
|
20
|
+
end
|
|
21
|
+
list.map! { |s| s.to_s.camelize } unless options[:autoformat] == false
|
|
22
|
+
{ "Fn::GetAtt" => list }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def logical_id(value)
|
|
26
|
+
value.to_s.camelize
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def depends_on(*stacks)
|
|
30
|
+
if stacks == []
|
|
31
|
+
@depends_on
|
|
32
|
+
else
|
|
33
|
+
@depends_on ||= []
|
|
34
|
+
@depends_on += stacks
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Due to `if Jets::Stack.has_resources?` check early on in the bootstraping process
|
|
39
|
+
# The code has not been built at that point. So we use a placeholder and will replace
|
|
40
|
+
# the placeholder as part of the cfn template build process after the code has been built
|
|
41
|
+
# and the code_s3_key with md5 is available.
|
|
42
|
+
def code_s3_key
|
|
43
|
+
"code_s3_key_placeholder"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# resource(:hello,
|
|
47
|
+
# function_name: "hello",
|
|
48
|
+
# code: {
|
|
49
|
+
# s3_bucket: "!Ref S3Bucket",
|
|
50
|
+
# s3_key: code_s3_key
|
|
51
|
+
# },
|
|
52
|
+
# description: "Hello world",
|
|
53
|
+
# handler: handler_function("hello.lambda_handler"),
|
|
54
|
+
# memory_size: 128,
|
|
55
|
+
# role: "!Ref IamRole",
|
|
56
|
+
# runtime: "python3.6",
|
|
57
|
+
# timeout: 20,
|
|
58
|
+
# )
|
|
59
|
+
def handler(name)
|
|
60
|
+
"handlers/shared/functions/#{name}" # generated handler
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module Jets::Stack::Main::Dsl
|
|
2
|
+
module Cloudwatch
|
|
3
|
+
def cloudwatch_alarm(id, hash={})
|
|
4
|
+
if hash.key?(:depends_on)
|
|
5
|
+
attributes = hash # leave structure alone and add type only
|
|
6
|
+
attributes[:type] = "AWS::CloudWatch::Alarm"
|
|
7
|
+
else
|
|
8
|
+
# the attributes are properties
|
|
9
|
+
properties = hash
|
|
10
|
+
attributes = {
|
|
11
|
+
type: "AWS::CloudWatch::Alarm",
|
|
12
|
+
properties: properties,
|
|
13
|
+
}
|
|
14
|
+
end
|
|
15
|
+
resource(id, attributes)
|
|
16
|
+
output(id)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|