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,105 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
# This class tries to be idempotent, so users should be able to run it multiple times safely.
|
|
4
|
+
module Jets::Commands
|
|
5
|
+
class Upgrade
|
|
6
|
+
def initialize(options)
|
|
7
|
+
@options = options
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def run
|
|
11
|
+
puts "Upgrading to Jets structure to latest version"
|
|
12
|
+
Version1.new.run
|
|
13
|
+
# version 2 upgrades
|
|
14
|
+
inject_csrf_meta_tags
|
|
15
|
+
update_crud_js
|
|
16
|
+
update_config_application_rb
|
|
17
|
+
update_autoload_paths_config
|
|
18
|
+
puts "Upgrade complete."
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def inject_csrf_meta_tags
|
|
22
|
+
layout = "app/views/layouts/application.html.erb"
|
|
23
|
+
return unless File.exist?(layout)
|
|
24
|
+
|
|
25
|
+
lines = IO.readlines(layout)
|
|
26
|
+
csrf_meta_tags = lines.find { |l| l =~ /<%= csrf_meta_tags %>/ }
|
|
27
|
+
return if csrf_meta_tags
|
|
28
|
+
|
|
29
|
+
puts "Update: #{layout} with csrf_meta_tags helper"
|
|
30
|
+
lines.map! do |line|
|
|
31
|
+
if line.include?("<head>")
|
|
32
|
+
# add csrf_meta_tags helper
|
|
33
|
+
"#{line} <%= csrf_meta_tags %>\n"
|
|
34
|
+
else
|
|
35
|
+
line
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
content = lines.join
|
|
40
|
+
IO.write(layout, content)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def update_crud_js
|
|
44
|
+
src = File.expand_path("templates/webpacker/app/javascript/src/jets/crud.js", File.dirname(__FILE__))
|
|
45
|
+
dest = "app/javascript/src/jets/crud.js"
|
|
46
|
+
return unless File.exist?(dest)
|
|
47
|
+
|
|
48
|
+
lines = IO.readlines(dest)
|
|
49
|
+
csrf = lines.find { |l| l =~ /csrf-token/ }
|
|
50
|
+
return if csrf
|
|
51
|
+
|
|
52
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
|
53
|
+
FileUtils.cp(src, dest)
|
|
54
|
+
puts "Update: #{dest}"
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def update_config_application_rb
|
|
58
|
+
app_rb = "config/application.rb"
|
|
59
|
+
lines = IO.readlines(app_rb)
|
|
60
|
+
api_mode = lines.find { |l| l =~ /config\.mode/ && l =~ /api/ }
|
|
61
|
+
return unless api_mode
|
|
62
|
+
|
|
63
|
+
forgery = lines.find { |l| l =~ /default_protect_from_forgery/ }
|
|
64
|
+
return if forgery
|
|
65
|
+
|
|
66
|
+
lines.map! do |line|
|
|
67
|
+
if line =~ /^end/
|
|
68
|
+
# add default_protect_from_forgery = false
|
|
69
|
+
" config.controllers.default_protect_from_forgery = false\n#{line}"
|
|
70
|
+
else
|
|
71
|
+
line
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
content = lines.join
|
|
76
|
+
IO.write(app_rb, content)
|
|
77
|
+
puts "Update: #{app_rb} with default_protect_from_forgery"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def update_autoload_paths_config
|
|
81
|
+
app_rb = "config/application.rb"
|
|
82
|
+
lines = IO.readlines(app_rb)
|
|
83
|
+
|
|
84
|
+
new_config = lines.find { |l| l.include?('config.autoload_paths') }
|
|
85
|
+
return if new_config
|
|
86
|
+
|
|
87
|
+
old_config = lines.find { |l| l.include?('config.extra_autoload_paths') }
|
|
88
|
+
return unless old_config
|
|
89
|
+
|
|
90
|
+
lines.map! do |line|
|
|
91
|
+
md = line.match(/config\.extra_autoload_paths(.*)/)
|
|
92
|
+
if md
|
|
93
|
+
rest = md[1]
|
|
94
|
+
" config.autoload_paths#{rest}"
|
|
95
|
+
else
|
|
96
|
+
line
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
content = lines.join
|
|
101
|
+
IO.write(app_rb, content)
|
|
102
|
+
puts "Update: #{app_rb} with config.autoload_paths"
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Jets::Commands
|
|
2
|
+
class Url
|
|
3
|
+
include Jets::AwsServices
|
|
4
|
+
|
|
5
|
+
def initialize(options)
|
|
6
|
+
@options = options
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def display
|
|
10
|
+
stack_name = Jets::Naming.parent_stack_name
|
|
11
|
+
unless stack_exists?(stack_name)
|
|
12
|
+
puts "Stack for #{Jets.config.project_name.color(:green)} project for environment #{Jets.env.color(:green)}. Couldn't find #{stack_name.color(:green)} stack."
|
|
13
|
+
exit
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
|
|
17
|
+
|
|
18
|
+
api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
|
|
19
|
+
if api_gateway_stack_arn && endpoint_available?
|
|
20
|
+
api_gateway_endpoint = get_gateway_endpoint(api_gateway_stack_arn)
|
|
21
|
+
STDOUT.puts "API Gateway Endpoint: #{api_gateway_endpoint}"
|
|
22
|
+
show_custom_domain
|
|
23
|
+
else
|
|
24
|
+
puts "API Gateway not found. This jets app does have an API Gateway associated with it. Please double check your config/routes.rb if you were expecting to see a url for the app. Also check that #{stack_name.color(:green)} is a jets app."
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def get_gateway_endpoint(api_gateway_stack_arn)
|
|
29
|
+
stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
|
|
30
|
+
rest_api = lookup(stack[:outputs], "RestApi")
|
|
31
|
+
region_id = lookup(stack[:outputs], "Region")
|
|
32
|
+
stage_name = Jets::Resource::ApiGateway::Deployment.stage_name
|
|
33
|
+
|
|
34
|
+
# https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-api.html
|
|
35
|
+
# https://my-api-id.execute-api.region-id.amazonaws.com/stage-name/{resourcePath}
|
|
36
|
+
"https://#{rest_api}.execute-api.#{region_id}.amazonaws.com/#{stage_name}"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def show_custom_domain
|
|
40
|
+
return unless endpoint_available? && Jets.custom_domain? && Jets.config.domain.route53
|
|
41
|
+
|
|
42
|
+
domain_name = Jets::Resource::ApiGateway::DomainName.new
|
|
43
|
+
# Looks funny but its right.
|
|
44
|
+
# domain_name is a method on the Jets::Resource::ApiGateway::Domain instance
|
|
45
|
+
url = "https://#{domain_name.domain_name}"
|
|
46
|
+
puts "Custom Domain: #{url}"
|
|
47
|
+
puts "App Domain: #{Jets.config.app.domain}" if Jets.config.app.domain
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def endpoint_unavailable?
|
|
51
|
+
return false if Jets::Router.routes.empty?
|
|
52
|
+
resp, status = stack_status
|
|
53
|
+
return false if status.include?("ROLLBACK")
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def endpoint_available?
|
|
57
|
+
!endpoint_unavailable?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# All CloudFormation states listed here:
|
|
61
|
+
# http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
|
|
62
|
+
def stack_status
|
|
63
|
+
resp = cfn.describe_stacks(stack_name: @parent_stack_name)
|
|
64
|
+
status = resp.stacks[0].stack_status
|
|
65
|
+
[resp, status]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require 'thor'
|
|
2
|
+
|
|
3
|
+
# These commands are ran after rake webpacker:install to enhance the generated
|
|
4
|
+
# javascript assets to support Jets.
|
|
5
|
+
# Done this way so it works for both jets new and jets webpacker:install
|
|
6
|
+
class Jets::Commands::WebpackerTemplate < Thor::Group
|
|
7
|
+
include Thor::Actions
|
|
8
|
+
|
|
9
|
+
class_option :force, desc: "Bypass confirmation and overwrite existing files."
|
|
10
|
+
class_option :bootstrap, type: :boolean, default: true, desc: "Install bootstrap"
|
|
11
|
+
def self.source_root
|
|
12
|
+
File.expand_path("templates/webpacker", File.dirname(__FILE__))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def reapply_templates
|
|
16
|
+
directory "app/javascript", "app/javascript", force: options[:force]#, bootstrap: options[:bootstrap]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
class Jets::Controller
|
|
2
|
+
module Authorization
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
included do
|
|
6
|
+
class_attribute :auth_type,
|
|
7
|
+
:auth_to,
|
|
8
|
+
:auth_options, # for only and except filters
|
|
9
|
+
:api_key_needed,
|
|
10
|
+
:authorization_scopes_value
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class_methods do
|
|
14
|
+
def controller_path
|
|
15
|
+
name.sub(/Controller$/, "".freeze).underscore
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def authorization_type(value=nil)
|
|
19
|
+
if !value.nil?
|
|
20
|
+
self.auth_type = value
|
|
21
|
+
else
|
|
22
|
+
self.auth_type
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def authorizer(value=nil, options={})
|
|
27
|
+
if !value.nil?
|
|
28
|
+
self.auth_to = value # IE: main#protect
|
|
29
|
+
self.auth_options = options # IE: only: %w[index] or expect: [:show]
|
|
30
|
+
else
|
|
31
|
+
self.auth_to
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def authorization_scopes(value=nil)
|
|
36
|
+
if !value.nil?
|
|
37
|
+
self.authorization_scopes_value = value
|
|
38
|
+
else
|
|
39
|
+
self.authorization_scopes_value
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def authorizer_metadata
|
|
44
|
+
Jets::Router::Route::Authorizer.metadata(auth_to)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Used to add to parameter to controller templates
|
|
48
|
+
def authorizer_id
|
|
49
|
+
Jets::Router::Route::Authorizer.logical_id(auth_to)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Used to add to the API::Gateway Method selectively
|
|
53
|
+
def authorizer_logical_id_for(action_name)
|
|
54
|
+
return unless auth_to
|
|
55
|
+
|
|
56
|
+
only = auth_options[:only].map(&:to_s) if auth_options && auth_options[:only]
|
|
57
|
+
except = auth_options[:except].map(&:to_s) if auth_options && auth_options[:except]
|
|
58
|
+
|
|
59
|
+
if except and !except.include?(action_name)
|
|
60
|
+
logical_id = Jets::Router::Route::Authorizer.logical_id(auth_to)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# only overrides except
|
|
64
|
+
if only and only.include?(action_name)
|
|
65
|
+
logical_id = Jets::Router::Route::Authorizer.logical_id(auth_to)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# if both only and except are not set then always set the logical_id
|
|
69
|
+
if !only && !except
|
|
70
|
+
logical_id = Jets::Router::Route::Authorizer.logical_id(auth_to)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
logical_id
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Autoamtically sets authorization_type for the specific route based on the controller authorizer
|
|
77
|
+
def infer_authorization_type_for(action_name)
|
|
78
|
+
return unless authorizer_logical_id_for(action_name)
|
|
79
|
+
Jets::Authorizer::Base.authorization_type(auth_to)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def api_key_required(value=nil)
|
|
83
|
+
if !value.nil?
|
|
84
|
+
self.api_key_needed = value
|
|
85
|
+
else
|
|
86
|
+
self.api_key_needed
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
require "rack/utils" # Rack::Utils.parse_nested_query
|
|
3
|
+
|
|
4
|
+
# Controller public methods get turned into Lambda functions.
|
|
5
|
+
class Jets::Controller
|
|
6
|
+
class Base < Jets::Lambda::Functions
|
|
7
|
+
include ActiveSupport::Rescuable
|
|
8
|
+
include Authorization
|
|
9
|
+
include Callbacks
|
|
10
|
+
include Cookies
|
|
11
|
+
include ForgeryProtection
|
|
12
|
+
include Jets::Router::Helpers
|
|
13
|
+
include Layout
|
|
14
|
+
include Params
|
|
15
|
+
include Rendering
|
|
16
|
+
|
|
17
|
+
delegate :headers, to: :request
|
|
18
|
+
delegate :set_header, to: :response
|
|
19
|
+
attr_reader :request, :response
|
|
20
|
+
attr_accessor :session
|
|
21
|
+
def initialize(event, context={}, meth)
|
|
22
|
+
super
|
|
23
|
+
@request = Request.new(event, context)
|
|
24
|
+
@response = Response.new
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Overrides Base.process
|
|
28
|
+
def self.process(event, context={}, meth)
|
|
29
|
+
controller = new(event, context, meth)
|
|
30
|
+
# Using send because process! is private method in Jets::RackController so
|
|
31
|
+
# it doesnt create a lambda function. It's doesnt matter what scope process!
|
|
32
|
+
# is in Controller::Base because Jets lambda functions inheritance doesnt
|
|
33
|
+
# include methods in Controller::Base.
|
|
34
|
+
# TODO: Can process! be a protected method to avoid this?
|
|
35
|
+
controller.send(:process!)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# One key difference between process! vs dispatch!
|
|
39
|
+
#
|
|
40
|
+
# process! - takes the request through the middleware stack
|
|
41
|
+
# dispatch! - does not
|
|
42
|
+
#
|
|
43
|
+
# Most of the time, you want process! instead of dispatch!
|
|
44
|
+
#
|
|
45
|
+
def process!
|
|
46
|
+
adapter = Jets::Controller::Rack::Adapter.new(event, context, meth)
|
|
47
|
+
adapter.rack_vars(
|
|
48
|
+
'jets.controller' => self,
|
|
49
|
+
'lambda.context' => context,
|
|
50
|
+
'lambda.event' => event,
|
|
51
|
+
'lambda.meth' => meth,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# adapter.process calls
|
|
55
|
+
#
|
|
56
|
+
# Jets.application.call(env)
|
|
57
|
+
#
|
|
58
|
+
# and that goes through the middleware stacks. The last middleware stack is Jets::Controller::Middleware::Main
|
|
59
|
+
#
|
|
60
|
+
# class Jets::Controller::Middleware::Main
|
|
61
|
+
# def call!
|
|
62
|
+
# setup
|
|
63
|
+
# @controller.dispatch! # Returns triplet
|
|
64
|
+
# end
|
|
65
|
+
# end
|
|
66
|
+
#
|
|
67
|
+
adapter.process # Returns API Gateway hash structure
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# One key difference between process! vs dispatch!
|
|
71
|
+
#
|
|
72
|
+
# process! - takes the request through the middleware stack
|
|
73
|
+
# dispatch! - does not
|
|
74
|
+
#
|
|
75
|
+
# dispatch! is useful for megamode or mounted applications
|
|
76
|
+
#
|
|
77
|
+
def dispatch!
|
|
78
|
+
t1 = Time.now
|
|
79
|
+
log_start
|
|
80
|
+
|
|
81
|
+
begin
|
|
82
|
+
if run_before_actions(break_if: -> { @rendered })
|
|
83
|
+
send(@meth)
|
|
84
|
+
action_completed = true
|
|
85
|
+
else
|
|
86
|
+
Jets.logger.info "Filter chain halted as #{@last_callback_name} rendered or redirected"
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
triplet = ensure_render
|
|
90
|
+
run_after_actions if action_completed
|
|
91
|
+
rescue Exception => exception
|
|
92
|
+
rescue_with_handler(exception) || raise
|
|
93
|
+
triplet = ensure_render
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
took = Time.now - t1
|
|
97
|
+
status = triplet[0]
|
|
98
|
+
log_finish(status: status, took: took)
|
|
99
|
+
triplet # status, headers, body
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Documented interface method, careful not to rename
|
|
103
|
+
def log_start
|
|
104
|
+
# JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
|
|
105
|
+
ip = request.ip
|
|
106
|
+
Jets.logger.info "Started #{@event['httpMethod']} \"#{@event['path']}\" for #{ip} at #{Time.now}"
|
|
107
|
+
Jets.logger.info "Processing #{self.class.name}##{@meth}"
|
|
108
|
+
Jets.logger.info " Event: #{event_log}"
|
|
109
|
+
Jets.logger.info " Parameters: #{JSON.dump(filtered_parameters.to_h)}"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
# Documented interface method, careful not to rename
|
|
113
|
+
def log_finish(options={})
|
|
114
|
+
status, took = options[:status], options[:took]
|
|
115
|
+
Jets.logger.info "Completed Status Code #{status} in #{took}s"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def event_log
|
|
119
|
+
display_event = @event.dup
|
|
120
|
+
|
|
121
|
+
if @event['isBase64Encoded']
|
|
122
|
+
display_event['body'] = '[BASE64_ENCODED]'
|
|
123
|
+
else
|
|
124
|
+
display_event['body'] = parameter_filter.filter_json(display_event['body'])
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
display_event["queryStringParameters"] = parameter_filter.filter(display_event['queryStringParameters'])
|
|
128
|
+
display_event["pathParameters"] = parameter_filter.filter(display_event['pathParameters'])
|
|
129
|
+
json_dump(display_event)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Handles binary data safely
|
|
133
|
+
def json_dump(data)
|
|
134
|
+
JSON.dump(data)
|
|
135
|
+
rescue Encoding::UndefinedConversionError
|
|
136
|
+
data['body'] = '[BINARY]'
|
|
137
|
+
JSON.dump(data)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def controller_paths
|
|
141
|
+
paths = []
|
|
142
|
+
klass = self.class
|
|
143
|
+
while klass != Jets::Controller::Base
|
|
144
|
+
paths << klass.controller_path
|
|
145
|
+
klass = klass.superclass
|
|
146
|
+
end
|
|
147
|
+
paths
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def controller_name
|
|
151
|
+
self.class.to_s.underscore
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def action_name
|
|
155
|
+
@meth
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
class_attribute :internal_controller
|
|
159
|
+
class << self
|
|
160
|
+
def internal(value=nil)
|
|
161
|
+
if !value.nil?
|
|
162
|
+
self.internal_controller = value
|
|
163
|
+
else
|
|
164
|
+
self.internal_controller
|
|
165
|
+
end
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def helper_method(*meths)
|
|
169
|
+
meths.each do |meth|
|
|
170
|
+
Jets::Router::Helpers.define_helper_method(meth)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Simpified version of callbacks
|
|
2
|
+
# Does not support if
|
|
3
|
+
class Jets::Controller
|
|
4
|
+
module Callbacks
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
included do
|
|
7
|
+
class_attribute :before_actions, default: []
|
|
8
|
+
class_attribute :after_actions, default: []
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
def before_action(meth, options = {})
|
|
12
|
+
self.before_actions += [[meth, options]]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def prepend_before_action(meth, options = {})
|
|
16
|
+
self.before_actions = [[meth, options]] + self.before_actions
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def skip_before_action(meth, options = {})
|
|
20
|
+
self.before_actions = before_actions
|
|
21
|
+
.reject { |act| act.first.to_s == meth.to_s }
|
|
22
|
+
|
|
23
|
+
# If options include the `only` option,
|
|
24
|
+
# re-add the action using the setter with the `except` option
|
|
25
|
+
before_action(meth, { except: options[:only] }) if options[:only].present?
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
alias_method :append_before_action, :before_action
|
|
29
|
+
|
|
30
|
+
def after_action(meth, options = {})
|
|
31
|
+
self.after_actions += [[meth, options]]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def prepend_after_action(meth, options = {})
|
|
35
|
+
self.after_actions = [[meth, options]] + self.after_actions
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def skip_after_action(meth)
|
|
39
|
+
self.after_actions = self.after_actions.reject { |el| el.first.to_s == meth.to_s }
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
alias_method :append_after_action, :after_action
|
|
43
|
+
end
|
|
44
|
+
end # included
|
|
45
|
+
|
|
46
|
+
# Instance Methods
|
|
47
|
+
# define run_before_actions and run_after_actions
|
|
48
|
+
# returns true if all actions were run, false if break_if condition yielded `true`
|
|
49
|
+
[:before, :after].each do |type|
|
|
50
|
+
define_method "run_#{type}_actions" do |break_if: nil|
|
|
51
|
+
called_method = @meth.to_sym
|
|
52
|
+
callbacks = self.class.send("#{type}_actions")
|
|
53
|
+
callbacks.each do |array|
|
|
54
|
+
callback, options = array
|
|
55
|
+
|
|
56
|
+
except = options[:except]
|
|
57
|
+
next if except && except.include?(called_method)
|
|
58
|
+
|
|
59
|
+
only = options[:only]
|
|
60
|
+
if only
|
|
61
|
+
send(callback) if only.include?(called_method)
|
|
62
|
+
else
|
|
63
|
+
send(callback)
|
|
64
|
+
end
|
|
65
|
+
@last_callback_name = callback
|
|
66
|
+
|
|
67
|
+
return false if !break_if.nil? && break_if.call
|
|
68
|
+
end
|
|
69
|
+
true
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end # ClassOptions
|
|
73
|
+
end
|