jets_bb_fork 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.circleci/bin/commit_docs.sh +26 -0
- data/.circleci/config.yml +126 -0
- data/.codebuild/README.md +68 -0
- data/.codebuild/bin/jets +3 -0
- data/.codebuild/buildspec-base.yml +14 -0
- data/.codebuild/integration.sh +72 -0
- data/.codebuild/jets.postman_collection.json +323 -0
- data/.codebuild/scripts/install-docker.sh +12 -0
- data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
- data/.codebuild/scripts/install-java.sh +22 -0
- data/.codebuild/scripts/install-node.sh +4 -0
- data/.github/ISSUE_TEMPLATE.md +7 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
- data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
- data/.github/ISSUE_TEMPLATE/question.md +16 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
- data/.gitignore +24 -0
- data/.gitmodules +0 -0
- data/.python-version +1 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +734 -0
- data/CONDUCT.md +1 -0
- data/CONTRIBUTING.md +1 -0
- data/Dockerfile +16 -0
- data/Dockerfile.base +53 -0
- data/Gemfile +14 -0
- data/Guardfile +22 -0
- data/LICENSE.txt +22 -0
- data/Procfile +2 -0
- data/README.md +203 -0
- data/Rakefile +24 -0
- data/backers.md +16 -0
- data/bin/release +9 -0
- data/buildspec.yml +18 -0
- data/exe/jets_bb_fork +14 -0
- data/jets.gemspec +68 -0
- data/lib/jets.rb +27 -0
- data/lib/jets/application.rb +216 -0
- data/lib/jets/application/defaults.rb +172 -0
- data/lib/jets/autoloaders.rb +97 -0
- data/lib/jets/aws_info.rb +113 -0
- data/lib/jets/aws_services.rb +65 -0
- data/lib/jets/aws_services/global_memoist.rb +57 -0
- data/lib/jets/aws_services/s3_bucket.rb +34 -0
- data/lib/jets/aws_services/stack_status.rb +59 -0
- data/lib/jets/booter.rb +119 -0
- data/lib/jets/builders/code_builder.rb +399 -0
- data/lib/jets/builders/code_size.rb +57 -0
- data/lib/jets/builders/gem_replacer.rb +76 -0
- data/lib/jets/builders/handler_generator.rb +186 -0
- data/lib/jets/builders/lambda_layer.rb +69 -0
- data/lib/jets/builders/md5.rb +60 -0
- data/lib/jets/builders/md5_zip.rb +61 -0
- data/lib/jets/builders/purger.rb +35 -0
- data/lib/jets/builders/rack_packager.rb +51 -0
- data/lib/jets/builders/rackup_wrappers/rackup +19 -0
- data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
- data/lib/jets/builders/reconfigure_rails.rb +114 -0
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
- data/lib/jets/builders/ruby_packager.rb +207 -0
- data/lib/jets/builders/shim_vars/app.rb +78 -0
- data/lib/jets/builders/shim_vars/base.rb +25 -0
- data/lib/jets/builders/shim_vars/shared.rb +37 -0
- data/lib/jets/builders/templates/handler.rb +12 -0
- data/lib/jets/builders/tidy.rb +107 -0
- data/lib/jets/builders/util.rb +31 -0
- data/lib/jets/bundle.rb +82 -0
- data/lib/jets/camelizer.rb +71 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
- data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
- data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
- data/lib/jets/cfn/builders/controller_builder.rb +42 -0
- data/lib/jets/cfn/builders/function_builder.rb +14 -0
- data/lib/jets/cfn/builders/interface.rb +137 -0
- data/lib/jets/cfn/builders/job_builder.rb +14 -0
- data/lib/jets/cfn/builders/paged.rb +37 -0
- data/lib/jets/cfn/builders/parent_builder.rb +100 -0
- data/lib/jets/cfn/builders/rule_builder.rb +24 -0
- data/lib/jets/cfn/builders/shared_builder.rb +14 -0
- data/lib/jets/cfn/ship.rb +185 -0
- data/lib/jets/cfn/status.rb +212 -0
- data/lib/jets/cfn/upload.rb +139 -0
- data/lib/jets/cli.rb +194 -0
- data/lib/jets/commands/base.rb +146 -0
- data/lib/jets/commands/build.rb +234 -0
- data/lib/jets/commands/call.rb +169 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
- data/lib/jets/commands/call/autoload_guesser.rb +136 -0
- data/lib/jets/commands/call/base_guesser.rb +60 -0
- data/lib/jets/commands/call/guesser.rb +48 -0
- data/lib/jets/commands/clean.rb +19 -0
- data/lib/jets/commands/clean/base.rb +24 -0
- data/lib/jets/commands/clean/build.rb +13 -0
- data/lib/jets/commands/clean/log.rb +107 -0
- data/lib/jets/commands/console.rb +12 -0
- data/lib/jets/commands/db.rb +13 -0
- data/lib/jets/commands/db/environment-task.rake +3 -0
- data/lib/jets/commands/db/tasks.rb +44 -0
- data/lib/jets/commands/dbconsole.rb +131 -0
- data/lib/jets/commands/delete.rb +143 -0
- data/lib/jets/commands/deploy.rb +141 -0
- data/lib/jets/commands/dynamodb.rb +19 -0
- data/lib/jets/commands/dynamodb/migrate.rb +9 -0
- data/lib/jets/commands/dynamodb/migrator.rb +36 -0
- data/lib/jets/commands/gems.rb +21 -0
- data/lib/jets/commands/help.rb +9 -0
- data/lib/jets/commands/help/build.md +6 -0
- data/lib/jets/commands/help/call.md +61 -0
- data/lib/jets/commands/help/clean/build.md +5 -0
- data/lib/jets/commands/help/clean/log.md +5 -0
- data/lib/jets/commands/help/console.md +18 -0
- data/lib/jets/commands/help/db/generate.md +8 -0
- data/lib/jets/commands/help/dbconsole.md +9 -0
- data/lib/jets/commands/help/delete.md +22 -0
- data/lib/jets/commands/help/deploy.md +32 -0
- data/lib/jets/commands/help/destroy.md +16 -0
- data/lib/jets/commands/help/dynamodb/generate.md +52 -0
- data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
- data/lib/jets/commands/help/gems/check.md +8 -0
- data/lib/jets/commands/help/generate.md +22 -0
- data/lib/jets/commands/help/import/rack.md +13 -0
- data/lib/jets/commands/help/import/rails.md +11 -0
- data/lib/jets/commands/help/new.md +42 -0
- data/lib/jets/commands/help/routes.md +16 -0
- data/lib/jets/commands/help/runner.md +17 -0
- data/lib/jets/commands/help/server.md +15 -0
- data/lib/jets/commands/help/status.md +14 -0
- data/lib/jets/commands/help/upgrade.md +5 -0
- data/lib/jets/commands/help/url.md +6 -0
- data/lib/jets/commands/import.rb +12 -0
- data/lib/jets/commands/import/base.rb +49 -0
- data/lib/jets/commands/import/cheatsheet.rb +35 -0
- data/lib/jets/commands/import/rack.rb +16 -0
- data/lib/jets/commands/import/rails.rb +74 -0
- data/lib/jets/commands/import/sequence.rb +90 -0
- data/lib/jets/commands/import/templates/config/database.yml +26 -0
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
- data/lib/jets/commands/main.rb +157 -0
- data/lib/jets/commands/markdown/creator.rb +58 -0
- data/lib/jets/commands/markdown/index.rb +27 -0
- data/lib/jets/commands/markdown/page.rb +125 -0
- data/lib/jets/commands/markdown/shell.rb +11 -0
- data/lib/jets/commands/new.rb +157 -0
- data/lib/jets/commands/rake_command.rb +61 -0
- data/lib/jets/commands/rake_tasks.rb +46 -0
- data/lib/jets/commands/runner.rb +16 -0
- data/lib/jets/commands/sequence.rb +99 -0
- data/lib/jets/commands/stack_info.rb +30 -0
- data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
- data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
- data/lib/jets/commands/templates/skeleton/.rspec +3 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +38 -0
- data/lib/jets/commands/templates/skeleton/Procfile +7 -0
- data/lib/jets/commands/templates/skeleton/README.md +11 -0
- data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
- data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
- data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
- data/lib/jets/commands/templates/skeleton/config.ru +5 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
- data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
- data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
- data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
- data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
- data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
- data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
- data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
- data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
- data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
- data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
- data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
- data/lib/jets/commands/upgrade.rb +145 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
- data/lib/jets/commands/url.rb +68 -0
- data/lib/jets/commands/webpacker_template.rb +18 -0
- data/lib/jets/controller.rb +3 -0
- data/lib/jets/controller/base.rb +108 -0
- data/lib/jets/controller/callbacks.rb +68 -0
- data/lib/jets/controller/cookies.rb +38 -0
- data/lib/jets/controller/cookies/jar.rb +269 -0
- data/lib/jets/controller/layout.rb +17 -0
- data/lib/jets/controller/middleware/cors.rb +60 -0
- data/lib/jets/controller/middleware/local.rb +116 -0
- data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
- data/lib/jets/controller/middleware/local/route_matcher.rb +106 -0
- data/lib/jets/controller/middleware/main.rb +46 -0
- data/lib/jets/controller/middleware/reloader.rb +15 -0
- data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
- data/lib/jets/controller/params.rb +87 -0
- data/lib/jets/controller/rack/adapter.rb +88 -0
- data/lib/jets/controller/rack/env.rb +105 -0
- data/lib/jets/controller/redirection.rb +55 -0
- data/lib/jets/controller/rendering.rb +79 -0
- data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
- data/lib/jets/controller/request.rb +29 -0
- data/lib/jets/controller/response.rb +61 -0
- data/lib/jets/controller/stage.rb +33 -0
- data/lib/jets/core.rb +149 -0
- data/lib/jets/core_ext/kernel.rb +13 -0
- data/lib/jets/db.rb +15 -0
- data/lib/jets/dotenv.rb +48 -0
- data/lib/jets/dotenv/ssm.rb +48 -0
- data/lib/jets/erb.rb +51 -0
- data/lib/jets/generator.rb +48 -0
- data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
- data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
- data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
- data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
- data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
- data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
- data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
- data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
- data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
- data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
- data/lib/jets/inflections.rb +32 -0
- data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
- data/lib/jets/internal/app/functions/jets/base_path.rb +157 -0
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
- data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
- data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
- data/lib/jets/job/base.rb +39 -0
- data/lib/jets/job/dsl.rb +40 -0
- data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
- data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
- data/lib/jets/job/dsl/iot_event.rb +24 -0
- data/lib/jets/job/dsl/kinesis_event.rb +46 -0
- data/lib/jets/job/dsl/log_event.rb +15 -0
- data/lib/jets/job/dsl/rule_event.rb +75 -0
- data/lib/jets/job/dsl/s3_event.rb +36 -0
- data/lib/jets/job/dsl/sns_event.rb +54 -0
- data/lib/jets/job/dsl/sqs_event.rb +96 -0
- data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
- data/lib/jets/job/helpers/log_event_helper.rb +17 -0
- data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
- data/lib/jets/klass.rb +109 -0
- data/lib/jets/lambda/dsl.rb +419 -0
- data/lib/jets/lambda/function.rb +29 -0
- data/lib/jets/lambda/function_constructor.rb +55 -0
- data/lib/jets/lambda/functions.rb +34 -0
- data/lib/jets/lambda/task.rb +111 -0
- data/lib/jets/logger.rb +21 -0
- data/lib/jets/mega/hash_converter.rb +25 -0
- data/lib/jets/mega/request.rb +139 -0
- data/lib/jets/mega/request/source.rb +21 -0
- data/lib/jets/middleware.rb +33 -0
- data/lib/jets/middleware/configurator.rb +84 -0
- data/lib/jets/middleware/default_stack.rb +51 -0
- data/lib/jets/middleware/layer.rb +34 -0
- data/lib/jets/middleware/stack.rb +77 -0
- data/lib/jets/naming.rb +49 -0
- data/lib/jets/overrides/lambda.rb +1 -0
- data/lib/jets/overrides/lambda/marshaller.rb +31 -0
- data/lib/jets/overrides/rails.rb +4 -0
- data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
- data/lib/jets/overrides/rails/common_methods.rb +13 -0
- data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
- data/lib/jets/overrides/rails/url_helper.rb +25 -0
- data/lib/jets/poly_fun.rb +73 -0
- data/lib/jets/poly_fun/base_executor.rb +125 -0
- data/lib/jets/poly_fun/lambda_executor.rb +16 -0
- data/lib/jets/poly_fun/node_error.rb +8 -0
- data/lib/jets/poly_fun/node_executor.rb +54 -0
- data/lib/jets/poly_fun/python_error.rb +8 -0
- data/lib/jets/poly_fun/python_executor.rb +23 -0
- data/lib/jets/preheat.rb +117 -0
- data/lib/jets/processors/deducer.rb +65 -0
- data/lib/jets/processors/main_processor.rb +61 -0
- data/lib/jets/rack_server.rb +86 -0
- data/lib/jets/rdoc.rb +30 -0
- data/lib/jets/resource.rb +71 -0
- data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
- data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
- data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
- data/lib/jets/resource/api_gateway/cors.rb +61 -0
- data/lib/jets/resource/api_gateway/deployment.rb +78 -0
- data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
- data/lib/jets/resource/api_gateway/method.rb +98 -0
- data/lib/jets/resource/api_gateway/resource.rb +101 -0
- data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
- data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
- data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
- data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
- data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
- data/lib/jets/resource/associated.rb +37 -0
- data/lib/jets/resource/base.rb +28 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
- data/lib/jets/resource/child_stack/app_class.rb +107 -0
- data/lib/jets/resource/child_stack/base.rb +24 -0
- data/lib/jets/resource/child_stack/shared.rb +92 -0
- data/lib/jets/resource/config/config_rule.rb +74 -0
- data/lib/jets/resource/config/managed_rule.rb +15 -0
- data/lib/jets/resource/events/rule.rb +31 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +47 -0
- data/lib/jets/resource/iam/class_role.rb +74 -0
- data/lib/jets/resource/iam/function_role.rb +54 -0
- data/lib/jets/resource/iam/managed_policy.rb +22 -0
- data/lib/jets/resource/iam/policy_document.rb +41 -0
- data/lib/jets/resource/iot/topic_rule.rb +34 -0
- data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
- data/lib/jets/resource/lambda/function.rb +214 -0
- data/lib/jets/resource/lambda/function/environment.rb +62 -0
- data/lib/jets/resource/lambda/gem_layer.rb +17 -0
- data/lib/jets/resource/lambda/layer_version.rb +44 -0
- data/lib/jets/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/resource/permission.rb +45 -0
- data/lib/jets/resource/replacer.rb +85 -0
- data/lib/jets/resource/route53/record_set.rb +70 -0
- data/lib/jets/resource/s3/bucket.rb +24 -0
- data/lib/jets/resource/sns/subscription.rb +29 -0
- data/lib/jets/resource/sns/topic.rb +35 -0
- data/lib/jets/resource/sns/topic_policy.rb +40 -0
- data/lib/jets/resource/sqs/queue.rb +21 -0
- data/lib/jets/resource/standardizer.rb +42 -0
- data/lib/jets/route.rb +166 -0
- data/lib/jets/router.rb +177 -0
- data/lib/jets/router/scope.rb +30 -0
- data/lib/jets/rule/base.rb +19 -0
- data/lib/jets/rule/dsl.rb +110 -0
- data/lib/jets/spec_helpers.rb +54 -0
- data/lib/jets/spec_helpers/params.rb +10 -0
- data/lib/jets/spec_helpers/request.rb +78 -0
- data/lib/jets/spec_helpers/response.rb +5 -0
- data/lib/jets/stack.rb +88 -0
- data/lib/jets/stack/builder.rb +43 -0
- data/lib/jets/stack/definition.rb +50 -0
- data/lib/jets/stack/depends.rb +34 -0
- data/lib/jets/stack/depends/item.rb +9 -0
- data/lib/jets/stack/function.rb +69 -0
- data/lib/jets/stack/main.rb +4 -0
- data/lib/jets/stack/main/dsl.rb +28 -0
- data/lib/jets/stack/main/dsl/base.rb +49 -0
- data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
- data/lib/jets/stack/main/dsl/iam.rb +8 -0
- data/lib/jets/stack/main/dsl/lambda.rb +83 -0
- data/lib/jets/stack/main/dsl/s3.rb +12 -0
- data/lib/jets/stack/main/dsl/sns.rb +16 -0
- data/lib/jets/stack/main/dsl/sqs.rb +10 -0
- data/lib/jets/stack/output.rb +35 -0
- data/lib/jets/stack/output/dsl.rb +19 -0
- data/lib/jets/stack/output/lookup.rb +36 -0
- data/lib/jets/stack/parameter.rb +37 -0
- data/lib/jets/stack/parameter/dsl.rb +42 -0
- data/lib/jets/stack/resource.rb +31 -0
- data/lib/jets/stack/resource/dsl.rb +19 -0
- data/lib/jets/stack/s3_event.rb +87 -0
- data/lib/jets/tmp_loader.rb +52 -0
- data/lib/jets/turbine.rb +41 -0
- data/lib/jets/turbo.rb +55 -0
- data/lib/jets/turbo/database_yaml.rb +41 -0
- data/lib/jets/turbo/project/.gitignore +12 -0
- data/lib/jets/turbo/project/.jetskeep +1 -0
- data/lib/jets/turbo/project/Gemfile +16 -0
- data/lib/jets/turbo/project/Rakefile +2 -0
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
- data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
- data/lib/jets/turbo/project/config.ru +5 -0
- data/lib/jets/turbo/project/config/application.rb +4 -0
- data/lib/jets/turbo/project/config/routes.rb +4 -0
- data/lib/jets/turbo/rails.rb +127 -0
- data/lib/jets/turbo/templates/config/database.yml +26 -0
- data/lib/jets/util.rb +38 -0
- data/lib/jets/version.rb +3 -0
- data/readme/prerelease.md +6 -0
- data/readme/testing.md +60 -0
- metadata +1004 -0
data/lib/jets.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
$stdout.sync = true unless ENV["JETS_STDOUT_SYNC"] == "0"
|
|
2
|
+
|
|
3
|
+
$:.unshift(File.expand_path("../", __FILE__))
|
|
4
|
+
require "active_support"
|
|
5
|
+
require "active_support/concern"
|
|
6
|
+
require "active_support/core_ext"
|
|
7
|
+
require "active_support/dependencies"
|
|
8
|
+
require "active_support/ordered_hash"
|
|
9
|
+
require "active_support/ordered_options"
|
|
10
|
+
require "fileutils"
|
|
11
|
+
require "memoist"
|
|
12
|
+
require "rainbow/ext/string"
|
|
13
|
+
require "jets/gems"
|
|
14
|
+
|
|
15
|
+
require "jets/autoloaders"
|
|
16
|
+
Jets::Autoloaders.log! if ENV["JETS_AUTOLOAD_LOG"]
|
|
17
|
+
Jets::Autoloaders.once.setup
|
|
18
|
+
|
|
19
|
+
module Jets
|
|
20
|
+
RUBY_VERSION = "2.5.3"
|
|
21
|
+
MAX_FUNCTION_NAME_SIZE = 64
|
|
22
|
+
|
|
23
|
+
class Error < StandardError; end
|
|
24
|
+
extend Core # root, logger, etc
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Jets::Autoloaders.once.preload("#{__dir__}/jets/db.rb") # required for booter.rb: setup_db
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
require "singleton"
|
|
2
|
+
require "rack"
|
|
3
|
+
|
|
4
|
+
class Jets::Application
|
|
5
|
+
include Singleton
|
|
6
|
+
extend Memoist
|
|
7
|
+
include Jets::Middleware
|
|
8
|
+
include Defaults
|
|
9
|
+
|
|
10
|
+
def configure(&block)
|
|
11
|
+
instance_eval(&block) if block
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def setup!
|
|
15
|
+
load_default_config
|
|
16
|
+
autoload_paths = config.autoload_paths + config.extra_autoload_paths
|
|
17
|
+
setup_auto_load_paths(autoload_paths)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def configs!
|
|
21
|
+
load_environments_config
|
|
22
|
+
load_db_config
|
|
23
|
+
set_iam_policy # relies on dependent values, must be called afterwards
|
|
24
|
+
normalize_env_vars!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# After the mimimal template gets build, we need to reload it for the full stack
|
|
28
|
+
# creation. This allows us to reference IAM policies configs that depend on the
|
|
29
|
+
# creation of the s3 bucket.
|
|
30
|
+
def reload_configs!
|
|
31
|
+
# Tricky: reset only the things that depends on the minimal stack
|
|
32
|
+
@config.iam_policy = nil
|
|
33
|
+
configs!
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def finish!
|
|
37
|
+
deprecated_configs_message
|
|
38
|
+
load_inflections
|
|
39
|
+
load_routes
|
|
40
|
+
|
|
41
|
+
Jets::Controller::Rendering::RackRenderer.setup! # Sets up ActionView etc
|
|
42
|
+
# Load libraries at the end to trigger onload so we can defined options in any order.
|
|
43
|
+
# Only action_mailer library have been used properly this way so far.
|
|
44
|
+
require 'action_mailer'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def load_inflections
|
|
48
|
+
Jets::Inflections.load!
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def config
|
|
52
|
+
@config ||= ActiveSupport::OrderedOptions.new # dont use memoize since we reset @config later
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Double evaling config/application.rb causes subtle issues:
|
|
56
|
+
# * double loading of shared resources: Jets::Stack.subclasses will have the same
|
|
57
|
+
# class twice when config is called when declaring a function
|
|
58
|
+
# * forces us to rescue all exceptions, which is a big hammer
|
|
59
|
+
#
|
|
60
|
+
# Lets parse for the project name instead for now.
|
|
61
|
+
#
|
|
62
|
+
def parse_project_name
|
|
63
|
+
return ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME'] # override
|
|
64
|
+
|
|
65
|
+
lines = IO.readlines("#{Jets.root}/config/application.rb")
|
|
66
|
+
project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ }
|
|
67
|
+
project_name_line.gsub(/.*=/,'').strip.gsub(/["']/,'') # project_name
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def load_default_config
|
|
71
|
+
@config = default_config # sets Jets.config.project_name by calling parse_project_name
|
|
72
|
+
set_computed_configs! # things like project_namespace that need project_name
|
|
73
|
+
Jets::Dotenv.load! # needs Jets.config.project_name when using ssm in dotenv files
|
|
74
|
+
Jets.config.project_name = parse_project_name # Must set again because JETS_PROJECT_NAME is possible
|
|
75
|
+
load_config_application # this overwrites Jets.config.project_name
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def load_config_application
|
|
79
|
+
app_config = "#{Jets.root}/config/application.rb"
|
|
80
|
+
load app_config # use load instead of require so reload_configs! works
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def load_environments_config
|
|
84
|
+
env_file = "#{Jets.root}/config/environments/#{Jets.env}.rb"
|
|
85
|
+
if File.exist?(env_file)
|
|
86
|
+
code = IO.read(env_file)
|
|
87
|
+
instance_eval(code, env_file)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def deprecated_configs_message
|
|
92
|
+
unless config.ruby.lazy_load.nil?
|
|
93
|
+
puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".color(:yellow)
|
|
94
|
+
puts "Deprecated: config.ruby.lazy_load".color(:yellow)
|
|
95
|
+
puts "Gems are now bundled with with Lambda Layer and there's no need to lazy load them."
|
|
96
|
+
puts "Please remove the config in your config/application.rb or config/environments files."
|
|
97
|
+
puts "You can have Jets automatically do this by running:"
|
|
98
|
+
puts " jets upgrade"
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def setup_auto_load_paths(autoload_paths=default_autoload_paths)
|
|
103
|
+
loader = Jets::Autoloaders.main
|
|
104
|
+
autoload_paths.each do |path|
|
|
105
|
+
next unless File.exist?(path)
|
|
106
|
+
loader.push_dir(path)
|
|
107
|
+
end
|
|
108
|
+
loader.enable_reloading if Jets.env.development?
|
|
109
|
+
loader.setup
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def each_app_autoload_path(expression)
|
|
113
|
+
Dir.glob(expression).each do |p|
|
|
114
|
+
p.sub!('./','')
|
|
115
|
+
yield(p) unless exclude_autoload_path?(p)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def exclude_autoload_path?(path)
|
|
120
|
+
path =~ %r{app/javascript} ||
|
|
121
|
+
path =~ %r{app/views} ||
|
|
122
|
+
path =~ %r{/functions} # app and shared
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def internal_autoload_paths
|
|
126
|
+
internal = File.expand_path("../internal", __FILE__)
|
|
127
|
+
paths = %w[
|
|
128
|
+
app/controllers
|
|
129
|
+
app/helpers
|
|
130
|
+
app/jobs
|
|
131
|
+
app/models
|
|
132
|
+
]
|
|
133
|
+
paths.map { |path| "#{internal}/#{path}" }
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Use the shorter name in stack names, but use the full name when it
|
|
137
|
+
# comes to checking for the env.
|
|
138
|
+
#
|
|
139
|
+
# Example:
|
|
140
|
+
#
|
|
141
|
+
# Jets.env: 'development'
|
|
142
|
+
# Jets.config.project_namespace: 'demo-dev'
|
|
143
|
+
ENV_MAP = {
|
|
144
|
+
development: 'dev',
|
|
145
|
+
production: 'prod',
|
|
146
|
+
staging: 'stag',
|
|
147
|
+
}
|
|
148
|
+
def set_computed_configs!
|
|
149
|
+
# env_extra can be also be set with JETS_ENV_EXTRA.
|
|
150
|
+
# JETS_ENV_EXTRA higher precedence than config.env_extra
|
|
151
|
+
config.env_extra = ENV['JETS_ENV_EXTRA'] if ENV['JETS_ENV_EXTRA']
|
|
152
|
+
# IE: With env_extra: project-dev-1
|
|
153
|
+
# Without env_extra: project-dev
|
|
154
|
+
config.short_env = ENV_MAP[Jets.env.to_sym] || Jets.env
|
|
155
|
+
# table_namespace does not have the env_extra, more common case desired.
|
|
156
|
+
config.table_namespace = [config.project_name, config.short_env].compact.join('-')
|
|
157
|
+
|
|
158
|
+
config.project_namespace = Jets.project_namespace
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def set_iam_policy
|
|
162
|
+
config.iam_policy ||= self.class.default_iam_policy
|
|
163
|
+
config.managed_policy_definitions ||= [] # default empty
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
# It is pretty easy to attempt to set environment variables without
|
|
167
|
+
# the correct AWS Environment.Variables path struture.
|
|
168
|
+
# Auto-fix it for convenience.
|
|
169
|
+
def normalize_env_vars!
|
|
170
|
+
environment = config.function.environment
|
|
171
|
+
if environment and !environment.to_h.key?(:variables)
|
|
172
|
+
config.function.environment = {
|
|
173
|
+
variables: environment.to_h
|
|
174
|
+
}
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def load_db_config
|
|
179
|
+
config.database = {}
|
|
180
|
+
|
|
181
|
+
Jets::Dotenv.load!
|
|
182
|
+
database_yml = "#{Jets.root}/config/database.yml"
|
|
183
|
+
if File.exist?(database_yml)
|
|
184
|
+
text = Jets::Erb.result(database_yml)
|
|
185
|
+
db_config = YAML.load(text)
|
|
186
|
+
config.database = db_config
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# Naming it routes because config/routes.rb requires
|
|
191
|
+
#
|
|
192
|
+
# Jets.application.routes.draw do
|
|
193
|
+
#
|
|
194
|
+
# for scaffolding to work.
|
|
195
|
+
def routes
|
|
196
|
+
@router ||= Jets::Router.new
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
def load_routes(refresh: false)
|
|
200
|
+
@router = nil if refresh # clear_routes
|
|
201
|
+
|
|
202
|
+
routes_file = "#{Jets.root}/config/routes.rb"
|
|
203
|
+
return unless File.exist?(routes_file)
|
|
204
|
+
if refresh
|
|
205
|
+
load routes_file # always evaluate
|
|
206
|
+
else
|
|
207
|
+
require routes_file # evaluate once
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def aws
|
|
212
|
+
Jets::AwsInfo.new
|
|
213
|
+
end
|
|
214
|
+
memoize :aws
|
|
215
|
+
|
|
216
|
+
end
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
class Jets::Application
|
|
2
|
+
module Defaults
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
def self.default_iam_policy
|
|
7
|
+
project_namespace = Jets.project_namespace
|
|
8
|
+
logs = {
|
|
9
|
+
action: ["logs:*"],
|
|
10
|
+
effect: "Allow",
|
|
11
|
+
resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
|
|
12
|
+
}
|
|
13
|
+
s3_bucket = Jets.aws.s3_bucket
|
|
14
|
+
s3_readonly = {
|
|
15
|
+
action: ["s3:Get*", "s3:List*"],
|
|
16
|
+
effect: "Allow",
|
|
17
|
+
resource: "arn:aws:s3:::#{s3_bucket}*",
|
|
18
|
+
}
|
|
19
|
+
s3_bucket = {
|
|
20
|
+
action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
|
|
21
|
+
effect: "Allow",
|
|
22
|
+
resource: "arn:aws:s3:::*", # scoped to all buckets
|
|
23
|
+
}
|
|
24
|
+
policies = [logs, s3_readonly, s3_bucket]
|
|
25
|
+
|
|
26
|
+
cloudformation = {
|
|
27
|
+
action: ["cloudformation:DescribeStacks", "cloudformation:DescribeStackResources"],
|
|
28
|
+
effect: "Allow",
|
|
29
|
+
resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
|
|
30
|
+
}
|
|
31
|
+
policies << cloudformation
|
|
32
|
+
|
|
33
|
+
if Jets.config.function.vpc_config
|
|
34
|
+
vpc = {
|
|
35
|
+
action: %w[
|
|
36
|
+
ec2:CreateNetworkInterface
|
|
37
|
+
ec2:DeleteNetworkInterface
|
|
38
|
+
ec2:DescribeNetworkInterfaces
|
|
39
|
+
ec2:DescribeVpcs
|
|
40
|
+
ec2:DescribeSubnets
|
|
41
|
+
ec2:DescribeSecurityGroups
|
|
42
|
+
],
|
|
43
|
+
effect: "Allow",
|
|
44
|
+
resource: "*",
|
|
45
|
+
}
|
|
46
|
+
policies << vpc
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
policies
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def default_config
|
|
54
|
+
config = ActiveSupport::OrderedOptions.new
|
|
55
|
+
config.project_name = parse_project_name # must set early because other configs requires this
|
|
56
|
+
config.cors = false
|
|
57
|
+
config.autoload_paths = default_autoload_paths
|
|
58
|
+
config.extra_autoload_paths = []
|
|
59
|
+
config.logger = Jets::Logger.new($stderr)
|
|
60
|
+
|
|
61
|
+
# function properties defaults
|
|
62
|
+
config.function = ActiveSupport::OrderedOptions.new
|
|
63
|
+
config.function.timeout = 30
|
|
64
|
+
# default memory setting based on:
|
|
65
|
+
# https://medium.com/epsagon/how-to-make-lambda-faster-memory-performance-benchmark-be6ebc41f0fc
|
|
66
|
+
config.function.memory_size = 1536
|
|
67
|
+
|
|
68
|
+
config.prewarm = ActiveSupport::OrderedOptions.new
|
|
69
|
+
config.prewarm.enable = true
|
|
70
|
+
config.prewarm.rate = '30 minutes'
|
|
71
|
+
config.prewarm.concurrency = 2
|
|
72
|
+
config.prewarm.public_ratio = 3
|
|
73
|
+
config.prewarm.rack_ratio = 5
|
|
74
|
+
|
|
75
|
+
config.gems = ActiveSupport::OrderedOptions.new
|
|
76
|
+
config.gems.sources = [
|
|
77
|
+
Jets.default_gems_source
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
config.inflections = ActiveSupport::OrderedOptions.new
|
|
81
|
+
config.inflections.irregular = {}
|
|
82
|
+
|
|
83
|
+
config.assets = ActiveSupport::OrderedOptions.new
|
|
84
|
+
config.assets.folders = %w[assets images packs]
|
|
85
|
+
config.assets.base_url = nil # IE: https://cloudfront.com/my/base/path
|
|
86
|
+
config.assets.max_age = 3600
|
|
87
|
+
config.assets.cache_control = nil # IE: public, max-age=3600 , max_age is a shorter way to set cache_control.
|
|
88
|
+
|
|
89
|
+
config.ruby = ActiveSupport::OrderedOptions.new
|
|
90
|
+
|
|
91
|
+
config.middleware = Jets::Middleware::Configurator.new
|
|
92
|
+
|
|
93
|
+
config.session = ActiveSupport::OrderedOptions.new
|
|
94
|
+
config.session.store = Rack::Session::Cookie # note when accessing it use session[:store] since .store is an OrderedOptions method
|
|
95
|
+
config.session.options = {}
|
|
96
|
+
|
|
97
|
+
config.api = ActiveSupport::OrderedOptions.new
|
|
98
|
+
config.api.authorization_type = "NONE"
|
|
99
|
+
config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
|
|
100
|
+
config.api.binary_media_types = ['multipart/form-data']
|
|
101
|
+
config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
|
|
102
|
+
|
|
103
|
+
config.domain = ActiveSupport::OrderedOptions.new
|
|
104
|
+
# config.domain.name = "#{Jets.project_namespace}.coolapp.com" # Default is nil
|
|
105
|
+
# config.domain.cert_arn = "..."
|
|
106
|
+
config.domain.endpoint_type = "REGIONAL" # EDGE or REGIONAL. Default to EDGE because CloudFormation update is faster
|
|
107
|
+
config.domain.route53 = true # controls whether or not to create the managed route53 record.
|
|
108
|
+
# Useful to disable this when user wants to manage the route themself like pointing
|
|
109
|
+
# it to CloudFront for blue-green deployments instead.
|
|
110
|
+
|
|
111
|
+
# Custom user lambda layers
|
|
112
|
+
config.lambda = ActiveSupport::OrderedOptions.new
|
|
113
|
+
config.lambda.layers = []
|
|
114
|
+
|
|
115
|
+
# Only used for Jets Afterburner, Mega Mode currently. This is a fallback default
|
|
116
|
+
# encoding. Usually, the Rails response will return a content-type header and
|
|
117
|
+
# the encoding in there is used when possible. Example Content-Type header:
|
|
118
|
+
# Content-Type text/html; charset=utf-8
|
|
119
|
+
config.encoding = ActiveSupport::OrderedOptions.new
|
|
120
|
+
config.encoding.default = "utf-8"
|
|
121
|
+
|
|
122
|
+
config.s3_event = ActiveSupport::OrderedOptions.new
|
|
123
|
+
# These notification_configuration properties correspond to the ruby aws-sdk
|
|
124
|
+
# s3.put_bucket_notification_configuration
|
|
125
|
+
# in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
|
|
126
|
+
# bucket properties have a similiar structure but is slightly different so it can be confusing.
|
|
127
|
+
#
|
|
128
|
+
# Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
|
|
129
|
+
config.s3_event.configure_bucket = true
|
|
130
|
+
config.s3_event.notification_configuration = {
|
|
131
|
+
topic_configurations: [
|
|
132
|
+
{
|
|
133
|
+
events: ["s3:ObjectCreated:*"],
|
|
134
|
+
topic_arn: "!Ref SnsTopic", # must use this logical id
|
|
135
|
+
},
|
|
136
|
+
],
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
# So tried to defined this in the jets/mailer.rb Turbine only but jets new requires it
|
|
140
|
+
# config.action_mailer = ActiveSupport::OrderedOptions.new
|
|
141
|
+
|
|
142
|
+
config
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Essentially folders under app folder will be the default_autoload_paths. Example:
|
|
146
|
+
# app/controllers
|
|
147
|
+
# app/helpers
|
|
148
|
+
# app/jobs
|
|
149
|
+
# app/models
|
|
150
|
+
# app/rules
|
|
151
|
+
# app/shared/resources
|
|
152
|
+
#
|
|
153
|
+
# Also include:
|
|
154
|
+
# app/models/concerns
|
|
155
|
+
# app/controllers/concerns
|
|
156
|
+
def default_autoload_paths
|
|
157
|
+
paths = []
|
|
158
|
+
each_app_autoload_path("#{Jets.root}/app/*") do |path|
|
|
159
|
+
paths << path
|
|
160
|
+
end
|
|
161
|
+
# Handle concerns folders
|
|
162
|
+
each_app_autoload_path("#{Jets.root}/app/**/concerns") do |path|
|
|
163
|
+
paths << path
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
paths << "#{Jets.root}/app/shared/resources"
|
|
167
|
+
paths << "#{Jets.root}/app/shared/extensions"
|
|
168
|
+
|
|
169
|
+
paths
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require "jets/bundle"
|
|
2
|
+
Jets::Bundle.setup
|
|
3
|
+
require "zeitwerk"
|
|
4
|
+
|
|
5
|
+
module Jets
|
|
6
|
+
module Autoloaders
|
|
7
|
+
class OnceInflector < Zeitwerk::Inflector
|
|
8
|
+
def camelize(basename, _abspath)
|
|
9
|
+
map = {
|
|
10
|
+
cli: "CLI",
|
|
11
|
+
io: "IO",
|
|
12
|
+
version: "VERSION"
|
|
13
|
+
}
|
|
14
|
+
map[basename.to_sym] || super
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
extend Memoist
|
|
20
|
+
|
|
21
|
+
def log!
|
|
22
|
+
main.log!
|
|
23
|
+
once.log!
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def main
|
|
27
|
+
Zeitwerk::Loader.new.tap do |loader|
|
|
28
|
+
loader.tag = "jets.main"
|
|
29
|
+
# loader.inflector = Inflector.new # TODO: allow custom app inflector
|
|
30
|
+
loader.ignore("#{Jets.root}/app/shared/functions")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
memoize :main
|
|
34
|
+
|
|
35
|
+
def once
|
|
36
|
+
Zeitwerk::Loader.new.tap do |loader|
|
|
37
|
+
loader.tag = "jets.once"
|
|
38
|
+
loader.inflector = OnceInflector.new
|
|
39
|
+
|
|
40
|
+
loader.push_dir("#{__dir__}/..")
|
|
41
|
+
internal_app_paths.each do |path|
|
|
42
|
+
loader.push_dir("#{__dir__}/#{path}")
|
|
43
|
+
# Cannot eager load internal app classes because need the app first for classes like ApplicationHelper
|
|
44
|
+
loader.do_not_eager_load("#{__dir__}/#{path}")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
do_not_eager_load_paths.each do |path|
|
|
48
|
+
loader.do_not_eager_load("#{__dir__}/#{path}")
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
ignore_paths.each do |path|
|
|
52
|
+
loader.ignore("#{__dir__}/#{path}")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
memoize :once
|
|
57
|
+
|
|
58
|
+
private
|
|
59
|
+
def internal_app_paths
|
|
60
|
+
%w[
|
|
61
|
+
internal/app/controllers
|
|
62
|
+
internal/app/helpers
|
|
63
|
+
internal/app/jobs
|
|
64
|
+
internal/turbines
|
|
65
|
+
]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Do eager load but allow autoloading. Specs related files make sense here.
|
|
69
|
+
def do_not_eager_load_paths
|
|
70
|
+
%w[
|
|
71
|
+
cli
|
|
72
|
+
spec_helpers
|
|
73
|
+
spec_helpers.rb
|
|
74
|
+
generator
|
|
75
|
+
]
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# These files will not be eager loaded and also will not follow the autoloading convention.
|
|
79
|
+
# They are generally explictly required.
|
|
80
|
+
def ignore_paths
|
|
81
|
+
# eager loading builders/rackup_wrappers - will cause the program to exit
|
|
82
|
+
%w[
|
|
83
|
+
builders/rackup_wrappers
|
|
84
|
+
builders/reconfigure_rails
|
|
85
|
+
builders/templates
|
|
86
|
+
commands/templates
|
|
87
|
+
controller/middleware/webpacker_setup.rb
|
|
88
|
+
core_ext
|
|
89
|
+
internal
|
|
90
|
+
overrides
|
|
91
|
+
turbo/project
|
|
92
|
+
]
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|