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,267 @@
|
|
|
1
|
+
require "rack/utils"
|
|
2
|
+
|
|
3
|
+
# Special renderer. All the other renderers lead here
|
|
4
|
+
module Jets::Controller::Rendering
|
|
5
|
+
class RackRenderer
|
|
6
|
+
delegate :request, :event, :headers, to: :controller
|
|
7
|
+
attr_reader :controller
|
|
8
|
+
def initialize(controller, options={})
|
|
9
|
+
@controller = controller
|
|
10
|
+
@options = options
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Example response:
|
|
14
|
+
#
|
|
15
|
+
# [200, {"my-header" = > "value" }, "my body" ]
|
|
16
|
+
#
|
|
17
|
+
# Returns rack triplet
|
|
18
|
+
def render
|
|
19
|
+
# we do some normalization here
|
|
20
|
+
status = normalize_status_code(@options[:status])
|
|
21
|
+
|
|
22
|
+
base64 = normalized_base64_option(@options)
|
|
23
|
+
|
|
24
|
+
headers = @options[:headers] || {}
|
|
25
|
+
set_content_type!(status, headers)
|
|
26
|
+
# x-jets-base64 to convert this Rack triplet to a API Gateway hash structure later
|
|
27
|
+
headers["x-jets-base64"] = base64 ? 'yes' : 'no' # headers values must be Strings
|
|
28
|
+
|
|
29
|
+
if drop_content_info?(status)
|
|
30
|
+
body = StringIO.new
|
|
31
|
+
else
|
|
32
|
+
# Rails rendering does heavy lifting
|
|
33
|
+
# _prefixes provided by jets/overrides/rails/action_controller.rb
|
|
34
|
+
ActionController::Base._prefixes = @controller.controller_paths
|
|
35
|
+
renderer = ActionController::Base.renderer.new(renderer_options)
|
|
36
|
+
clear_view_cache
|
|
37
|
+
body = renderer.render(render_options)
|
|
38
|
+
body = StringIO.new(body)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
[status, headers, body] # triplet
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# default options:
|
|
45
|
+
# https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/renderer.rb#L41-L47
|
|
46
|
+
def renderer_options
|
|
47
|
+
options = {
|
|
48
|
+
# script_name: "", # unfortunately doesnt seem to effect relative_url_root like desired
|
|
49
|
+
# input: ""
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
origin = headers["origin"]
|
|
53
|
+
if origin
|
|
54
|
+
uri = URI.parse(origin)
|
|
55
|
+
options[:https] = uri.scheme == "https"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# Important to not use rack_headers as local variable instead of headers.
|
|
59
|
+
# headers is a method that gets deleted to controller.headers and using it
|
|
60
|
+
# seems to cause issues.
|
|
61
|
+
rack_headers = rackify_headers(headers)
|
|
62
|
+
options.merge!(rack_headers)
|
|
63
|
+
|
|
64
|
+
# Note @options[:method] uses @options vs options on purpose
|
|
65
|
+
@options[:method] = event["httpMethod"].downcase if event["httpMethod"]
|
|
66
|
+
|
|
67
|
+
# This is how we pass parameters to actionpack. IE: params to the view.
|
|
68
|
+
# This is because renderer_options is actually the env that is passed to the rack request.
|
|
69
|
+
options.merge!("action_dispatch.request.path_parameters" => @controller.path_parameters)
|
|
70
|
+
options.merge!("action_dispatch.request.query_parameters" => @controller.query_parameters)
|
|
71
|
+
options.merge!("action_dispatch.request.request_parameters" => @controller.request_parameters)
|
|
72
|
+
options
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def render_options
|
|
76
|
+
# normalize the template option
|
|
77
|
+
template = @options[:template]
|
|
78
|
+
if template and !template.include?('/')
|
|
79
|
+
template = "#{template_namespace}/#{template}"
|
|
80
|
+
end
|
|
81
|
+
template ||= default_template_name
|
|
82
|
+
# ready to override @options[:template]
|
|
83
|
+
@options[:template] = template if @options[:template]
|
|
84
|
+
|
|
85
|
+
render_options = {
|
|
86
|
+
template: template, # weird: template needs to be set no matter because it
|
|
87
|
+
# sets the name which is used in lookup_context.rb:209:in `normalize_name'
|
|
88
|
+
layout: @options[:layout],
|
|
89
|
+
assigns: controller_instance_variables,
|
|
90
|
+
# prefixes: ["posts"],
|
|
91
|
+
}
|
|
92
|
+
types = %w[json inline plain file xml body action].map(&:to_sym)
|
|
93
|
+
types.each do |type|
|
|
94
|
+
render_options[type] = @options[type] if @options[type]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
render_options
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Example: posts/index
|
|
101
|
+
def default_template_name
|
|
102
|
+
"#{template_namespace}/#{@controller.meth}"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# PostsController => "posts" is the namespace
|
|
106
|
+
def template_namespace
|
|
107
|
+
@controller.class.to_s.sub('Controller','').underscore
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# Takes headers and adds HTTP_ to front of the keys because that is what rack
|
|
111
|
+
# does to the headers passed from a request. This seems to be the standard
|
|
112
|
+
# when testing with curl and inspecting the headers in a Rack app. Example:
|
|
113
|
+
# https://gist.github.com/tongueroo/94f22f6c261c8999e4f4f776547e2ee3
|
|
114
|
+
#
|
|
115
|
+
# This is useful for:
|
|
116
|
+
#
|
|
117
|
+
# ActionController::Base.renderer.new(renderer_options)
|
|
118
|
+
#
|
|
119
|
+
# renderer_options are rack normalized headers.
|
|
120
|
+
#
|
|
121
|
+
# Example input (from api gateway)
|
|
122
|
+
#
|
|
123
|
+
# {"host"=>"localhost:8888",
|
|
124
|
+
# "user-agent"=>"curl/7.53.1",
|
|
125
|
+
# "accept"=>"*/*",
|
|
126
|
+
# "version"=>"HTTP/1.1",
|
|
127
|
+
# "x-amzn-trace-id"=>"Root=1-5bde5b19-61d0d4ab4659144f8f69e38f"}
|
|
128
|
+
#
|
|
129
|
+
# Example output:
|
|
130
|
+
#
|
|
131
|
+
# {"HTTP_HOST"=>"localhost:8888",
|
|
132
|
+
# "HTTP_USER_AGENT"=>"curl/7.53.1",
|
|
133
|
+
# "HTTP_ACCEPT"=>"*/*",
|
|
134
|
+
# "HTTP_VERSION"=>"HTTP/1.1",
|
|
135
|
+
# "HTTP_X_AMZN_TRACE_ID"=>"Root=1-5bde5b19-61d0d4ab4659144f8f69e38f"}
|
|
136
|
+
#
|
|
137
|
+
def rackify_headers(headers)
|
|
138
|
+
results = {}
|
|
139
|
+
headers.each do |k,v|
|
|
140
|
+
rack_key = 'HTTP_' + k.gsub('-','_').upcase
|
|
141
|
+
results[rack_key] = v
|
|
142
|
+
end
|
|
143
|
+
results
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Pass controller instance variables from jets-based controller to ActionView scope
|
|
147
|
+
def controller_instance_variables
|
|
148
|
+
instance_vars = @controller.instance_variables.inject({}) do |vars, v|
|
|
149
|
+
k = v.to_s.sub(/^@/,'') # @var => var
|
|
150
|
+
vars[k] = @controller.instance_variable_get(v)
|
|
151
|
+
vars
|
|
152
|
+
end
|
|
153
|
+
instance_vars[:event] = event
|
|
154
|
+
# jets internal variables
|
|
155
|
+
# So ActionView has access back to the jets controller
|
|
156
|
+
instance_vars[:_jets] = { controller: @controller }
|
|
157
|
+
instance_vars
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def clear_view_cache
|
|
161
|
+
ActionView::LookupContext::DetailsKey.clear if Jets.env.development?
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
private
|
|
165
|
+
# From jets/controller/response.rb
|
|
166
|
+
def drop_content_info?(status)
|
|
167
|
+
status.to_i / 100 == 1 or drop_body?(status)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
DROP_BODY_RESPONSES = [204, 304]
|
|
171
|
+
def drop_body?(status)
|
|
172
|
+
DROP_BODY_RESPONSES.include?(status.to_i)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# maps:
|
|
176
|
+
# :continue => 100
|
|
177
|
+
# :success => 200
|
|
178
|
+
# etc
|
|
179
|
+
def normalize_status_code(code)
|
|
180
|
+
status_code = if code.is_a?(Symbol)
|
|
181
|
+
Rack::Utils::SYMBOL_TO_STATUS_CODE[code]
|
|
182
|
+
else
|
|
183
|
+
code
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# API Gateway requires status to be String but local rack is okay with either
|
|
187
|
+
# Note, ELB though requires status to be an Integer. We'll later in rack/adapter.rb
|
|
188
|
+
# adjust status to an Integer if request is coming from an ELB.
|
|
189
|
+
(status_code || 200).to_s
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def set_content_type!(status, headers)
|
|
193
|
+
if drop_content_info?(status)
|
|
194
|
+
headers.delete "Content-Length"
|
|
195
|
+
headers.delete "Content-Type"
|
|
196
|
+
else
|
|
197
|
+
headers["Content-Type"] = @options[:content_type] ||
|
|
198
|
+
headers['content-type'] || # Mega Mode (Rails)
|
|
199
|
+
headers['Content-Type'] || # Just in case
|
|
200
|
+
Jets::Controller::DEFAULT_CONTENT_TYPE
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
def normalized_base64_option(options)
|
|
205
|
+
base64 = @options[:base64] if options.key?(:base64)
|
|
206
|
+
base64 = @options[:isBase64Encoded] if options.key?(:isBase64Encoded)
|
|
207
|
+
base64
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
class << self
|
|
211
|
+
def setup!
|
|
212
|
+
require "action_controller"
|
|
213
|
+
require "jets/overrides/rails"
|
|
214
|
+
|
|
215
|
+
# Load helpers
|
|
216
|
+
# Assign local variable because scope in the `:action_view do` block changes
|
|
217
|
+
app_helper_classes = find_app_helper_classes
|
|
218
|
+
ActiveSupport.on_load :action_view do
|
|
219
|
+
include Jets::Router::Helpers # internal routes helpers
|
|
220
|
+
include ApplicationHelper # include first
|
|
221
|
+
app_helper_classes.each do |helper_class|
|
|
222
|
+
include helper_class
|
|
223
|
+
end
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
ActionController::Base.append_view_path("#{Jets.root}/app/views")
|
|
227
|
+
|
|
228
|
+
setup_webpacker if Jets.webpacker?
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
# Does not include ApplicationHelper, will include ApplicationHelper explicitly first.
|
|
232
|
+
def find_app_helper_classes
|
|
233
|
+
internal_path = File.expand_path("../../internal", File.dirname(__FILE__))
|
|
234
|
+
internal_classes = find_app_helper_classes_from(internal_path)
|
|
235
|
+
app_classes = find_app_helper_classes_from(Jets.root)
|
|
236
|
+
(internal_classes + app_classes).uniq
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
def find_app_helper_classes_from(project_root)
|
|
240
|
+
klasses = []
|
|
241
|
+
expression = "#{project_root}/app/helpers/**/*"
|
|
242
|
+
Dir.glob(expression).each do |path|
|
|
243
|
+
next unless File.file?(path)
|
|
244
|
+
class_name = path.sub("#{project_root}/app/helpers/","").sub(/\.rb/,'')
|
|
245
|
+
|
|
246
|
+
unless class_name == "application_helper"
|
|
247
|
+
klasses << class_name.camelize.constantize # autoload
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
klasses
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def setup_webpacker
|
|
254
|
+
require 'webpacker'
|
|
255
|
+
require 'webpacker/helper'
|
|
256
|
+
|
|
257
|
+
ActiveSupport.on_load :action_controller do
|
|
258
|
+
ActionController::Base.helper Webpacker::Helper
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
ActiveSupport.on_load :action_view do
|
|
262
|
+
include Webpacker::Helper
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
class Jets::Controller
|
|
2
|
+
module Rendering
|
|
3
|
+
include Redirection
|
|
4
|
+
|
|
5
|
+
def ensure_render
|
|
6
|
+
return @rendered_data if @rendered
|
|
7
|
+
|
|
8
|
+
# defaults to rendering templates
|
|
9
|
+
RackRenderer.new(self, managed_options).render
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Many different ways to render:
|
|
13
|
+
#
|
|
14
|
+
# render "articles/index", layout: "application"
|
|
15
|
+
# render :new
|
|
16
|
+
# render template: "articles/index", layout: "application"
|
|
17
|
+
# render json: {my: "data"}
|
|
18
|
+
# render text: "plain text"
|
|
19
|
+
def render(options={}, rest={})
|
|
20
|
+
raise "DoubleRenderError" if @rendered
|
|
21
|
+
|
|
22
|
+
if options.is_a?(Symbol) or options.is_a?(String)
|
|
23
|
+
options = normalize_options(options, rest)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
options.reverse_merge!(managed_options)
|
|
27
|
+
adjust_content_type!(options)
|
|
28
|
+
|
|
29
|
+
@rendered_data = RackRenderer.new(self, options).render
|
|
30
|
+
|
|
31
|
+
@rendered = true
|
|
32
|
+
@rendered_data
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def adjust_content_type!(options)
|
|
36
|
+
return if options.key?(:content_type)
|
|
37
|
+
|
|
38
|
+
if options.key?(:json)
|
|
39
|
+
options[:content_type] = "application/json"
|
|
40
|
+
elsif options.key?(:xml)
|
|
41
|
+
options[:content_type] = "application/xml"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def managed_options
|
|
46
|
+
layout = self.class.layout.nil? ? default_layout : self.class.layout
|
|
47
|
+
options = { layout: layout }
|
|
48
|
+
options[:headers] = response.headers unless response.headers.empty?
|
|
49
|
+
options
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def default_layout
|
|
53
|
+
application_layout_exist = !Dir.glob("#{Jets.root}/app/views/layouts/application*").empty?
|
|
54
|
+
"application" if application_layout_exist
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Can normalize the options when it is a String or a Symbol
|
|
58
|
+
# Also set defaults here like the layout.
|
|
59
|
+
# Ensure options is a Hash, not a String or Symbol.
|
|
60
|
+
def normalize_options(options, rest)
|
|
61
|
+
template = options.to_s
|
|
62
|
+
rest.merge(template: template)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# Example usage:
|
|
66
|
+
#
|
|
67
|
+
# render json: {success: true, location: add_stage(posts_path)}
|
|
68
|
+
#
|
|
69
|
+
def add_stage(url)
|
|
70
|
+
return url unless actual_host
|
|
71
|
+
|
|
72
|
+
uri = URI.parse(url)
|
|
73
|
+
# if no location.host, we been provided a relative host
|
|
74
|
+
if !uri.host && actual_host
|
|
75
|
+
url = "/#{url}" unless url.starts_with?('/')
|
|
76
|
+
url = Jets::Controller::Stage.add(actual_host, url)
|
|
77
|
+
actual_host + url
|
|
78
|
+
else
|
|
79
|
+
url
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def url_for(url)
|
|
84
|
+
add_stage(url)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Actual host can be headers["origin"] when cloudfront is in front.
|
|
88
|
+
# Remember to set custom header "origin" header in cloudfront distribution.
|
|
89
|
+
# Can also override with Jets.config.app.domain.
|
|
90
|
+
# The actual_host value is used by redirect_to.
|
|
91
|
+
def actual_host
|
|
92
|
+
Jets.config.app.domain || headers["origin"] || headers["host"]
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'rack/request'
|
|
2
|
+
|
|
3
|
+
class Jets::Controller
|
|
4
|
+
class Request < ::Rack::Request
|
|
5
|
+
def initialize(event, context)
|
|
6
|
+
@event, @context = event, context
|
|
7
|
+
super(env)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def env
|
|
11
|
+
@env ||= Jets::Controller::Rack::Env.new(@event, @context).convert # convert to Rack env
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# When request hits the middleware Controller::Rack::Middleware::Main endpoint
|
|
15
|
+
# We set the it with the updated env since it could had been mutated down the
|
|
16
|
+
# middleware stack.
|
|
17
|
+
def set_env!(env)
|
|
18
|
+
@env = env
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# API Gateway is inconsistent about how it cases it keys.
|
|
22
|
+
# Sometimes it is "x-requested-with" vs "X-Requested-With"
|
|
23
|
+
# Normalize it with downcase.
|
|
24
|
+
def headers
|
|
25
|
+
headers = @event["headers"] || {}
|
|
26
|
+
headers.transform_keys { |key| key.downcase }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'rack/response'
|
|
2
|
+
|
|
3
|
+
class Jets::Controller
|
|
4
|
+
# The response object. See Rack::Response and Rack::Response::Helpers for
|
|
5
|
+
# more info:
|
|
6
|
+
# http://rubydoc.info/github/rack/rack/master/Rack/Response
|
|
7
|
+
# http://rubydoc.info/github/rack/rack/master/Rack/Response/Helpers
|
|
8
|
+
class Response < ::Rack::Response
|
|
9
|
+
DROP_BODY_RESPONSES = [204, 304]
|
|
10
|
+
def initialize(*)
|
|
11
|
+
super
|
|
12
|
+
# headers['Content-Type'] ||= 'text/html'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# TODO: unsure if we should even have these methods. We dont really use them.
|
|
16
|
+
def body=(value)
|
|
17
|
+
value = value.body while Rack::Response === value
|
|
18
|
+
@body = String === value ? [value.to_str] : value
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def each
|
|
22
|
+
block_given? ? super : enum_for(:each)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def finish
|
|
26
|
+
result = body
|
|
27
|
+
|
|
28
|
+
if drop_content_info?
|
|
29
|
+
headers.delete "Content-Length"
|
|
30
|
+
headers.delete "Content-Type"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if drop_body?
|
|
34
|
+
close
|
|
35
|
+
result = []
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
if calculate_content_length?
|
|
39
|
+
# if some other code has already set Content-Length, don't muck with it
|
|
40
|
+
# currently, this would be the static file-handler
|
|
41
|
+
headers["Content-Length"] = body.inject(0) { |l, p| l + p.bytesize }.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
[status.to_i, headers, result]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def calculate_content_length?
|
|
50
|
+
headers["Content-Type"] and not headers["Content-Length"] and Array === body
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def drop_content_info?
|
|
54
|
+
status.to_i / 100 == 1 or drop_body?
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def drop_body?
|
|
58
|
+
DROP_BODY_RESPONSES.include?(status.to_i)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class Jets::Controller
|
|
2
|
+
class Stage
|
|
3
|
+
def initialize(host, url)
|
|
4
|
+
@host, @url = host, url
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def add
|
|
8
|
+
return @url unless add_stage?
|
|
9
|
+
|
|
10
|
+
stage_name = Jets::Resource::ApiGateway::Deployment.stage_name
|
|
11
|
+
stage_name_with_slashes = "/#{stage_name}/" # use to prevent stage name being added twice if url_for is called twice on the same string
|
|
12
|
+
@url.include?(stage_name_with_slashes) ? @url : "/#{stage_name}#{@url}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def add_stage?
|
|
16
|
+
return false if on_cloud9?
|
|
17
|
+
@host.include?("amazonaws.com") && @url.starts_with?('/')
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def on_cloud9?
|
|
21
|
+
self.class.on_cloud9?(@host)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class << self
|
|
25
|
+
def add(host, url)
|
|
26
|
+
new(host, url).add
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def on_cloud9?(host)
|
|
30
|
+
!!(host =~ /cloud9\..*\.amazonaws\.com/)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/jets/core.rb
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
module Jets::Core
|
|
2
|
+
extend Memoist
|
|
3
|
+
|
|
4
|
+
def application
|
|
5
|
+
Jets::Application.instance
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def config
|
|
9
|
+
application.config
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def aws
|
|
13
|
+
application.aws
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Load all application base classes and project classes
|
|
17
|
+
def boot
|
|
18
|
+
Jets::Booter.boot!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def root
|
|
22
|
+
# Do not memoize this method. Turbo mode can change it
|
|
23
|
+
root = ENV['JETS_ROOT'].to_s
|
|
24
|
+
root = Dir.pwd if root == ''
|
|
25
|
+
Pathname.new(root)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def env
|
|
29
|
+
env = ENV['JETS_ENV'] || 'development'
|
|
30
|
+
ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env
|
|
31
|
+
ActiveSupport::StringInquirer.new(env)
|
|
32
|
+
end
|
|
33
|
+
memoize :env
|
|
34
|
+
|
|
35
|
+
def build_root
|
|
36
|
+
"/tmp/jets/#{config.project_name}".freeze
|
|
37
|
+
end
|
|
38
|
+
memoize :build_root
|
|
39
|
+
|
|
40
|
+
def logger
|
|
41
|
+
Jets.application.config.logger
|
|
42
|
+
end
|
|
43
|
+
memoize :logger
|
|
44
|
+
|
|
45
|
+
def webpacker?
|
|
46
|
+
Gem.loaded_specs.keys.any?{|k| k.start_with?("webpacker")}
|
|
47
|
+
end
|
|
48
|
+
memoize :webpacker?
|
|
49
|
+
|
|
50
|
+
def load_tasks
|
|
51
|
+
Jets::Commands::RakeTasks.load!
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def version
|
|
55
|
+
Jets::VERSION
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# NOTE: In development this will always be 1 because the app gets reloaded.
|
|
59
|
+
# On AWS Lambda, this will be ever increasing until the container gets replaced.
|
|
60
|
+
@@call_count = 0
|
|
61
|
+
def increase_call_count
|
|
62
|
+
@@call_count += 1
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def call_count
|
|
66
|
+
@@call_count
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
@@prewarm_count = 0
|
|
70
|
+
def increase_prewarm_count
|
|
71
|
+
@@prewarm_count += 1
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def prewarm_count
|
|
75
|
+
@@prewarm_count
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def project_namespace
|
|
79
|
+
[config.project_name, config.short_env, config.env_extra].compact.join('-').gsub('_','-')
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def rack?
|
|
83
|
+
path = "#{Jets.root}/rack"
|
|
84
|
+
File.exist?(path) || File.symlink?(path)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def poly_only?
|
|
88
|
+
return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers
|
|
89
|
+
Jets::Commands::Build.poly_only?
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def report_exception(exception)
|
|
93
|
+
puts "DEPRECATED: report_exception. Use on_exception instead.".color(:yellow)
|
|
94
|
+
on_exception(exception)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def on_exception(exception)
|
|
98
|
+
Jets::Turbine.subclasses.each do |subclass|
|
|
99
|
+
reporters = subclass.on_exceptions || []
|
|
100
|
+
reporters.each do |label, block|
|
|
101
|
+
block.call(exception)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def custom_domain?
|
|
107
|
+
Jets.config.domain.hosted_zone_name
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def s3_event?
|
|
111
|
+
!Jets::Job::Base.s3_events.empty?
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def process(event, context, handler)
|
|
115
|
+
if event['_prewarm']
|
|
116
|
+
Jets.increase_prewarm_count
|
|
117
|
+
Jets.logger.info("Prewarm request")
|
|
118
|
+
{prewarmed_at: Time.now.to_s}
|
|
119
|
+
else
|
|
120
|
+
Jets::Processors::MainProcessor.new(event, context, handler).run
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def once
|
|
125
|
+
boot
|
|
126
|
+
override_lambda_ruby_runtime
|
|
127
|
+
tmp_load!
|
|
128
|
+
start_rack_server
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def tmp_load!
|
|
132
|
+
Jets::TmpLoader.load!
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
# Megamode support
|
|
136
|
+
def start_rack_server(options={})
|
|
137
|
+
rack = Jets::RackServer.new(options)
|
|
138
|
+
rack.start
|
|
139
|
+
rack.wait_for_socket
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def override_lambda_ruby_runtime
|
|
143
|
+
require "jets/overrides/lambda"
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def ruby_folder
|
|
147
|
+
RUBY_VERSION.split('.')[0..1].join('.') + '.0'
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# used to configure internal lambda functions
|
|
151
|
+
# current ruby runtime that user is running
|
|
152
|
+
# IE: ruby2.5 ruby2.7
|
|
153
|
+
def ruby_runtime
|
|
154
|
+
version = RUBY_VERSION.split('.')[0..1].join('.')
|
|
155
|
+
"ruby#{version}"
|
|
156
|
+
end
|
|
157
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Kernel
|
|
2
|
+
module_function
|
|
3
|
+
|
|
4
|
+
alias_method :jets_original_require, :require
|
|
5
|
+
# @param path [String]
|
|
6
|
+
# @return [Boolean]
|
|
7
|
+
def require(path)
|
|
8
|
+
# Hack to prevent Rails const from being defined
|
|
9
|
+
# Actionview requires "rails-html-sanitizer" and that creates a Rails module
|
|
10
|
+
path = "jets-html-sanitizer" if path == "rails-html-sanitizer" && !ENV['JETS_RAILS_CONST']
|
|
11
|
+
jets_original_require(path)
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/jets/db.rb
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Jets::Db ; end
|
|
2
|
+
|
|
3
|
+
# Thanks: https://makandracards.com/makandra/42521-detecting-if-a-ruby-gem-is-loaded
|
|
4
|
+
if File.exist?("#{Jets.root}/config/database.yml")
|
|
5
|
+
require "active_record"
|
|
6
|
+
specs = Gem.loaded_specs
|
|
7
|
+
require "mysql2" if specs.key?('mysql2')
|
|
8
|
+
require "pg" if specs.key?('pg')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
if File.exist?("#{Jets.root}/config/dynamodb.yml")
|
|
12
|
+
specs = Gem.loaded_specs
|
|
13
|
+
specs.key?('dynomite')
|
|
14
|
+
require "dynomite" if specs.key?('dynomite')
|
|
15
|
+
end
|