jets 4.0.17 → 5.0.0.beta1
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/.gitignore +5 -1
- data/CHANGELOG.md +52 -23
- data/Gemfile +1 -5
- data/LICENSE.txt +1 -1
- data/Rakefile +3 -3
- 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/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
- data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
- 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 +29 -27
- 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 -198
- 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_services/stack_status.rb +1 -1
- data/lib/jets/backtrace_cleaner.rb +27 -0
- data/lib/jets/booter.rb +29 -176
- data/lib/jets/builders/code_builder.rb +45 -117
- data/lib/jets/builders/code_size.rb +1 -0
- data/lib/jets/builders/gem_replacer.rb +5 -6
- 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 +32 -21
- 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} +10 -20
- data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
- 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/{builders → builder}/interface.rb +45 -51
- 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/{builders/parent_builder.rb → builder/parent.rb} +54 -54
- 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} +4 -3
- 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 +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
- data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
- 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 +21 -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 +12 -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/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
- 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/{resource → cfn/resource}/iam/policy.rb +8 -8
- 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 +4 -5
- 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 +20 -19
- data/lib/jets/cfn/template.rb +89 -0
- data/lib/jets/cfn/upload.rb +40 -37
- data/lib/jets/cli.rb +28 -210
- 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/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 +4 -4
- 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 +1 -1
- 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} +28 -47
- 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.rb → url/url_command.rb} +37 -14
- 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} +40 -15
- 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 -24
- 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 +136 -51
- 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 +2 -2
- data/lib/jets/dotenv.rb +2 -1
- 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/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 +143 -0
- data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +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/info.rb +116 -0
- data/lib/jets/initializable.rb +95 -0
- data/lib/jets/job/base.rb +3 -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/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 +64 -53
- 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/request/source.rb +1 -2
- data/lib/jets/mega/request.rb +4 -4
- data/lib/jets/names.rb +31 -15
- 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 +12 -25
- 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 +135 -16
- 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 -106
- data/lib/jets/router/route_set.rb +214 -0
- data/lib/jets/router/scope.rb +204 -69
- data/lib/jets/router/state.rb +36 -16
- data/lib/jets/router/util.rb +1 -31
- data/lib/jets/router.rb +64 -162
- 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 -20
- 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/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/version.rb +1 -1
- data/lib/jets.rb +7 -16
- metadata +410 -362
- data/bin/release +0 -9
- data/lib/jets/application/defaults.rb +0 -230
- 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_resources_builder.rb +0 -44
- data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
- 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/job_builder.rb +0 -14
- data/lib/jets/cfn/builders/page_builder.rb +0 -80
- data/lib/jets/cfn/built_template.rb +0 -15
- data/lib/jets/cfn/template_source.rb +0 -64
- data/lib/jets/commands/base.rb +0 -145
- data/lib/jets/commands/call.rb +0 -185
- data/lib/jets/commands/clean.rb +0 -19
- data/lib/jets/commands/configure.rb +0 -51
- data/lib/jets/commands/console.rb +0 -18
- 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.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 -169
- 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 -104
- 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 -72
- 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 -20
- 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/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/helpers/jets/mailers_helper.rb +0 -9
- data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
- 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/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/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/runner.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,184 @@
|
|
|
1
|
+
module Jets::Commands::Call
|
|
2
|
+
class Caller
|
|
3
|
+
include Jets::AwsServices
|
|
4
|
+
|
|
5
|
+
def initialize(provided_function_name, event, options={})
|
|
6
|
+
@options = options
|
|
7
|
+
@guess = @options[:guess].nil? ? true : @options[:guess]
|
|
8
|
+
|
|
9
|
+
@provided_function_name = provided_function_name
|
|
10
|
+
@event = event
|
|
11
|
+
|
|
12
|
+
@invocation_type = options[:invocation_type] || "RequestResponse"
|
|
13
|
+
@log_type = options[:log_type] || "Tail"
|
|
14
|
+
@qualifier = @qualifier
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def function_name
|
|
18
|
+
if @provided_function_name == 'controller'
|
|
19
|
+
"#{Jets.project_namespace}-controller"
|
|
20
|
+
elsif @provided_function_name.starts_with?(Jets.project_namespace)
|
|
21
|
+
@provided_function_name # fully qualified function name
|
|
22
|
+
elsif @guess
|
|
23
|
+
ensure_guesses_found! # possibly exits here
|
|
24
|
+
guesser.function_name # guesser adds namespace already
|
|
25
|
+
else
|
|
26
|
+
[Jets.project_namespace, @provided_function_name].join('-')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def run
|
|
31
|
+
@options[:local] ? local_run : remote_run
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# With local mode there is no way to bypass the guesser
|
|
35
|
+
def local_run
|
|
36
|
+
puts "Local mode enabled!"
|
|
37
|
+
ensure_guesses_found! # possibly exits here
|
|
38
|
+
klass = guesser.class_name.constantize
|
|
39
|
+
# Example:
|
|
40
|
+
# PostsController.process(event, context, meth)
|
|
41
|
+
event = JSON.load(transformed_event) || {} # transformed_event is JSON text String
|
|
42
|
+
|
|
43
|
+
fun = Jets::Poly.new(klass, guesser.method_name)
|
|
44
|
+
result = fun.run(event) # check the logs for polymorphic function errors
|
|
45
|
+
# Note: even though data might not always be json, the JSON.dump does a
|
|
46
|
+
# good job of not bombing, so always calling it to simplify code.
|
|
47
|
+
|
|
48
|
+
text = Jets::Util.normalize_result(result)
|
|
49
|
+
STDOUT.puts text
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def remote_run
|
|
53
|
+
puts "Calling lambda function #{function_name} on AWS" unless @options[:mute]
|
|
54
|
+
return if @options[:noop]
|
|
55
|
+
|
|
56
|
+
options = {
|
|
57
|
+
# client_context: client_context,
|
|
58
|
+
function_name: function_name,
|
|
59
|
+
invocation_type: @invocation_type, # "Event", # RequestResponse
|
|
60
|
+
log_type: @log_type, # pretty sweet
|
|
61
|
+
payload: transformed_event, # "fileb://file-path/input.json", <= JSON
|
|
62
|
+
qualifier: @qualifier, # "1",
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
begin
|
|
66
|
+
resp = lambda_client.invoke(options)
|
|
67
|
+
rescue Aws::Lambda::Errors::ResourceNotFoundException
|
|
68
|
+
puts "The function #{function_name} was not found. Maybe check the spelling or the AWS_PROFILE?".color(:red)
|
|
69
|
+
return
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
if @options[:show_logs] || @options[:show_log]
|
|
73
|
+
puts "Last 4KB of log in the x-amz-log-result header:".color(:green)
|
|
74
|
+
puts Base64.decode64(resp.log_result)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
add_console_link_to_clipboard
|
|
78
|
+
result = resp.payload.read # already been normalized/JSON.dump by AWS
|
|
79
|
+
unless @options[:mute_output]
|
|
80
|
+
STDOUT.puts result # only thing that goes to stdout
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def guesser
|
|
85
|
+
@guesser ||= Guesser.new(@provided_function_name)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def ensure_guesses_found!
|
|
89
|
+
unless guesser.class_name and guesser.method_name
|
|
90
|
+
puts guesser.error_message
|
|
91
|
+
exit
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# @event is String because it can be the file:// notation
|
|
96
|
+
# Returns text String for the lambda.invoke payload.
|
|
97
|
+
def transformed_event
|
|
98
|
+
text = @event
|
|
99
|
+
if text && text.include?("file://")
|
|
100
|
+
text = load_event_from_file(text)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
check_valid_json!(text)
|
|
104
|
+
|
|
105
|
+
puts "Function name: #{function_name.color(:green)}" unless @options[:mute]
|
|
106
|
+
return text unless function_name.include?("_controller-")
|
|
107
|
+
return text if @options[:lambda_proxy] == false
|
|
108
|
+
|
|
109
|
+
event = JSON.load(text)
|
|
110
|
+
lambda_proxy = {"queryStringParameters" => event}
|
|
111
|
+
JSON.dump(lambda_proxy)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def load_event_from_file(text)
|
|
115
|
+
path = text.gsub('file://','')
|
|
116
|
+
path = "#{Jets.root}/#{path}" unless path[0..0] == '/'
|
|
117
|
+
unless File.exist?(path)
|
|
118
|
+
puts "File #{path} does not exist. Are you sure the file exists?".color(:red)
|
|
119
|
+
exit
|
|
120
|
+
end
|
|
121
|
+
text = IO.read(path)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# Exits with friendly error message when user provides bad just
|
|
125
|
+
def check_valid_json!(text)
|
|
126
|
+
JSON.load(text)
|
|
127
|
+
rescue JSON::ParserError => e
|
|
128
|
+
puts "Invalid json provided:\n '#{text}'"
|
|
129
|
+
puts "Exiting... Please try again and provide valid json."
|
|
130
|
+
exit 1
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# So use can quickly paste this into their browser if they want to see the function
|
|
134
|
+
# via the Lambda console
|
|
135
|
+
def add_console_link_to_clipboard
|
|
136
|
+
return unless RUBY_PLATFORM =~ /darwin/
|
|
137
|
+
return unless system("type pbcopy > /dev/null")
|
|
138
|
+
|
|
139
|
+
# TODO: for add_console_link_to_clipboard get the region from the ~/.aws/config and AWS_PROFILE setting
|
|
140
|
+
region = Aws::S3::Client.new.config.region || ENV["AWS_REGION"] ||'us-east-1'
|
|
141
|
+
link = "https://console.aws.amazon.com/lambda/home?region=#{region}#/functions/#{function_name}?tab=configuration"
|
|
142
|
+
system("echo #{link} | pbcopy")
|
|
143
|
+
puts "Pro tip: The Lambda Console Link to the #{function_name} function has been added to your clipboard." unless @options[:mute]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# TODO: Hook client_context up and make sure it works. Think I've figure out how to sign client_context below.
|
|
147
|
+
# Client context must be a valid Base64-encoded JSON object
|
|
148
|
+
# Example: http://docs.aws.amazon.com/mobileanalytics/latest/ug/PutEvents.html
|
|
149
|
+
def client_context
|
|
150
|
+
context = {
|
|
151
|
+
"client" => {
|
|
152
|
+
"client_id" => "Jets",
|
|
153
|
+
"app_title" => "jets call cli",
|
|
154
|
+
"app_version_name" => Jets::VERSION,
|
|
155
|
+
},
|
|
156
|
+
"custom" => {},
|
|
157
|
+
"env" =>{
|
|
158
|
+
"platform" => RUBY_PLATFORM,
|
|
159
|
+
"platform_version" => RUBY_VERSION,
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
Base64.encode64(JSON.dump(context))
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# For this class redirect puts to stderr so user can pipe output to tools like
|
|
166
|
+
# jq. Example:
|
|
167
|
+
# jets call posts_controller-index '{"test":1}' | jq .
|
|
168
|
+
def puts(text)
|
|
169
|
+
$stderr.puts(text)
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def lambda_client
|
|
173
|
+
opt = {}
|
|
174
|
+
opt = opt.merge({retry_limit: @options[:retry_limit]}) if @options[:retry_limit].present?
|
|
175
|
+
opt = opt.merge({http_read_timeout: @options[:read_timeout]}) if @options[:read_timeout].present?
|
|
176
|
+
|
|
177
|
+
if opt.empty?
|
|
178
|
+
aws_lambda
|
|
179
|
+
else
|
|
180
|
+
Aws::Lambda::Client.new(opt)
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
#
|
|
26
26
|
# Now we're at a point where we can start guessing
|
|
27
27
|
# function_name = detect_function_name(function_name)
|
|
28
|
-
|
|
28
|
+
module Jets::Commands::Call
|
|
29
29
|
class Guesser
|
|
30
30
|
delegate :class_name, :method_name, :error_message, :function_name,
|
|
31
31
|
to: :delegate_guesser
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Jets::Command
|
|
2
|
+
class CleanCommand < Base # :nodoc:
|
|
3
|
+
desc "log", "Cleans CloudWatch log groups assocated with app"
|
|
4
|
+
long_desc Help.text("clean/log")
|
|
5
|
+
def log
|
|
6
|
+
Jets::Commands::Clean::Log.new(options).clean
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "build", "Cleans jets build"
|
|
10
|
+
long_desc Help.text("clean/build")
|
|
11
|
+
def build
|
|
12
|
+
Jets::Commands::Clean::Build.new(options).clean
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# log groups and we don't want to overly-aggressively delete them.
|
|
9
9
|
#
|
|
10
10
|
# The `keep_prefixes(log_group_names)` method calcuates the log groups to keep.
|
|
11
|
-
|
|
11
|
+
module Jets::Commands::Clean
|
|
12
12
|
class Log < Base
|
|
13
13
|
extend Memoist
|
|
14
14
|
include Jets::AwsServices
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
module Jets::Command
|
|
2
|
+
class ConfigureCommand < Base # :nodoc:
|
|
3
|
+
desc "configure [TOKEN]", "configure token and updates ~/.jets/config.yml"
|
|
4
|
+
long_desc Help.text(:configure)
|
|
5
|
+
def perform(token=nil)
|
|
6
|
+
Jets::Api::Config.instance.update_token(token)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "irb"
|
|
4
|
+
require "irb/completion"
|
|
5
|
+
|
|
6
|
+
module Jets::Command
|
|
7
|
+
class ConsoleCommand < Base # :nodoc:
|
|
8
|
+
include EnvironmentArgument
|
|
9
|
+
|
|
10
|
+
desc "console", "REPL console with Jets environment loaded"
|
|
11
|
+
long_desc Help.text(:console)
|
|
12
|
+
def perform
|
|
13
|
+
extract_environment_option_from_argument
|
|
14
|
+
require_application_and_environment!
|
|
15
|
+
Console.new(options).run
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Console
|
|
20
|
+
attr_reader :environment
|
|
21
|
+
|
|
22
|
+
def initialize(environment)
|
|
23
|
+
@environment = environment
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def run
|
|
27
|
+
puts Jets::Booter.message
|
|
28
|
+
|
|
29
|
+
# Thanks: https://mutelight.org/bin-console
|
|
30
|
+
require "irb"
|
|
31
|
+
require "irb/completion"
|
|
32
|
+
|
|
33
|
+
ARGV.clear # https://stackoverflow.com/questions/33070092/irb-start-not-starting/33136762
|
|
34
|
+
IRB.start
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
## Storing Encrypted Credentials in Source Control
|
|
2
|
+
|
|
3
|
+
The Jets `credentials` commands provide access to encrypted credentials,
|
|
4
|
+
so you can safely store access tokens, database passwords, and the like
|
|
5
|
+
safely inside the app without relying on a mess of ENVs.
|
|
6
|
+
|
|
7
|
+
This also allows for atomic deploys: no need to coordinate key changes
|
|
8
|
+
to get everything working as the keys are shipped with the code.
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
Applications after Jets 5 automatically have a basic credentials file generated
|
|
13
|
+
that just contains the secret_key_base used by MessageVerifiers/MessageEncryptors, like the ones
|
|
14
|
+
signing and encrypting cookies.
|
|
15
|
+
|
|
16
|
+
For applications created prior to Jets 5, we'll automatically generate a new
|
|
17
|
+
credentials file in `config/credentials.yml.enc` the first time you run `bin/jets credentials:edit`.
|
|
18
|
+
If you didn't have a master key saved in `config/master.key`, that'll be created too.
|
|
19
|
+
|
|
20
|
+
Don't lose this master key! Put it in a password manager your team can access.
|
|
21
|
+
Should you lose it no one, including you, will be able to access any encrypted
|
|
22
|
+
credentials.
|
|
23
|
+
|
|
24
|
+
Don't commit the key! Add `config/master.key` to your source control's
|
|
25
|
+
ignore file. If you use Git, Jets handles this for you.
|
|
26
|
+
|
|
27
|
+
Jets also looks for the master key in `ENV["JETS_MASTER_KEY"]`, if that's easier to manage.
|
|
28
|
+
|
|
29
|
+
You could prepend that to your server's start command like this:
|
|
30
|
+
|
|
31
|
+
JETS_MASTER_KEY="very-secret-and-secure" server.start
|
|
32
|
+
|
|
33
|
+
## Set up Git to Diff Credentials
|
|
34
|
+
|
|
35
|
+
Jets provides `bin/jets credentials:diff --enroll` to instruct Git to call
|
|
36
|
+
`bin/jets credentials:diff` when `git diff` is run on a credentials file.
|
|
37
|
+
|
|
38
|
+
Running the command enrolls the project such that all credentials files use the
|
|
39
|
+
"jets_credentials" diff driver in .gitattributes.
|
|
40
|
+
|
|
41
|
+
Additionally since Git requires the driver itself to be set up in a config file
|
|
42
|
+
that isn't tracked Jets automatically ensures it's configured when running
|
|
43
|
+
`credentials:edit`.
|
|
44
|
+
|
|
45
|
+
Otherwise each co-worker would have to run enable manually, including on each new
|
|
46
|
+
repo clone.
|
|
47
|
+
|
|
48
|
+
To disenroll from this feature, run `bin/jets credentials:diff --disenroll`.
|
|
49
|
+
|
|
50
|
+
## Editing Credentials
|
|
51
|
+
|
|
52
|
+
This will open a temporary file in `$EDITOR` with the decrypted contents to edit
|
|
53
|
+
the encrypted credentials.
|
|
54
|
+
|
|
55
|
+
When the temporary file is next saved the contents are encrypted and written to
|
|
56
|
+
`config/credentials.yml.enc` while the file itself is destroyed to prevent credentials
|
|
57
|
+
from leaking.
|
|
58
|
+
|
|
59
|
+
## Environment Specific Credentials
|
|
60
|
+
|
|
61
|
+
The `credentials` command supports passing an `--environment` option to create an
|
|
62
|
+
environment specific override. That override will take precedence over the
|
|
63
|
+
global `config/credentials.yml.enc` file when running in that environment. So:
|
|
64
|
+
|
|
65
|
+
bin/jets credentials:edit --environment development
|
|
66
|
+
|
|
67
|
+
will create `config/credentials/development.yml.enc` with the corresponding
|
|
68
|
+
encryption key in `config/credentials/development.key` if the credentials file
|
|
69
|
+
doesn't exist.
|
|
70
|
+
|
|
71
|
+
The encryption key can also be put in `ENV["JETS_MASTER_KEY"]`, which takes
|
|
72
|
+
precedence over the file encryption key.
|
|
73
|
+
|
|
74
|
+
In addition to that, the default credentials lookup paths can be overridden through
|
|
75
|
+
`config.credentials.content_path` and `config.credentials.key_path`.
|
|
76
|
+
|
|
77
|
+
## Editor wait
|
|
78
|
+
|
|
79
|
+
For editors that fork and exit immediately, it's important to pass a wait flag,
|
|
80
|
+
otherwise the credentials will be saved immediately with no chance to edit.
|
|
81
|
+
|
|
82
|
+
EDITOR="code --wait" jets credentials:edit
|
|
83
|
+
|
|
84
|
+
## Accessing in App
|
|
85
|
+
|
|
86
|
+
Let's say you have credentials like so:
|
|
87
|
+
|
|
88
|
+
❯ jets credentials:show
|
|
89
|
+
secret_key_base: somesecretvalue
|
|
90
|
+
foo: bar
|
|
91
|
+
|
|
92
|
+
You can access them in the app like so:
|
|
93
|
+
|
|
94
|
+
❯ jets console
|
|
95
|
+
> Jets.application.credentials.secret_key_base
|
|
96
|
+
=> "somesecretvalue"
|
|
97
|
+
> Jets.application.credentials.foo
|
|
98
|
+
=> "bar"
|
|
99
|
+
> Jets.application.credentials.does_not_exist
|
|
100
|
+
=> nil
|
|
101
|
+
|
|
102
|
+
Remember, when you deploy this to Lambda you should set the `JETS_MASTER_KEY`. You set it with [Env Files](https://rubyonjets.com/docs/env-files/). Otherwise the `Jets.application.credentials.xx` values will return `nil`.
|
|
103
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jets::Command::CredentialsCommand::Diffing # :nodoc:
|
|
4
|
+
GITATTRIBUTES_ENTRY = <<~END
|
|
5
|
+
config/credentials/*.yml.enc diff=jets_credentials
|
|
6
|
+
config/credentials.yml.enc diff=jets_credentials
|
|
7
|
+
END
|
|
8
|
+
|
|
9
|
+
def enroll_project_in_credentials_diffing
|
|
10
|
+
if enrolled_in_credentials_diffing?
|
|
11
|
+
say "Project is already enrolled in credentials file diffing."
|
|
12
|
+
else
|
|
13
|
+
gitattributes.write(GITATTRIBUTES_ENTRY, mode: "a")
|
|
14
|
+
|
|
15
|
+
say "Enrolled project in credentials file diffing!"
|
|
16
|
+
say "Jets ensures the jets_credentials diff driver is set when running `credentials:edit`. See `credentials:help` for more."
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def disenroll_project_from_credentials_diffing
|
|
21
|
+
if enrolled_in_credentials_diffing?
|
|
22
|
+
gitattributes.write(gitattributes.read.gsub(GITATTRIBUTES_ENTRY, ""))
|
|
23
|
+
gitattributes.delete if gitattributes.empty?
|
|
24
|
+
|
|
25
|
+
say "Disenrolled project from credentials file diffing!"
|
|
26
|
+
else
|
|
27
|
+
say "Project is not enrolled in credentials file diffing."
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def ensure_diffing_driver_is_configured
|
|
32
|
+
configure_diffing_driver if enrolled_in_credentials_diffing? && !diffing_driver_configured?
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
def enrolled_in_credentials_diffing?
|
|
37
|
+
gitattributes.file? && gitattributes.read.include?(GITATTRIBUTES_ENTRY)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def diffing_driver_configured?
|
|
41
|
+
system "git config --get diff.jets_credentials.textconv", out: File::NULL
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def configure_diffing_driver
|
|
45
|
+
system "git config diff.jets_credentials.textconv 'bin/jets credentials:diff'"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def gitattributes
|
|
49
|
+
Jets.root.join(".gitattributes")
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "pathname"
|
|
4
|
+
require "shellwords"
|
|
5
|
+
require "active_support"
|
|
6
|
+
|
|
7
|
+
module Jets
|
|
8
|
+
module Command
|
|
9
|
+
class CredentialsCommand < Jets::Command::Base # :nodoc:
|
|
10
|
+
include Helpers::Editor
|
|
11
|
+
include EnvironmentArgument
|
|
12
|
+
|
|
13
|
+
require_relative "credentials_command/diffing"
|
|
14
|
+
include Diffing
|
|
15
|
+
|
|
16
|
+
self.environment_desc = "Uses credentials from config/credentials/:environment.yml.enc encrypted by config/credentials/:environment.key key"
|
|
17
|
+
|
|
18
|
+
no_commands do
|
|
19
|
+
def help
|
|
20
|
+
say "Usage:\n #{self.class.banner}"
|
|
21
|
+
say ""
|
|
22
|
+
say self.class.desc
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def edit
|
|
27
|
+
extract_environment_option_from_argument(default_environment: nil)
|
|
28
|
+
require_application!
|
|
29
|
+
|
|
30
|
+
ensure_editor_available(command: "bin/jets credentials:edit") || (return)
|
|
31
|
+
|
|
32
|
+
ensure_encryption_key_has_been_added if credentials.key.nil?
|
|
33
|
+
ensure_credentials_have_been_added
|
|
34
|
+
ensure_diffing_driver_is_configured
|
|
35
|
+
|
|
36
|
+
catch_editing_exceptions do
|
|
37
|
+
change_credentials_in_system_editor
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
say "File encrypted and saved."
|
|
41
|
+
rescue ActiveSupport::MessageEncryptor::InvalidMessage
|
|
42
|
+
say "Couldn't decrypt #{content_path}. Perhaps you passed the wrong key?"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def show
|
|
46
|
+
extract_environment_option_from_argument(default_environment: nil)
|
|
47
|
+
require_application!
|
|
48
|
+
|
|
49
|
+
say credentials.read.presence || missing_credentials_message
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
option :enroll, type: :boolean, default: false,
|
|
53
|
+
desc: "Enrolls project in credentials file diffing with `git diff`"
|
|
54
|
+
|
|
55
|
+
option :disenroll, type: :boolean, default: false,
|
|
56
|
+
desc: "Disenrolls project from credentials file diffing"
|
|
57
|
+
|
|
58
|
+
def diff(content_path = nil)
|
|
59
|
+
if @content_path = content_path
|
|
60
|
+
extract_environment_option_from_argument(default_environment: extract_environment_from_path(content_path))
|
|
61
|
+
require_application!
|
|
62
|
+
|
|
63
|
+
say credentials.read.presence || credentials.content_path.read
|
|
64
|
+
else
|
|
65
|
+
require_application!
|
|
66
|
+
disenroll_project_from_credentials_diffing if options[:disenroll]
|
|
67
|
+
enroll_project_in_credentials_diffing if options[:enroll]
|
|
68
|
+
end
|
|
69
|
+
rescue ActiveSupport::MessageEncryptor::InvalidMessage
|
|
70
|
+
say credentials.content_path.read
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
def credentials
|
|
75
|
+
Jets.application.encrypted(content_path, key_path: key_path)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def ensure_encryption_key_has_been_added
|
|
79
|
+
encryption_key_file_generator.add_key_file(key_path)
|
|
80
|
+
encryption_key_file_generator.ignore_key_file(key_path)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def ensure_credentials_have_been_added
|
|
84
|
+
if options[:environment]
|
|
85
|
+
encrypted_file_generator.add_encrypted_file_silently(content_path, key_path)
|
|
86
|
+
else
|
|
87
|
+
credentials_generator.add_credentials_file_silently
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def change_credentials_in_system_editor
|
|
92
|
+
credentials.change do |tmp_path|
|
|
93
|
+
system(*Shellwords.split(ENV["EDITOR"]), tmp_path.to_s)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def missing_credentials_message
|
|
98
|
+
if credentials.key.nil?
|
|
99
|
+
"Missing '#{key_path}' to decrypt credentials. See `bin/jets credentials:help`"
|
|
100
|
+
else
|
|
101
|
+
"File '#{content_path}' does not exist. Use `bin/jets credentials:edit` to change that."
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def content_path
|
|
106
|
+
@content_path ||= options[:environment] ? "config/credentials/#{options[:environment]}.yml.enc" : "config/credentials.yml.enc"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def key_path
|
|
110
|
+
options[:environment] ? "config/credentials/#{options[:environment]}.key" : "config/master.key"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def extract_environment_from_path(path)
|
|
114
|
+
available_environments.find { |env| path.include? env } if path.end_with?(".yml.enc")
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def encryption_key_file_generator
|
|
118
|
+
require "rails/generators"
|
|
119
|
+
require "rails/generators/rails/encryption_key_file/encryption_key_file_generator"
|
|
120
|
+
|
|
121
|
+
Rails::Generators::EncryptionKeyFileGenerator.new
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def encrypted_file_generator
|
|
125
|
+
require "rails/generators"
|
|
126
|
+
require "rails/generators/rails/encrypted_file/encrypted_file_generator"
|
|
127
|
+
|
|
128
|
+
Rails::Generators::EncryptedFileGenerator.new
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def credentials_generator
|
|
132
|
+
require "rails/generators"
|
|
133
|
+
require "rails/generators/rails/credentials/credentials_generator"
|
|
134
|
+
|
|
135
|
+
Rails::Generators::CredentialsGenerator.new
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Jets
|
|
4
|
+
module Command
|
|
5
|
+
module Db
|
|
6
|
+
module System
|
|
7
|
+
class ChangeCommand < Base # :nodoc:
|
|
8
|
+
class_option :to, desc: "The database system to switch to."
|
|
9
|
+
|
|
10
|
+
def initialize(positional_args, option_args, *)
|
|
11
|
+
@argv = positional_args + option_args
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def perform
|
|
16
|
+
require "rails/generators"
|
|
17
|
+
require "rails/generators/rails/db/system/change/change_generator"
|
|
18
|
+
Rails::Generators::Db::System::ChangeGenerator.start(@argv)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|