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,45 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# Work in progress. Considering making Jets Route more compatiable with Rails Route.
|
|
3
|
+
# Then will be able to leverage Rails RouteWrapper for presenting the routes for /jets/info/routes.
|
|
4
|
+
# Ran into Route#path method that is a bit of work to make compatiable.
|
|
5
|
+
# Leaving this here for the future.
|
|
6
|
+
module Compat
|
|
7
|
+
extend Memoist
|
|
8
|
+
|
|
9
|
+
# Interface based on Rails ActionDispatch::Routing::Endpoint
|
|
10
|
+
class App # :nodoc:
|
|
11
|
+
def initialize(route)
|
|
12
|
+
@route = route
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def dispatcher?; false; end
|
|
16
|
+
def redirect?; false; end
|
|
17
|
+
def matches?(req); true; end
|
|
18
|
+
def app; self; end
|
|
19
|
+
def rack_app; app; end
|
|
20
|
+
|
|
21
|
+
def engine?
|
|
22
|
+
@route.engine?
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def app
|
|
27
|
+
App.new(self)
|
|
28
|
+
end
|
|
29
|
+
memoize :app
|
|
30
|
+
|
|
31
|
+
# Rails interface method for ActionDispatch::Routing::RouteWrapper
|
|
32
|
+
def name
|
|
33
|
+
as || ''
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Rails interface method for ActionDispatch::Routing::RouteWrapper
|
|
37
|
+
def verb
|
|
38
|
+
http_method
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def internal
|
|
42
|
+
!!@options[:internal]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# Organize to.controller and to.action into a class
|
|
3
|
+
# so don't have to keep repeating the logic.
|
|
4
|
+
class Info
|
|
5
|
+
def initialize(options, scope)
|
|
6
|
+
@options, @scope = options, scope
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# IE: posts
|
|
10
|
+
def controller
|
|
11
|
+
return if @options[:engine] # IE: { engine: Blorgh::Engine, path: "/blog" }
|
|
12
|
+
|
|
13
|
+
controller = if @options[:controller]
|
|
14
|
+
@options[:controller]
|
|
15
|
+
elsif @options[:to]
|
|
16
|
+
@options[:to].split('#').first # IE: posts#index => posts
|
|
17
|
+
elsif @scope.virtual_controller
|
|
18
|
+
@scope.virtual_controller
|
|
19
|
+
else # {"/jets/info/properties"=>"jets/info#properties"}
|
|
20
|
+
map = @options.find { |k,v| k.is_a?(String) }
|
|
21
|
+
path, to = map[0], map[1]
|
|
22
|
+
to.split('#').first
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
if controller.starts_with?('/')
|
|
26
|
+
# absolute controller path specified. use without scope adjustments
|
|
27
|
+
return controller.delete_prefix('/') # remove leading slash
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# no controller found yet, imply from the scope
|
|
31
|
+
segments = scoped_module_segments
|
|
32
|
+
segments << controller if controller
|
|
33
|
+
segments.compact.join('/') # add module
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# IE: index
|
|
37
|
+
def action
|
|
38
|
+
if @options.key?(:action)
|
|
39
|
+
@options[:action].to_s
|
|
40
|
+
elsif is_collection?(@scope) || is_member?(@scope)
|
|
41
|
+
@options[:path].to_s.delete_prefix('/') # action
|
|
42
|
+
elsif @options[:on] && @options[:on] != :member && @options[:on] != :collection
|
|
43
|
+
@options[:on].to_s
|
|
44
|
+
elsif @options[:to]
|
|
45
|
+
@options[:to].split('#').last
|
|
46
|
+
else # {"/"=>"jets/welcome#index", :internal=>true}
|
|
47
|
+
map = @options.find { |k,v| k.is_a?(String) }
|
|
48
|
+
path, to = map[0], map[1]
|
|
49
|
+
to.split('#').last
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def scoped_module_segments
|
|
54
|
+
segments = []
|
|
55
|
+
@scope.from_top.each do |scope|
|
|
56
|
+
segments << scope.module if scope.module
|
|
57
|
+
if @scope == scope # last scope node
|
|
58
|
+
last_segment = @options[:module]
|
|
59
|
+
segments << last_segment if last_segment
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
segments
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def is_collection?(scope)
|
|
66
|
+
scope.from == :collection || @options[:on] == :collection
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def is_member?(scope)
|
|
70
|
+
scope.from == :member || @options[:on] == :member
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
# The Node class groups logic that requires both of route and scope info.
|
|
3
|
+
# It does not really belong in either the Route or Scope class and
|
|
4
|
+
# requires both to do its job. So it gets its own class.
|
|
5
|
+
# This seems to help keep the Route and Scope classes simpler.
|
|
6
|
+
#
|
|
7
|
+
# An instance of this class is made available with each
|
|
8
|
+
# iteration of loop that processes the DSL scopes.
|
|
9
|
+
class Node
|
|
10
|
+
attr_reader :route, :scope, :leaf_scope
|
|
11
|
+
def initialize(route, scope)
|
|
12
|
+
@route, @scope = route, scope # scope is current scope of iteration
|
|
13
|
+
@info = route.info
|
|
14
|
+
@options = route.options
|
|
15
|
+
@leaf_scope = @route.scope # the route scope is the leaf scope
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def append_path?
|
|
19
|
+
has_path? && add_path_segment?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def append_param?
|
|
23
|
+
has_param? && add_path_segment?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def append_as?
|
|
27
|
+
has_path? && add_path_segment? ||
|
|
28
|
+
scope.from.nil? && scope.as
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Accounts for shallow scope. Example:
|
|
32
|
+
#
|
|
33
|
+
# resources :posts, shallow: true do
|
|
34
|
+
# resources :comments do
|
|
35
|
+
# resources :likes
|
|
36
|
+
# end
|
|
37
|
+
# end
|
|
38
|
+
#
|
|
39
|
+
# add_path_segment? = add_path_segment_considering_shallow?
|
|
40
|
+
#
|
|
41
|
+
def add_path_segment?
|
|
42
|
+
if param_action? && shallow_param_action?
|
|
43
|
+
leaf? # only add path segments for leaf
|
|
44
|
+
elsif paramless_action? && shallow_paramless_action?
|
|
45
|
+
leaf? || leaf_scope.real_parent?(scope)
|
|
46
|
+
else
|
|
47
|
+
true # default is to always path preceding path segments
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def shallow_param_action?
|
|
52
|
+
lookahead_shallow? || leaf_scope.any_parent_shallow?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def shallow_paramless_action?
|
|
56
|
+
lookahead_shallow?(parent: true) || scope.any_parent_shallow?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def lookahead_shallow?(parent: false)
|
|
60
|
+
next_scope = scope
|
|
61
|
+
while next_scope
|
|
62
|
+
check_scope = parent ? next_scope.parent : next_scope
|
|
63
|
+
# Important to check next_scope == leaf_scope
|
|
64
|
+
# Otherwise it'll collapse path segments for higher scopes also.
|
|
65
|
+
return true if check_scope.shallow? && next_scope == leaf_scope
|
|
66
|
+
next_scope = next_scope.next
|
|
67
|
+
end
|
|
68
|
+
false
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def has_path?
|
|
72
|
+
scope.resolved_path && !scope.virtual?
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def has_param?
|
|
76
|
+
return false if scope.root?
|
|
77
|
+
|
|
78
|
+
resolved_param && param_action? ||
|
|
79
|
+
scope.resource_descendent? && !leaf? ||
|
|
80
|
+
scope.resource_sibling? && !leaf?
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def resolved_as
|
|
84
|
+
as = scope.as || scope.resource_name
|
|
85
|
+
# as = scope.as || scope.resource_name
|
|
86
|
+
if scope.resource_name
|
|
87
|
+
controller = nil # dont need controller. can infer from resources, namespace, etc
|
|
88
|
+
else # direct route method without scope or module only etc
|
|
89
|
+
controller = @info.controller.split('/').last if leaf? #&& as.nil?
|
|
90
|
+
end
|
|
91
|
+
[as, controller].compact.join('_')
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def param_action?
|
|
95
|
+
@options[:on] == :member || scope.from == :member ||
|
|
96
|
+
%w[edit show update destroy].include?(@info.action)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def paramless_action?
|
|
100
|
+
@options[:on] == :collection || scope.from == :collection ||
|
|
101
|
+
%w[index new create].include?(@info.action)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def leaf?
|
|
105
|
+
scope == leaf_scope
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def resolved_path
|
|
109
|
+
scope.resolved_path
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def resolved_param
|
|
113
|
+
case scope.from
|
|
114
|
+
when :resources, :member
|
|
115
|
+
":#{param}"
|
|
116
|
+
else # :resource, :namespace, :path, :collection
|
|
117
|
+
nil
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# If a block has pass then we assume the resources will be nested and then prefix
|
|
122
|
+
# the param name with the resource. IE: post_id instead of id
|
|
123
|
+
# This avoids an API Gateway parent sibling variable collision.
|
|
124
|
+
def param
|
|
125
|
+
return scope.options[:param] if scope.options[:param]
|
|
126
|
+
|
|
127
|
+
if leaf? && Jets.config.routes.allow_sibling_conflicts
|
|
128
|
+
"id"
|
|
129
|
+
elsif scope.resource_descendent? ||
|
|
130
|
+
scope.resource_sibling? && scope.colliding_resource_sibling?
|
|
131
|
+
"#{scope.resource_name.to_s.singularize}_id"
|
|
132
|
+
else
|
|
133
|
+
"id"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
class Jets::Router::Route
|
|
2
|
+
module Path
|
|
3
|
+
# Note: The @options[:path] is missing prefix and is not support via direct create_route.
|
|
4
|
+
# This is because it can be added directly to the path. IE:
|
|
5
|
+
#
|
|
6
|
+
# get "myprefix/posts", to: "posts#index"
|
|
7
|
+
#
|
|
8
|
+
# Also, this helps to keep the method creator logic simpler.
|
|
9
|
+
#
|
|
10
|
+
def path(format=:jets)
|
|
11
|
+
segments = path_prefixes + [path_option]
|
|
12
|
+
segments = add_path_suffix(segments)
|
|
13
|
+
path = segments.reject(&:blank?).join('/')
|
|
14
|
+
format_path(format, path)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# When scope used directly. IE: not coming from namespace or resources
|
|
18
|
+
# When coming from namespace or resources, the path is already accounted for.
|
|
19
|
+
def path_prefixes
|
|
20
|
+
list = []
|
|
21
|
+
@scope.from_top.each do |scope|
|
|
22
|
+
node = Node.new(self, scope)
|
|
23
|
+
# Update @path_names as we walk down
|
|
24
|
+
@path_names.merge!(scope.options[:path_names] || {})
|
|
25
|
+
|
|
26
|
+
list << scope.resolved_path if node.append_path?
|
|
27
|
+
list << node.resolved_param if node.append_param?
|
|
28
|
+
end
|
|
29
|
+
list.reject!(&:blank?) # allows for path: '' to remove resource name from path
|
|
30
|
+
list
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def path_option
|
|
34
|
+
node = Node.new(self, @scope)
|
|
35
|
+
path = @options[:path].to_s.delete_prefix('/') # IE: new or edit
|
|
36
|
+
path.sub!(@scope.param_placeholder, ":#{node.resolved_param}")
|
|
37
|
+
path
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Accounts for path names options map. Example:
|
|
41
|
+
#
|
|
42
|
+
# {path_names: {new: "sign_up", edit: "edit"}}
|
|
43
|
+
#
|
|
44
|
+
# new posts/new => posts/sign_up
|
|
45
|
+
# edit posts/:id/edit => posts/:id/edit
|
|
46
|
+
#
|
|
47
|
+
def add_path_suffix(all_segments)
|
|
48
|
+
# rip apart last path as segments
|
|
49
|
+
# work with and modify segments to be returned
|
|
50
|
+
segments = all_segments.last.to_s.split('/')
|
|
51
|
+
current_suffix = segments.last
|
|
52
|
+
|
|
53
|
+
new_or_edit = %w[new edit].include?(current_suffix)
|
|
54
|
+
additional_action = @options[:on].is_a?(Symbol) && @options[:on] != :member && @options[:on] != :collection
|
|
55
|
+
will_replace = new_or_edit || additional_action
|
|
56
|
+
|
|
57
|
+
if will_replace
|
|
58
|
+
segments_without_last = all_segments[0..-2]
|
|
59
|
+
# reassemble path with additional on action
|
|
60
|
+
segments_without_last << @options[:on].to_s if additional_action
|
|
61
|
+
# reassemble with new suffix from path_names map
|
|
62
|
+
new_suffix = @path_names[current_suffix.to_sym] || current_suffix
|
|
63
|
+
segments_without_last << new_suffix
|
|
64
|
+
new_last = segments_without_last.join('/')
|
|
65
|
+
segments[-1] = new_last # replace
|
|
66
|
+
segments
|
|
67
|
+
else
|
|
68
|
+
all_segments # original
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def path_suffixes
|
|
73
|
+
list = []
|
|
74
|
+
list << action_suffix if action_suffix
|
|
75
|
+
list
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# IE: standard: posts/:id/edit
|
|
79
|
+
# api_gateway: posts/{id}/edit
|
|
80
|
+
def format_path(format, path)
|
|
81
|
+
path = case format
|
|
82
|
+
when :api_gateway
|
|
83
|
+
api_gateway_format(path)
|
|
84
|
+
when :raw
|
|
85
|
+
path
|
|
86
|
+
else # jets format
|
|
87
|
+
ensure_jets_format(path)
|
|
88
|
+
end
|
|
89
|
+
path = "/#{path}" unless path.starts_with?('/') # ensure starts with / be forgiving if / accidentally not included
|
|
90
|
+
path
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
data/lib/jets/router/route.rb
CHANGED
|
@@ -1,98 +1,58 @@
|
|
|
1
1
|
# route = Jets::Router::Route.new(
|
|
2
2
|
# path: "posts",
|
|
3
|
-
#
|
|
3
|
+
# http_method: :get,
|
|
4
4
|
# to: "posts#index",
|
|
5
5
|
# )
|
|
6
|
-
|
|
6
|
+
module Jets::Router
|
|
7
7
|
class Route
|
|
8
|
-
|
|
8
|
+
extend Memoist
|
|
9
|
+
include Compat
|
|
10
|
+
include AfterInitialize
|
|
11
|
+
include As
|
|
9
12
|
include Authorizer
|
|
13
|
+
include Path
|
|
14
|
+
include Util
|
|
10
15
|
|
|
11
16
|
CAPTURE_REGEX = "([^/]*)" # as string
|
|
12
17
|
|
|
13
|
-
attr_reader :
|
|
18
|
+
attr_reader :options, :scope, :info, :defaults
|
|
19
|
+
attr_accessor :original_engine
|
|
14
20
|
def initialize(options, scope=Scope.new)
|
|
15
|
-
@options
|
|
16
|
-
@
|
|
17
|
-
@
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def compute_path
|
|
22
|
-
# Note: The @options[:prefix] is missing prefix and is not support via direct create_route.
|
|
23
|
-
# This is because it can be added directly to the path. IE:
|
|
24
|
-
#
|
|
25
|
-
# get "myprefix/posts", to: "posts#index"
|
|
26
|
-
#
|
|
27
|
-
# Also, this helps to keep the method creator logic more simple.
|
|
28
|
-
#
|
|
29
|
-
prefix = @scope.full_prefix
|
|
30
|
-
prefix = account_scope(prefix)
|
|
31
|
-
prefix = account_on(prefix)
|
|
32
|
-
|
|
33
|
-
path = [prefix, @options[:path]].compact.join('/')
|
|
34
|
-
path = path[1..-1] if path.starts_with?('/') # be more forgiving if / accidentally included
|
|
35
|
-
path
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def account_scope(prefix)
|
|
39
|
-
return unless prefix
|
|
40
|
-
return prefix unless @options[:from_scope]
|
|
41
|
-
|
|
42
|
-
if @options[:singular_resource]
|
|
43
|
-
prefix.split('/')[0..-2].join('/')
|
|
44
|
-
else
|
|
45
|
-
prefix.split('/')[0..-3].join('/')
|
|
46
|
-
end
|
|
21
|
+
@options = options
|
|
22
|
+
@scope = scope
|
|
23
|
+
@info = Info.new(@options, @scope) # @info.action and @info.controller
|
|
24
|
+
after_initialize
|
|
25
|
+
@path_names = {}
|
|
47
26
|
end
|
|
48
27
|
|
|
49
|
-
def
|
|
50
|
-
|
|
51
|
-
if @options[:on] == :collection && @scope.from == :resources
|
|
52
|
-
prefix = prefix.split('/')[0..-2].join('/')
|
|
53
|
-
end
|
|
54
|
-
prefix == '' ? nil : prefix
|
|
28
|
+
def to
|
|
29
|
+
engine || "#{@info.controller}##{@info.action}" # IE: posts#index
|
|
55
30
|
end
|
|
56
31
|
|
|
57
|
-
def
|
|
58
|
-
|
|
59
|
-
mod = @options[:module] || @scope.full_module
|
|
60
|
-
controller = [mod, controller].compact.join('/') # add module
|
|
61
|
-
"#{controller}##{action}"
|
|
32
|
+
def engine
|
|
33
|
+
@options[:engine]
|
|
62
34
|
end
|
|
35
|
+
alias rack_app engine
|
|
63
36
|
|
|
64
|
-
def
|
|
65
|
-
|
|
66
|
-
|
|
37
|
+
def engine?
|
|
38
|
+
!!engine
|
|
39
|
+
end
|
|
67
40
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
elsif %w[index edit show new].include?(action.to_s)
|
|
72
|
-
class_name = "Jets::Router::MethodCreator::#{action.camelize}"
|
|
73
|
-
class_name.constantize # Index, Show, Edit, New
|
|
74
|
-
else
|
|
75
|
-
Jets::Router::MethodCreator::Generic
|
|
76
|
-
end
|
|
41
|
+
def endpoint
|
|
42
|
+
engine.to_s if engine
|
|
43
|
+
end
|
|
77
44
|
|
|
78
|
-
|
|
45
|
+
def resolved_defaults
|
|
46
|
+
defaults = @options[:defaults] || {}
|
|
47
|
+
@scope.resolved_defaults.merge(defaults)
|
|
79
48
|
end
|
|
80
49
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
def path(format=:jets)
|
|
84
|
-
case format
|
|
85
|
-
when :api_gateway
|
|
86
|
-
api_gateway_format(@path)
|
|
87
|
-
when :raw
|
|
88
|
-
@path
|
|
89
|
-
else # jets format
|
|
90
|
-
ensure_jets_format(@path)
|
|
91
|
-
end
|
|
50
|
+
def http_method
|
|
51
|
+
@options[:http_method].to_s.upcase
|
|
92
52
|
end
|
|
93
53
|
|
|
94
|
-
def
|
|
95
|
-
@options[:
|
|
54
|
+
def constraints
|
|
55
|
+
@options[:constraints] || @scope.resolved_constraints
|
|
96
56
|
end
|
|
97
57
|
|
|
98
58
|
def internal?
|
|
@@ -100,17 +60,18 @@ class Jets::Router
|
|
|
100
60
|
end
|
|
101
61
|
|
|
102
62
|
def homepage?
|
|
103
|
-
path == ''
|
|
63
|
+
path == '/'
|
|
104
64
|
end
|
|
105
65
|
|
|
106
66
|
# IE: PostsController
|
|
107
|
-
def controller_name
|
|
108
|
-
to.sub(/#.*/,'').camelize + "Controller"
|
|
109
|
-
end
|
|
110
|
-
|
|
111
67
|
# IE: index
|
|
112
|
-
|
|
113
|
-
|
|
68
|
+
delegate :action, :controller, :is_collection?, :is_member?, to: :@info
|
|
69
|
+
alias action_name action
|
|
70
|
+
|
|
71
|
+
# IE: PostsController
|
|
72
|
+
# Different from @info.action
|
|
73
|
+
def controller_name
|
|
74
|
+
"#{controller.camelize}Controller" if controller
|
|
114
75
|
end
|
|
115
76
|
|
|
116
77
|
# Checks to see if the corresponding controller exists. Useful to validate routes
|
|
@@ -118,32 +79,55 @@ class Jets::Router
|
|
|
118
79
|
def valid?
|
|
119
80
|
controller_class = begin
|
|
120
81
|
controller_name.constantize
|
|
121
|
-
rescue NameError
|
|
82
|
+
rescue NameError => e
|
|
122
83
|
return false
|
|
123
84
|
end
|
|
124
85
|
controller_class.lambda_functions.include?(action_name.to_sym)
|
|
125
86
|
end
|
|
126
87
|
|
|
88
|
+
# For Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
|
|
89
|
+
# Need to build the pathParameters for the API Gateway event.
|
|
90
|
+
def rebuild_path_parameters(event)
|
|
91
|
+
extracted = extract_parameters(event["path"])
|
|
92
|
+
if extracted
|
|
93
|
+
params = event["pathParameters"] || {}
|
|
94
|
+
params.merge(extracted)
|
|
95
|
+
else
|
|
96
|
+
event["pathParameters"] # pass through
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
127
100
|
# Extracts the path parameters from the actual path
|
|
128
101
|
# Only supports extracting 1 parameter. So:
|
|
129
102
|
#
|
|
130
|
-
#
|
|
103
|
+
# request_path: posts/tung/edit
|
|
131
104
|
# route.path: posts/:id/edit
|
|
132
105
|
#
|
|
133
106
|
# Returns:
|
|
134
107
|
# { id: "tung" }
|
|
135
|
-
def extract_parameters(
|
|
108
|
+
def extract_parameters(request_path)
|
|
109
|
+
request_path = "/#{request_path}" unless request_path.starts_with?('/') # be more forgiving if / accidentally not included
|
|
110
|
+
request_path = remove_engine_mount_at_path(request_path)
|
|
136
111
|
if path.include?(':')
|
|
137
|
-
extract_parameters_capture(
|
|
112
|
+
extract_parameters_capture(request_path)
|
|
138
113
|
elsif path.include?('*')
|
|
139
|
-
extract_parameters_proxy(
|
|
114
|
+
extract_parameters_proxy(request_path)
|
|
140
115
|
else
|
|
141
116
|
# Lambda AWS_PROXY sets null to the input request when there are no path parmeters
|
|
142
117
|
nil
|
|
143
118
|
end
|
|
144
119
|
end
|
|
145
120
|
|
|
146
|
-
def
|
|
121
|
+
def remove_engine_mount_at_path(request_path)
|
|
122
|
+
return request_path unless original_engine
|
|
123
|
+
|
|
124
|
+
mount = Jets::Router::EngineMount.find_by(engine: original_engine)
|
|
125
|
+
return request_path unless mount
|
|
126
|
+
|
|
127
|
+
request_path.sub(mount.at, '')
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def extract_parameters_proxy(request_path)
|
|
147
131
|
# changes path to a string used for a regexp
|
|
148
132
|
# others/*proxy => others\/(.*)
|
|
149
133
|
# nested/others/*proxy => nested/others\/(.*)
|
|
@@ -152,9 +136,9 @@ class Jets::Router
|
|
|
152
136
|
# leading_path: nested/others
|
|
153
137
|
# capture everything after the leading_path as the value
|
|
154
138
|
regexp = Regexp.new("#{leading_path}/(.*)")
|
|
155
|
-
value =
|
|
139
|
+
value = request_path.match(regexp)[1]
|
|
156
140
|
else
|
|
157
|
-
value =
|
|
141
|
+
value = request_path
|
|
158
142
|
end
|
|
159
143
|
|
|
160
144
|
# the last segment without the '*' is the key
|
|
@@ -165,7 +149,7 @@ class Jets::Router
|
|
|
165
149
|
{ key => value }
|
|
166
150
|
end
|
|
167
151
|
|
|
168
|
-
def extract_parameters_capture(
|
|
152
|
+
def extract_parameters_capture(request_path)
|
|
169
153
|
# changes path to a string used for a regexp
|
|
170
154
|
# posts/:id/edit => posts\/(.*)\/edit
|
|
171
155
|
labels = []
|
|
@@ -181,16 +165,51 @@ class Jets::Router
|
|
|
181
165
|
regexp_string = "^#{regexp_string}$"
|
|
182
166
|
regexp = Regexp.new(regexp_string)
|
|
183
167
|
|
|
184
|
-
values = regexp.match(
|
|
168
|
+
values = regexp.match(request_path).captures
|
|
185
169
|
labels.map do |next_label|
|
|
186
170
|
[next_label, values.delete_at(0)]
|
|
187
171
|
end.to_h
|
|
188
172
|
end
|
|
189
173
|
|
|
174
|
+
# Prevents infinite loop when calling route.to_json for state.save("routes", ...)
|
|
175
|
+
def as_json(options= nil)
|
|
176
|
+
data = {
|
|
177
|
+
path: path,
|
|
178
|
+
http_method: http_method,
|
|
179
|
+
to: to,
|
|
180
|
+
}
|
|
181
|
+
data[:engine] = engine if engine
|
|
182
|
+
data[:internal] = internal if internal
|
|
183
|
+
data
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
# To keep "self #{self}" more concise and helpful
|
|
187
|
+
# Use "self #{self.inspect}" more verbose info
|
|
188
|
+
def to_s
|
|
189
|
+
"#<Jets::Router::Route:#{object_id} @options=#{@options}>"
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
# Old notes:
|
|
193
|
+
# For Grape apps, calling ActiveSupport to_json on a Grape class used to cause an infinite loop.
|
|
194
|
+
# Believe Grape fixed this issue. A GrapeApp.to_json now produces a string.
|
|
195
|
+
# No longer need to coerce to a string and back to a class.
|
|
196
|
+
#
|
|
197
|
+
# This is important because Sprocket::Environment.new cannot be coerced into a string or mounting wont work.
|
|
198
|
+
# This is used in sprockets-jets/lib/sprockets/jets/engine.rb
|
|
199
|
+
#
|
|
200
|
+
# Related PR: smarter apigw routes paging calculation #635
|
|
201
|
+
# https://github.com/boltops-tools/jets/pull/635
|
|
202
|
+
# Debugging notes: https://gist.github.com/tongueroo/c9baa7e98d5ad68bbdd770fde4651963
|
|
190
203
|
def mount_class
|
|
191
204
|
@options[:mount_class]
|
|
192
205
|
end
|
|
193
206
|
|
|
207
|
+
# For jets routes help table of routes
|
|
208
|
+
def mount_class_name
|
|
209
|
+
return unless mount_class
|
|
210
|
+
mount_class.class == Class ? mount_class : "#{mount_class.class}.new"
|
|
211
|
+
end
|
|
212
|
+
|
|
194
213
|
private
|
|
195
214
|
def ensure_jets_format(path)
|
|
196
215
|
path.split('/').map do |s|
|