jets-fs 1.6.10
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 +73 -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 +6 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +533 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +190 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +21 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets +14 -0
- data/jets.gemspec +61 -0
- data/lib/jets.rb +71 -0
- data/lib/jets/application.rb +308 -0
- data/lib/jets/aws_info.rb +111 -0
- data/lib/jets/aws_services.rb +60 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +130 -0
- data/lib/jets/builders.rb +16 -0
- data/lib/jets/builders/code_builder.rb +379 -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 +172 -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.rb +5 -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/camelizer.rb +67 -0
- data/lib/jets/cfn.rb +6 -0
- data/lib/jets/cfn/builders.rb +20 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +58 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +80 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +82 -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 +127 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/parent_builder.rb +93 -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 +189 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +189 -0
- data/lib/jets/commands.rb +27 -0
- data/lib/jets/commands/base.rb +164 -0
- data/lib/jets/commands/build.rb +217 -0
- data/lib/jets/commands/call.rb +174 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +112 -0
- data/lib/jets/commands/call/base_guesser.rb +33 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +23 -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 +13 -0
- data/lib/jets/commands/db.rb +15 -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 +131 -0
- data/lib/jets/commands/dynamodb.rb +22 -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/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 +18 -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/rail.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 +152 -0
- data/lib/jets/commands/markdown.rb +8 -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 +45 -0
- data/lib/jets/commands/runner.rb +18 -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 +35 -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 +66 -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 +4 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +4 -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 +146 -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 +16 -0
- data/lib/jets/controller/base.rb +103 -0
- data/lib/jets/controller/callbacks.rb +62 -0
- data/lib/jets/controller/cookies.rb +40 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware.rb +5 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +119 -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 +97 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack.rb +5 -0
- data/lib/jets/controller/rack/adapter.rb +63 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +84 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +238 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/core.rb +211 -0
- data/lib/jets/core_ext/kernel.rb +56 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +39 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +41 -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/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 +153 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +62 -0
- data/lib/jets/io.rb +14 -0
- data/lib/jets/job.rb +4 -0
- data/lib/jets/job/base.rb +29 -0
- data/lib/jets/job/dsl.rb +108 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda.rb +18 -0
- data/lib/jets/lambda/dsl.rb +384 -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 +24 -0
- data/lib/jets/mega.rb +7 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +140 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +38 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +49 -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 +20 -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 +82 -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.rb +4 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +59 -0
- data/lib/jets/rack_server.rb +80 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +74 -0
- data/lib/jets/resource/api_gateway.rb +9 -0
- data/lib/jets/resource/api_gateway/base_path.rb +5 -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 +78 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +60 -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 +11 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +12 -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 +123 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +26 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack.rb +7 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
- data/lib/jets/resource/child_stack/app_class.rb +112 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +90 -0
- data/lib/jets/resource/config.rb +4 -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.rb +3 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam.rb +8 -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/lambda.rb +5 -0
- data/lib/jets/resource/lambda/function.rb +216 -0
- data/lib/jets/resource/lambda/function/environment.rb +61 -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/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +77 -0
- data/lib/jets/resource/route53.rb +3 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3.rb +17 -0
- data/lib/jets/resource/sns.rb +3 -0
- data/lib/jets/resource/sqs.rb +3 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +175 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule.rb +4 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +52 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +98 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +103 -0
- data/lib/jets/stack/builder.rb +38 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/function.rb +60 -0
- data/lib/jets/stack/main.rb +5 -0
- data/lib/jets/stack/main/dsl.rb +33 -0
- data/lib/jets/stack/main/extensions/base.rb +45 -0
- data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/extensions/lambda.rb +71 -0
- data/lib/jets/stack/main/extensions/sns.rb +12 -0
- data/lib/jets/stack/main/extensions/sqs.rb +36 -0
- data/lib/jets/stack/output.rb +38 -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 +38 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +32 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +30 -0
- data/lib/jets/turbo.rb +47 -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/rail.rb +113 -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 +859 -0
data/lib/jets/lambda.rb
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Task vs Functions
|
|
2
|
+
#
|
|
3
|
+
# Functions is inherited by Job::Base and Controller::Base.
|
|
4
|
+
# It is holds the event and context is used for processing when you
|
|
5
|
+
# call the lambda function.
|
|
6
|
+
#
|
|
7
|
+
# Task is a holds information for the method that gets registered
|
|
8
|
+
# with method_add and is used to build up the CloudFormation Lambda
|
|
9
|
+
# Function definition.
|
|
10
|
+
#
|
|
11
|
+
# Overview diagram : http://bit.ly/2zQeoF3
|
|
12
|
+
module Jets::Lambda
|
|
13
|
+
autoload :Dsl, "jets/lambda/dsl"
|
|
14
|
+
autoload :FunctionConstructor, "jets/lambda/function_constructor"
|
|
15
|
+
autoload :Function, "jets/lambda/function"
|
|
16
|
+
autoload :Functions, "jets/lambda/functions"
|
|
17
|
+
autoload :Task, "jets/lambda/task"
|
|
18
|
+
end
|
|
@@ -0,0 +1,384 @@
|
|
|
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_resources << Jets::Resource::Associated.new(definitions)
|
|
145
|
+
@associated_resources.flatten!
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
# User-friendly short resource method. Users will use this.
|
|
149
|
+
alias_method :resource, :associated_resources
|
|
150
|
+
|
|
151
|
+
# Properties belonging to the associated resource
|
|
152
|
+
def associated_properties(options={})
|
|
153
|
+
@associated_properties ||= {}
|
|
154
|
+
@associated_properties.deep_merge!(options)
|
|
155
|
+
end
|
|
156
|
+
alias_method :associated_props, :associated_properties
|
|
157
|
+
|
|
158
|
+
# meta definition
|
|
159
|
+
def self.define_associated_properties(associated_properties)
|
|
160
|
+
associated_properties.each do |property|
|
|
161
|
+
# Example:
|
|
162
|
+
# def config_rule_name(value)
|
|
163
|
+
# associated_properties(config_rule_name: value)
|
|
164
|
+
# end
|
|
165
|
+
class_eval <<~CODE
|
|
166
|
+
def #{property}(value)
|
|
167
|
+
associated_properties(#{property}: value)
|
|
168
|
+
end
|
|
169
|
+
CODE
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# Loop back through the resources and add a counter to the end of the id
|
|
174
|
+
# to handle multiple events.
|
|
175
|
+
# Then replace @associated_resources entirely
|
|
176
|
+
def add_logical_id_counter
|
|
177
|
+
numbered_resources = []
|
|
178
|
+
n = 1
|
|
179
|
+
@associated_resources.map do |associated|
|
|
180
|
+
logical_id = associated.logical_id
|
|
181
|
+
attributes = associated.attributes
|
|
182
|
+
|
|
183
|
+
logical_id = logical_id.to_s.sub(/\d+$/,'')
|
|
184
|
+
new_definition = { "#{logical_id}#{n}" => attributes }
|
|
185
|
+
numbered_resources << Jets::Resource::Associated.new(new_definition)
|
|
186
|
+
n += 1
|
|
187
|
+
end
|
|
188
|
+
@associated_resources = numbered_resources
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def depends_on(*stacks)
|
|
192
|
+
if stacks == []
|
|
193
|
+
@depends_on
|
|
194
|
+
else
|
|
195
|
+
@depends_on ||= []
|
|
196
|
+
@depends_on += stacks
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# meth is a Symbol
|
|
201
|
+
def method_added(meth)
|
|
202
|
+
return if %w[initialize method_missing].include?(meth.to_s)
|
|
203
|
+
return unless public_method_defined?(meth)
|
|
204
|
+
|
|
205
|
+
register_task(meth)
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def register_task(meth, lang=:ruby)
|
|
209
|
+
# Note: for anonymous classes like for app/functions self.name is ""
|
|
210
|
+
# We adjust the class name when we build the functions later in
|
|
211
|
+
# FunctionContstructor#adjust_tasks.
|
|
212
|
+
|
|
213
|
+
# At this point we can use the current associated_properties and defined the
|
|
214
|
+
# associated resource with the Lambda function.
|
|
215
|
+
unless associated_properties.empty?
|
|
216
|
+
associated_resources(default_associated_resource_definition(meth))
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# Unsure why but we have to use @associated_resources vs associated_resources
|
|
220
|
+
# associated_resources is always nil
|
|
221
|
+
if @associated_resources && @associated_resources.size > 1
|
|
222
|
+
add_logical_id_counter
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
all_tasks[meth] = Jets::Lambda::Task.new(self.name, meth,
|
|
226
|
+
properties: @properties, # lambda function properties
|
|
227
|
+
iam_policy: @iam_policy,
|
|
228
|
+
managed_iam_policy: @managed_iam_policy,
|
|
229
|
+
associated_resources: @associated_resources,
|
|
230
|
+
lang: lang,
|
|
231
|
+
replacements: replacements(meth))
|
|
232
|
+
|
|
233
|
+
# Done storing options, clear out for the next added method.
|
|
234
|
+
clear_properties
|
|
235
|
+
# Important to clear @properties at the end of registering outside of
|
|
236
|
+
# register_task because register_task is overridden in Jets::Job::Dsl
|
|
237
|
+
#
|
|
238
|
+
# Jets::Job::Base < Jets::Lambda::Functions
|
|
239
|
+
#
|
|
240
|
+
# Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
|
|
241
|
+
# So the Jets::Job::Dsl overrides some of the Jets::Lambda::Dsl behavior.
|
|
242
|
+
|
|
243
|
+
true
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Meant to be overridden to add more custom replacements based on the app class type
|
|
247
|
+
def replacements(meth)
|
|
248
|
+
{}
|
|
249
|
+
end
|
|
250
|
+
|
|
251
|
+
def clear_properties
|
|
252
|
+
@properties = nil
|
|
253
|
+
@iam_policy = nil
|
|
254
|
+
@managed_iam_policy = nil
|
|
255
|
+
@associated_resources = nil
|
|
256
|
+
@associated_properties = nil
|
|
257
|
+
end
|
|
258
|
+
|
|
259
|
+
# Returns the all tasks for this class with their method names as keys.
|
|
260
|
+
#
|
|
261
|
+
# ==== Returns
|
|
262
|
+
# OrderedHash:: An ordered hash with tasks names as keys and Task
|
|
263
|
+
# objects as values.
|
|
264
|
+
#
|
|
265
|
+
def all_tasks
|
|
266
|
+
@all_tasks ||= ActiveSupport::OrderedHash.new
|
|
267
|
+
end
|
|
268
|
+
# Do not call all tasks outside this class, instead use: tasks or lambda functions
|
|
269
|
+
private :all_tasks
|
|
270
|
+
|
|
271
|
+
# Goes up the class inheritance chain to build the tasks.
|
|
272
|
+
#
|
|
273
|
+
# Example heirarchy:
|
|
274
|
+
#
|
|
275
|
+
# Jets::Lambda::Functions > Jets::Controller::Base > ApplicationController ...
|
|
276
|
+
# > PostsController > ChildPostsController
|
|
277
|
+
#
|
|
278
|
+
# Do not include tasks from the direct subclasses of Jets::Lambda::Functions
|
|
279
|
+
# because those classes are abstract. Dont want those methods to be included.
|
|
280
|
+
def find_all_tasks(public: true)
|
|
281
|
+
klass = self
|
|
282
|
+
direct_subclasses = Jets::Lambda::Functions.subclasses
|
|
283
|
+
lookup = []
|
|
284
|
+
|
|
285
|
+
# Go up class inheritance and builds lookup structure in memory
|
|
286
|
+
until direct_subclasses.include?(klass)
|
|
287
|
+
lookup << klass.send(:all_tasks) # one place we want to call private all_tasks method
|
|
288
|
+
klass = klass.superclass
|
|
289
|
+
end
|
|
290
|
+
merged_tasks = ActiveSupport::OrderedHash.new
|
|
291
|
+
# Go back down the class inheritance chain in reverse order and merge the tasks
|
|
292
|
+
lookup.reverse.each do |tasks_hash|
|
|
293
|
+
# tasks_hash is a result of all_tasks. Example: PostsController.all_tasks
|
|
294
|
+
merged_tasks.merge!(tasks_hash)
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
# The cfn builders required the right final child class to build the lambda functions correctly.
|
|
298
|
+
merged_tasks.each do |meth, task|
|
|
299
|
+
# Override the class name for the cfn builders
|
|
300
|
+
task = task.clone # do not stomp over current tasks since things are usually looked by reference
|
|
301
|
+
task.instance_variable_set(:@class_name, self.name)
|
|
302
|
+
merged_tasks[meth] = task
|
|
303
|
+
end
|
|
304
|
+
|
|
305
|
+
# Methods can be made private with the :private keyword after the method has been defined.
|
|
306
|
+
# To account for this, loop back thorugh all the methods and check if the method is indeed public.
|
|
307
|
+
tasks = ActiveSupport::OrderedHash.new
|
|
308
|
+
merged_tasks.each do |meth, task|
|
|
309
|
+
if public
|
|
310
|
+
tasks[meth] = task if task.public_meth?
|
|
311
|
+
else
|
|
312
|
+
tasks[meth] = task unless task.public_meth?
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
tasks
|
|
316
|
+
end
|
|
317
|
+
memoize :find_all_tasks
|
|
318
|
+
|
|
319
|
+
def all_public_tasks
|
|
320
|
+
find_all_tasks(public: true)
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
def all_private_tasks
|
|
324
|
+
find_all_tasks(public: false)
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
# Returns the tasks for this class in Array form.
|
|
328
|
+
#
|
|
329
|
+
# ==== Returns
|
|
330
|
+
# Array of task objects
|
|
331
|
+
#
|
|
332
|
+
def tasks
|
|
333
|
+
all_public_tasks.values
|
|
334
|
+
end
|
|
335
|
+
|
|
336
|
+
# The public methods defined in the project app class ulimately become
|
|
337
|
+
# lambda functions.
|
|
338
|
+
#
|
|
339
|
+
# Example return value:
|
|
340
|
+
# [:index, :new, :create, :show]
|
|
341
|
+
def lambda_functions
|
|
342
|
+
all_public_tasks.keys
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
# Used in Jets::Cfn::Builders::Interface#build
|
|
346
|
+
# Overridden in rule/dsl.rb
|
|
347
|
+
def build?
|
|
348
|
+
!tasks.empty?
|
|
349
|
+
end
|
|
350
|
+
|
|
351
|
+
# Polymorphic support
|
|
352
|
+
def defpoly(lang, meth)
|
|
353
|
+
register_task(meth, lang)
|
|
354
|
+
end
|
|
355
|
+
|
|
356
|
+
def python(meth)
|
|
357
|
+
defpoly(:python, meth)
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
def node(meth)
|
|
361
|
+
defpoly(:node, meth)
|
|
362
|
+
end
|
|
363
|
+
end # end of class << self
|
|
364
|
+
end # end of included
|
|
365
|
+
|
|
366
|
+
def self.add_custom_resource_extensions(base)
|
|
367
|
+
base_path = "#{Jets.root}/app/extensions"
|
|
368
|
+
unless ActiveSupport::Dependencies.autoload_paths.include?(base_path)
|
|
369
|
+
ActiveSupport::Dependencies.autoload_paths += [base_path]
|
|
370
|
+
end
|
|
371
|
+
|
|
372
|
+
Dir.glob("#{base_path}/**/*.rb").each do |path|
|
|
373
|
+
next unless File.file?(path)
|
|
374
|
+
|
|
375
|
+
class_name = path.sub("#{base_path}/", '').sub(/\.rb/,'').classify
|
|
376
|
+
klass = class_name.constantize # autoload
|
|
377
|
+
base.extend(klass)
|
|
378
|
+
end
|
|
379
|
+
end
|
|
380
|
+
|
|
381
|
+
def self.included(base)
|
|
382
|
+
add_custom_resource_extensions(base)
|
|
383
|
+
end
|
|
384
|
+
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)
|
|
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.classify
|
|
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
|
+
|