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,235 @@
|
|
|
1
|
+
require "bundler" # for clean_old_submodules only
|
|
2
|
+
|
|
3
|
+
module Jets::Builders
|
|
4
|
+
class RubyPackager
|
|
5
|
+
include Util
|
|
6
|
+
|
|
7
|
+
attr_reader :full_app_root
|
|
8
|
+
def initialize(relative_app_root)
|
|
9
|
+
@full_app_root = "#{build_area}/#{relative_app_root}"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def install
|
|
13
|
+
return unless gemfile_exist?
|
|
14
|
+
|
|
15
|
+
clean_old_submodules
|
|
16
|
+
bundle_install
|
|
17
|
+
copy_bundle_config
|
|
18
|
+
copy_cache_gems
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# build gems in vendor/gems/ruby/2.5.0 (done in install phase)
|
|
22
|
+
def finish
|
|
23
|
+
return unless gemfile_exist?
|
|
24
|
+
tidy
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def gemfile_exist?
|
|
28
|
+
gemfile_path = "#{@full_app_root}/Gemfile"
|
|
29
|
+
File.exist?(gemfile_path)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Installs gems on the current target system: both compiled and non-compiled.
|
|
33
|
+
# If user is on a macosx machine, macosx gems will be installed.
|
|
34
|
+
# If user is on a linux machine, linux gems will be installed.
|
|
35
|
+
#
|
|
36
|
+
# Copies Gemfile* to /tmp/jets/demo/cache folder and installs
|
|
37
|
+
# gems with bundle install from there.
|
|
38
|
+
#
|
|
39
|
+
# We take the time to copy Gemfile and bundle into a separate directory
|
|
40
|
+
# because it gets left around to act as a 'cache'. So, when the builds the
|
|
41
|
+
# project gets built again not all the gems from get installed from the
|
|
42
|
+
# beginning.
|
|
43
|
+
def bundle_install
|
|
44
|
+
full_project_path = @full_app_root
|
|
45
|
+
headline "Bundling: running bundle install in cache area: #{cache_area}."
|
|
46
|
+
|
|
47
|
+
copy_gemfiles(full_project_path)
|
|
48
|
+
copy_bundled_gems(full_project_path)
|
|
49
|
+
|
|
50
|
+
# Uncomment out to always remove the cache/vendor/gems to debug
|
|
51
|
+
# FileUtils.rm_rf("#{cache_area}/vendor/gems")
|
|
52
|
+
|
|
53
|
+
# Remove .bundle folder so .bundle/config doesnt affect how Jets packages gems.
|
|
54
|
+
# Not using BUNDLE_IGNORE_CONFIG=1 to allow home ~/.bundle/config to affect bundling though.
|
|
55
|
+
# This is useful if you have private gems sources that require authentication. Example:
|
|
56
|
+
#
|
|
57
|
+
# bundle config gems.myprivatesource.com user:pass
|
|
58
|
+
#
|
|
59
|
+
|
|
60
|
+
create_bundle_config
|
|
61
|
+
require "bundler" # dynamically require bundler so user can use any bundler
|
|
62
|
+
Bundler.with_unbundled_env do
|
|
63
|
+
sh(
|
|
64
|
+
"cd #{cache_area} && " \
|
|
65
|
+
"env bundle install"
|
|
66
|
+
)
|
|
67
|
+
end
|
|
68
|
+
create_bundle_config(frozen: true)
|
|
69
|
+
|
|
70
|
+
rewrite_gemfile_lock("#{cache_area}/Gemfile.lock")
|
|
71
|
+
|
|
72
|
+
# Copy the Gemfile.lock back to the project in case it was updated.
|
|
73
|
+
# For example we add the jets-rails to the Gemfile.
|
|
74
|
+
copy_back_gemfile_lock
|
|
75
|
+
|
|
76
|
+
puts 'Bundle install success.'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def copy_back_gemfile_lock
|
|
80
|
+
src = "#{cache_area}/Gemfile.lock"
|
|
81
|
+
dest = "#{@full_app_root}/Gemfile.lock"
|
|
82
|
+
FileUtils.cp(src, dest)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Clean up extra unneeded files to reduce package size
|
|
86
|
+
# Because we're removing files (something dangerous) use full paths.
|
|
87
|
+
def tidy
|
|
88
|
+
puts "Tidying project: removing ignored files to reduce package size."
|
|
89
|
+
tidy_project(@full_app_root)
|
|
90
|
+
# The rack sub project has it's own gitignore.
|
|
91
|
+
tidy_project(@full_app_root+"/rack")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def tidy_project(path)
|
|
95
|
+
Tidy.new(path).cleanup!
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# When using submodules, bundler leaves old submodules behind. Over time this inflates
|
|
99
|
+
# the size of the the cache gems. So we'll clean it up.
|
|
100
|
+
def clean_old_submodules
|
|
101
|
+
# https://stackoverflow.com/questions/38800129/parsing-a-gemfile-lock-with-bundler
|
|
102
|
+
lockfile = "#{cache_area}/Gemfile.lock"
|
|
103
|
+
return unless File.exist?(lockfile)
|
|
104
|
+
|
|
105
|
+
return if Bundler.bundler_major_version <= 1 # LockfileParser only works for Bundler version 2+
|
|
106
|
+
|
|
107
|
+
parser = Bundler::LockfileParser.new(Bundler.read_file(lockfile))
|
|
108
|
+
specs = parser.specs
|
|
109
|
+
|
|
110
|
+
# specs = Bundler.load.specs
|
|
111
|
+
# IE: spec.source.to_s: "https://github.com/tongueroo/webpacker.git (at jets@a8c4661)"
|
|
112
|
+
submoduled_specs = specs.select do |spec|
|
|
113
|
+
spec.source.to_s =~ /@\w+\)/
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# find git shas to keep
|
|
117
|
+
# IE: ["a8c4661", "abc4661"]
|
|
118
|
+
git_shas = submoduled_specs.map do |spec|
|
|
119
|
+
md = spec.source.to_s.match(/@(\w+)\)/)
|
|
120
|
+
md[1] # git_sha
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# IE: /tmp/jets/demo/cache/vendor/gems/ruby/2.5.0/bundler/gems/webpacker-a8c46614c675
|
|
124
|
+
Dir.glob("#{cache_area}/vendor/gems/ruby/2.5.0/bundler/gems/*").each do |path|
|
|
125
|
+
sha = path.split('-').last[0..6] # only first 7 chars of the git sha
|
|
126
|
+
unless git_shas.include?(sha)
|
|
127
|
+
# puts "Removing old submoduled gem: #{path}" # uncomment to see and debug
|
|
128
|
+
FileUtils.rm_rf(path) # REMOVE old submodule directory
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def copy_bundled_gems(full_project_path)
|
|
134
|
+
src = "#{full_project_path}/bundled_gems"
|
|
135
|
+
return unless File.exist?(src)
|
|
136
|
+
Jets::Util.cp_r(src, "#{cache_area}/bundled_gems")
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def copy_gemfiles(full_project_path)
|
|
140
|
+
FileUtils.mkdir_p(cache_area)
|
|
141
|
+
FileUtils.cp("#{full_project_path}/Gemfile", "#{cache_area}/Gemfile")
|
|
142
|
+
|
|
143
|
+
gemfile_lock = "#{full_project_path}/Gemfile.lock"
|
|
144
|
+
dest = "#{cache_area}/Gemfile.lock"
|
|
145
|
+
return unless File.exist?(gemfile_lock)
|
|
146
|
+
|
|
147
|
+
FileUtils.cp(gemfile_lock, dest)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Remove the BUNDLED WITH line since we don't control the bundler gem version on AWS Lambda
|
|
151
|
+
# And this can cause issues with require 'bundler/setup'
|
|
152
|
+
def rewrite_gemfile_lock(gemfile_lock)
|
|
153
|
+
lines = IO.readlines(gemfile_lock)
|
|
154
|
+
|
|
155
|
+
# Remove BUNDLED WITH
|
|
156
|
+
# amount is the number of lines to remove
|
|
157
|
+
new_lines, capture, count, amount = [], true, 0, 2
|
|
158
|
+
lines.each do |l|
|
|
159
|
+
capture = false if l.include?('BUNDLED WITH')
|
|
160
|
+
if capture
|
|
161
|
+
new_lines << l
|
|
162
|
+
end
|
|
163
|
+
if capture == false
|
|
164
|
+
count += 1
|
|
165
|
+
capture = count > amount # renable capture
|
|
166
|
+
end
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Replace things like nokogiri (1.11.1-x86_64-darwin) => nokogiri (1.11.1)
|
|
170
|
+
lines, new_lines = new_lines, []
|
|
171
|
+
lines.each do |l|
|
|
172
|
+
if l.include?("-x86_64-darwin")
|
|
173
|
+
l = l.sub('-x86_64-darwin','')
|
|
174
|
+
end
|
|
175
|
+
new_lines << l
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
# Make sure platform is ruby
|
|
179
|
+
lines, new_lines, marker = new_lines, [], false
|
|
180
|
+
lines.each do |l|
|
|
181
|
+
if marker # the next loop has the platform we want to replace
|
|
182
|
+
new_lines << " ruby\n"
|
|
183
|
+
marker = false
|
|
184
|
+
next
|
|
185
|
+
end
|
|
186
|
+
marker = l.include?('PLATFORMS')
|
|
187
|
+
new_lines << l
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
content = new_lines.join('')
|
|
191
|
+
IO.write(gemfile_lock, content)
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def copy_bundle_config
|
|
195
|
+
# Override project's .bundle/config and ensure that .bundle/config matches
|
|
196
|
+
# at these 2 spots:
|
|
197
|
+
# app_root/.bundle/config
|
|
198
|
+
# vendor/gems/.bundle/config
|
|
199
|
+
cache_bundle_config = "#{cache_area}/.bundle/config"
|
|
200
|
+
app_bundle_config = "#{@full_app_root}/.bundle/config"
|
|
201
|
+
FileUtils.mkdir_p(File.dirname(app_bundle_config))
|
|
202
|
+
FileUtils.cp(cache_bundle_config, app_bundle_config)
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# On circleci the "#{Jets.build_root}/.bundle/config" doesnt exist
|
|
206
|
+
# this only happens with ssh debugging, not when the ci.sh script gets ran.
|
|
207
|
+
# But on macosx it exists.
|
|
208
|
+
# Dont know why this is the case.
|
|
209
|
+
def create_bundle_config(frozen: false)
|
|
210
|
+
FileUtils.rm_rf("#{cache_area}/.bundle")
|
|
211
|
+
frozen_line = %Q|BUNDLE_FROZEN: "true"\n| if frozen
|
|
212
|
+
text =<<-EOL
|
|
213
|
+
---
|
|
214
|
+
#{frozen_line}BUNDLE_PATH: "vendor/gems"
|
|
215
|
+
BUNDLE_WITHOUT: "development:test"
|
|
216
|
+
EOL
|
|
217
|
+
bundle_config = "#{cache_area}/.bundle/config"
|
|
218
|
+
FileUtils.mkdir_p(File.dirname(bundle_config))
|
|
219
|
+
IO.write(bundle_config, text)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def copy_cache_gems
|
|
223
|
+
vendor_gems = "#{@full_app_root}/vendor/gems"
|
|
224
|
+
if File.exist?(vendor_gems)
|
|
225
|
+
puts "Removing current vendor_gems from project"
|
|
226
|
+
FileUtils.rm_rf(vendor_gems)
|
|
227
|
+
end
|
|
228
|
+
# Leave #{Jets.build_root}/vendor_gems behind to act as cache
|
|
229
|
+
if File.exist?("#{cache_area}/vendor/gems")
|
|
230
|
+
FileUtils.mkdir_p(File.dirname(vendor_gems))
|
|
231
|
+
Jets::Util.cp_r("#{cache_area}/vendor/gems", vendor_gems)
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Jets::Builders::ShimVars::Shared.new(path)
|
|
2
|
+
#
|
|
3
|
+
# @vars.functions.each do |function_name|
|
|
4
|
+
# @vars.handler_for(function_name)
|
|
5
|
+
# end
|
|
6
|
+
#
|
|
7
|
+
# Implements:
|
|
8
|
+
#
|
|
9
|
+
# functions: IE [:index, :show]
|
|
10
|
+
# handler_for(function_name): IE handlers/controllers/posts_controller.index
|
|
11
|
+
# dest_path: IE: handlers/controllers/posts_controller.js
|
|
12
|
+
#
|
|
13
|
+
module Jets::Builders::ShimVars
|
|
14
|
+
class App < Base
|
|
15
|
+
# Allow user to specify relative or full path. The right path gets used
|
|
16
|
+
# internally. Example paths:
|
|
17
|
+
# app/controllers/posts_controller.rb
|
|
18
|
+
# app/jobs/hard_job.rb
|
|
19
|
+
# /tmp/jets/build/app_root/app/jobs/hard_job.rb
|
|
20
|
+
# /tmp/jets/build/app_root/app/functions/hello.rb
|
|
21
|
+
def initialize(path)
|
|
22
|
+
@full_path = full(path)
|
|
23
|
+
@relative_path = relative(path)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def full(path)
|
|
27
|
+
path = "#{Jets.root}/#{path}" unless path.starts_with?("/")
|
|
28
|
+
path
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def relative(path)
|
|
32
|
+
full_path = full(path)
|
|
33
|
+
full_path.sub("#{Jets.root}/", "")
|
|
34
|
+
.sub(/.*internal\/app/, "app")
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# process_type is key, it will either "controller" or "job".
|
|
39
|
+
# It is used to deduce klass, etc.
|
|
40
|
+
# We get the process_type from the path.
|
|
41
|
+
# Example paths:
|
|
42
|
+
# app/controllers/posts_controller.rb
|
|
43
|
+
# app/jobs/hard_job.rb
|
|
44
|
+
def process_type
|
|
45
|
+
@relative_path.split('/')[1].singularize # controller or job
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Returns the public methods of the child_class.
|
|
49
|
+
# Example: [:create, :update]
|
|
50
|
+
def functions
|
|
51
|
+
klass.lambda_functions
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Examples: PostsController, HardJob, Hello, HelloFunction
|
|
55
|
+
def klass
|
|
56
|
+
@klass ||= Jets::Klass.from_path(@relative_path)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def lang(meth)
|
|
60
|
+
klass.tasks.find
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# This gets called in the node shim js template
|
|
64
|
+
# IE handlers/controllers/posts_controller.index
|
|
65
|
+
def handler_for(meth)
|
|
66
|
+
# possibly not include _function
|
|
67
|
+
underscored_name = @relative_path.sub(%r{app/(\w+)/},'').sub('.rb','')
|
|
68
|
+
"handlers/#{process_type.pluralize}/#{underscored_name}.#{meth}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Example return: "handlers/controllers/posts.js"
|
|
72
|
+
# TODO: rename this to dest_path or something better now since using native ruby
|
|
73
|
+
def dest_path
|
|
74
|
+
@relative_path
|
|
75
|
+
.sub("app", "handlers")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Jets::Builders::ShimVars
|
|
2
|
+
class Base
|
|
3
|
+
include Jets::AwsServices
|
|
4
|
+
extend Memoist
|
|
5
|
+
|
|
6
|
+
def s3_bucket
|
|
7
|
+
Jets.aws.s3_bucket
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def rack_zip
|
|
11
|
+
checksum_zip(:rack)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def bundled_zip
|
|
15
|
+
checksum_zip(:bundled)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
def checksum_zip(name)
|
|
20
|
+
checksum = Jets::Builders::Md5.checksums["stage/#{name}"]
|
|
21
|
+
return unless checksum
|
|
22
|
+
"#{name}-#{checksum}.zip"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Jets::Builders::ShimVars::Shared.new(fun)
|
|
2
|
+
#
|
|
3
|
+
# @deducer.functions.each do |function_name|
|
|
4
|
+
# @deducer.handler_for(function_name)
|
|
5
|
+
# end
|
|
6
|
+
#
|
|
7
|
+
# Implements:
|
|
8
|
+
#
|
|
9
|
+
# functions: IE [:index, :show]
|
|
10
|
+
# handler_for(function_name): IE handlers/controllers/posts_controller.index
|
|
11
|
+
# dest_path: IE: handlers/controllers/posts_controller.js
|
|
12
|
+
#
|
|
13
|
+
module Jets::Builders::ShimVars
|
|
14
|
+
class Shared < Base
|
|
15
|
+
# fun is a Jets::Stack::Function
|
|
16
|
+
def initialize(fun)
|
|
17
|
+
@fun = fun
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Always only one element for shared functions
|
|
21
|
+
# functions: IE [:handle]
|
|
22
|
+
def functions
|
|
23
|
+
[@fun.meth] # function_names
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Dont need function_name arg but keeping the same interface as parent class
|
|
27
|
+
# IE handlers/shared/functions/bob.handle
|
|
28
|
+
def handler_for(function_name)
|
|
29
|
+
@fun.handler_dest
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# IE handlers/shared/functions/bob.js
|
|
33
|
+
def dest_path
|
|
34
|
+
@fun.handler_dest
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require "bundler/setup"
|
|
2
|
+
require "jets"
|
|
3
|
+
Jets.once # runs once in lambda execution context
|
|
4
|
+
|
|
5
|
+
<% @vars.functions.each do |function_name|
|
|
6
|
+
handler = @vars.handler_for(function_name)
|
|
7
|
+
meth = handler.split('.').last
|
|
8
|
+
-%>
|
|
9
|
+
def <%= meth -%>(event:, context:)
|
|
10
|
+
Jets.process(event, context, "<%= handler -%>")
|
|
11
|
+
end
|
|
12
|
+
<% end %>
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Jets::Builders
|
|
2
|
+
class Tidy
|
|
3
|
+
include Util
|
|
4
|
+
|
|
5
|
+
def initialize(project_root, noop: false)
|
|
6
|
+
@project_root = project_root
|
|
7
|
+
@noop = noop
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def cleanup!
|
|
11
|
+
removals.each do |removal|
|
|
12
|
+
removal = removal.sub(%r{^/},'') # remove leading slash
|
|
13
|
+
path = "#{@project_root}/#{removal}"
|
|
14
|
+
rm_rf(path)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
clean_vendor_gems
|
|
18
|
+
clean_webpack_assets
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Clean out unnecessary src and compiled packs because Jets serves them out of s3.
|
|
22
|
+
# This keeps the code size down to help keep it in size limit so we can use the
|
|
23
|
+
# live Lambda console editor.
|
|
24
|
+
def clean_webpack_assets
|
|
25
|
+
FileUtils.rm_rf("#{@project_root}/app/javascript/src")
|
|
26
|
+
|
|
27
|
+
return unless File.exist?("#{@project_root}/public/packs") # this class works for rack subfolder too
|
|
28
|
+
FileUtils.mv("#{@project_root}/public/packs/manifest.json", "#{stage_area}/manifest.json")
|
|
29
|
+
FileUtils.rm_rf("#{@project_root}/public/packs")
|
|
30
|
+
FileUtils.mkdir_p("#{@project_root}/public/packs")
|
|
31
|
+
FileUtils.mv("#{stage_area}/manifest.json", "#{@project_root}/public/packs/manifest.json")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def removals
|
|
35
|
+
removals = always_removals
|
|
36
|
+
removals += get_removals("#{@project_root}/.gitignore")
|
|
37
|
+
removals += get_removals("#{@project_root}/.dockerignore")
|
|
38
|
+
removals += get_removals("#{@project_root}/.jetsignore")
|
|
39
|
+
removals = removals.reject do |p|
|
|
40
|
+
jetskeep.find do |keep|
|
|
41
|
+
p == keep
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
removals.uniq
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def get_removals(file)
|
|
48
|
+
path = file
|
|
49
|
+
return [] unless File.exist?(path)
|
|
50
|
+
|
|
51
|
+
removal = File.read(path).split("\n")
|
|
52
|
+
removal.map {|i| i.strip}.reject {|i| i =~ /^#/ || i.empty?}
|
|
53
|
+
# IE: ["/handlers", "/bundled*", "/vendor/jets]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# We clean out ignored files pretty aggressively. So provide
|
|
57
|
+
# a way for users to keep files from being cleaned out.
|
|
58
|
+
def jetskeep
|
|
59
|
+
always = %w[.bundle /public/packs /public/packs-test vendor]
|
|
60
|
+
path = "#{@project_root}/.jetskeep"
|
|
61
|
+
return always unless File.exist?(path)
|
|
62
|
+
|
|
63
|
+
keep = IO.readlines(path)
|
|
64
|
+
keep = keep.map {|i| i.strip}.reject { |i| i =~ /^#/ || i.empty? }
|
|
65
|
+
(always + keep).uniq
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# folders to remove in the vendor/gems folder regardless of the level of the folder
|
|
69
|
+
def clean_vendor_gems
|
|
70
|
+
# Thanks: https://stackoverflow.com/questions/11385795/ruby-list-directory-with-dir-including-dotfiles-but-not-and
|
|
71
|
+
Dir.glob("#{@project_root}/vendor/gems/**/*", File::FNM_DOTMATCH).each do |path|
|
|
72
|
+
next unless File.directory?(path)
|
|
73
|
+
dir = File.basename(path)
|
|
74
|
+
next unless always_removals.include?(dir)
|
|
75
|
+
|
|
76
|
+
rm_rf(path)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
remove_gem_cache
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Reason do not remove the cache folder generally is because some gems have
|
|
83
|
+
# actual cache folders that they used.
|
|
84
|
+
def remove_gem_cache
|
|
85
|
+
cache_path = "#{@project_root}/vendor/gems/ruby/#{Jets.ruby_folder}/cache"
|
|
86
|
+
FileUtils.rm_rf(cache_path)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def rm_rf(path)
|
|
90
|
+
exists = File.exist?("#{path}/.gitkeep") || File.exist?("#{path}/.keep")
|
|
91
|
+
return if exists
|
|
92
|
+
|
|
93
|
+
# say " rm -rf #{path}".color(:yellow) # uncomment to debug
|
|
94
|
+
system("rm -rf #{path}") unless @noop
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# These directories will be removed regardless of dir level
|
|
98
|
+
def always_removals
|
|
99
|
+
%w[.git spec tmp]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def say(message)
|
|
103
|
+
message = "NOOP #{message}" if @noop
|
|
104
|
+
puts message
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Jets::Builders
|
|
2
|
+
module Util
|
|
3
|
+
private
|
|
4
|
+
def sh(command)
|
|
5
|
+
puts "=> #{command}".color(:green)
|
|
6
|
+
success = system(command)
|
|
7
|
+
unless success
|
|
8
|
+
puts "#{command} failed to run.".color(:red)
|
|
9
|
+
puts caller[0]
|
|
10
|
+
exit 1
|
|
11
|
+
end
|
|
12
|
+
success
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def headline(message)
|
|
16
|
+
puts "=> #{message}".color(:cyan)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def build_area
|
|
20
|
+
Jets.build_root
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def stage_area
|
|
24
|
+
"#{build_area}/stage"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def cache_area
|
|
28
|
+
"#{build_area}/cache" # cleaner to use full path for this setting
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/jets/bundle.rb
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
require "jets/turbo"
|
|
2
|
+
|
|
3
|
+
module Jets
|
|
4
|
+
# Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
|
|
5
|
+
module Bundle
|
|
6
|
+
# Looks like for zeitwerk module autovivification to work `bundle exec` must be called.
|
|
7
|
+
# This allows zeitwork module autovivification to work even if the user has not called jets with `bundle exec jets`.
|
|
8
|
+
# Bundler.setup is essentially the same as `bundle exec`
|
|
9
|
+
# Reference: https://www.justinweiss.com/articles/what-are-the-differences-between-irb/
|
|
10
|
+
#
|
|
11
|
+
# The Bundler.setup is only necessary because we use Bundler.require after require "zeitwerk" is called.
|
|
12
|
+
#
|
|
13
|
+
# Note, this is called super early right before require "zeitwerk"
|
|
14
|
+
# The initially Bundler.setup does not include the Jets.env group.
|
|
15
|
+
# Later in Jets::Booter, Bundle.require is called and includes the Jets.env group.
|
|
16
|
+
#
|
|
17
|
+
def setup
|
|
18
|
+
return unless jets_project?
|
|
19
|
+
return unless bundler_enabled?
|
|
20
|
+
Kernel.require "bundler/setup"
|
|
21
|
+
Bundler.setup # Same as Bundler.setup(:default)
|
|
22
|
+
rescue LoadError => e
|
|
23
|
+
handle_error(e)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Bundler.require called when environment boots up via Jets.boot. This will eagerly require all gems in the
|
|
27
|
+
# Gemfile. This means the user will not have to explictly require dependencies.
|
|
28
|
+
#
|
|
29
|
+
# It also useful for when to loading Rake tasks in Jets::Commands::RakeTasks.load! For example, some gems like
|
|
30
|
+
# webpacker that load rake tasks are specified with a git based source:
|
|
31
|
+
#
|
|
32
|
+
# gem "webpacker", git: "https://github.com/tongueroo/webpacker.git"
|
|
33
|
+
#
|
|
34
|
+
# This results in the user having to specific bundle exec in front of jets for those rake tasks to show up in
|
|
35
|
+
# jets help. Instead, when the user is within the project folder, jets automatically requires bundler for the
|
|
36
|
+
# user. So the rake tasks show up when calling jets help.
|
|
37
|
+
#
|
|
38
|
+
# When the user calls jets help from outside the project folder, bundler is not used and the load errors get
|
|
39
|
+
# rescued gracefully. This is done in Jets::Commands::RakeTasks.load! In the case when user is in another
|
|
40
|
+
# project with another Gemfile, the load errors will also be rescued.
|
|
41
|
+
def require
|
|
42
|
+
return unless jets_project?
|
|
43
|
+
return unless bundler_enabled?
|
|
44
|
+
Kernel.require "bundler/setup"
|
|
45
|
+
Bundler.require(*bundler_groups)
|
|
46
|
+
rescue LoadError => e
|
|
47
|
+
handle_error(e)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def handle_error(e)
|
|
51
|
+
puts e.message
|
|
52
|
+
puts <<~EOL.color(:yellow)
|
|
53
|
+
WARNING: Unable to require "bundler/setup"
|
|
54
|
+
There may be something funny with your ruby and bundler setup.
|
|
55
|
+
You can try upgrading bundler and rubygems:
|
|
56
|
+
|
|
57
|
+
gem update --system
|
|
58
|
+
gem install bundler
|
|
59
|
+
|
|
60
|
+
Here are some links that may be helpful:
|
|
61
|
+
|
|
62
|
+
* https://bundler.io/blog/2019/01/03/announcing-bundler-2.html
|
|
63
|
+
* https://community.rubyonjets.com/t/jets-1-9-8-install-issue-bundler-setup-missing/185/2
|
|
64
|
+
|
|
65
|
+
Also, running bundle exec in front of your command may remove this message.
|
|
66
|
+
EOL
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Also check for Afterburner mode since in that mode jets is a standalone tool.
|
|
70
|
+
def bundler_enabled?
|
|
71
|
+
!Jets::Turbo.afterburner? && gemfile?
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def gemfile?
|
|
75
|
+
ENV['BUNDLE_GEMFILE'] || File.exist?("Gemfile")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def bundler_groups
|
|
79
|
+
[:default, Jets.env.to_sym]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def jets_project?
|
|
83
|
+
File.exist?("config/application.rb")
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
extend self
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Jets::Cfn::Builders
|
|
2
|
+
class ApiDeploymentBuilder
|
|
3
|
+
include Interface
|
|
4
|
+
include Jets::AwsServices
|
|
5
|
+
|
|
6
|
+
def initialize(options={})
|
|
7
|
+
@options = options
|
|
8
|
+
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# compose is an interface method
|
|
12
|
+
def compose
|
|
13
|
+
deployment = Jets::Resource::ApiGateway::Deployment.new
|
|
14
|
+
add_resource(deployment)
|
|
15
|
+
add_parameters(deployment.parameters)
|
|
16
|
+
add_outputs(deployment.outputs)
|
|
17
|
+
|
|
18
|
+
add_base_path_mapping
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Because Jets generates a new timestamped logical id for the API Deployment
|
|
22
|
+
# resource it also creates a new root base path mapping and fails. Additionally,
|
|
23
|
+
# the base path mapping depends on the API Deploy for the stage name.
|
|
24
|
+
#
|
|
25
|
+
# We resolve this by using a custom resource that does an in-place update.
|
|
26
|
+
#
|
|
27
|
+
# Note, also tried to change the domain name of to something like demo-dev-[random].mydomain.com
|
|
28
|
+
# but that does not work because the domain name has to match the route53 record exactly.
|
|
29
|
+
#
|
|
30
|
+
def add_base_path_mapping
|
|
31
|
+
return unless Jets.custom_domain?
|
|
32
|
+
|
|
33
|
+
function = Jets::Resource::ApiGateway::BasePath::Function.new
|
|
34
|
+
add_resource(function)
|
|
35
|
+
add_outputs(function.outputs)
|
|
36
|
+
|
|
37
|
+
mapping = Jets::Resource::ApiGateway::BasePath::Mapping.new
|
|
38
|
+
add_resource(mapping)
|
|
39
|
+
add_outputs(mapping.outputs)
|
|
40
|
+
|
|
41
|
+
iam_role = Jets::Resource::ApiGateway::BasePath::Role.new
|
|
42
|
+
add_resource(iam_role)
|
|
43
|
+
add_outputs(iam_role.outputs)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# template_path is an interface method
|
|
47
|
+
def template_path
|
|
48
|
+
Jets::Naming.api_deployment_template_path
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# do not bother writing a template if routes are empty
|
|
52
|
+
def write
|
|
53
|
+
super unless Jets::Router.routes.empty?
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|