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,197 @@
|
|
|
1
|
+
require 'active_support/core_ext/module/remove_method'
|
|
2
|
+
|
|
3
|
+
module Jets::Router::Helpers::NamedRoutes
|
|
4
|
+
module Generated
|
|
5
|
+
def create_helper_module(route_set)
|
|
6
|
+
module_name = helper_module_name(route_set)
|
|
7
|
+
module_name.constantize rescue create_helper_module!(module_name, route_set)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def helper_module_name(route_set)
|
|
11
|
+
engine_class = route_set.engine.class
|
|
12
|
+
name = engine_class == Jets.app_class ? "main_app" : engine_class.engine_name
|
|
13
|
+
name = name.gsub('::','')
|
|
14
|
+
name = "#{name.camelize}Helpers" # MainAppHelpers or BlorghHelpers
|
|
15
|
+
"Jets::Router::Helpers::NamedRoutes::Generated::#{name}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def create_helper_module!(module_name, route_set)
|
|
19
|
+
mod = Module.new do
|
|
20
|
+
extend ActiveSupport::Concern # Needed for _url_for_modules to work since or UrlHelper ClassMethods not included
|
|
21
|
+
mattr_accessor :path_helpers, default: Set.new
|
|
22
|
+
mattr_accessor :url_helpers, default: Set.new
|
|
23
|
+
|
|
24
|
+
include AddFullUrl
|
|
25
|
+
|
|
26
|
+
# For compatibility with Rails url_helpers
|
|
27
|
+
include ActionDispatch::Routing::UrlFor
|
|
28
|
+
define_singleton_method(:_routes) { route_set } # needed for controller class context
|
|
29
|
+
define_method(:_routes) { route_set } # needed for view context
|
|
30
|
+
# Jets convenience method
|
|
31
|
+
define_singleton_method(:route_set) { route_set }
|
|
32
|
+
|
|
33
|
+
define_singleton_method(:_url_for_modules) { ActionView::RoutingUrlFor }
|
|
34
|
+
define_method(:_url_for_modules) { ActionView::RoutingUrlFor }
|
|
35
|
+
|
|
36
|
+
# Mimic Rails behavior
|
|
37
|
+
# Precdence:
|
|
38
|
+
# 1. config.action_mailer.default_url_options
|
|
39
|
+
# 2. Jets.application.default_url_options
|
|
40
|
+
def default_url_options
|
|
41
|
+
self.class.default_url_options.empty? ? Jets.application.default_url_options : self.class.default_url_options
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def add_methods!
|
|
45
|
+
route_set.routes.each do |route|
|
|
46
|
+
next unless route.as
|
|
47
|
+
next if route.engine?
|
|
48
|
+
|
|
49
|
+
name = route.as
|
|
50
|
+
path_name = "#{name}_path"
|
|
51
|
+
url_name = "#{name}_url"
|
|
52
|
+
engine_class = route_set.engine.class
|
|
53
|
+
|
|
54
|
+
# Normally, self is <PostsController> or View context instance
|
|
55
|
+
define_method(path_name) do |*args|
|
|
56
|
+
NamedRouteMethod.new(route, args, self, engine_class).path
|
|
57
|
+
end
|
|
58
|
+
self.path_helpers.add(path_name)
|
|
59
|
+
|
|
60
|
+
define_method(url_name) do |*args|
|
|
61
|
+
path = send(path_name, *args)
|
|
62
|
+
options = args.extract_options!
|
|
63
|
+
add_full_url(options.merge(path: path))
|
|
64
|
+
end
|
|
65
|
+
self.url_helpers.add(url_name)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def remove_methods!
|
|
70
|
+
remove = Proc.new { |method| remove_method(method) }
|
|
71
|
+
path_helpers.each(&:remove)
|
|
72
|
+
url_helpers.each(&:remove)
|
|
73
|
+
self.path_helpers.clear
|
|
74
|
+
self.url_helpers.clear
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Wonder if extend self is may idea since it can allow context to be module itself
|
|
78
|
+
# instead of the controller or view instance. However, it allows
|
|
79
|
+
# Jets.application.routes.url_helpers.posts_path style calls in jets console
|
|
80
|
+
extend self
|
|
81
|
+
|
|
82
|
+
add_methods!
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# Name it instead of using anonymous module to help debugging
|
|
86
|
+
# IE: Jets::Router::Helpers::NamedRoutes::Generated::MainAppHelpers
|
|
87
|
+
basename = module_name.split('::').last.to_sym
|
|
88
|
+
Jets::Router::Helpers::NamedRoutes::Generated.const_set(basename, mod)
|
|
89
|
+
|
|
90
|
+
define_mounted_helper(mod, route_set)
|
|
91
|
+
|
|
92
|
+
mod
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def define_mounted_helper(mod, route_set)
|
|
96
|
+
name = mod.name.split('::').last.sub('Helpers','').underscore.to_sym
|
|
97
|
+
return if MountedHelpers.method_defined?(name)
|
|
98
|
+
|
|
99
|
+
helpers_module = route_set.url_helpers
|
|
100
|
+
|
|
101
|
+
MountedHelpers.class_eval do
|
|
102
|
+
define_method "_#{name}" do
|
|
103
|
+
Jets::Router::Helpers::NamedRoutes::Proxy.new(self, helpers_module)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
MountedHelpers.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
|
108
|
+
def #{name}
|
|
109
|
+
@_#{name} ||= _#{name}
|
|
110
|
+
end
|
|
111
|
+
RUBY
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
module MountedHelpers
|
|
115
|
+
extend ActiveSupport::Concern
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Contains all the mounted helpers across different
|
|
119
|
+
# engines and the `main_app` helper for the application.
|
|
120
|
+
# You can include this in your classes if you want to
|
|
121
|
+
# access routes for other engines.
|
|
122
|
+
def mounted_helpers
|
|
123
|
+
MountedHelpers
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
extend self
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
class NamedRouteMethod
|
|
130
|
+
include Jets::Controller::Decorate::ApigwStage
|
|
131
|
+
|
|
132
|
+
attr_reader :options
|
|
133
|
+
def initialize(route, args, context, engine_class)
|
|
134
|
+
@route, @args, @context, @engine_class = route, args, context, engine_class
|
|
135
|
+
@path = route.path # With placeholders still IE: /posts/:id
|
|
136
|
+
@options = normalize_options(@path, args)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# Normalized with format in options
|
|
140
|
+
# Helps to mimic Rails behavior.
|
|
141
|
+
# Processes extra arguments to support format and query string.
|
|
142
|
+
#
|
|
143
|
+
# post_path(post, "json", {foo: 'bar'}) => "/posts/1.json?foo=bar"
|
|
144
|
+
# post_path(post, {foo: 'bar'}) => "/posts/1?foo=bar"
|
|
145
|
+
#
|
|
146
|
+
def normalize_options(path, args)
|
|
147
|
+
args = args.dup
|
|
148
|
+
options = args.extract_options!
|
|
149
|
+
# If there is still an argument in rest, it's the format. Rails behavior.
|
|
150
|
+
rest = args[placeholders.size..-1]
|
|
151
|
+
format = rest.last
|
|
152
|
+
options[:format] = format if format
|
|
153
|
+
options
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def path
|
|
157
|
+
query_string = @options.dup # make copy to modify
|
|
158
|
+
format = query_string.delete(:format)
|
|
159
|
+
query_string.delete(:action)
|
|
160
|
+
query_string.delete(:controller)
|
|
161
|
+
query_string.delete(:only_path)
|
|
162
|
+
|
|
163
|
+
path = path_with_replaced_placeholders
|
|
164
|
+
path = prepend_engine_mounted_at(path)
|
|
165
|
+
path = "#{path}.#{format}" if format
|
|
166
|
+
path = "#{path}?#{query_string.to_query}" unless query_string.empty?
|
|
167
|
+
path = add_apigw_stage(path)
|
|
168
|
+
path
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Needed for add_apigw_stage
|
|
172
|
+
delegate :event, :request, to: :@context
|
|
173
|
+
|
|
174
|
+
# IE: /posts/1
|
|
175
|
+
def path_with_replaced_placeholders
|
|
176
|
+
path = @path
|
|
177
|
+
placeholders.each_with_index do |placeholder, index|
|
|
178
|
+
path = path.gsub(placeholder, @args[index].to_param)
|
|
179
|
+
end
|
|
180
|
+
path
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def placeholders
|
|
184
|
+
@path.scan(/:\w+/)
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def prepend_engine_mounted_at(path)
|
|
188
|
+
mount = Jets::Router::EngineMount.find_by(engine: @engine_class)
|
|
189
|
+
if mount
|
|
190
|
+
path = path.delete_prefix('/')
|
|
191
|
+
[mount.at, path].compact.join('/')
|
|
192
|
+
else
|
|
193
|
+
path
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Jets::Router::Helpers::NamedRoutes
|
|
2
|
+
class Proxy
|
|
3
|
+
include AddFullUrl
|
|
4
|
+
|
|
5
|
+
def initialize(view_context, helpers_module)
|
|
6
|
+
@helpers = helpers_class(helpers_module).new(view_context)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# * The helpers_module is passed as a argument to give the anonymous class
|
|
10
|
+
# access via closure at include time.
|
|
11
|
+
# * view_context is passed at initialize to provide access at instantiation time.
|
|
12
|
+
def helpers_class(helpers_module)
|
|
13
|
+
Class.new do
|
|
14
|
+
include helpers_module # IE: Generated::MainAppHelpers
|
|
15
|
+
def initialize(view_context)
|
|
16
|
+
@view_context = view_context
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Important:
|
|
20
|
+
#
|
|
21
|
+
# * The add_full_url method needs url_options.
|
|
22
|
+
# Without url_options the proxy methods are unavailable and creates
|
|
23
|
+
# an infinite loop with method_missing.
|
|
24
|
+
# * request is needed for add_apigw_stage? to check request correctly
|
|
25
|
+
# Otherwise, gems like kingsman, that use the named routes proxy methods,
|
|
26
|
+
# won't get able to get the correct url with the stage name prepended.
|
|
27
|
+
#
|
|
28
|
+
# The request is the main reason an anonymous class is used since the
|
|
29
|
+
# view_context has included modules like ApigwStage that assume a
|
|
30
|
+
# request method is available.
|
|
31
|
+
delegate :url_options, :request, :event, to: :@view_context
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# No need to check respond_to? and call raise NoMethodError again because anonymous
|
|
36
|
+
# class will already return a undefined method error.
|
|
37
|
+
#
|
|
38
|
+
# It's annoying that we need to add_full_url here because
|
|
39
|
+
# the proxy calls the url methods with a module view_context instead
|
|
40
|
+
# of the controller or view_context instance. So we don't have access to
|
|
41
|
+
# the request and url_options. The url_options are only available in the controller
|
|
42
|
+
# or view_context instance.
|
|
43
|
+
#
|
|
44
|
+
# So we call the path method instead and then add_full_url here.
|
|
45
|
+
# Not calling the url method directly because could add the full url twice,
|
|
46
|
+
# when the user is setting the default_url_options.
|
|
47
|
+
# Also calling the url method would cause an error because request and url_options
|
|
48
|
+
# is not available.
|
|
49
|
+
#
|
|
50
|
+
# The logic is a bit convoluted but it works. Rails does something similar
|
|
51
|
+
# with their RoutesProxy class and view_context.url_options.
|
|
52
|
+
def method_missing(method_name, *args)
|
|
53
|
+
path_name = method_name.to_s.sub(/_url$/, '_path').to_sym
|
|
54
|
+
path = @helpers.send(path_name, *args)
|
|
55
|
+
if method_name.to_s.end_with?('_url')
|
|
56
|
+
options = args.extract_options!
|
|
57
|
+
options.merge!(path: path)
|
|
58
|
+
options = url_options.merge(options)
|
|
59
|
+
add_full_url(options)
|
|
60
|
+
else
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
data/lib/jets/router/matcher.rb
CHANGED
|
@@ -1,19 +1,105 @@
|
|
|
1
|
-
|
|
1
|
+
module Jets::Router
|
|
2
2
|
class Matcher
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :routes
|
|
6
|
+
def initialize(route_set=Jets.application.routes)
|
|
7
|
+
@route_set = route_set
|
|
8
|
+
@routes = route_set.ordered_routes
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def request_path
|
|
12
|
+
# Ensure leading slash
|
|
13
|
+
# Be more forgiving and allow the request_path to be passed in without a leading slash.
|
|
14
|
+
# Note: request PATH_INFO will always have a leading slash, but just in case.
|
|
15
|
+
# This is also covered in specs.
|
|
16
|
+
return unless @request_path
|
|
17
|
+
@request_path.starts_with?('/') ? @request_path : "/#{@request_path}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def request_method
|
|
21
|
+
@request_method.to_s.upcase if @request_method
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Precedence:
|
|
25
|
+
# 1. Routes with no captures get highest precedence: posts/new
|
|
26
|
+
# 2. Then we consider the routes with captures: post/:id
|
|
27
|
+
#
|
|
28
|
+
# Within these 2 groups we consider the routes with the longest path first
|
|
29
|
+
# since posts/:id and posts/:id/edit can both match.
|
|
30
|
+
def find_by_request(request, request_method=nil)
|
|
31
|
+
@request = request # @request is used to check constraints
|
|
32
|
+
# Checking the request_method_from_hidden_method_field so that handler can find the right route
|
|
33
|
+
# super early in the process. Otherwise lambda routes to the wrong controller action.
|
|
34
|
+
@request_method = request_method || @request.request_method_from_hidden_method_field || @request.request_method.to_s.upcase
|
|
35
|
+
@request_path = strip_format(@request.path)
|
|
36
|
+
route = find_route
|
|
37
|
+
match_constraints(route) if route
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Simpler version of find_by_request that does not check constraints.
|
|
41
|
+
# Used by Jets::Controller::Middleware::Mimic and called super-early on.
|
|
42
|
+
# Does not have access to @request object and path_params
|
|
43
|
+
def find_by_env(env)
|
|
44
|
+
@env = env
|
|
45
|
+
@request_method = env["REQUEST_METHOD"] || "GET"
|
|
46
|
+
@request_path = strip_format(env["PATH_INFO"])
|
|
47
|
+
find_route
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def find_by_controller_action(controller, action)
|
|
51
|
+
controller = "#{controller.camelize}Controller"
|
|
52
|
+
routes.find do |r|
|
|
53
|
+
r.controller_name == controller.to_s &&
|
|
54
|
+
r.action_name == action.to_s
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def find_route
|
|
59
|
+
routes.each do |r|
|
|
60
|
+
if r.engine
|
|
61
|
+
route = find_engine_route(r)
|
|
62
|
+
return route if route
|
|
63
|
+
else
|
|
64
|
+
found = match?(r)
|
|
65
|
+
return r if found
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
nil
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def find_engine_route(route)
|
|
72
|
+
return unless mount
|
|
73
|
+
|
|
74
|
+
engine_matcher = self.class.new(route.engine.route_set)
|
|
75
|
+
engine_route = if @request
|
|
76
|
+
engine_matcher.find_by_request(@request, @request_method)
|
|
77
|
+
else
|
|
78
|
+
engine_matcher.find_by_env(@env)
|
|
79
|
+
end
|
|
80
|
+
# save original engine for route.extract_parameters later
|
|
81
|
+
engine_route.original_engine = route.engine if engine_route
|
|
82
|
+
engine_route
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def mount
|
|
86
|
+
EngineMount.find_by(request_path: request_path)
|
|
87
|
+
end
|
|
88
|
+
memoize :mount
|
|
89
|
+
|
|
90
|
+
def strip_format(path)
|
|
91
|
+
path.sub(/\..+$/, '') # Remove format from the end of the path
|
|
6
92
|
end
|
|
7
93
|
|
|
8
94
|
def match?(route)
|
|
9
|
-
# Immediately stop checking when the request
|
|
95
|
+
# Immediately stop checking when the request http_method: GET, POST, ANY, etc
|
|
10
96
|
# doesnt match.
|
|
97
|
+
return false if request_method != route.http_method && route.http_method != "ANY"
|
|
11
98
|
|
|
12
|
-
|
|
99
|
+
route_path = strip_format(route.path)
|
|
100
|
+
route_path = "#{mount.at}#{route_path}" if mount
|
|
13
101
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if path == route_path
|
|
102
|
+
if request_path == route_path
|
|
17
103
|
# regular string match detection
|
|
18
104
|
return true # exact route matches are highest precedence
|
|
19
105
|
end
|
|
@@ -21,18 +107,54 @@ class Jets::Router
|
|
|
21
107
|
# Check path for route capture and wildcard matches:
|
|
22
108
|
# A colon (:) means the variable has a variable
|
|
23
109
|
if route_path.include?(':') # 2nd highest precedence
|
|
24
|
-
capture_detection(route_path,
|
|
110
|
+
capture_detection(route_path, request_path) # early return true or false
|
|
25
111
|
# A star (*) means the variable has a glob
|
|
26
112
|
elsif route_path.include?('*') # lowest precedence
|
|
27
|
-
proxy_detection(route_path,
|
|
113
|
+
proxy_detection(route_path, request_path) # early return true or false
|
|
28
114
|
else
|
|
29
115
|
false # reach here, means no route matched
|
|
30
116
|
end
|
|
31
117
|
end
|
|
32
118
|
|
|
33
|
-
|
|
119
|
+
def match_constraints(route)
|
|
120
|
+
return unless route
|
|
121
|
+
constraints_matches?(route) ? route : nil
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Matcher called in mimic.rb before mimic event is available
|
|
125
|
+
# We need to extract the parameters from the possible matching route directly
|
|
126
|
+
# since event is unavailable.
|
|
127
|
+
def constraints_matches?(route)
|
|
128
|
+
# Matcher is used super-early when request not yet available.
|
|
129
|
+
# Cannot check constraints because we dont have the request object.
|
|
130
|
+
# To build a request object, would need to build a mimic event and it's not yet available.
|
|
131
|
+
return true if @request.nil?
|
|
132
|
+
|
|
133
|
+
constraints = route.constraints
|
|
134
|
+
return true if constraints.blank?
|
|
135
|
+
|
|
136
|
+
if constraints.is_a?(Hash)
|
|
137
|
+
parameters = route.extract_parameters(request_path) # extract directly
|
|
138
|
+
constraints.any? do |key, value|
|
|
139
|
+
key = key.to_s
|
|
140
|
+
if value.is_a?(Regexp)
|
|
141
|
+
value.match(parameters[key])
|
|
142
|
+
else # String
|
|
143
|
+
if parameters[key]
|
|
144
|
+
value == parameters[key]
|
|
145
|
+
elsif @request.respond_to?(key)
|
|
146
|
+
value == @request.send(key)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
elsif constraints.respond_to?(:call)
|
|
151
|
+
constraints.call(@request)
|
|
152
|
+
elsif constraints.respond_to?(:matches?)
|
|
153
|
+
constraints.matches?(@request)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
34
156
|
|
|
35
|
-
|
|
157
|
+
private
|
|
36
158
|
|
|
37
159
|
# catchall/globbing/wildcard/proxy routes. Examples:
|
|
38
160
|
#
|
|
@@ -40,7 +162,7 @@ class Jets::Router
|
|
|
40
162
|
# get "others/*rest", to: "others#show"
|
|
41
163
|
# get "*catchall", to: "public_files#show" # last catchall route for Jets
|
|
42
164
|
#
|
|
43
|
-
def proxy_detection(route_path,
|
|
165
|
+
def proxy_detection(route_path, request_path)
|
|
44
166
|
# drop the proxy_segment
|
|
45
167
|
leading_path = route_path.split('/')[0..-2].join('/')
|
|
46
168
|
|
|
@@ -61,10 +183,11 @@ class Jets::Router
|
|
|
61
183
|
|
|
62
184
|
pattern = "^#{leading_path}"
|
|
63
185
|
regexp = Regexp.new(pattern)
|
|
64
|
-
|
|
186
|
+
|
|
187
|
+
!!regexp.match(request_path) # could be true or false
|
|
65
188
|
end
|
|
66
189
|
|
|
67
|
-
def capture_detection(route_path,
|
|
190
|
+
def capture_detection(route_path, request_path)
|
|
68
191
|
# changes path to a string used for a regexp
|
|
69
192
|
# posts/:id/edit => posts\/(.*)\/edit
|
|
70
193
|
regexp_string = route_path.split('/').map do |s|
|
|
@@ -75,7 +198,7 @@ class Jets::Router
|
|
|
75
198
|
|
|
76
199
|
regexp = Regexp.new(regexp_string)
|
|
77
200
|
|
|
78
|
-
!!regexp.match(
|
|
201
|
+
!!regexp.match(request_path) # could be true or false
|
|
79
202
|
end
|
|
80
203
|
end
|
|
81
204
|
end
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
module Jets::Router::Resources
|
|
2
2
|
class Options < Base
|
|
3
3
|
def build(action)
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
# Important to create a copy of the options since we are mutating it
|
|
5
|
+
# The original options are used for resources and resource scope
|
|
6
|
+
options = @options.dup
|
|
7
|
+
# Remove special options from getting to create_route. For some reason .slice! doesnt work
|
|
7
8
|
options.delete(:only)
|
|
8
9
|
options.delete(:except)
|
|
9
|
-
options[:
|
|
10
|
+
controller = options[:singular_resource] ? @name.to_s.pluralize : @name
|
|
11
|
+
options[:to] = "#{controller}##{action}"
|
|
10
12
|
options
|
|
11
13
|
end
|
|
12
14
|
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module AfterInitialize
|
|
3
|
+
def after_initialize
|
|
4
|
+
normalize_to_option!
|
|
5
|
+
normalize_path_option!
|
|
6
|
+
normalize_id_constraint!
|
|
7
|
+
check_on_option!
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Possibly infer to option from the path. Example:
|
|
11
|
+
#
|
|
12
|
+
# get 'posts/index'
|
|
13
|
+
# get 'posts', to: 'posts#index'
|
|
14
|
+
#
|
|
15
|
+
# get 'posts/show'
|
|
16
|
+
# get 'posts', to: 'posts#show'
|
|
17
|
+
#
|
|
18
|
+
def normalize_to_option!
|
|
19
|
+
return if @options[:to]
|
|
20
|
+
|
|
21
|
+
path = @options[:path].to_s
|
|
22
|
+
return unless path.include?('/')
|
|
23
|
+
|
|
24
|
+
path = path.delete_prefix('/') # remove leading slash
|
|
25
|
+
items = path.split('/')
|
|
26
|
+
if items.size == 2
|
|
27
|
+
@options[:to] = items.join('#')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def normalize_path_option!
|
|
32
|
+
path = @options[:path]
|
|
33
|
+
resource_name = @scope.resource_name
|
|
34
|
+
if path.is_a?(Symbol) and resource_name # Treat as controller action
|
|
35
|
+
# Only supported with used within scope, resource, resources block
|
|
36
|
+
action = path # IE: get :list => action = :list
|
|
37
|
+
controller = @scope.virtual_controller
|
|
38
|
+
# infer and set to option if not set
|
|
39
|
+
@options[:to] ||= "#{controller}##{action}"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# override
|
|
43
|
+
@options.merge!(path: escape_path(path)) if path
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def normalize_id_constraint!
|
|
47
|
+
if @options[:id] && !@options[:constraints]
|
|
48
|
+
@options[:constraints] = { id: @options[:id] }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def check_on_option!
|
|
53
|
+
if @options[:on] && !%w[resources resource].include?(@scope.from.to_s)
|
|
54
|
+
raise Jets::Router::Error.new("ERROR: The `on:` option can only be used within a resource or resources block")
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def escape_path(path)
|
|
59
|
+
path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
|
|
60
|
+
path = "/#{path}" unless path.starts_with?('/')
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module As
|
|
3
|
+
def as
|
|
4
|
+
return nil if @options[:as] == :disabled
|
|
5
|
+
return @options[:engine].engine_name if @options[:engine]
|
|
6
|
+
return unless @options[:root] || [:get, :post, :patch, :put, :delete].include?(@options[:http_method])
|
|
7
|
+
|
|
8
|
+
as = scoped_as
|
|
9
|
+
as = add_underscore_path(as)
|
|
10
|
+
as = add_action(as)
|
|
11
|
+
as = add_root(as)
|
|
12
|
+
as
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def scoped_as
|
|
16
|
+
list = []
|
|
17
|
+
@scope.from_top.each do |scope|
|
|
18
|
+
node = Node.new(self, scope)
|
|
19
|
+
|
|
20
|
+
as = node.resolved_as
|
|
21
|
+
as = as.to_s.singularize if node.has_param?
|
|
22
|
+
list << as if as && node.append_as?
|
|
23
|
+
end
|
|
24
|
+
list.reject!(&:blank?) # IE: list [:posts, :comments]
|
|
25
|
+
list.unshift(@options[:as]) if @options[:as]
|
|
26
|
+
list.join('_').gsub('/','_') unless list.empty?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# IE: posts/:id/edit => posts
|
|
30
|
+
# Using this convention so that regular routes under namespace and path
|
|
31
|
+
# can be reassemble as if they were under resources
|
|
32
|
+
def add_underscore_path(as)
|
|
33
|
+
if as.nil? && @scope.needs_controller_path? # only consider leaf scope
|
|
34
|
+
@options[:as] || underscore_path_before_param
|
|
35
|
+
else
|
|
36
|
+
as
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# IE: posts/:id/edit => posts
|
|
41
|
+
# Using this convention so that regular routes under namespace and path
|
|
42
|
+
# can be reassemble as if they were under resources
|
|
43
|
+
def underscore_path_before_param
|
|
44
|
+
action_suffixes = %w[new edit] # edit in case of singular resource
|
|
45
|
+
parts = []
|
|
46
|
+
path = @options[:path].to_s
|
|
47
|
+
return nil if path.include?('*') || !path.ascii_only? # IE: get '*catchall', to: 'public_files#show'
|
|
48
|
+
|
|
49
|
+
path = path.delete_prefix('/')
|
|
50
|
+
path.split('/').each do |part|
|
|
51
|
+
if part.starts_with?(':') || part.starts_with?('*') || action_suffixes.include?(part)
|
|
52
|
+
break
|
|
53
|
+
end
|
|
54
|
+
parts << part
|
|
55
|
+
end
|
|
56
|
+
parts.map! { |p| p.gsub(/[^a-zA-Z0-9]/,'_') }
|
|
57
|
+
path = parts.join('_').squeeze('_')
|
|
58
|
+
if action_suffixes.include?(@info.action)
|
|
59
|
+
path.singularize
|
|
60
|
+
else
|
|
61
|
+
path
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def add_action(resource)
|
|
66
|
+
resource = resource.to_s
|
|
67
|
+
return resource if resource.blank?
|
|
68
|
+
|
|
69
|
+
as_name = @options[:as] || @info.action
|
|
70
|
+
as_name = as_name.to_s.delete_prefix('/') if as_name
|
|
71
|
+
|
|
72
|
+
if %w[new edit].include?(@info.action) && @options[:as].nil?
|
|
73
|
+
"#{as_name}_#{resource.singularize}" # IE: new_post
|
|
74
|
+
elsif %[index create].include?(@info.action)
|
|
75
|
+
resource # IE: posts
|
|
76
|
+
elsif %w[show edit update destroy].include?(as_name)
|
|
77
|
+
"#{resource.singularize}" # IE: post
|
|
78
|
+
elsif is_collection?(@scope) && @options[:as].nil?
|
|
79
|
+
"#{as_name}_#{resource}" # IE: list_post
|
|
80
|
+
elsif (is_member?(@scope) || @scope.from == :resource) && @options[:as].nil?
|
|
81
|
+
"#{as_name}_#{resource.singularize}" # IE: rate_post
|
|
82
|
+
elsif @scope.resource_name && @options[:as].nil?
|
|
83
|
+
"#{resource.singularize}_#{as_name}" # IE: post_list
|
|
84
|
+
else
|
|
85
|
+
resource # IE: post
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def add_root(as)
|
|
90
|
+
@options[:root] ? 'root' : as
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -31,6 +31,7 @@ class Jets::Router::Route
|
|
|
31
31
|
module ModuleMethods
|
|
32
32
|
def logical_id(authorizer, prefix_class: true)
|
|
33
33
|
klass, meth = authorizer.split("#")
|
|
34
|
+
klass += "_authorizer"
|
|
34
35
|
words = [meth, "authorizer"]
|
|
35
36
|
words.unshift(klass) if prefix_class
|
|
36
37
|
words.join('_').camelize # logical_id
|