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,404 @@
|
|
|
1
|
+
# Other dsl that rely on this must implement
|
|
2
|
+
#
|
|
3
|
+
# default_associated_resource_definition
|
|
4
|
+
#
|
|
5
|
+
module Jets::Lambda::Dsl
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
def lambda_functions
|
|
9
|
+
self.class.lambda_functions
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
included do
|
|
13
|
+
class << self
|
|
14
|
+
extend Memoist
|
|
15
|
+
|
|
16
|
+
def class_properties(options=nil)
|
|
17
|
+
if options
|
|
18
|
+
@class_properties ||= {}
|
|
19
|
+
@class_properties.deep_merge!(options)
|
|
20
|
+
else
|
|
21
|
+
@class_properties || {}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
alias_method :class_props, :class_properties
|
|
25
|
+
|
|
26
|
+
def properties(options={})
|
|
27
|
+
@properties ||= {}
|
|
28
|
+
@properties.deep_merge!(options)
|
|
29
|
+
end
|
|
30
|
+
alias_method :props, :properties
|
|
31
|
+
|
|
32
|
+
def class_environment(hash)
|
|
33
|
+
environment = standardize_env(hash)
|
|
34
|
+
class_properties(environment: environment)
|
|
35
|
+
end
|
|
36
|
+
alias_method :class_env, :class_environment
|
|
37
|
+
|
|
38
|
+
def environment(hash)
|
|
39
|
+
environment = standardize_env(hash)
|
|
40
|
+
properties(environment: environment)
|
|
41
|
+
end
|
|
42
|
+
alias_method :env, :environment
|
|
43
|
+
|
|
44
|
+
# Allows user to pass in hash with or without the :variables key.
|
|
45
|
+
def standardize_env(hash)
|
|
46
|
+
return hash if hash.key?(:variables)
|
|
47
|
+
|
|
48
|
+
environment = {}
|
|
49
|
+
environment[:variables] ||= {}
|
|
50
|
+
environment[:variables].merge!(hash)
|
|
51
|
+
environment
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Convenience method that set properties. List based on https://amzn.to/2oSph1P
|
|
55
|
+
# Not all properites are included because some properties are not meant to be set
|
|
56
|
+
# directly. For example, function_name is a calculated setting by Jets.
|
|
57
|
+
PROPERTIES = %W[
|
|
58
|
+
dead_letter_config
|
|
59
|
+
description
|
|
60
|
+
handler
|
|
61
|
+
kms_key_arn
|
|
62
|
+
memory_size
|
|
63
|
+
reserved_concurrent_executions
|
|
64
|
+
role
|
|
65
|
+
runtime
|
|
66
|
+
timeout
|
|
67
|
+
tracing_config
|
|
68
|
+
vpc_config
|
|
69
|
+
tags
|
|
70
|
+
]
|
|
71
|
+
PROPERTIES.each do |property|
|
|
72
|
+
# Example:
|
|
73
|
+
# def timeout(value)
|
|
74
|
+
# properties(timeout: value)
|
|
75
|
+
# end
|
|
76
|
+
#
|
|
77
|
+
# def class_timeout(value)
|
|
78
|
+
# class_properties(timeout: value)
|
|
79
|
+
# end
|
|
80
|
+
class_eval <<~CODE
|
|
81
|
+
def #{property}(value)
|
|
82
|
+
properties(#{property}: value)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def class_#{property}(value)
|
|
86
|
+
class_properties(#{property}: value)
|
|
87
|
+
end
|
|
88
|
+
CODE
|
|
89
|
+
end
|
|
90
|
+
# More convenience aliases
|
|
91
|
+
alias_method :memory, :memory_size
|
|
92
|
+
alias_method :class_memory, :class_memory_size
|
|
93
|
+
alias_method :desc, :description
|
|
94
|
+
alias_method :class_desc, :class_description
|
|
95
|
+
|
|
96
|
+
# definitions: one or more definitions
|
|
97
|
+
def iam_policy(*definitions)
|
|
98
|
+
if definitions.empty?
|
|
99
|
+
@iam_policy
|
|
100
|
+
else
|
|
101
|
+
@iam_policy = definitions.flatten
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# definitions: one or more definitions
|
|
106
|
+
def class_iam_policy(*definitions)
|
|
107
|
+
if definitions.empty?
|
|
108
|
+
@class_iam_policy
|
|
109
|
+
else
|
|
110
|
+
@class_iam_policy = definitions.flatten
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# definitions: one or more definitions
|
|
115
|
+
def managed_iam_policy(*definitions)
|
|
116
|
+
if definitions.empty?
|
|
117
|
+
@managed_iam_policy
|
|
118
|
+
else
|
|
119
|
+
@managed_iam_policy = definitions.flatten
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# definitions: one or more definitions
|
|
124
|
+
def class_managed_iam_policy(*definitions)
|
|
125
|
+
if definitions.empty?
|
|
126
|
+
@class_managed_iam_policy
|
|
127
|
+
else
|
|
128
|
+
@class_managed_iam_policy = definitions.flatten
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def build_class_iam?
|
|
133
|
+
!!(class_iam_policy || class_managed_iam_policy)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
#############################
|
|
137
|
+
# Main method that registers resources associated with the Lambda function.
|
|
138
|
+
# All resources methods lead here.
|
|
139
|
+
def associated_resources(*definitions)
|
|
140
|
+
if definitions == [nil] # when associated_resources called with no arguments
|
|
141
|
+
@associated_resources || []
|
|
142
|
+
else
|
|
143
|
+
@associated_resources ||= []
|
|
144
|
+
associated_resource = Jets::Resource::Associated.new(definitions)
|
|
145
|
+
associated_resource.multiple_resources = @multiple_resources
|
|
146
|
+
@associated_resources << associated_resource
|
|
147
|
+
@associated_resources.flatten!
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
# User-friendly short resource method. Users will use this.
|
|
151
|
+
alias_method :resource, :associated_resources
|
|
152
|
+
|
|
153
|
+
# Using this odd way of setting these properties so we can keep the
|
|
154
|
+
# resource(*definitions) signature simple. Using keyword arguments at the end
|
|
155
|
+
# interfere with being able to pass in any keys for the properties hash at the end.
|
|
156
|
+
#
|
|
157
|
+
# TODO: If there's a cleaner way of doing this, let me know.
|
|
158
|
+
def with_fresh_properties(fresh_properties: true, multiple_resources: true)
|
|
159
|
+
@associated_properties = nil if fresh_properties # dont use any current associated_properties
|
|
160
|
+
@multiple_resources = multiple_resources
|
|
161
|
+
|
|
162
|
+
yield
|
|
163
|
+
|
|
164
|
+
@multiple_resources = false
|
|
165
|
+
@associated_properties = nil if fresh_properties # reset for next definition, since we're defining eagerly
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Properties belonging to the associated resource
|
|
169
|
+
def associated_properties(options={})
|
|
170
|
+
@associated_properties ||= {}
|
|
171
|
+
@associated_properties.deep_merge!(options)
|
|
172
|
+
end
|
|
173
|
+
alias_method :associated_props, :associated_properties
|
|
174
|
+
|
|
175
|
+
# meta definition
|
|
176
|
+
def self.define_associated_properties(associated_properties)
|
|
177
|
+
associated_properties.each do |property|
|
|
178
|
+
# Example:
|
|
179
|
+
# def config_rule_name(value)
|
|
180
|
+
# associated_properties(config_rule_name: value)
|
|
181
|
+
# end
|
|
182
|
+
class_eval <<~CODE
|
|
183
|
+
def #{property}(value)
|
|
184
|
+
associated_properties(#{property}: value)
|
|
185
|
+
end
|
|
186
|
+
CODE
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def add_logical_id_counter?
|
|
191
|
+
return false unless @associated_resources
|
|
192
|
+
# Only takes one associated resource with multiple set to true to return false of this check
|
|
193
|
+
return false if @associated_resources.detect { |associated| associated.multiple_resources }
|
|
194
|
+
# Otherwise check if there is more than 1 @associated_resources
|
|
195
|
+
@associated_resources.size > 1
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
# Loop back through the resources and add a counter to the end of the id
|
|
199
|
+
# to handle multiple events.
|
|
200
|
+
# Then replace @associated_resources entirely
|
|
201
|
+
def add_logical_id_counter
|
|
202
|
+
numbered_resources = []
|
|
203
|
+
n = 1
|
|
204
|
+
@associated_resources.map do |associated|
|
|
205
|
+
logical_id = associated.logical_id
|
|
206
|
+
attributes = associated.attributes
|
|
207
|
+
|
|
208
|
+
logical_id = logical_id.to_s.sub(/\d+$/,'')
|
|
209
|
+
new_definition = { "#{logical_id}#{n}" => attributes }
|
|
210
|
+
numbered_resources << Jets::Resource::Associated.new(new_definition)
|
|
211
|
+
n += 1
|
|
212
|
+
end
|
|
213
|
+
@associated_resources = numbered_resources
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
# Examples:
|
|
217
|
+
#
|
|
218
|
+
# depends_on :custom
|
|
219
|
+
# depends_on :custom, :alert
|
|
220
|
+
# depends_on :custom, class_prefix: true
|
|
221
|
+
# depends_on :custom, :alert, class_prefix: true
|
|
222
|
+
#
|
|
223
|
+
def depends_on(*stacks)
|
|
224
|
+
if stacks == []
|
|
225
|
+
@depends_on
|
|
226
|
+
else
|
|
227
|
+
@depends_on ||= []
|
|
228
|
+
options = stacks.last.is_a?(Hash) ? stacks.pop : {}
|
|
229
|
+
stacks.each do |stack|
|
|
230
|
+
@depends_on << Jets::Stack::Depends::Item.new(stack, options)
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def ref(name)
|
|
236
|
+
"!Ref #{name.to_s.camelize}"
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
# meth is a Symbol
|
|
240
|
+
def method_added(meth)
|
|
241
|
+
return if %w[initialize method_missing].include?(meth.to_s)
|
|
242
|
+
return unless public_method_defined?(meth)
|
|
243
|
+
|
|
244
|
+
register_task(meth)
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
def register_task(meth, lang=:ruby)
|
|
248
|
+
# Note: for anonymous classes like for app/functions self.name is ""
|
|
249
|
+
# We adjust the class name when we build the functions later in
|
|
250
|
+
# FunctionContstructor#adjust_tasks.
|
|
251
|
+
|
|
252
|
+
# At this point we can use the current associated_properties and defined the
|
|
253
|
+
# associated resource with the Lambda function.
|
|
254
|
+
unless associated_properties.empty?
|
|
255
|
+
associated_resources(default_associated_resource_definition(meth))
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
# Unsure why but we have to use @associated_resources vs associated_resources
|
|
259
|
+
# associated_resources is always nil
|
|
260
|
+
if add_logical_id_counter?
|
|
261
|
+
add_logical_id_counter
|
|
262
|
+
end
|
|
263
|
+
|
|
264
|
+
all_tasks[meth] = Jets::Lambda::Task.new(self.name, meth,
|
|
265
|
+
properties: @properties, # lambda function properties
|
|
266
|
+
iam_policy: @iam_policy,
|
|
267
|
+
managed_iam_policy: @managed_iam_policy,
|
|
268
|
+
associated_resources: @associated_resources,
|
|
269
|
+
lang: lang,
|
|
270
|
+
replacements: replacements(meth))
|
|
271
|
+
|
|
272
|
+
# Done storing options, clear out for the next added method.
|
|
273
|
+
clear_properties
|
|
274
|
+
# Important to clear @properties at the end of registering outside of
|
|
275
|
+
# register_task because register_task is overridden in Jets::Job::Dsl
|
|
276
|
+
#
|
|
277
|
+
# Jets::Job::Base < Jets::Lambda::Functions
|
|
278
|
+
#
|
|
279
|
+
# Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
280
|
+
# So the Jets::Job::Dsl overrides some of the Jets::Lambda::Dsl behavior.
|
|
281
|
+
|
|
282
|
+
true
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Meant to be overridden to add more custom replacements based on the app class type
|
|
286
|
+
def replacements(meth)
|
|
287
|
+
{}
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
def clear_properties
|
|
291
|
+
@properties = nil
|
|
292
|
+
@iam_policy = nil
|
|
293
|
+
@managed_iam_policy = nil
|
|
294
|
+
@associated_resources = nil
|
|
295
|
+
@associated_properties = nil
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
# Returns the all tasks for this class with their method names as keys.
|
|
299
|
+
#
|
|
300
|
+
# ==== Returns
|
|
301
|
+
# OrderedHash:: An ordered hash with tasks names as keys and Task
|
|
302
|
+
# objects as values.
|
|
303
|
+
#
|
|
304
|
+
def all_tasks
|
|
305
|
+
@all_tasks ||= ActiveSupport::OrderedHash.new
|
|
306
|
+
end
|
|
307
|
+
# Do not call all tasks outside this class, instead use: tasks or lambda functions
|
|
308
|
+
private :all_tasks
|
|
309
|
+
|
|
310
|
+
# Goes up the class inheritance chain to build the tasks.
|
|
311
|
+
#
|
|
312
|
+
# Example heirarchy:
|
|
313
|
+
#
|
|
314
|
+
# Jets::Lambda::Functions > Jets::Controller::Base > ApplicationController ...
|
|
315
|
+
# > PostsController > ChildPostsController
|
|
316
|
+
#
|
|
317
|
+
# Do not include tasks from the direct subclasses of Jets::Lambda::Functions
|
|
318
|
+
# because those classes are abstract. Dont want those methods to be included.
|
|
319
|
+
def find_all_tasks(public: true)
|
|
320
|
+
klass = self
|
|
321
|
+
direct_subclasses = Jets::Lambda::Functions.subclasses
|
|
322
|
+
lookup = []
|
|
323
|
+
|
|
324
|
+
# Go up class inheritance and builds lookup structure in memory
|
|
325
|
+
until direct_subclasses.include?(klass)
|
|
326
|
+
lookup << klass.send(:all_tasks) # one place we want to call private all_tasks method
|
|
327
|
+
klass = klass.superclass
|
|
328
|
+
end
|
|
329
|
+
merged_tasks = ActiveSupport::OrderedHash.new
|
|
330
|
+
# Go back down the class inheritance chain in reverse order and merge the tasks
|
|
331
|
+
lookup.reverse.each do |tasks_hash|
|
|
332
|
+
# tasks_hash is a result of all_tasks. Example: PostsController.all_tasks
|
|
333
|
+
merged_tasks.merge!(tasks_hash)
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# The cfn builders required the right final child class to build the lambda functions correctly.
|
|
337
|
+
merged_tasks.each do |meth, task|
|
|
338
|
+
# Override the class name for the cfn builders
|
|
339
|
+
task = task.clone # do not stomp over current tasks since things are usually looked by reference
|
|
340
|
+
task.instance_variable_set(:@class_name, self.name)
|
|
341
|
+
merged_tasks[meth] = task
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
# Methods can be made private with the :private keyword after the method has been defined.
|
|
345
|
+
# To account for this, loop back thorugh all the methods and check if the method is indeed public.
|
|
346
|
+
tasks = ActiveSupport::OrderedHash.new
|
|
347
|
+
merged_tasks.each do |meth, task|
|
|
348
|
+
if public
|
|
349
|
+
tasks[meth] = task if task.public_meth?
|
|
350
|
+
else
|
|
351
|
+
tasks[meth] = task unless task.public_meth?
|
|
352
|
+
end
|
|
353
|
+
end
|
|
354
|
+
tasks
|
|
355
|
+
end
|
|
356
|
+
memoize :find_all_tasks
|
|
357
|
+
|
|
358
|
+
def all_public_tasks
|
|
359
|
+
find_all_tasks(public: true)
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def all_private_tasks
|
|
363
|
+
find_all_tasks(public: false)
|
|
364
|
+
end
|
|
365
|
+
|
|
366
|
+
# Returns the tasks for this class in Array form.
|
|
367
|
+
#
|
|
368
|
+
# ==== Returns
|
|
369
|
+
# Array of task objects
|
|
370
|
+
#
|
|
371
|
+
def tasks
|
|
372
|
+
all_public_tasks.values
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
# The public methods defined in the project app class ulimately become
|
|
376
|
+
# lambda functions.
|
|
377
|
+
#
|
|
378
|
+
# Example return value:
|
|
379
|
+
# [:index, :new, :create, :show]
|
|
380
|
+
def lambda_functions
|
|
381
|
+
all_public_tasks.keys
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
# Used in Jets::Cfn::Builders::Interface#build
|
|
385
|
+
# Overridden in rule/dsl.rb
|
|
386
|
+
def build?
|
|
387
|
+
!tasks.empty?
|
|
388
|
+
end
|
|
389
|
+
|
|
390
|
+
# Polymorphic support
|
|
391
|
+
def defpoly(lang, meth)
|
|
392
|
+
register_task(meth, lang)
|
|
393
|
+
end
|
|
394
|
+
|
|
395
|
+
def python(meth)
|
|
396
|
+
defpoly(:python, meth)
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def node(meth)
|
|
400
|
+
defpoly(:node, meth)
|
|
401
|
+
end
|
|
402
|
+
end # end of class << self
|
|
403
|
+
end # end of included
|
|
404
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Jets::Lambda
|
|
2
|
+
class Function < Functions
|
|
3
|
+
# Override and change the signature so we do not have to provide info at
|
|
4
|
+
# initialization. So:
|
|
5
|
+
#
|
|
6
|
+
# hello_function = HelloFunction.new
|
|
7
|
+
# hello_function.lambda_handler(event, context)
|
|
8
|
+
#
|
|
9
|
+
# Normally controller and job functions initialize like this:
|
|
10
|
+
#
|
|
11
|
+
# controller = PostController.new(event, context, "handler_handler")
|
|
12
|
+
def initialize
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.handler
|
|
16
|
+
handler_task.meth
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.handler_task
|
|
20
|
+
tasks.first
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Used by main_processor.rb. Same interface as controllers and jobs.
|
|
24
|
+
def self.process(event, context, meth)
|
|
25
|
+
function = new
|
|
26
|
+
function.send(handler, event, context)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Builds an anonymous class that represents a single Lambda function from code
|
|
2
|
+
# in app/functions.
|
|
3
|
+
#
|
|
4
|
+
# The build method returns an anonymous class using Class.new that contains
|
|
5
|
+
# the methods defined in the app/functions/hello.rb code.
|
|
6
|
+
#
|
|
7
|
+
# Ruby Class.new docs:
|
|
8
|
+
#
|
|
9
|
+
# Creates a new anonymous (unnamed) class with the given superclass (or
|
|
10
|
+
# Object if no parameter is given). You can give a class a name by
|
|
11
|
+
# assigning the class object to a constant.
|
|
12
|
+
# http://ruby-doc.org/core-2.1.1/Class.html#method-c-new
|
|
13
|
+
#
|
|
14
|
+
# So assigning the result of build to a constant makes for a prettier
|
|
15
|
+
# class name. Example:
|
|
16
|
+
#
|
|
17
|
+
# constructor = FunctionConstructor.new(code_path)
|
|
18
|
+
# HelloFunction = constructor.build
|
|
19
|
+
#
|
|
20
|
+
# The class name will be HelloFunction instead of (anonymous). Then usage would
|
|
21
|
+
# be:
|
|
22
|
+
#
|
|
23
|
+
# hello_function = HelloFunction.new
|
|
24
|
+
# hello_function(hello_function.handler, event, context)
|
|
25
|
+
#
|
|
26
|
+
# Or call with the process class method:
|
|
27
|
+
#
|
|
28
|
+
# HelloFunction.process(event, context, "world")
|
|
29
|
+
module Jets::Lambda
|
|
30
|
+
class FunctionConstructor
|
|
31
|
+
def initialize(code_path)
|
|
32
|
+
@code_path = "#{Jets.root}/#{code_path}"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def build
|
|
36
|
+
code = IO.read(@code_path)
|
|
37
|
+
function_klass = Class.new(Jets::Lambda::Function)
|
|
38
|
+
function_klass.module_eval(code, @code_path)
|
|
39
|
+
adjust_tasks(function_klass)
|
|
40
|
+
function_klass # assign this to a Constant for a pretty class name
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# For anonymous classes method_added during task registration contains ""
|
|
44
|
+
# for the class name. We adjust it here.
|
|
45
|
+
def adjust_tasks(klass)
|
|
46
|
+
class_name = @code_path.to_s.sub(/.*\/functions\//,'').sub(/\.rb$/, '')
|
|
47
|
+
class_name = class_name.camelize
|
|
48
|
+
klass.tasks.each do |task|
|
|
49
|
+
task.class_name = class_name
|
|
50
|
+
task.type = "function"
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
# Jets::Lambda::Functions represents a collection of Lambda functions.
|
|
4
|
+
#
|
|
5
|
+
# Jets::Lambda::Functions is the superclass of:
|
|
6
|
+
# Jets::Controller::Base
|
|
7
|
+
# Jets::Job::Base
|
|
8
|
+
module Jets::Lambda
|
|
9
|
+
class Functions
|
|
10
|
+
attr_reader :event, :context, :meth
|
|
11
|
+
def initialize(event, context, meth)
|
|
12
|
+
@event = HashWithIndifferentAccess.new(event) # Hash, JSON.parse(event) ran BaseProcessor
|
|
13
|
+
@context = context # Hash. JSON.parse(context) ran in BaseProcessor
|
|
14
|
+
@meth = meth
|
|
15
|
+
# store meth because it is useful to for identifying the which template
|
|
16
|
+
# to use later.
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
include Dsl # At the end so methods like event, context and method
|
|
20
|
+
# do not trigger method_added
|
|
21
|
+
|
|
22
|
+
class << self
|
|
23
|
+
# Tracking subclasses because it helps with Lambda::Dsl#find_all_tasks
|
|
24
|
+
def subclasses
|
|
25
|
+
@subclasses ||= []
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def inherited(base)
|
|
29
|
+
super
|
|
30
|
+
self.subclasses << base if base.name
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Needed for depends_on. Got added due to stagger logic.
|
|
34
|
+
def output_keys
|
|
35
|
+
[]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
class Jets::Lambda::Task
|
|
2
|
+
attr_accessor :class_name, :type
|
|
3
|
+
attr_reader :meth, :properties, :iam_policy, :managed_iam_policy, :lang, :associated_resources
|
|
4
|
+
def initialize(class_name, meth, options={})
|
|
5
|
+
@class_name = class_name.to_s
|
|
6
|
+
@meth = meth
|
|
7
|
+
@options = options
|
|
8
|
+
@type = options[:type] || get_type # controller, job, or function
|
|
9
|
+
@properties = options[:properties] || {}
|
|
10
|
+
@iam_policy = options[:iam_policy]
|
|
11
|
+
@managed_iam_policy = options[:managed_iam_policy]
|
|
12
|
+
@lang = options[:lang] || :ruby
|
|
13
|
+
@associated_resources = options[:associated_resources] || {}
|
|
14
|
+
@replacements = options[:replacements] || {} # added to baseline replacements
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def name
|
|
18
|
+
@meth
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def public_meth?
|
|
22
|
+
# For anonymous classes (app/functions/hello.rb) the class name will be blank.
|
|
23
|
+
# These types of classes are treated specially and has only one handler method
|
|
24
|
+
# that is registered. So we know it is public.
|
|
25
|
+
return true if @class_name.nil? || @class_name == ''
|
|
26
|
+
|
|
27
|
+
# Consider all polymorphic methods public for now
|
|
28
|
+
return true if @lang != :ruby
|
|
29
|
+
|
|
30
|
+
klass = @class_name.constantize
|
|
31
|
+
public_methods = klass.public_instance_methods
|
|
32
|
+
public_methods.include?(meth.to_sym)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def build_function_iam?
|
|
36
|
+
!!(@iam_policy || @managed_iam_policy)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
@@lang_exts = {
|
|
40
|
+
ruby: '.rb',
|
|
41
|
+
python: '.py',
|
|
42
|
+
node: '.js',
|
|
43
|
+
}
|
|
44
|
+
def lang_ext
|
|
45
|
+
@@lang_exts[@lang]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# The get_type method works for controller and job classes.
|
|
49
|
+
#
|
|
50
|
+
# Usually able to get the type from the class name. Examples:
|
|
51
|
+
#
|
|
52
|
+
# PostsController => controller
|
|
53
|
+
# HardJob => job
|
|
54
|
+
#
|
|
55
|
+
# However, for function types, we are not able to get the type for multiple of
|
|
56
|
+
# reasons. First, function types are allowed to be named with or without
|
|
57
|
+
# _function. Examples:
|
|
58
|
+
#
|
|
59
|
+
# path => class => type
|
|
60
|
+
# app/functions/hello.rb => Hello => function
|
|
61
|
+
# app/functions/hello_function.rb => HelloFunction => function
|
|
62
|
+
#
|
|
63
|
+
# The second reason is that functions are not regular ruby classes. Instead they
|
|
64
|
+
# are anonymous classes created with Class.new. When classes are created with
|
|
65
|
+
# Class.new the method_added hook has "" (blank string) as the self class name.
|
|
66
|
+
# We add the class_type to the task later on as we are constructing the class
|
|
67
|
+
# as part of the Class.new logic.
|
|
68
|
+
#
|
|
69
|
+
# For controller and job standard ruby classes though it can easily be
|
|
70
|
+
# determinated as part of initialization. So we get the type for convenience then.
|
|
71
|
+
#
|
|
72
|
+
# For anonymous function classes, we just set to nil and will later fix in
|
|
73
|
+
# FunctionConstructor.
|
|
74
|
+
#
|
|
75
|
+
# Returns: "controller", "job" or nil
|
|
76
|
+
def get_type
|
|
77
|
+
unless @class_name.empty? # when anonymous class is created with Class.new
|
|
78
|
+
@class_name.underscore.split('_').last # controller, job or rule
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def full_handler(handler_function)
|
|
83
|
+
"#{handler_base}.#{handler_function}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def handler_path
|
|
87
|
+
"#{handler_base}#{lang_ext}"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def handler_base
|
|
91
|
+
base = "handlers/#{@type.pluralize}/#{@class_name.underscore}"
|
|
92
|
+
base += "/#{@lang}" if @lang != :ruby
|
|
93
|
+
base += "/#{@meth}"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def poly_src_path
|
|
97
|
+
handler_path.sub("handlers/", "app/")
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def replacements
|
|
101
|
+
# Merge in the custom replacements specific to each app class: ConfigRule, Job, etc.
|
|
102
|
+
baseline_replacements.merge(@replacements)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def baseline_replacements
|
|
106
|
+
{
|
|
107
|
+
# camelized because used in not just keys but common used in values
|
|
108
|
+
namespace: @meth.to_s.camelize,
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
end
|
data/lib/jets/logger.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
|
|
3
|
+
module Jets
|
|
4
|
+
class Logger < ::Logger
|
|
5
|
+
# Only need to override the add method as the other calls all lead to it.
|
|
6
|
+
def add(severity, message = nil, progname = nil)
|
|
7
|
+
# Taken from Logger#add source
|
|
8
|
+
# https://ruby-doc.org/stdlib-2.5.1/libdoc/logger/rdoc/Logger.html#method-i-add
|
|
9
|
+
if message.nil?
|
|
10
|
+
if block_given?
|
|
11
|
+
message = yield
|
|
12
|
+
else
|
|
13
|
+
message = progname
|
|
14
|
+
progname = @progname
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
super # original logical
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Thanks https://mensfeld.pl/2012/01/converting-nested-hash-into-http-url-params-hash-version-in-ruby/
|
|
2
|
+
module Jets::Mega
|
|
3
|
+
module HashConverter
|
|
4
|
+
def self.encode(value, key = nil, out_hash = {})
|
|
5
|
+
case value
|
|
6
|
+
when Hash then
|
|
7
|
+
value.each { |k,v| encode(v, append_key(key,k), out_hash) }
|
|
8
|
+
out_hash
|
|
9
|
+
when Array then
|
|
10
|
+
value.each { |v| encode(v, "#{key}[]", out_hash) }
|
|
11
|
+
out_hash
|
|
12
|
+
when nil then ''
|
|
13
|
+
else
|
|
14
|
+
out_hash[key] = value
|
|
15
|
+
out_hash
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def self.append_key(root_key, key)
|
|
22
|
+
root_key.nil? ? :"#{key}" : :"#{root_key}[#{key.to_s}]"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|