jets 3.1.0 → 5.0.0
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 +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +5 -1
- data/CHANGELOG.md +141 -0
- data/Gemfile +1 -5
- data/LICENSE.txt +1 -1
- data/README.md +21 -43
- data/Rakefile +3 -3
- data/backers.md +0 -5
- data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
- data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
- data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
- data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
- data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
- data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
- data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
- data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
- data/engines/internal/app/functions/jets/base_path.rb +109 -0
- data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
- data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
- data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
- data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
- data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
- data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
- data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
- data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
- data/engines/internal/app/views/layouts/application.html.erb +51 -0
- data/engines/internal/lib/internal/actiondispatch.rb +39 -0
- data/engines/internal/lib/internal/actionmailer.rb +51 -0
- data/engines/internal/lib/internal/actionview.rb +152 -0
- data/engines/internal/lib/internal/activerecord.rb +37 -0
- data/engines/internal/lib/internal/activesupport.rb +47 -0
- data/engines/internal/lib/internal/engine.rb +13 -0
- data/engines/internal/lib/internal/i18n_engine.rb +19 -0
- data/engines/internal/lib/internal/jets_controller.rb +46 -0
- data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
- data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
- data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
- data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
- data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
- data/exe/jets +1 -10
- data/jets.gemspec +16 -13
- data/lib/jets/app_loader.rb +77 -0
- data/lib/jets/application/bootstrap.rb +100 -0
- data/lib/jets/application/configuration/defaults.rb +256 -0
- data/lib/jets/application/configuration.rb +494 -0
- data/lib/jets/application/default_middleware_stack.rb +140 -0
- data/lib/jets/application/dummy_erb_compiler.rb +18 -0
- data/lib/jets/application/finisher.rb +266 -0
- data/lib/jets/application/routes_reloader.rb +80 -0
- data/lib/jets/application.rb +515 -199
- data/lib/jets/authorizer/base.rb +1 -0
- data/lib/jets/authorizer/dsl.rb +15 -11
- data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
- data/lib/jets/autoloaders/gem.rb +70 -0
- data/lib/jets/autoloaders/inflector.rb +21 -0
- data/lib/jets/autoloaders.rb +38 -101
- data/lib/jets/aws_info.rb +2 -2
- data/lib/jets/aws_services/stack_status.rb +1 -1
- data/lib/jets/aws_services.rb +8 -0
- data/lib/jets/backtrace_cleaner.rb +27 -0
- data/lib/jets/booter.rb +30 -118
- data/lib/jets/builders/code_builder.rb +64 -122
- data/lib/jets/builders/code_size.rb +1 -0
- data/lib/jets/builders/gem_replacer.rb +6 -12
- data/lib/jets/builders/handler_generator.rb +34 -14
- data/lib/jets/builders/lambda_layer.rb +2 -7
- data/lib/jets/builders/purger.rb +1 -1
- data/lib/jets/builders/rack_packager.rb +1 -1
- data/lib/jets/builders/ruby_packager.rb +54 -10
- data/lib/jets/builders/shim_vars/app.rb +10 -6
- data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
- data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
- data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
- data/lib/jets/bundle.rb +2 -9
- data/lib/jets/cfn/base.rb +82 -0
- data/lib/jets/cfn/builder/api/base.rb +12 -0
- data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
- data/lib/jets/cfn/builder/api/gateway.rb +104 -0
- data/lib/jets/cfn/builder/api/mapping.rb +54 -0
- data/lib/jets/cfn/builder/api/methods.rb +72 -0
- data/lib/jets/cfn/builder/api/paged.rb +30 -0
- data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
- data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
- data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
- data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
- data/lib/jets/cfn/builder/api/resources.rb +40 -0
- data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
- data/lib/jets/cfn/builder/controller.rb +28 -0
- data/lib/jets/cfn/builder/function.rb +9 -0
- data/lib/jets/cfn/builder/interface.rb +146 -0
- data/lib/jets/cfn/builder/job.rb +10 -0
- data/lib/jets/cfn/builder/nested.rb +130 -0
- data/lib/jets/cfn/builder/one_controller.rb +53 -0
- data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
- data/lib/jets/cfn/builder/parent.rb +149 -0
- data/lib/jets/cfn/builder/post_process.rb +25 -0
- data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
- data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
- data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
- data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
- data/lib/jets/cfn/deployment.rb +45 -0
- data/lib/jets/cfn/download.rb +39 -0
- data/lib/jets/cfn/params/api/base.rb +39 -0
- data/lib/jets/cfn/params/api/cors.rb +10 -0
- data/lib/jets/cfn/params/api/methods.rb +69 -0
- data/lib/jets/cfn/params/api/resources.rb +28 -0
- data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
- data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
- data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
- data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
- data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
- data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
- data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
- data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
- data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
- data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
- data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
- data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
- data/lib/jets/cfn/resource/iam/policy.rb +31 -0
- data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
- data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
- data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
- data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
- data/lib/jets/cfn/resource/lambda/function.rb +266 -0
- data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
- data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
- data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
- data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
- data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
- data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
- data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
- data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
- data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
- data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
- data/lib/jets/cfn/resource/nested/base.rb +38 -0
- data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
- data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
- data/lib/jets/cfn/resource/one/function.rb +66 -0
- data/lib/jets/cfn/resource/one/permission.rb +17 -0
- data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
- data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
- data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
- data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
- data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
- data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
- data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
- data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
- data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
- data/lib/jets/cfn/resource.rb +8 -0
- data/lib/jets/cfn/ship.rb +30 -16
- data/lib/jets/cfn/status.rb +1 -1
- data/lib/jets/cfn/template.rb +89 -0
- data/lib/jets/cfn/upload.rb +26 -23
- data/lib/jets/cli.rb +28 -203
- data/lib/jets/command/actions.rb +49 -0
- data/lib/jets/command/api_helpers.rb +41 -0
- data/lib/jets/command/aws_helpers.rb +26 -0
- data/lib/jets/command/base.rb +204 -0
- data/lib/jets/command/behavior.rb +83 -0
- data/lib/jets/command/environment_argument.rb +42 -0
- data/lib/jets/command/help/call.md +48 -0
- data/lib/jets/{commands → command}/help/deploy.md +1 -1
- data/lib/jets/command/help/logs.md +21 -0
- data/lib/jets/{commands → command}/help/new.md +3 -4
- data/lib/jets/command/help/projects.md +6 -0
- data/lib/jets/command/help/releases.md +37 -0
- data/lib/jets/command/help/rollback.md +5 -0
- data/lib/jets/command/help/routes.md +15 -0
- data/lib/jets/command/help/runner.md +40 -0
- data/lib/jets/command/help/stacks.md +6 -0
- data/lib/jets/command/help.rb +17 -0
- data/lib/jets/command/helpers/editor.rb +35 -0
- data/lib/jets/command.rb +133 -0
- data/lib/jets/commands/application/application_command.rb +40 -0
- data/lib/jets/commands/build/build_command.rb +33 -0
- data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
- data/lib/jets/commands/call/autoload_guesser.rb +2 -2
- data/lib/jets/commands/call/base_guesser.rb +5 -5
- data/lib/jets/commands/call/call_command.rb +27 -0
- data/lib/jets/commands/call/caller.rb +184 -0
- data/lib/jets/commands/call/guesser.rb +1 -1
- data/lib/jets/commands/clean/base.rb +1 -1
- data/lib/jets/commands/clean/build.rb +1 -1
- data/lib/jets/commands/clean/clean_command.rb +15 -0
- data/lib/jets/commands/clean/log.rb +4 -4
- data/lib/jets/commands/configure/configure_command.rb +9 -0
- data/lib/jets/commands/console/console_command.rb +38 -0
- data/lib/jets/commands/credentials/USAGE +103 -0
- data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
- data/lib/jets/commands/credentials/credentials_command.rb +139 -0
- data/lib/jets/commands/db/system/change/change_command.rb +24 -0
- data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
- data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
- data/lib/jets/commands/delete/delete_command.rb +155 -0
- data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
- data/lib/jets/commands/dev/dev_command.rb +19 -0
- data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
- data/lib/jets/commands/encrypted/USAGE +46 -0
- data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
- data/lib/jets/commands/gems/gems_command.rb +14 -0
- data/lib/jets/commands/generate/generate_command.rb +95 -0
- data/lib/jets/commands/help/USAGE +20 -0
- data/lib/jets/commands/help/help_command.rb +15 -0
- data/lib/jets/commands/initializers/initializers_command.rb +19 -0
- data/lib/jets/commands/logs/logs_command.rb +45 -0
- data/lib/jets/commands/new/new_command.rb +19 -0
- data/lib/jets/commands/notes/notes_command.rb +30 -0
- data/lib/jets/commands/plugin/plugin_command.rb +45 -0
- data/lib/jets/commands/projects/projects_command.rb +30 -0
- data/lib/jets/commands/rake/rake_command.rb +59 -0
- data/lib/jets/commands/releases/releases_command.rb +72 -0
- data/lib/jets/commands/rollback/rollback_command.rb +41 -0
- data/lib/jets/commands/routes/routes_command.rb +19 -0
- data/lib/jets/commands/runner/runner_command.rb +60 -0
- data/lib/jets/commands/server/server_command.rb +291 -0
- data/lib/jets/commands/stacks/stacks_command.rb +39 -0
- data/lib/jets/commands/status/status_command.rb +9 -0
- data/lib/jets/commands/url/url_command.rb +92 -0
- data/lib/jets/commands/version/version_command.rb +11 -0
- data/lib/jets/commands.rb +17 -0
- data/lib/jets/configuration.rb +166 -0
- data/lib/jets/controller/base.rb +105 -183
- data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
- data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
- data/lib/jets/controller/compat/caching.rb +13 -0
- data/lib/jets/controller/compat/future.rb +13 -0
- data/lib/jets/controller/compat/route_set.rb +47 -0
- data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
- data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
- data/lib/jets/controller/decorate/logging.rb +90 -0
- data/lib/jets/controller/decorate/redirecting.rb +16 -0
- data/lib/jets/controller/decorate/url_for.rb +10 -0
- data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
- data/lib/jets/controller/handler.rb +41 -0
- data/lib/jets/controller/middleware/main.rb +16 -8
- data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
- data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
- data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
- data/lib/jets/controller/rack_adapter/action.rb +35 -0
- data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
- data/lib/jets/controller/request/compat/params.rb +144 -0
- data/lib/jets/controller/request/compat/request.rb +125 -0
- data/lib/jets/controller/request.rb +35 -18
- data/lib/jets/controller/response/compat/response.rb +67 -0
- data/lib/jets/controller/response.rb +91 -8
- data/lib/jets/core.rb +153 -50
- data/lib/jets/core_ext/file.rb +9 -0
- data/lib/jets/core_ext/kernel.rb +2 -2
- data/lib/jets/core_ext/symbol.rb +5 -0
- data/lib/jets/core_ext.rb +4 -0
- data/lib/jets/dev_caching.rb +44 -0
- data/lib/jets/dotenv/ssm.rb +5 -2
- data/lib/jets/dotenv.rb +4 -3
- data/lib/jets/engine/configuration.rb +96 -0
- data/lib/jets/engine/turbines.rb +23 -0
- data/lib/jets/engine.rb +380 -0
- data/lib/jets/erb.rb +1 -1
- data/lib/jets/exception_reporting.rb +43 -0
- data/lib/jets/generators/job/job_generator.rb +41 -0
- data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
- data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
- data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
- data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
- data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
- data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
- data/lib/jets/generators/overrides/app/USAGE +38 -0
- data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
- data/lib/jets/generators/overrides/app/helpers.rb +139 -0
- data/lib/jets/generators/overrides/app/templates/.env +10 -0
- data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
- data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
- data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
- data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
- data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
- data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
- data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
- data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
- data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
- data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
- data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
- data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
- data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
- data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
- data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
- data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
- data/lib/jets/generators.rb +112 -0
- data/lib/jets/inflections.rb +1 -1
- data/lib/jets/info.rb +116 -0
- data/lib/jets/initializable.rb +95 -0
- data/lib/jets/job/base.rb +5 -2
- data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
- data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
- data/lib/jets/job/dsl/iot_event.rb +6 -6
- data/lib/jets/job/dsl/kinesis_event.rb +5 -5
- data/lib/jets/job/dsl/log_event.rb +2 -2
- data/lib/jets/job/dsl/rule_event.rb +7 -4
- data/lib/jets/job/dsl/s3_event.rb +1 -1
- data/lib/jets/job/dsl/sns_event.rb +6 -6
- data/lib/jets/job/dsl/sqs_event.rb +11 -11
- data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
- data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
- data/lib/jets/klass.rb +5 -6
- data/lib/jets/lambda/definition.rb +118 -0
- data/lib/jets/lambda/dsl/warnings.rb +57 -0
- data/lib/jets/lambda/dsl.rb +73 -54
- data/lib/jets/lambda/function.rb +3 -3
- data/lib/jets/lambda/function_constructor.rb +6 -6
- data/lib/jets/lambda/functions.rb +36 -1
- data/lib/jets/mega/hash_converter.rb +2 -2
- data/lib/jets/mega/request/source.rb +1 -2
- data/lib/jets/mega/request.rb +4 -4
- data/lib/jets/names.rb +79 -0
- data/lib/jets/overrides/dummy/rails.rb +11 -0
- data/lib/jets/overrides/lambda/marshaller.rb +10 -0
- data/lib/jets/overrides/puma.rb +10 -0
- data/lib/jets/paths.rb +243 -0
- data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
- data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
- data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
- data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
- data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
- data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
- data/lib/jets/preheat.rb +26 -33
- data/lib/jets/processors/deducer.rb +2 -2
- data/lib/jets/processors/main_processor.rb +6 -13
- data/lib/jets/rack/logger.rb +77 -0
- data/lib/jets/router/compat/route_set.rb +177 -0
- data/lib/jets/router/dsl/mount.rb +40 -6
- data/lib/jets/router/dsl.rb +125 -105
- data/lib/jets/router/engine_mount.rb +36 -0
- data/lib/jets/router/help.rb +130 -0
- data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
- data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
- data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
- data/lib/jets/router/matcher.rb +140 -17
- data/lib/jets/router/resources/options.rb +6 -4
- data/lib/jets/router/route/after_initialize.rb +64 -0
- data/lib/jets/router/route/as.rb +93 -0
- data/lib/jets/router/route/authorizer.rb +1 -0
- data/lib/jets/router/route/compat.rb +45 -0
- data/lib/jets/router/route/info.rb +74 -0
- data/lib/jets/router/route/node.rb +137 -0
- data/lib/jets/router/route/path.rb +93 -0
- data/lib/jets/router/route.rb +109 -90
- data/lib/jets/router/route_set.rb +214 -0
- data/lib/jets/router/scope.rb +204 -69
- data/lib/jets/router/state.rb +67 -0
- data/lib/jets/router/util.rb +1 -31
- data/lib/jets/router.rb +64 -150
- data/lib/jets/ruby_version_check.rb +15 -0
- data/lib/jets/rule/base.rb +1 -0
- data/lib/jets/rule/dsl.rb +7 -7
- data/lib/jets/secrets.rb +110 -0
- data/lib/jets/spec_helpers/controllers/request.rb +22 -16
- data/lib/jets/spec_helpers/controllers.rb +32 -24
- data/lib/jets/spec_helpers.rb +0 -6
- data/lib/jets/stack/builder.rb +3 -2
- data/lib/jets/stack/definition.rb +1 -4
- data/lib/jets/stack/function.rb +2 -2
- data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
- data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
- data/lib/jets/stack/main/dsl/lambda.rb +26 -19
- data/lib/jets/stack/main/dsl/sqs.rb +2 -2
- data/lib/jets/stack/output/lookup.rb +1 -1
- data/lib/jets/stack/output.rb +2 -2
- data/lib/jets/stack/parameter.rb +2 -2
- data/lib/jets/stack/resource.rb +3 -3
- data/lib/jets/stack/s3_event.rb +51 -37
- data/lib/jets/stack.rb +1 -1
- data/lib/jets/tasks/engine.rake +85 -0
- data/lib/jets/tasks/framework.rake +66 -0
- data/lib/jets/tasks/log.rake +41 -0
- data/lib/jets/tasks/middleware.rake +9 -0
- data/lib/jets/tasks/misc.rake +81 -0
- data/lib/jets/tasks/statistics.rake +37 -0
- data/lib/jets/tasks/tmp.rake +51 -0
- data/lib/jets/tasks/yarn.rake +29 -0
- data/lib/jets/tasks/zeitwerk.rake +61 -0
- data/lib/jets/tasks.rb +18 -0
- data/lib/jets/tmp_loader.rb +1 -1
- data/lib/jets/turbine/configurable.rb +36 -0
- data/lib/jets/turbine/configuration.rb +101 -0
- data/lib/jets/turbine.rb +164 -20
- data/lib/jets/util/camelize.rb +24 -0
- data/lib/jets/util/yamler.rb +16 -0
- data/lib/jets/version.rb +1 -1
- data/lib/jets.rb +8 -14
- metadata +444 -347
- data/.python-version +0 -1
- data/.ruby-version +0 -1
- data/bin/release +0 -9
- data/lib/jets/application/defaults.rb +0 -200
- data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
- data/lib/jets/builders/reconfigure_rails.rb +0 -114
- data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
- data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
- data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
- data/lib/jets/cfn/builders/controller_builder.rb +0 -50
- data/lib/jets/cfn/builders/function_builder.rb +0 -14
- data/lib/jets/cfn/builders/interface.rb +0 -133
- data/lib/jets/cfn/builders/job_builder.rb +0 -14
- data/lib/jets/cfn/builders/parent_builder.rb +0 -130
- data/lib/jets/cfn/built_template.rb +0 -15
- data/lib/jets/cfn/template_source.rb +0 -61
- data/lib/jets/commands/base.rb +0 -145
- data/lib/jets/commands/call.rb +0 -182
- data/lib/jets/commands/clean.rb +0 -19
- data/lib/jets/commands/configure.rb +0 -51
- data/lib/jets/commands/console.rb +0 -12
- data/lib/jets/commands/db/environment-task.rake +0 -3
- data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
- data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
- data/lib/jets/commands/db/tasks.rb +0 -34
- data/lib/jets/commands/db.rb +0 -13
- data/lib/jets/commands/dbconsole.rb +0 -134
- data/lib/jets/commands/delete.rb +0 -136
- data/lib/jets/commands/dynamodb/migrate.rb +0 -9
- data/lib/jets/commands/dynamodb/migrator.rb +0 -36
- data/lib/jets/commands/dynamodb.rb +0 -19
- data/lib/jets/commands/gems.rb +0 -13
- data/lib/jets/commands/help/call.md +0 -69
- data/lib/jets/commands/help/dynamodb/generate.md +0 -52
- data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
- data/lib/jets/commands/help/routes.md +0 -16
- data/lib/jets/commands/help/runner.md +0 -17
- data/lib/jets/commands/help.rb +0 -9
- data/lib/jets/commands/import/base.rb +0 -49
- data/lib/jets/commands/import/cheatsheet.rb +0 -35
- data/lib/jets/commands/import/rack.rb +0 -16
- data/lib/jets/commands/import/rails.rb +0 -74
- data/lib/jets/commands/import/sequence.rb +0 -90
- data/lib/jets/commands/import/templates/config/database.yml +0 -30
- data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
- data/lib/jets/commands/import.rb +0 -12
- data/lib/jets/commands/main.rb +0 -166
- data/lib/jets/commands/markdown/creator.rb +0 -58
- data/lib/jets/commands/markdown/index.rb +0 -27
- data/lib/jets/commands/markdown/page.rb +0 -125
- data/lib/jets/commands/markdown/shell.rb +0 -11
- data/lib/jets/commands/new.rb +0 -173
- data/lib/jets/commands/rake_command.rb +0 -61
- data/lib/jets/commands/rake_tasks.rb +0 -50
- data/lib/jets/commands/runner.rb +0 -16
- data/lib/jets/commands/sequence.rb +0 -105
- data/lib/jets/commands/stack_info.rb +0 -30
- data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.env.test +0 -3
- data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
- data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
- data/lib/jets/commands/templates/skeleton/Procfile +0 -7
- data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
- data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
- data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
- data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
- data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
- data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
- data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
- data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
- data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
- data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
- data/lib/jets/commands/upgrade/version1.rb +0 -136
- data/lib/jets/commands/upgrade.rb +0 -105
- data/lib/jets/commands/url.rb +0 -69
- data/lib/jets/commands/webpacker_template.rb +0 -18
- data/lib/jets/controller/callbacks.rb +0 -73
- data/lib/jets/controller/cookies/jar.rb +0 -269
- data/lib/jets/controller/cookies.rb +0 -38
- data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
- data/lib/jets/controller/error.rb +0 -4
- data/lib/jets/controller/forgery_protection.rb +0 -43
- data/lib/jets/controller/layout.rb +0 -17
- data/lib/jets/controller/middleware/cors.rb +0 -60
- data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
- data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
- data/lib/jets/controller/middleware/reloader.rb +0 -15
- data/lib/jets/controller/parameters_filter.rb +0 -29
- data/lib/jets/controller/params.rb +0 -117
- data/lib/jets/controller/redirection.rb +0 -61
- data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
- data/lib/jets/controller/rendering.rb +0 -96
- data/lib/jets/controller/stage.rb +0 -34
- data/lib/jets/controller.rb +0 -3
- data/lib/jets/db.rb +0 -15
- data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
- data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
- data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
- data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
- data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
- data/lib/jets/generator.rb +0 -112
- data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
- data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
- data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
- data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
- data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
- data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
- data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
- data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
- data/lib/jets/lambda/task.rb +0 -111
- data/lib/jets/logger.rb +0 -21
- data/lib/jets/middleware/configurator.rb +0 -84
- data/lib/jets/middleware/default_stack.rb +0 -53
- data/lib/jets/middleware/layer.rb +0 -34
- data/lib/jets/middleware/stack.rb +0 -77
- data/lib/jets/middleware.rb +0 -33
- data/lib/jets/naming.rb +0 -63
- data/lib/jets/overrides/rails/action_controller.rb +0 -13
- data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
- data/lib/jets/overrides/rails/common_methods.rb +0 -13
- data/lib/jets/overrides/rails/migration_checker.rb +0 -34
- data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
- data/lib/jets/overrides/rails/url_helper.rb +0 -88
- data/lib/jets/overrides/rails.rb +0 -6
- data/lib/jets/rack_server.rb +0 -86
- data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
- data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
- data/lib/jets/resource/api_gateway/cors.rb +0 -61
- data/lib/jets/resource/api_gateway/method.rb +0 -102
- data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
- data/lib/jets/resource/base.rb +0 -28
- data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
- data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
- data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
- data/lib/jets/resource/child_stack/api_resource.rb +0 -54
- data/lib/jets/resource/child_stack/base.rb +0 -24
- data/lib/jets/resource/iam/base_role_definition.rb +0 -47
- data/lib/jets/resource/lambda/function.rb +0 -221
- data/lib/jets/resource/logs/subscription_filter.rb +0 -31
- data/lib/jets/resource/permission.rb +0 -45
- data/lib/jets/resource.rb +0 -71
- data/lib/jets/router/error.rb +0 -4
- data/lib/jets/router/finder.rb +0 -47
- data/lib/jets/router/helpers/core_helper.rb +0 -27
- data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
- data/lib/jets/router/helpers.rb +0 -4
- data/lib/jets/router/method_creator/code.rb +0 -99
- data/lib/jets/router/method_creator/edit.rb +0 -12
- data/lib/jets/router/method_creator/generic.rb +0 -11
- data/lib/jets/router/method_creator/index.rb +0 -48
- data/lib/jets/router/method_creator/new.rb +0 -12
- data/lib/jets/router/method_creator/root.rb +0 -15
- data/lib/jets/router/method_creator/show.rb +0 -12
- data/lib/jets/router/method_creator.rb +0 -50
- data/lib/jets/turbo/database_yaml.rb +0 -41
- data/lib/jets/turbo/project/.gitignore +0 -12
- data/lib/jets/turbo/project/.jetskeep +0 -1
- data/lib/jets/turbo/project/Gemfile +0 -16
- data/lib/jets/turbo/project/Rakefile +0 -2
- data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
- data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
- data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
- data/lib/jets/turbo/project/config/application.rb +0 -5
- data/lib/jets/turbo/project/config/routes.rb +0 -4
- data/lib/jets/turbo/project/config.ru +0 -5
- data/lib/jets/turbo/rails.rb +0 -127
- data/lib/jets/turbo/templates/config/database.yml +0 -30
- data/lib/jets/turbo.rb +0 -56
- data/readme/prerelease.md +0 -6
- data/readme/testing.md +0 -60
- /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
- /data/lib/jets/{commands → command}/help/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
- /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
- /data/lib/jets/{commands → command}/help/console.md +0 -0
- /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
- /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
- /data/lib/jets/{commands → command}/help/delete.md +0 -0
- /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
- /data/lib/jets/{commands → command}/help/generate.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
- /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
- /data/lib/jets/{commands → command}/help/server.md +0 -0
- /data/lib/jets/{commands → command}/help/status.md +0 -0
- /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
- /data/lib/jets/{commands → command}/help/url.md +0 -0
- /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
- /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
- /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
- /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "jets/command"
|
|
4
|
+
|
|
5
|
+
aliases = {
|
|
6
|
+
"g" => "generate",
|
|
7
|
+
"c" => "console",
|
|
8
|
+
"s" => "server",
|
|
9
|
+
"db" => "dbconsole",
|
|
10
|
+
"r" => "runner",
|
|
11
|
+
"t" => "test"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
command = ARGV.shift
|
|
15
|
+
command = aliases[command] || command
|
|
16
|
+
|
|
17
|
+
Jets::Command.invoke command, ARGV
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "active_support/ordered_options"
|
|
4
|
+
require "active_support/core_ext/object"
|
|
5
|
+
|
|
6
|
+
module Jets
|
|
7
|
+
module Configuration
|
|
8
|
+
# MiddlewareStackProxy is a proxy for the Jets middleware stack that allows
|
|
9
|
+
# you to configure middlewares in your application. It works basically as a
|
|
10
|
+
# command recorder, saving each command to be applied after initialization
|
|
11
|
+
# over the default middleware stack, so you can add, swap, or remove any
|
|
12
|
+
# middleware in Jets.
|
|
13
|
+
#
|
|
14
|
+
# You can add your own middlewares by using the +config.middleware.use+ method:
|
|
15
|
+
#
|
|
16
|
+
# config.middleware.use Magical::Unicorns
|
|
17
|
+
#
|
|
18
|
+
# This will put the <tt>Magical::Unicorns</tt> middleware on the end of the stack.
|
|
19
|
+
# You can use +insert_before+ if you wish to add a middleware before another:
|
|
20
|
+
#
|
|
21
|
+
# config.middleware.insert_before Rack::Head, Magical::Unicorns
|
|
22
|
+
#
|
|
23
|
+
# There's also +insert_after+ which will insert a middleware after another:
|
|
24
|
+
#
|
|
25
|
+
# config.middleware.insert_after Rack::Head, Magical::Unicorns
|
|
26
|
+
#
|
|
27
|
+
# Middlewares can also be completely swapped out and replaced with others:
|
|
28
|
+
#
|
|
29
|
+
# config.middleware.swap ActionDispatch::Flash, Magical::Unicorns
|
|
30
|
+
#
|
|
31
|
+
# Middlewares can be moved from one place to another:
|
|
32
|
+
#
|
|
33
|
+
# config.middleware.move_before ActionDispatch::Flash, Magical::Unicorns
|
|
34
|
+
#
|
|
35
|
+
# This will move the <tt>Magical::Unicorns</tt> middleware before the
|
|
36
|
+
# <tt>ActionDispatch::Flash</tt>. You can also move it after:
|
|
37
|
+
#
|
|
38
|
+
# config.middleware.move_after ActionDispatch::Flash, Magical::Unicorns
|
|
39
|
+
#
|
|
40
|
+
# And finally they can also be removed from the stack completely:
|
|
41
|
+
#
|
|
42
|
+
# config.middleware.delete ActionDispatch::Flash
|
|
43
|
+
#
|
|
44
|
+
class MiddlewareStackProxy
|
|
45
|
+
def initialize(operations = [], delete_operations = [])
|
|
46
|
+
@operations = operations
|
|
47
|
+
@delete_operations = delete_operations
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def insert_before(...)
|
|
51
|
+
@operations << -> middleware { middleware.insert_before(...) }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
alias :insert :insert_before
|
|
55
|
+
|
|
56
|
+
def insert_after(...)
|
|
57
|
+
@operations << -> middleware { middleware.insert_after(...) }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def swap(...)
|
|
61
|
+
@operations << -> middleware { middleware.swap(...) }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def use(...)
|
|
65
|
+
@operations << -> middleware { middleware.use(...) }
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def delete(...)
|
|
69
|
+
@delete_operations << -> middleware { middleware.delete(...) }
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def move_before(...)
|
|
73
|
+
@delete_operations << -> middleware { middleware.move_before(...) }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
alias :move :move_before
|
|
77
|
+
|
|
78
|
+
def move_after(...)
|
|
79
|
+
@delete_operations << -> middleware { middleware.move_after(...) }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def unshift(...)
|
|
83
|
+
@operations << -> middleware { middleware.unshift(...) }
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def merge_into(other) # :nodoc:
|
|
87
|
+
(@operations + @delete_operations).each do |operation|
|
|
88
|
+
operation.call(other)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
other
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def +(other) # :nodoc:
|
|
95
|
+
MiddlewareStackProxy.new(@operations + other.operations, @delete_operations + other.delete_operations)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
protected
|
|
99
|
+
attr_reader :operations, :delete_operations
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
class Generators # :nodoc:
|
|
103
|
+
attr_accessor :aliases, :options, :templates, :fallbacks, :colorize_logging, :api_only
|
|
104
|
+
attr_reader :hidden_namespaces, :after_generate_callbacks
|
|
105
|
+
|
|
106
|
+
def initialize
|
|
107
|
+
@aliases = Hash.new { |h, k| h[k] = {} }
|
|
108
|
+
@options = Hash.new { |h, k| h[k] = {} }
|
|
109
|
+
@fallbacks = {}
|
|
110
|
+
@templates = []
|
|
111
|
+
@colorize_logging = true
|
|
112
|
+
@api_only = false
|
|
113
|
+
@hidden_namespaces = []
|
|
114
|
+
@after_generate_callbacks = []
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def initialize_copy(source)
|
|
118
|
+
@aliases = @aliases.deep_dup
|
|
119
|
+
@options = @options.deep_dup
|
|
120
|
+
@fallbacks = @fallbacks.deep_dup
|
|
121
|
+
@templates = @templates.dup
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def hide_namespace(namespace)
|
|
125
|
+
@hidden_namespaces << namespace
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def after_generate(&block)
|
|
129
|
+
@after_generate_callbacks << block
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def method_missing(method, *args)
|
|
133
|
+
method = method.to_s.delete_suffix("=").to_sym
|
|
134
|
+
|
|
135
|
+
# Note: Using :rails because piggybacking off of rails generators
|
|
136
|
+
if args.empty?
|
|
137
|
+
if method == :rails
|
|
138
|
+
return @options[method]
|
|
139
|
+
else
|
|
140
|
+
return @options[:rails][method]
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
if method == :rails || args.first.is_a?(Hash)
|
|
145
|
+
namespace, configuration = method, args.shift
|
|
146
|
+
else
|
|
147
|
+
# Examples:
|
|
148
|
+
# method :orm args [:active_record, {:migration=>true, :timestamps=>true}] @options {}
|
|
149
|
+
# namespace :active_record
|
|
150
|
+
# configuration {:migration=>true, :timestamps=>true}
|
|
151
|
+
namespace, configuration = args.shift, args.shift
|
|
152
|
+
namespace = namespace.to_sym if namespace.respond_to?(:to_sym)
|
|
153
|
+
@options[:rails][method] = namespace
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
if configuration
|
|
157
|
+
aliases = configuration.delete(:aliases)
|
|
158
|
+
@aliases[namespace].merge!(aliases) if aliases
|
|
159
|
+
@options[namespace].merge!(configuration)
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# Example @options: {:rails=>{:orm=>:active_record}, :active_record=>{:migration=>true, :timestamps=>true}}
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
end
|
data/lib/jets/controller/base.rb
CHANGED
|
@@ -1,195 +1,117 @@
|
|
|
1
|
+
require "action_controller"
|
|
2
|
+
require "action_controller/log_subscriber"
|
|
3
|
+
require "active_support/concern"
|
|
4
|
+
require "active_support/callbacks"
|
|
5
|
+
require "abstract_controller/callbacks"
|
|
1
6
|
require "json"
|
|
2
7
|
require "rack/utils" # Rack::Utils.parse_nested_query
|
|
3
8
|
|
|
4
9
|
# Controller public methods get turned into Lambda functions.
|
|
5
|
-
|
|
6
|
-
|
|
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)
|
|
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
|
-
method_override!
|
|
79
|
-
|
|
80
|
-
t1 = Time.now
|
|
81
|
-
log_start
|
|
82
|
-
|
|
83
|
-
begin
|
|
84
|
-
if run_before_actions(break_if: -> { @rendered })
|
|
85
|
-
send(@meth)
|
|
86
|
-
action_completed = true
|
|
87
|
-
else
|
|
88
|
-
Jets.logger.info "Filter chain halted as #{@last_callback_name} rendered or redirected"
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
triplet = ensure_render
|
|
92
|
-
run_after_actions if action_completed
|
|
93
|
-
rescue Exception => exception
|
|
94
|
-
rescue_with_handler(exception) || raise
|
|
95
|
-
triplet = ensure_render
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
took = Time.now - t1
|
|
99
|
-
status = triplet[0]
|
|
100
|
-
log_finish(status: status, took: took)
|
|
101
|
-
triplet # status, headers, body
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# Override @meth when POST with _method=delete
|
|
105
|
-
# By the time processing reaches dispatch which calls method_override!
|
|
106
|
-
# The Rack::MethodOverride middleware has overriden env['REQUEST_METHOD'] with DELETE
|
|
107
|
-
# and set env['rack.methodoverride.original_method']
|
|
108
|
-
def method_override!
|
|
109
|
-
env = request.env
|
|
110
|
-
if env['rack.methodoverride.original_method'] && env['REQUEST_METHOD'] == 'DELETE'
|
|
111
|
-
@original_meth = @meth
|
|
112
|
-
@meth = "delete"
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def processing_log
|
|
117
|
-
processing = "Processing #{self.class.name}##{@meth}"
|
|
118
|
-
processing << " (original method #{@original_meth})" if @original_meth
|
|
119
|
-
processing
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
# Documented interface method, careful not to rename
|
|
123
|
-
def log_start
|
|
124
|
-
# JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
|
|
125
|
-
ip = request.ip
|
|
126
|
-
Jets.logger.info "Started #{@event['httpMethod']} \"#{@event['path']}\" for #{ip} at #{Time.now}"
|
|
127
|
-
Jets.logger.info processing_log
|
|
128
|
-
Jets.logger.info " Event: #{event_log}"
|
|
129
|
-
Jets.logger.info " Parameters: #{JSON.dump(filtered_parameters.to_h)}"
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Documented interface method, careful not to rename
|
|
133
|
-
def log_finish(options={})
|
|
134
|
-
status, took = options[:status], options[:took]
|
|
135
|
-
Jets.logger.info "Completed Status Code #{status} in #{took}s"
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
def event_log
|
|
139
|
-
display_event = @event.dup
|
|
10
|
+
module Jets::Controller
|
|
11
|
+
DEFAULT_CONTENT_TYPE = "text/html; charset=utf-8"
|
|
140
12
|
|
|
141
|
-
|
|
142
|
-
display_event['body'] = '[BASE64_ENCODED]'
|
|
143
|
-
else
|
|
144
|
-
display_event['body'] = parameter_filter.filter_json(display_event['body'])
|
|
145
|
-
end
|
|
13
|
+
class RoutingError < StandardError; end
|
|
146
14
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
15
|
+
class Base < Jets::Lambda::Functions
|
|
16
|
+
# Make Jets controller "compatible" with Rails
|
|
17
|
+
# Note: Rolling include into a single Compat module causes naming conflicts with ActionController and AbstractController.
|
|
18
|
+
# So we include each module individually. It's clearer this way anyway.
|
|
19
|
+
include Compat::AbstractController::Base
|
|
20
|
+
include Compat::ActionController::Metal
|
|
21
|
+
include Compat::RouteSet
|
|
22
|
+
include Compat::Caching
|
|
23
|
+
include Compat::Future
|
|
24
|
+
|
|
25
|
+
# Order matters due to use of super and the module included chain.
|
|
26
|
+
include AbstractController::Rendering # at top to normalize render options asap
|
|
27
|
+
include AbstractController::Translation
|
|
28
|
+
include AbstractController::AssetPaths
|
|
29
|
+
|
|
30
|
+
include ActionController::Helpers
|
|
31
|
+
include Jets::Router::Helpers::NamedRoutes
|
|
32
|
+
|
|
33
|
+
include ActionController::UrlFor # includes ActionDispatch::Routing::UrlFor
|
|
34
|
+
include ActionController::Redirecting
|
|
35
|
+
include ActionView::Layouts # includes ActionView::Rendering
|
|
36
|
+
include ActionController::Rendering
|
|
37
|
+
include ActionController::Renderers::All # for use_renderers :json, :js, :xml
|
|
38
|
+
include ActionController::ConditionalGet
|
|
39
|
+
include ActionController::EtagWithTemplateDigest
|
|
40
|
+
include ActionController::EtagWithFlash
|
|
41
|
+
include ActionController::Caching
|
|
42
|
+
include ActionController::MimeResponds
|
|
43
|
+
include ActionController::ImplicitRender # includes BasicImplicitRender action_controller/metal/basic_implicit_render.rb
|
|
44
|
+
include ActionController::StrongParameters
|
|
45
|
+
include ActionController::ParameterEncoding
|
|
46
|
+
include ActionController::Cookies
|
|
47
|
+
include ActionController::Flash
|
|
48
|
+
include ActionController::FormBuilder
|
|
49
|
+
include ActionController::RequestForgeryProtection
|
|
50
|
+
include ActionController::ContentSecurityPolicy
|
|
51
|
+
include ActionController::PermissionsPolicy
|
|
52
|
+
# include ActionController::Streaming # not supported
|
|
53
|
+
# include ActionController::DataStreaming # not supported
|
|
54
|
+
include ActionController::HttpAuthentication::Basic::ControllerMethods
|
|
55
|
+
include ActionController::HttpAuthentication::Digest::ControllerMethods
|
|
56
|
+
include ActionController::HttpAuthentication::Token::ControllerMethods
|
|
57
|
+
# include ActionController::DefaultHeaders # not needed
|
|
58
|
+
include ActionController::Logging # log_at: ability to change log level
|
|
59
|
+
|
|
60
|
+
# More Jets overrides and customizations
|
|
61
|
+
include Handler # Lambda Handler process! method. Runs on AWS only.
|
|
62
|
+
include RackAdapter::Action # action rack method
|
|
63
|
+
|
|
64
|
+
# Before callbacks should also be executed as early as possible, so
|
|
65
|
+
# also include them at the bottom.
|
|
66
|
+
include AbstractController::Callbacks
|
|
67
|
+
|
|
68
|
+
# Must near bottom because decorating Rails behavior
|
|
69
|
+
include Decorate::Authorization # APIGW Authorizers
|
|
70
|
+
include Decorate::UrlFor # add_apigw_stage
|
|
71
|
+
include Decorate::Redirecting # add_apigw_stage
|
|
72
|
+
include Decorate::Logging
|
|
73
|
+
|
|
74
|
+
# Append rescue at the bottom to wrap as much as possible.
|
|
75
|
+
include ActionController::Rescue
|
|
76
|
+
|
|
77
|
+
# Add instrumentations hooks at the bottom, to ensure they instrument
|
|
78
|
+
# all the methods properly.
|
|
79
|
+
include ActionController::Instrumentation # TODO: figure why notifications dont work
|
|
80
|
+
|
|
81
|
+
# Params wrapper should come before instrumentation so they are
|
|
82
|
+
# properly showed in logs
|
|
83
|
+
include ActionController::ParamsWrapper
|
|
84
|
+
|
|
85
|
+
def initialize(event, context, meth, rack_env)
|
|
86
|
+
# Passing in rack env so the same rack env (same object id) is used.
|
|
87
|
+
# This is important for:
|
|
88
|
+
# 1. Constraints lambda procs
|
|
89
|
+
# 2. Controller.action rack methods
|
|
90
|
+
@event = event
|
|
91
|
+
@context = context
|
|
92
|
+
@meth = meth
|
|
93
|
+
@rack_env = rack_env
|
|
94
|
+
@_request = Jets::Controller::Request.new(event: event, rack_env: @rack_env)
|
|
95
|
+
# Note: Rails sets request.route in the Rails::Engine#build_request instead.
|
|
96
|
+
# The Jets request class is built slightly differently, so set it here.
|
|
97
|
+
# The request.routes method is need to that url_helpers work in generally.
|
|
98
|
+
# It's just how Rails ActionView implements url_helpers.
|
|
99
|
+
@_request.routes = self.class._routes
|
|
100
|
+
@_response = Jets::Controller::Response.new
|
|
101
|
+
@_response.request = @request
|
|
102
|
+
# Jets::Controller::Base#initialize interface is different than ActionController::Controller::Base.
|
|
103
|
+
# The super call goes to ActionController modules that can decorate and call super again.
|
|
104
|
+
# At the end of the module chain is Jets::Controller::Compat::ActionController::Metal#initialize
|
|
105
|
+
# which goes back to the original Jets::Lambda::Functions#initialize(event, context, meth) interface.
|
|
106
|
+
super() # ActionController::Base#initialize() interface
|
|
150
107
|
end
|
|
151
108
|
|
|
152
|
-
|
|
153
|
-
def json_dump(data)
|
|
154
|
-
JSON.dump(data)
|
|
155
|
-
rescue Encoding::UndefinedConversionError
|
|
156
|
-
data['body'] = '[BINARY]'
|
|
157
|
-
JSON.dump(data)
|
|
158
|
-
end
|
|
109
|
+
abstract!
|
|
159
110
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
klass = self.class
|
|
163
|
-
while klass != Jets::Controller::Base
|
|
164
|
-
paths << klass.controller_path
|
|
165
|
-
klass = klass.superclass
|
|
166
|
-
end
|
|
167
|
-
paths
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
def controller_name
|
|
171
|
-
self.class.to_s.underscore
|
|
172
|
-
end
|
|
111
|
+
use_renderers :json, :js, :xml
|
|
112
|
+
end
|
|
173
113
|
|
|
174
|
-
|
|
175
|
-
@meth
|
|
176
|
-
end
|
|
114
|
+
# See Jets::Controller::Compat::ActionController::Metal dispatch! method
|
|
177
115
|
|
|
178
|
-
|
|
179
|
-
class << self
|
|
180
|
-
def internal(value=nil)
|
|
181
|
-
if !value.nil?
|
|
182
|
-
self.internal_controller = value
|
|
183
|
-
else
|
|
184
|
-
self.internal_controller
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
def helper_method(*meths)
|
|
189
|
-
meths.each do |meth|
|
|
190
|
-
Jets::Router::Helpers.define_helper_method(meth)
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
end
|
|
194
|
-
end
|
|
116
|
+
ActiveSupport.run_load_hooks(:jets_controller, Base)
|
|
195
117
|
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require "abstract_controller/error"
|
|
2
|
+
require "active_support/configurable"
|
|
3
|
+
require "active_support/descendants_tracker"
|
|
4
|
+
require "active_support/core_ext/module/anonymous"
|
|
5
|
+
require "active_support/core_ext/module/attr_internal"
|
|
6
|
+
|
|
7
|
+
module Jets::Controller::Compat::AbstractController
|
|
8
|
+
module Base
|
|
9
|
+
extend ActiveSupport::Concern
|
|
10
|
+
include ActiveSupport::Configurable
|
|
11
|
+
|
|
12
|
+
delegate :action_methods,
|
|
13
|
+
:controller_name,
|
|
14
|
+
:controller_path,
|
|
15
|
+
to: :class
|
|
16
|
+
class_methods do
|
|
17
|
+
# A list of method names that should be considered actions. This
|
|
18
|
+
# includes all public instance methods on a controller, less
|
|
19
|
+
# any internal methods (see internal_methods), adding back in
|
|
20
|
+
# any methods that are internal, but still exist on the class
|
|
21
|
+
# itself.
|
|
22
|
+
#
|
|
23
|
+
# ==== Returns
|
|
24
|
+
# * <tt>Set</tt> - A set of all methods that should be considered actions.
|
|
25
|
+
def action_methods
|
|
26
|
+
@action_methods ||= begin
|
|
27
|
+
# All public instance methods of this class, including ancestors
|
|
28
|
+
methods = (public_instance_methods(true) -
|
|
29
|
+
# Except for public instance methods of Base and its ancestors
|
|
30
|
+
internal_methods +
|
|
31
|
+
# Be sure to include shadowed public instance methods of this class
|
|
32
|
+
public_instance_methods(false))
|
|
33
|
+
|
|
34
|
+
methods.map!(&:to_s)
|
|
35
|
+
|
|
36
|
+
methods.to_set
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# A list of all internal methods for a controller. This finds the first
|
|
41
|
+
# abstract superclass of a controller, and gets a list of all public
|
|
42
|
+
# instance methods on that abstract class. Public instance methods of
|
|
43
|
+
# a controller would normally be considered action methods, so methods
|
|
44
|
+
# declared on abstract classes are being removed.
|
|
45
|
+
# (ActionController::Metal and ActionController::Base are defined as abstract)
|
|
46
|
+
def internal_methods
|
|
47
|
+
controller = self
|
|
48
|
+
|
|
49
|
+
controller = controller.superclass until controller.abstract?
|
|
50
|
+
controller.public_instance_methods(true)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def controller_name
|
|
54
|
+
@controller_name ||= name.demodulize.delete_suffix("Controller").underscore
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def controller_path
|
|
58
|
+
@controller_path ||= name.delete_suffix("Controller").underscore
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns true if the given controller is capable of rendering
|
|
62
|
+
# a path. A subclass of +AbstractController::Base+
|
|
63
|
+
# may return false. An Email controller for example does not
|
|
64
|
+
# support paths, only full URLs.
|
|
65
|
+
def supports_path?
|
|
66
|
+
true
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
##
|
|
71
|
+
# Returns the body of the HTTP response sent by the controller.
|
|
72
|
+
attr_internal :response_body
|
|
73
|
+
|
|
74
|
+
##
|
|
75
|
+
# Returns the name of the action this controller is processing.
|
|
76
|
+
def action_name
|
|
77
|
+
@meth
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def available_action?(action_name)
|
|
81
|
+
self.class.action_methods.include?(action_name.to_s)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Tests if a response body is set. Used to determine if the
|
|
85
|
+
# +process_action+ callback needs to be terminated in
|
|
86
|
+
# AbstractController::Callbacks.
|
|
87
|
+
def performed?
|
|
88
|
+
if response_body.respond_to?(:each)
|
|
89
|
+
!response_body.compact.empty? # [""] is considered true
|
|
90
|
+
else # nil
|
|
91
|
+
!response_body.nil?
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def inspect # :nodoc:
|
|
96
|
+
"#<#{self.class.name}:#{'%#016x' % (object_id << 1)}>"
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
private
|
|
100
|
+
# Returns true if the name can be considered an action because
|
|
101
|
+
# it has a method defined in the controller.
|
|
102
|
+
#
|
|
103
|
+
# ==== Parameters
|
|
104
|
+
# * <tt>name</tt> - The name of an action to be tested
|
|
105
|
+
def action_method?(name)
|
|
106
|
+
self.class.action_methods.include?(name)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Call the action. Override this in a subclass to modify the
|
|
110
|
+
# behavior around processing an action. This, and not #process,
|
|
111
|
+
# is the intended way to override action dispatching.
|
|
112
|
+
#
|
|
113
|
+
# Notice that the first argument is the method to be dispatched
|
|
114
|
+
# which is *not* necessarily the same as the action name.
|
|
115
|
+
def process_action
|
|
116
|
+
send_action(action_name) # to BasicImplicitRender#send_action => super (posts#index) or default_render
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# Actually call the method associated with the action. Override
|
|
120
|
+
# this method if you wish to change how action methods are called,
|
|
121
|
+
# not to add additional behavior around it. For example, you would
|
|
122
|
+
# override #send_action if you want to inject arguments into the
|
|
123
|
+
# method.
|
|
124
|
+
alias send_action send
|
|
125
|
+
end
|
|
126
|
+
end
|