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,8 @@
|
|
|
1
|
+
<% @previews.each do |preview| %>
|
|
2
|
+
<h3><%= link_to(preview.preview_name.titleize, "/jets/mailers/#{preview.preview_name}") %></h3>
|
|
3
|
+
<ul>
|
|
4
|
+
<% preview.emails.each do |email| %>
|
|
5
|
+
<li><%= link_to(email, "/jets/mailers/#{preview.preview_name}/#{email}") %></li>
|
|
6
|
+
<% end %>
|
|
7
|
+
</ul>
|
|
8
|
+
<% end %>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Jets
|
|
2
|
+
# Reference: https://github.com/rails/rails/blob/master/actionmailer/lib/action_mailer/railtie.rb
|
|
3
|
+
class Mailer < ::Jets::Turbine
|
|
4
|
+
config.action_mailer = ActiveSupport::OrderedOptions.new
|
|
5
|
+
|
|
6
|
+
initializer "action_mailer.logger" do
|
|
7
|
+
ActiveSupport.on_load(:action_mailer) { self.logger ||= Jets.logger }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
initializer "action_mailer.set_configs" do |app|
|
|
11
|
+
options = app.config.action_mailer
|
|
12
|
+
options.default_url_options ||= {}
|
|
13
|
+
options.default_url_options[:protocol] ||= "https"
|
|
14
|
+
options.show_previews = false if options.show_previews.nil?
|
|
15
|
+
options.preview_path ||= "#{Jets.root}/app/previews" if options.show_previews
|
|
16
|
+
options.view_paths ||= "#{Jets.root}/app/views"
|
|
17
|
+
|
|
18
|
+
# TODO: Dont think Jets sets asset_host the same way
|
|
19
|
+
# make sure readers methods get compiled
|
|
20
|
+
# options.asset_host ||= app.config.asset_host
|
|
21
|
+
# options.relative_url_root ||= app.config.relative_url_root
|
|
22
|
+
|
|
23
|
+
ActiveSupport.on_load(:action_mailer) do
|
|
24
|
+
include AbstractController::UrlFor
|
|
25
|
+
# TODO: figure out rest of the helpers
|
|
26
|
+
# extend ::AbstractController::Railties::RoutesHelpers.with(app.routes, false)
|
|
27
|
+
# include app.routes.mounted_helpers
|
|
28
|
+
|
|
29
|
+
register_interceptors(options.delete(:interceptors))
|
|
30
|
+
register_preview_interceptors(options.delete(:preview_interceptors))
|
|
31
|
+
register_observers(options.delete(:observers))
|
|
32
|
+
|
|
33
|
+
options.each { |k, v| send("#{k}=", v) }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
after_initializer "action_mailer.routes" do |app|
|
|
38
|
+
if app.config.action_mailer.show_previews
|
|
39
|
+
app.routes.draw do
|
|
40
|
+
get "jets/mailers", to: "jets/mailers#index"
|
|
41
|
+
get "jets/mailers/*path", to: "jets/mailers#preview"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
ActiveSupport.on_load :action_controller do
|
|
45
|
+
internal_views = File.expand_path("internal/app/views", File.dirname(__FILE__))
|
|
46
|
+
ActionController::Base.append_view_path(internal_views)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
# Job public methods get turned into Lambda functions.
|
|
4
|
+
#
|
|
5
|
+
# Jets::Job::Base < Jets::Lambda::Functions
|
|
6
|
+
# Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
7
|
+
# So the Jets::Job::Dsl overrides some of the Jets::Lambda::Functions behavior.
|
|
8
|
+
module Jets::Job
|
|
9
|
+
class Base < Jets::Lambda::Functions
|
|
10
|
+
include Dsl
|
|
11
|
+
|
|
12
|
+
# non-DSL methods
|
|
13
|
+
include Helpers::KinesisEventHelper
|
|
14
|
+
include Helpers::LogEventHelper
|
|
15
|
+
include Helpers::S3EventHelper
|
|
16
|
+
|
|
17
|
+
# Tracks bucket each time an s3_event is declared
|
|
18
|
+
# Map of bucket_name => stack_name (nested part)
|
|
19
|
+
cattr_accessor :s3_events # dont want this to be inheritable intentionally
|
|
20
|
+
self.s3_events = {}
|
|
21
|
+
|
|
22
|
+
class << self
|
|
23
|
+
def process(event, context, meth)
|
|
24
|
+
job = new(event, context, meth)
|
|
25
|
+
job.send(meth)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def perform_now(meth, event={}, context={})
|
|
29
|
+
new(event, context, meth).send(meth)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def perform_later(meth, event={}, context={})
|
|
33
|
+
function_name = "#{self.to_s.underscore}-#{meth}"
|
|
34
|
+
call = Jets::Commands::Call.new(function_name, JSON.dump(event), invocation_type: "Event")
|
|
35
|
+
call.run
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/jets/job/dsl.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'active_support'
|
|
2
|
+
require 'active_support/core_ext/class'
|
|
3
|
+
|
|
4
|
+
# Jets::Job::Base < Jets::Lambda::Functions
|
|
5
|
+
# Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
6
|
+
# So the Jets::Job::Dsl overrides some of the Jets::Lambda::Functions behavior.
|
|
7
|
+
#
|
|
8
|
+
# Implements:
|
|
9
|
+
#
|
|
10
|
+
# default_associated_resource_definition
|
|
11
|
+
#
|
|
12
|
+
module Jets::Job::Dsl
|
|
13
|
+
extend ActiveSupport::Concern
|
|
14
|
+
|
|
15
|
+
included do
|
|
16
|
+
class << self
|
|
17
|
+
include Jets::AwsServices
|
|
18
|
+
|
|
19
|
+
include DynamodbEvent
|
|
20
|
+
include EventSourceMapping
|
|
21
|
+
include IotEvent
|
|
22
|
+
include KinesisEvent
|
|
23
|
+
include LogEvent
|
|
24
|
+
include RuleEvent
|
|
25
|
+
include S3Event
|
|
26
|
+
include SnsEvent
|
|
27
|
+
include SqsEvent
|
|
28
|
+
|
|
29
|
+
# Used to provide a little more identifiable event rule auto-descriptions
|
|
30
|
+
class_attribute :rule_counter
|
|
31
|
+
self.rule_counter = 0
|
|
32
|
+
|
|
33
|
+
# TODO: Get rid of default_associated_resource_definition concept.
|
|
34
|
+
# Also gets rid of the need to keep track of running @associated_properties too.
|
|
35
|
+
def default_associated_resource_definition(meth)
|
|
36
|
+
events_rule_definition
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module DynamodbEvent
|
|
3
|
+
def dynamodb_event(table_name, options={})
|
|
4
|
+
stream_arn = full_dynamodb_stream_arn(table_name)
|
|
5
|
+
default_iam_policy = default_dynamodb_stream_policy(stream_arn)
|
|
6
|
+
|
|
7
|
+
# Create iam policy allows access to queue
|
|
8
|
+
# Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
|
|
9
|
+
iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
|
|
10
|
+
iam_policy(iam_policy_props) unless iam_policy_props == :disable
|
|
11
|
+
|
|
12
|
+
props = options # by this time options only has EventSourceMapping properties
|
|
13
|
+
default = {
|
|
14
|
+
event_source_arn: stream_arn,
|
|
15
|
+
starting_position: "TRIM_HORIZON",
|
|
16
|
+
}
|
|
17
|
+
props = default.merge(props)
|
|
18
|
+
|
|
19
|
+
event_source_mapping(props)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# Expands table name to the full stream arn. Example:
|
|
24
|
+
#
|
|
25
|
+
# test-table
|
|
26
|
+
# To:
|
|
27
|
+
# arn:aws:dynamodb:us-west-2:112233445566:table/test-table/stream/2019-02-15T21:41:15.217
|
|
28
|
+
#
|
|
29
|
+
# Note, this does not check if the stream has been disabled.
|
|
30
|
+
def full_dynamodb_stream_arn(table_name)
|
|
31
|
+
return table_name if table_name.include?("arn:aws:dynamodb") # assume full stream arn
|
|
32
|
+
|
|
33
|
+
begin
|
|
34
|
+
resp = dynamodb.describe_table(table_name: table_name)
|
|
35
|
+
rescue Aws::DynamoDB::Errors::ResourceNotFoundException => e
|
|
36
|
+
puts e.message
|
|
37
|
+
puts "ERROR: Was not able to find the DynamoDB table: #{table_name}.".color(:red)
|
|
38
|
+
code_line = caller.grep(%r{/app/jobs}).first
|
|
39
|
+
puts "Please check: #{code_line}"
|
|
40
|
+
puts "Exiting"
|
|
41
|
+
exit 1
|
|
42
|
+
end
|
|
43
|
+
stream_arn = resp.table.latest_stream_arn
|
|
44
|
+
return stream_arn if stream_arn
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def default_dynamodb_stream_policy(stream_name_arn='*')
|
|
48
|
+
stream = {
|
|
49
|
+
action: ["dynamodb:GetRecords",
|
|
50
|
+
"dynamodb:GetShardIterator",
|
|
51
|
+
"dynamodb:DescribeStream",
|
|
52
|
+
"dynamodb:ListStreams"],
|
|
53
|
+
effect: "Allow",
|
|
54
|
+
resource: stream_name_arn,
|
|
55
|
+
}
|
|
56
|
+
table_name_arn = stream_name_arn.gsub(%r{/stream/20.*},'')
|
|
57
|
+
table = {
|
|
58
|
+
action: ["dynamodb:DescribeTable"],
|
|
59
|
+
effect: "Allow",
|
|
60
|
+
resource: table_name_arn,
|
|
61
|
+
}
|
|
62
|
+
[stream, table]
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# SqsEvent uses this module
|
|
2
|
+
module Jets::Job::Dsl
|
|
3
|
+
module EventSourceMapping
|
|
4
|
+
def event_source_mapping(props={})
|
|
5
|
+
r = Jets::Resource::Lambda::EventSourceMapping.new(props)
|
|
6
|
+
with_fresh_properties do
|
|
7
|
+
resource(r.definition) # add associated resource immediately
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module IotEvent
|
|
3
|
+
# The user must at least pass in an SQL statement
|
|
4
|
+
def iot_event(props={})
|
|
5
|
+
if props.is_a?(String) # SQL Statement
|
|
6
|
+
props = {sql: props}
|
|
7
|
+
topic_props = {topic_rule_payload: props}
|
|
8
|
+
elsif props.key?(:topic_rule_payload) # full properties structure
|
|
9
|
+
topic_props = props
|
|
10
|
+
else # just the topic_rule_payload
|
|
11
|
+
topic_props = {topic_rule_payload: props}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
declare_iot_topic(topic_props)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def declare_iot_topic(props={})
|
|
18
|
+
r = Jets::Resource::Iot::TopicRule.new(props)
|
|
19
|
+
with_fresh_properties do
|
|
20
|
+
resource(r.definition) # add associated resource immediately
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module KinesisEvent
|
|
3
|
+
def kinesis_event(stream_name, options={})
|
|
4
|
+
stream_arn = full_kinesis_stream_arn(stream_name)
|
|
5
|
+
default_iam_policy = default_kinesis_stream_policy(stream_arn)
|
|
6
|
+
|
|
7
|
+
# Create iam policy allows access to queue
|
|
8
|
+
# Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
|
|
9
|
+
iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
|
|
10
|
+
iam_policy(iam_policy_props) unless iam_policy_props == :disable
|
|
11
|
+
|
|
12
|
+
props = options # by this time options only has EventSourceMapping properties
|
|
13
|
+
default = {
|
|
14
|
+
event_source_arn: stream_arn,
|
|
15
|
+
starting_position: "LATEST",
|
|
16
|
+
}
|
|
17
|
+
props = default.merge(props)
|
|
18
|
+
|
|
19
|
+
event_source_mapping(props)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Expands table name to the full stream arn. Example:
|
|
23
|
+
#
|
|
24
|
+
# test-table
|
|
25
|
+
# To:
|
|
26
|
+
# arn:aws:kinesis:us-west-2:112233445566:table/test-table/stream/2019-02-15T21:41:15.217
|
|
27
|
+
#
|
|
28
|
+
# Note, this does not check if the stream has been disabled.
|
|
29
|
+
def full_kinesis_stream_arn(stream_name)
|
|
30
|
+
return stream_name if stream_name.include?("arn:aws:kinesis") # assume full stream arn
|
|
31
|
+
|
|
32
|
+
"arn:aws:kinesis:#{Jets.aws.region}:#{Jets.aws.account}:stream/#{stream_name}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def default_kinesis_stream_policy(stream_name_arn='*')
|
|
36
|
+
{
|
|
37
|
+
action: ["kinesis:GetRecords",
|
|
38
|
+
"kinesis:GetShardIterator",
|
|
39
|
+
"kinesis:DescribeStream",
|
|
40
|
+
"kinesis:ListStreams"],
|
|
41
|
+
effect: "Allow",
|
|
42
|
+
resource: stream_name_arn,
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module LogEvent
|
|
3
|
+
def log_event(log_group_name, props={})
|
|
4
|
+
props.merge!(log_group_name: log_group_name)
|
|
5
|
+
declare_log_subscription_filter(props)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def declare_log_subscription_filter(props={})
|
|
9
|
+
r = Jets::Resource::Logs::SubscriptionFilter.new(props)
|
|
10
|
+
with_fresh_properties do
|
|
11
|
+
resource(r.definition) # add associated resource immediately
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module RuleEvent
|
|
3
|
+
# Public: Creates CloudWatch Event Rule
|
|
4
|
+
#
|
|
5
|
+
# expression - The rate expression.
|
|
6
|
+
#
|
|
7
|
+
# Examples
|
|
8
|
+
#
|
|
9
|
+
# rate("10 minutes")
|
|
10
|
+
# rate("10 minutes", description: "Hard job")
|
|
11
|
+
#
|
|
12
|
+
def rate(expression, props={})
|
|
13
|
+
schedule_job("rate(#{expression})", props)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Public: Creates CloudWatch Event Rule
|
|
17
|
+
#
|
|
18
|
+
# expression - The cron expression.
|
|
19
|
+
#
|
|
20
|
+
# Examples
|
|
21
|
+
#
|
|
22
|
+
# cron("0 */12 * * ? *")
|
|
23
|
+
# cron("0 */12 * * ? *", description: "Hard job")
|
|
24
|
+
#
|
|
25
|
+
def cron(expression, props={})
|
|
26
|
+
schedule_job("cron(#{expression})", props)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def schedule_job(expression, props={})
|
|
30
|
+
props = props.merge(schedule_expression: expression)
|
|
31
|
+
rule_event(props)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def rule_event(props={})
|
|
35
|
+
if props.key?(:detail)
|
|
36
|
+
description = props.key?(:description) ? props.delete(:description) : rule_description
|
|
37
|
+
rule_props = { event_pattern: props, description: description }
|
|
38
|
+
else # if props.key?(:event_pattern)
|
|
39
|
+
props[:description] ||= rule_description
|
|
40
|
+
rule_props = props
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
with_fresh_properties(multiple_resources: false) do
|
|
44
|
+
associated_properties(rule_props) # TODO: consider getting rid of @associated_properties concept
|
|
45
|
+
resource(events_rule_definition) # add associated resource immediately
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def rule_description
|
|
50
|
+
self.rule_counter += 1
|
|
51
|
+
"#{self.name} event rule #{rule_counter}"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def events_rule_definition
|
|
55
|
+
resource = Jets::Resource::Events::Rule.new(associated_properties)
|
|
56
|
+
resource.definition # returns a definition to be added by associated_resources
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Deprecated methods, will be removed in the future
|
|
60
|
+
def events_rule(props)
|
|
61
|
+
puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow)
|
|
62
|
+
puts caller[0]
|
|
63
|
+
sleep 5
|
|
64
|
+
rule_event(props)
|
|
65
|
+
end
|
|
66
|
+
# Deprecated methods, will be removed in the future
|
|
67
|
+
|
|
68
|
+
def event_pattern(props)
|
|
69
|
+
puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow)
|
|
70
|
+
puts caller[0]
|
|
71
|
+
sleep 5
|
|
72
|
+
rule_event(props)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module S3Event
|
|
3
|
+
def s3_event(bucket_name, props={})
|
|
4
|
+
stack_name = declare_s3_bucket_resources(bucket_name) # only set up once per bucket
|
|
5
|
+
declare_sns_subscription(topic_arn: "!Ref #{stack_name}SnsTopic") # set up subscription every time
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# Returns stack_name
|
|
9
|
+
def declare_s3_bucket_resources(bucket_name)
|
|
10
|
+
# If shared s3 bucket resources have already been declared.
|
|
11
|
+
# We will not generate them again. However, we still need to always
|
|
12
|
+
# add the depends_on declaration to ensure that the shared stack parameters
|
|
13
|
+
# are properly passed to the nested child stack.
|
|
14
|
+
stack_name = s3_events[bucket_name] # already registered
|
|
15
|
+
if stack_name
|
|
16
|
+
depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
|
|
17
|
+
return stack_name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Create shared resources - one time
|
|
21
|
+
stack_name = declare_shared_s3_event_resources(bucket_name)
|
|
22
|
+
depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
|
|
23
|
+
self.s3_events[bucket_name] = stack_name # tracks buckets already set up
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def declare_shared_s3_event_resources(bucket_name)
|
|
27
|
+
s3_stack = Jets::Stack::S3Event.new(bucket_name)
|
|
28
|
+
s3_stack.build_stack
|
|
29
|
+
s3_stack.stack_name
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def s3_events
|
|
33
|
+
Jets::Job::Base.s3_events
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Jets::Job::Dsl
|
|
2
|
+
module SnsEvent
|
|
3
|
+
def sns_event(topic_name, props={})
|
|
4
|
+
if topic_name.to_s =~ /generate/
|
|
5
|
+
declare_sns_topic(props.delete(:topic_properties))
|
|
6
|
+
topic_arn = "!Ref {namespace}SnsTopic"
|
|
7
|
+
props.merge!(topic_arn: topic_arn)
|
|
8
|
+
declare_sns_subscription(props)
|
|
9
|
+
elsif topic_name.include?('!Ref') # reference shared resource
|
|
10
|
+
topic_arn = topic_name # contains !Ref
|
|
11
|
+
props.merge!(topic_arn: topic_arn)
|
|
12
|
+
declare_sns_subscription(props)
|
|
13
|
+
else # existing topic: short name or full arn
|
|
14
|
+
topic_arn = full_sns_topic_arn(topic_name)
|
|
15
|
+
props.merge!(topic_arn: topic_arn)
|
|
16
|
+
declare_sns_subscription(props)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def declare_sns_topic(props={})
|
|
21
|
+
props ||= {} # props.delete(:topic_properties) can be nil
|
|
22
|
+
r = Jets::Resource::Sns::Topic.new(props)
|
|
23
|
+
with_fresh_properties do
|
|
24
|
+
resource(r.definition) # add associated resource immediately
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def declare_sns_topic_policy(props={})
|
|
29
|
+
props ||= {} # options.delete(:topic_policy_properties) can be nil
|
|
30
|
+
r = Jets::Resource::Sns::TopicPolicy.new(props)
|
|
31
|
+
with_fresh_properties do
|
|
32
|
+
resource(r.definition) # add associated resource immediately
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def declare_sns_subscription(props={})
|
|
37
|
+
r = Jets::Resource::Sns::Subscription.new(props)
|
|
38
|
+
with_fresh_properties do
|
|
39
|
+
resource(r.definition) # add associated resource immediately
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Expands simple topic name to full arn. Example:
|
|
44
|
+
#
|
|
45
|
+
# hello-topic
|
|
46
|
+
# To:
|
|
47
|
+
# arn:aws:sns:us-west-2:112233445566:hello-topic
|
|
48
|
+
def full_sns_topic_arn(topic_name)
|
|
49
|
+
return topic_name if topic_name.include?("arn:aws:sns")
|
|
50
|
+
|
|
51
|
+
"arn:aws:sns:#{Jets.aws.region}:#{Jets.aws.account}:#{topic_name}"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|