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,121 @@
|
|
|
1
|
+
# Detects path variable collisions
|
|
2
|
+
class Jets::Resource::ApiGateway::RestApi::Routes
|
|
3
|
+
class Collision
|
|
4
|
+
attr_reader :collisions
|
|
5
|
+
def initialize
|
|
6
|
+
@collisions = []
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def collision?(paths)
|
|
10
|
+
paths = paths_with_variables(paths)
|
|
11
|
+
parents = variable_parents(paths)
|
|
12
|
+
|
|
13
|
+
collide = false
|
|
14
|
+
parents.each do |parent|
|
|
15
|
+
collide ||= variable_collision_exists?(parent, paths)
|
|
16
|
+
end
|
|
17
|
+
collide
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def exception
|
|
21
|
+
VariableException.new(collision_message)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def collision_message
|
|
25
|
+
<<~EOL
|
|
26
|
+
There are routes with sibling variables under the same parent that collide.
|
|
27
|
+
|
|
28
|
+
Collisions:
|
|
29
|
+
#{@collisions.join("\n ")}
|
|
30
|
+
|
|
31
|
+
API Gateway only allows one unique variable path You must use the same variable name within
|
|
32
|
+
the same parent route path.
|
|
33
|
+
Example: /posts/:id and /posts/:post_id/reveal should both be /posts/:id and /posts/:id/reveal.
|
|
34
|
+
|
|
35
|
+
Please check your `config/routes.rb` and remove the colliding routes.
|
|
36
|
+
More info: http://rubyonjets.com/docs/considerations/api-gateway/
|
|
37
|
+
EOL
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def variable_collision_exists?(parent, paths)
|
|
41
|
+
paths = paths_with_variables(paths)
|
|
42
|
+
variables = parent_variables(parent, paths)
|
|
43
|
+
collide = variables.uniq.size > 1
|
|
44
|
+
register_collision(parent, variables) if collide
|
|
45
|
+
collide
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# register collision for later display
|
|
49
|
+
# We don't register the full path but this might be more helpful.
|
|
50
|
+
def register_collision(parent, variables)
|
|
51
|
+
return unless variables.uniq.size # check again just in case
|
|
52
|
+
|
|
53
|
+
variables.each do |v|
|
|
54
|
+
@collisions << "#{parent}/#{v}"
|
|
55
|
+
end
|
|
56
|
+
@collisions.uniq!
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def parent_variables(parent, paths)
|
|
60
|
+
paths = paths.select do |path|
|
|
61
|
+
parent?(parent, path)
|
|
62
|
+
end
|
|
63
|
+
paths.map do |path|
|
|
64
|
+
path.sub("#{parent}/",'').gsub(%r{/.*},'')
|
|
65
|
+
end.select { |x| x =~ /^:/ }.uniq.sort
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def parent?(parent, path)
|
|
69
|
+
return false if parent == path
|
|
70
|
+
|
|
71
|
+
parent_parts = parent.split('/')
|
|
72
|
+
path_parts = path.split('/')
|
|
73
|
+
|
|
74
|
+
n = parent_parts.size-1
|
|
75
|
+
parent_parts[0..n] == path_parts[0..n]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def direct_parent?(parent, path)
|
|
79
|
+
leaf = variable_leaf(path)
|
|
80
|
+
leaf_parent = leaf.split('/')[0..-2].join('/')
|
|
81
|
+
parent == leaf_parent
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def variable_parents(paths)
|
|
85
|
+
parents = []
|
|
86
|
+
paths = paths_with_variables(paths)
|
|
87
|
+
paths.each do |path|
|
|
88
|
+
parents << variable_parent(path)
|
|
89
|
+
end
|
|
90
|
+
parents.uniq.sort
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# Strips the path down until only the leaf node part is a variable
|
|
94
|
+
# Example: users/:user_id/posts/:post_id/edit
|
|
95
|
+
# Returns: users/:user_id/posts
|
|
96
|
+
def variable_parent(path)
|
|
97
|
+
path = variable_leaf(path)
|
|
98
|
+
# drop last variable to leave behind the parent
|
|
99
|
+
path.split('/')[0..-2].join('/')
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Strips the path down until only the leaf node part is a variable
|
|
103
|
+
# Example: users/:user_id/posts/:post_id/edit
|
|
104
|
+
# Returns: users/:user_id/posts
|
|
105
|
+
def variable_leaf(path)
|
|
106
|
+
return '' unless path.include?(':')
|
|
107
|
+
|
|
108
|
+
parts = path.split('/')
|
|
109
|
+
is_variable = parts.last.include?(':')
|
|
110
|
+
until is_variable
|
|
111
|
+
parts.pop
|
|
112
|
+
is_variable = parts.last.include?(':')
|
|
113
|
+
end
|
|
114
|
+
parts[0..-1].join('/') # parent
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def paths_with_variables(paths)
|
|
118
|
+
paths.select { |p| p.include?(':') }.uniq
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
module Jets::Resource::ApiGateway
|
|
2
|
+
class RestApi < Jets::Resource::Base
|
|
3
|
+
def definition
|
|
4
|
+
properties = {
|
|
5
|
+
name: Jets::Naming.gateway_api_name,
|
|
6
|
+
endpoint_configuration: { types: endpoint_types }
|
|
7
|
+
}
|
|
8
|
+
properties[:binary_media_types] = binary_media_types if binary_media_types
|
|
9
|
+
properties[:policy] = endpoint_policy if endpoint_policy
|
|
10
|
+
|
|
11
|
+
{
|
|
12
|
+
internal_logical_id => {
|
|
13
|
+
type: "AWS::ApiGateway::RestApi",
|
|
14
|
+
properties: properties
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def internal_logical_id
|
|
20
|
+
self.class.logical_id(true)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.logical_id(internal=false)
|
|
24
|
+
internal ? internal_logical_id : "RestApi"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@@internal_logical_id = nil
|
|
28
|
+
def self.internal_logical_id
|
|
29
|
+
@@internal_logical_id ||= LogicalId.new.get
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def outputs
|
|
33
|
+
{
|
|
34
|
+
"RestApi" => "!Ref #{internal_logical_id}",
|
|
35
|
+
"Region" => "!Ref AWS::Region",
|
|
36
|
+
"RootResourceId" => "!GetAtt #{internal_logical_id}.RootResourceId",
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def endpoint_types
|
|
41
|
+
[Jets.config.api.endpoint_type].flatten
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# TODO: Looks like there's a bug with CloudFormation. On an API Gateway update
|
|
45
|
+
# we need to pass in the escaped version: multipart~1form-data
|
|
46
|
+
# On a brand new API Gateway creation, we need to pass in the unescaped form:
|
|
47
|
+
# multipart/form-data
|
|
48
|
+
# We are handling this with a full API Gateway replacement instead because it
|
|
49
|
+
# can be generalized more easily.
|
|
50
|
+
def binary_media_types
|
|
51
|
+
types = Jets.config.api.binary_media_types
|
|
52
|
+
return nil if types.nil? || types.empty?
|
|
53
|
+
|
|
54
|
+
[types].flatten
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def endpoint_policy
|
|
58
|
+
endpoint_policy = Jets.config.api.endpoint_policy
|
|
59
|
+
return nil if endpoint_policy.nil? || endpoint_policy.empty?
|
|
60
|
+
|
|
61
|
+
endpoint_policy
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Does not do full expansion, mainly a container that holds the definition and
|
|
2
|
+
# standardizes it without camelizing it.
|
|
3
|
+
class Jets::Resource
|
|
4
|
+
class Associated
|
|
5
|
+
extend Memoist
|
|
6
|
+
|
|
7
|
+
attr_reader :definition
|
|
8
|
+
attr_accessor :multiple_resources
|
|
9
|
+
def initialize(*definition)
|
|
10
|
+
@definition = definition.flatten
|
|
11
|
+
# Some associated resources require multiple resources for a single Lambda function. For
|
|
12
|
+
# example `sqs_event` can create a `SQS::Queue` and `Lambda::EventSourceMapping`. We set
|
|
13
|
+
# a `multiple` flag so `add_logical_id_counter` can use it to avoid adding counter ids to
|
|
14
|
+
# these type of resources. The `multiple` flag allows us to handle both:
|
|
15
|
+
#
|
|
16
|
+
# 1. Associated resources that contain multiple resources for a single Lambda function
|
|
17
|
+
# 2. A single Lambda function with multiple events. In this case, a counter is added
|
|
18
|
+
#
|
|
19
|
+
# Setting `multiple` to true means the counter id will not be added.
|
|
20
|
+
@multiple_resources = false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def logical_id
|
|
24
|
+
standardized.keys.first
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def attributes
|
|
28
|
+
standardized.values.first
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def standardized
|
|
32
|
+
standardizer = Standardizer.new(definition)
|
|
33
|
+
standardizer.standarize(definition) # doesnt camelize keys yet
|
|
34
|
+
end
|
|
35
|
+
memoize :standardized
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Classes that inherit from this method should NOT define and override:
|
|
2
|
+
#
|
|
3
|
+
# logical_id
|
|
4
|
+
# type
|
|
5
|
+
# properties
|
|
6
|
+
# attributes
|
|
7
|
+
#
|
|
8
|
+
# These are computed methods that derive their values from the resource definition itself.
|
|
9
|
+
# Overriding these methods will remove the computed logical which handles things
|
|
10
|
+
# like camelizing and replacements.
|
|
11
|
+
#
|
|
12
|
+
# The implementation of these methods are in `Jets::Resource`.
|
|
13
|
+
class Jets::Resource
|
|
14
|
+
class Base
|
|
15
|
+
extend Memoist
|
|
16
|
+
delegate :logical_id, :type, :properties, :attributes, :parameters, :outputs,
|
|
17
|
+
to: :resource
|
|
18
|
+
|
|
19
|
+
def resource
|
|
20
|
+
Jets::Resource.new(definition, replacements)
|
|
21
|
+
end
|
|
22
|
+
memoize :resource
|
|
23
|
+
|
|
24
|
+
def replacements
|
|
25
|
+
@replacements || {}
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class ApiDeployment < Base
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
deployment_id => {
|
|
11
|
+
type: "AWS::CloudFormation::Stack",
|
|
12
|
+
properties: {
|
|
13
|
+
template_url: template_url,
|
|
14
|
+
parameters: parameters,
|
|
15
|
+
},
|
|
16
|
+
depends_on: depends_on,
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def parameters
|
|
22
|
+
p = {
|
|
23
|
+
GemLayer: "!Ref GemLayer",
|
|
24
|
+
IamRole: "!GetAtt IamRole.Arn",
|
|
25
|
+
RestApi: "!GetAtt ApiGateway.Outputs.RestApi",
|
|
26
|
+
S3Bucket: "!Ref S3Bucket",
|
|
27
|
+
}
|
|
28
|
+
p[:DomainName] = "!GetAtt ApiGateway.Outputs.DomainName" if Jets.custom_domain?
|
|
29
|
+
p[:BasePath] = Jets.config.domain.base_path unless Jets.config.domain.base_path.nil?
|
|
30
|
+
p
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def depends_on
|
|
34
|
+
expression = "#{Jets::Naming.template_path_prefix}-*_controller*"
|
|
35
|
+
controller_logical_ids = []
|
|
36
|
+
Dir.glob(expression).each do |path|
|
|
37
|
+
next unless File.file?(path)
|
|
38
|
+
|
|
39
|
+
# map the path to a camelized logical_id. Example:
|
|
40
|
+
# /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
|
|
41
|
+
# PostsController
|
|
42
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-app-")
|
|
43
|
+
controller_name = path.sub(regexp, '').sub('.yml', '')
|
|
44
|
+
controller_logical_id = controller_name.underscore.camelize
|
|
45
|
+
controller_logical_ids << controller_logical_id
|
|
46
|
+
end
|
|
47
|
+
controller_logical_ids
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def deployment_id
|
|
51
|
+
Jets::Resource::ApiGateway::Deployment.logical_id
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def template_filename
|
|
55
|
+
"#{Jets.config.project_namespace}-api-deployment.yml"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class ApiGateway < Base
|
|
8
|
+
def definition
|
|
9
|
+
{
|
|
10
|
+
api_gateway: {
|
|
11
|
+
type: "AWS::CloudFormation::Stack",
|
|
12
|
+
properties: {
|
|
13
|
+
template_url: template_url,
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def template_filename
|
|
20
|
+
"#{Jets.config.project_namespace}-api-gateway.yml"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Jets::Resource::ChildStack::ApiResource
|
|
2
|
+
# Find the ApiResource Page that contains the AWS::ApiGateway::Resource
|
|
3
|
+
# Returns: logical id of ApiResource Page
|
|
4
|
+
class Page
|
|
5
|
+
def self.logical_id(parameter)
|
|
6
|
+
expression = "#{Jets::Naming.template_path_prefix}-api-resources-*"
|
|
7
|
+
# IE: path: #{Jets.build_root}/templates/demo-dev-2-api-resources-1.yml"
|
|
8
|
+
template_paths = Dir.glob(expression).sort.to_a
|
|
9
|
+
found_template = template_paths.detect do |path|
|
|
10
|
+
next unless File.file?(path)
|
|
11
|
+
|
|
12
|
+
template = Jets::Cfn::BuiltTemplate.get(path)
|
|
13
|
+
template['Outputs'].keys.include?(parameter)
|
|
14
|
+
end
|
|
15
|
+
md = found_template.match(/-(api-resources-\d+)/)
|
|
16
|
+
|
|
17
|
+
md[1].underscore.camelize # IE: ApiResources1
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class ApiResource < Base
|
|
8
|
+
def initialize(*)
|
|
9
|
+
super
|
|
10
|
+
@page = @options[:page]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def definition
|
|
14
|
+
{
|
|
15
|
+
"api_resources_#{@page}" => {
|
|
16
|
+
type: "AWS::CloudFormation::Stack",
|
|
17
|
+
# depends_on: "ApiGateway", # CloudFormation seems to be smart enough
|
|
18
|
+
properties: {
|
|
19
|
+
template_url: template_url,
|
|
20
|
+
parameters: parameters,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def parameters
|
|
27
|
+
params = {}
|
|
28
|
+
# Since dont have all the info required.
|
|
29
|
+
# Read the template back to find the parameters required.
|
|
30
|
+
# Actually might be easier to rationalize this approach.
|
|
31
|
+
template_path = Jets::Naming.api_resources_template_path(@page)
|
|
32
|
+
template = Jets::Cfn::BuiltTemplate.get(template_path)
|
|
33
|
+
template['Parameters'].keys.each do |p|
|
|
34
|
+
case p
|
|
35
|
+
when "RestApi"
|
|
36
|
+
params[p] = "!GetAtt ApiGateway.Outputs.RestApi"
|
|
37
|
+
when "RootResourceId"
|
|
38
|
+
params[p] = "!GetAtt ApiGateway.Outputs.RootResourceId"
|
|
39
|
+
else
|
|
40
|
+
params[p] = "!GetAtt #{api_resource_page(p)}.Outputs.#{p}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
params
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def api_resource_page(parameter)
|
|
47
|
+
Page.logical_id(parameter)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def template_filename
|
|
51
|
+
"#{Jets.config.project_namespace}-api-resources-#{@page}.yml"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Implements:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class AppClass < Base
|
|
8
|
+
include CommonParameters
|
|
9
|
+
|
|
10
|
+
def initialize(s3_bucket, options={})
|
|
11
|
+
super
|
|
12
|
+
@path = options[:path]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def definition
|
|
16
|
+
logical_id = app_logical_id
|
|
17
|
+
defintion = {
|
|
18
|
+
logical_id => {
|
|
19
|
+
type: "AWS::CloudFormation::Stack",
|
|
20
|
+
properties: {
|
|
21
|
+
template_url: template_url,
|
|
22
|
+
parameters: parameters,
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
defintion[logical_id][:depends_on] = depends.stack_list if depends
|
|
27
|
+
defintion
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def depends
|
|
31
|
+
return if all_depends_on.empty?
|
|
32
|
+
Jets::Stack::Depends.new(all_depends_on)
|
|
33
|
+
end
|
|
34
|
+
memoize :depends
|
|
35
|
+
|
|
36
|
+
# Always returns an Array, could be empty
|
|
37
|
+
def all_depends_on
|
|
38
|
+
depends_on = current_app_class.depends_on || [] # contains Depends::Items
|
|
39
|
+
stagger_depends_on = @stagger_depends_on || [] # contains Depends::Items
|
|
40
|
+
depends_on + stagger_depends_on
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# For staggering. We're abusing depends_on to slow down the update rate.
|
|
44
|
+
#
|
|
45
|
+
# For this type of depends_on, there are no template parameters or outputs. To use the normal depends at we would
|
|
46
|
+
# have to make app classes adhere to what Jets::Stack::Depends requires. This is mainly dependency_outputs and
|
|
47
|
+
# output_keys for each class right now. It would not be that difficult but is not needed. So we create the
|
|
48
|
+
# Jets::Stack::Depends::Item objects directly.
|
|
49
|
+
def add_stagger_depends_on(stacks)
|
|
50
|
+
stack_names = stacks.map { |s| s.current_app_class.to_s.underscore }
|
|
51
|
+
items = stack_names.map { |name| Jets::Stack::Depends::Item.new(name) }
|
|
52
|
+
@stagger_depends_on ||= []
|
|
53
|
+
@stagger_depends_on += items.flatten
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def parameters
|
|
57
|
+
params = self.class.common_parameters
|
|
58
|
+
params.merge!(controller_params) if controller?
|
|
59
|
+
params.merge!(depends.params) if depends
|
|
60
|
+
params
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.common_parameters
|
|
64
|
+
parameters = {
|
|
65
|
+
IamRole: "!GetAtt IamRole.Arn",
|
|
66
|
+
S3Bucket: "!Ref S3Bucket",
|
|
67
|
+
}
|
|
68
|
+
parameters[:GemLayer] = "!Ref GemLayer" unless Jets.poly_only?
|
|
69
|
+
parameters
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def controller_params
|
|
73
|
+
return {} if Jets::Router.routes.empty?
|
|
74
|
+
|
|
75
|
+
params = {
|
|
76
|
+
RestApi: "!GetAtt ApiGateway.Outputs.RestApi",
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
template_path = @path
|
|
80
|
+
template = Jets::Cfn::BuiltTemplate.get(template_path)
|
|
81
|
+
template['Parameters'].each do |p,data|
|
|
82
|
+
case p
|
|
83
|
+
when /Resource$/ # AWS::ApiGateway::Resource in api-resources templates. IE: demo-dev-api-resources-2.yml
|
|
84
|
+
params[p] = "!GetAtt #{api_resource_page(p)}.Outputs.#{p}"
|
|
85
|
+
when /Authorizer$/ # AWS::ApiGateway::Authorizer in authorizers templates. IE: demo-dev-authorizers.yml
|
|
86
|
+
# Description contains metadata to get the Authorizer logical id
|
|
87
|
+
params[p] = "!GetAtt #{authorizer_output(data["Description"])}"
|
|
88
|
+
when 'RootResourceId'
|
|
89
|
+
params[p] = "!GetAtt ApiGateway.Outputs.RootResourceId"
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
params
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def api_resource_page(parameter)
|
|
96
|
+
ApiResource::Page.logical_id(parameter)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def authorizer_output(desc)
|
|
100
|
+
authorizer_stack, authorizer_logical_id = desc.split('.')
|
|
101
|
+
# IE: MainAuthorizer.Outputs.ProtectAuthorizer
|
|
102
|
+
"#{authorizer_stack}.Outputs.#{authorizer_logical_id}"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def outputs
|
|
106
|
+
if controller? or job?
|
|
107
|
+
{}
|
|
108
|
+
else
|
|
109
|
+
super # { logical_id => "!Ref #{logical_id}" } in base.rb
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def controller?
|
|
114
|
+
@path.include?('_controller.yml')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def job?
|
|
118
|
+
@path.include?('_job.yml')
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def scoped_routes
|
|
122
|
+
@routes ||= Jets::Router.routes.select do |route|
|
|
123
|
+
route.controller_name == current_app_class.to_s
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def current_app_class
|
|
128
|
+
templates_prefix = "#{Jets::Naming.template_path_prefix}-app-"
|
|
129
|
+
@path.sub(templates_prefix, '')
|
|
130
|
+
.sub(/\.yml$/,'')
|
|
131
|
+
.gsub('-','/')
|
|
132
|
+
.camelize
|
|
133
|
+
.constantize
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# map the path to a camelized logical_id. Example:
|
|
137
|
+
# /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
|
|
138
|
+
# PostsController
|
|
139
|
+
def app_logical_id
|
|
140
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-app-")
|
|
141
|
+
controller_name = @path.sub(regexp, '').sub('.yml', '')
|
|
142
|
+
controller_name.underscore.camelize
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def template_filename
|
|
146
|
+
@path
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Jets::Resource::ChildStack
|
|
2
|
+
class Authorizer < Base
|
|
3
|
+
include CommonParameters
|
|
4
|
+
|
|
5
|
+
def initialize(s3_bucket, options={})
|
|
6
|
+
super
|
|
7
|
+
@path = options[:path]
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def definition
|
|
11
|
+
logical_id = authorizer_logical_id
|
|
12
|
+
{
|
|
13
|
+
logical_id => {
|
|
14
|
+
type: "AWS::CloudFormation::Stack",
|
|
15
|
+
properties: {
|
|
16
|
+
template_url: template_url,
|
|
17
|
+
parameters: parameters,
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def parameters
|
|
24
|
+
params = common_parameters
|
|
25
|
+
params[:RestApi] = "!GetAtt ApiGateway.Outputs.RestApi"
|
|
26
|
+
params
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# map the path to a camelized logical_id. IE: ProtectAuthorizer
|
|
30
|
+
def authorizer_logical_id
|
|
31
|
+
regexp = Regexp.new(".*#{Jets.config.project_namespace}-authorizers-")
|
|
32
|
+
authorizer_name = @path.sub(regexp, '').sub('.yml', '')
|
|
33
|
+
authorizer_name.underscore.camelize
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def template_filename
|
|
37
|
+
@path
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Inheriting classes should implement:
|
|
2
|
+
#
|
|
3
|
+
# definition
|
|
4
|
+
# template_filename
|
|
5
|
+
#
|
|
6
|
+
module Jets::Resource::ChildStack
|
|
7
|
+
class Base < Jets::Resource::Base
|
|
8
|
+
def initialize(s3_bucket, options={})
|
|
9
|
+
@s3_bucket = s3_bucket
|
|
10
|
+
@options = options
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def outputs
|
|
14
|
+
{
|
|
15
|
+
logical_id => "!Ref #{logical_id}",
|
|
16
|
+
}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def template_url
|
|
20
|
+
basename = File.basename(template_filename)
|
|
21
|
+
"https://s3.amazonaws.com/#{@s3_bucket}/jets/cfn-templates/#{basename}"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Jets::Resource::ChildStack
|
|
2
|
+
module CommonParameters
|
|
3
|
+
def common_parameters
|
|
4
|
+
parameters = {
|
|
5
|
+
IamRole: "!GetAtt IamRole.Arn",
|
|
6
|
+
S3Bucket: "!Ref S3Bucket",
|
|
7
|
+
}
|
|
8
|
+
parameters[:GemLayer] = "!Ref GemLayer" unless Jets.poly_only?
|
|
9
|
+
parameters
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
extend self
|
|
13
|
+
end
|
|
14
|
+
end
|