jets 3.1.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,41 @@
|
|
1
|
+
module Jets
|
2
|
+
module Command
|
3
|
+
module ApiHelpers # :nodoc:
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
include Jets::Api
|
7
|
+
|
8
|
+
def no_token_exit!
|
9
|
+
return if Jets::Api.token
|
10
|
+
puts "ERROR: This command requires Jets Api".color(:red)
|
11
|
+
puts "Please run `jets configure` first"
|
12
|
+
exit 1
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_for_error_message!(resp)
|
16
|
+
# IE: {"error":"Invalid token. Please check your token in ~/.jets/config.yml"}
|
17
|
+
if resp && resp["error"]
|
18
|
+
$stderr.puts "ERROR: #{resp["error"]}"
|
19
|
+
exit 1
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def paging_params
|
24
|
+
Jets.boot
|
25
|
+
params = {}
|
26
|
+
params[:page] = @options[:page] if @options[:page]
|
27
|
+
params[:order] = @options[:order] if @options[:order]
|
28
|
+
params
|
29
|
+
end
|
30
|
+
|
31
|
+
module ClassMethods
|
32
|
+
def paging_options(defaults={})
|
33
|
+
Proc.new do
|
34
|
+
option :page, aliases: :p, type: :numeric, desc: "Page number"
|
35
|
+
option :order, default: defaults[:order] || 'asc', desc: "Order: asc or desc"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Jets
|
2
|
+
module Command
|
3
|
+
module AwsHelpers # :nodoc:
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
include Jets::AwsServices
|
7
|
+
|
8
|
+
def first_run?
|
9
|
+
return false if ENV['JETS_TEMPLATES']
|
10
|
+
!stack_exists?(Jets::Names.parent_stack_name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_stack(stack_name)
|
14
|
+
resp = cfn.describe_stacks(stack_name: stack_name)
|
15
|
+
resp.stacks.first
|
16
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
17
|
+
# example: Stack with id demo-dev does not exist
|
18
|
+
if e.message =~ /Stack with/ && e.message =~ /does not exist/
|
19
|
+
nil
|
20
|
+
else
|
21
|
+
raise
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,204 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "erb"
|
5
|
+
|
6
|
+
require "active_support/core_ext/string/filters"
|
7
|
+
require "active_support/core_ext/string/inflections"
|
8
|
+
|
9
|
+
require "jets/command/actions"
|
10
|
+
|
11
|
+
module Jets
|
12
|
+
module Command
|
13
|
+
class Base < Thor
|
14
|
+
extend Memoist
|
15
|
+
|
16
|
+
class Error < Thor::Error # :nodoc:
|
17
|
+
end
|
18
|
+
|
19
|
+
class CorrectableError < Error # :nodoc:
|
20
|
+
attr_reader :key, :options
|
21
|
+
|
22
|
+
def initialize(message, key, options)
|
23
|
+
@key = key
|
24
|
+
@options = options
|
25
|
+
super(message)
|
26
|
+
end
|
27
|
+
|
28
|
+
if defined?(DidYouMean::SpellChecker) && defined?(DidYouMean::Correctable)
|
29
|
+
include DidYouMean::Correctable
|
30
|
+
|
31
|
+
def corrections
|
32
|
+
@corrections ||= DidYouMean::SpellChecker.new(dictionary: options).correct(key)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
include Actions
|
38
|
+
include AwsHelpers
|
39
|
+
include ApiHelpers
|
40
|
+
|
41
|
+
no_commands do
|
42
|
+
cattr_accessor :full_namespace
|
43
|
+
end
|
44
|
+
|
45
|
+
class << self
|
46
|
+
def long_desc(long_description, options = {})
|
47
|
+
options[:wrap] = false
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
51
|
+
def exit_on_failure? # :nodoc:
|
52
|
+
false
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns true when the app is a Jets engine.
|
56
|
+
def engine?
|
57
|
+
defined?(ENGINE_ROOT)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Tries to get the description from a USAGE file one folder above the command
|
61
|
+
# root.
|
62
|
+
def desc(usage = nil, description = nil, options = {})
|
63
|
+
if usage
|
64
|
+
super
|
65
|
+
else
|
66
|
+
@desc ||= ERB.new(File.read(usage_path), trim_mode: "-").result(binding) if usage_path
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Convenience method to get the namespace from the class name. It's the
|
71
|
+
# same as Thor default except that the Command at the end of the class
|
72
|
+
# is removed.
|
73
|
+
def namespace(name = nil)
|
74
|
+
if name
|
75
|
+
super
|
76
|
+
else
|
77
|
+
@namespace ||= super.chomp("_command").sub(/:command:/, ":")
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Convenience method to hide this command from the available ones when
|
82
|
+
# running jets command.
|
83
|
+
def hide_command!
|
84
|
+
Jets::Command.hidden_commands << self
|
85
|
+
end
|
86
|
+
|
87
|
+
def inherited(base) # :nodoc:
|
88
|
+
super
|
89
|
+
|
90
|
+
if base.name && !base.name.end_with?("Base")
|
91
|
+
Jets::Command.subclasses << base
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def perform(full_namespace, command, args, config) # :nodoc:
|
96
|
+
if Jets::Command::HELP_MAPPINGS.include?(args.first)
|
97
|
+
command, args = "help", []
|
98
|
+
self.full_namespace = full_namespace # store for help. clean:log => log
|
99
|
+
end
|
100
|
+
|
101
|
+
dispatch(command, args.dup, nil, config)
|
102
|
+
end
|
103
|
+
|
104
|
+
def printing_commands
|
105
|
+
namespaced_commands
|
106
|
+
end
|
107
|
+
|
108
|
+
def executable
|
109
|
+
"jets #{full_namespace || command_name}"
|
110
|
+
end
|
111
|
+
|
112
|
+
# Use Jets' default banner.
|
113
|
+
def banner(*)
|
114
|
+
command_name = full_namespace ? full_namespace.split(':').last : command_name
|
115
|
+
command = commands[command_name]
|
116
|
+
options_arg = '[options]' unless command && command.options.empty?
|
117
|
+
output = "#{executable} #{arguments.map(&:usage).join(' ')} #{options_arg}".squish
|
118
|
+
" #{output}" # add 2 more spaces in front
|
119
|
+
end
|
120
|
+
|
121
|
+
# Sets the base_name taking into account the current class namespace.
|
122
|
+
#
|
123
|
+
# Jets::Command::TestCommand.base_name # => 'jets'
|
124
|
+
def base_name
|
125
|
+
@base_name ||= if base = name.to_s.split("::").first
|
126
|
+
base.underscore
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Return command name without namespaces.
|
131
|
+
#
|
132
|
+
# Jets::Command::TestCommand.command_name # => 'test'
|
133
|
+
def command_name
|
134
|
+
@command_name ||= if command = name.to_s.split("::").last
|
135
|
+
command.chomp!("Command")
|
136
|
+
command.underscore
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
# Path to lookup a USAGE description in a file.
|
141
|
+
def usage_path
|
142
|
+
if default_command_root
|
143
|
+
path = File.join(default_command_root, "USAGE")
|
144
|
+
path if File.exist?(path)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
# Default file root to place extra files a command might need, placed
|
149
|
+
# one folder above the command file.
|
150
|
+
#
|
151
|
+
# For a Jets::Command::TestCommand placed in <tt>jets/command/test_command.rb</tt>
|
152
|
+
# would return <tt>jets/test</tt>.
|
153
|
+
def default_command_root
|
154
|
+
path = File.expand_path(relative_command_path, __dir__)
|
155
|
+
path if File.exist?(path)
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
# Allow the command method to be called perform.
|
160
|
+
def create_command(meth)
|
161
|
+
if meth == "perform"
|
162
|
+
alias_method command_name, meth
|
163
|
+
else
|
164
|
+
# Prevent exception about command without usage.
|
165
|
+
# Some commands define their documentation differently.
|
166
|
+
@usage ||= ""
|
167
|
+
@desc ||= ""
|
168
|
+
|
169
|
+
super
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
def command_root_namespace
|
174
|
+
(namespace.split(":") - %w(jets)).join(":")
|
175
|
+
end
|
176
|
+
|
177
|
+
def relative_command_path
|
178
|
+
File.join("../commands", *command_root_namespace.split(":"))
|
179
|
+
end
|
180
|
+
|
181
|
+
def namespaced_commands
|
182
|
+
commands.keys.map do |key|
|
183
|
+
if command_root_namespace.match?(/(\A|:)#{key}\z/)
|
184
|
+
command_root_namespace
|
185
|
+
else
|
186
|
+
"#{command_root_namespace}:#{key}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def help
|
193
|
+
if full_namespace = self.class.full_namespace
|
194
|
+
command_name = full_namespace.split(':').last # clean:log => log
|
195
|
+
self.class.command_help(shell, command_name)
|
196
|
+
elsif command_name = self.class.command_name
|
197
|
+
self.class.command_help(shell, command_name)
|
198
|
+
else
|
199
|
+
super
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
|
5
|
+
module Jets
|
6
|
+
module Command
|
7
|
+
module Behavior # :nodoc:
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
class_methods do
|
11
|
+
# Remove the color from output.
|
12
|
+
def no_color!
|
13
|
+
Thor::Base.shell = Thor::Shell::Basic
|
14
|
+
end
|
15
|
+
|
16
|
+
# Track all command subclasses.
|
17
|
+
def subclasses
|
18
|
+
@subclasses ||= []
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
# Prints a list of generators.
|
23
|
+
def print_list(base, namespaces)
|
24
|
+
return if namespaces.empty?
|
25
|
+
puts "#{base.camelize}:"
|
26
|
+
|
27
|
+
namespaces.each do |namespace|
|
28
|
+
puts(" #{namespace}")
|
29
|
+
end
|
30
|
+
|
31
|
+
puts
|
32
|
+
end
|
33
|
+
|
34
|
+
# Receives namespaces in an array and tries to find matching generators
|
35
|
+
# in the load path.
|
36
|
+
def lookup(namespaces)
|
37
|
+
paths = namespaces_to_paths(namespaces)
|
38
|
+
paths.each do |raw_path|
|
39
|
+
lookup_paths.each do |base|
|
40
|
+
path = "#{base}/#{raw_path}_#{command_type}"
|
41
|
+
|
42
|
+
begin
|
43
|
+
require path
|
44
|
+
return
|
45
|
+
rescue LoadError => e
|
46
|
+
raise unless /#{Regexp.escape(path)}$/.match?(e.message)
|
47
|
+
rescue Exception => e
|
48
|
+
warn "[WARNING] Could not load #{command_type} #{path.inspect}. Error: #{e.message}.\n#{e.backtrace.join("\n")}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# This will try to load any command in the load path to show in help.
|
55
|
+
def lookup!
|
56
|
+
$LOAD_PATH.each do |base|
|
57
|
+
Dir[File.join(base, *file_lookup_paths)].each do |path|
|
58
|
+
path = path.delete_prefix("#{base}/")
|
59
|
+
require path
|
60
|
+
rescue Exception
|
61
|
+
# No problem
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Convert namespaces to paths by replacing ":" for "/" and adding
|
67
|
+
# an extra lookup. For example, "jets:model" should be searched
|
68
|
+
# in both: "jets/model/model_generator" and "jets/model_generator".
|
69
|
+
def namespaces_to_paths(namespaces)
|
70
|
+
paths = []
|
71
|
+
namespaces.each do |namespace|
|
72
|
+
pieces = namespace.split(":")
|
73
|
+
path = pieces.join("/")
|
74
|
+
paths << "#{path}/#{pieces.last}"
|
75
|
+
paths << path
|
76
|
+
end
|
77
|
+
paths.uniq!
|
78
|
+
paths
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support"
|
4
|
+
require "active_support/core_ext/class/attribute"
|
5
|
+
|
6
|
+
module Jets
|
7
|
+
module Command
|
8
|
+
module EnvironmentArgument # :nodoc:
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
no_commands do
|
13
|
+
class_attribute :environment_desc, default: "Specifies the environment to run this #{self.command_name} under (test/development/production)."
|
14
|
+
end
|
15
|
+
class_option :environment, aliases: "-e", type: :string, desc: environment_desc
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def extract_environment_option_from_argument(default_environment: Jets::Command.environment)
|
20
|
+
if options[:environment]
|
21
|
+
self.options = options.merge(environment: acceptable_environment(options[:environment]))
|
22
|
+
else
|
23
|
+
self.options = options.merge(environment: default_environment)
|
24
|
+
end
|
25
|
+
# JETS_ENV needs to be set before config/application is required.
|
26
|
+
ENV["JETS_ENV"] = options[:environment]
|
27
|
+
end
|
28
|
+
|
29
|
+
def acceptable_environment(env = nil)
|
30
|
+
if available_environments.include? env
|
31
|
+
env
|
32
|
+
else
|
33
|
+
%w( production development test ).detect { |e| /^#{env}/.match?(e) } || env
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def available_environments
|
38
|
+
Dir["config/environments/*.rb"].map { |fname| File.basename(fname, ".*") }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
## Remote mode
|
2
|
+
|
3
|
+
Invoke the lambda function on AWS.
|
4
|
+
|
5
|
+
## Examples
|
6
|
+
|
7
|
+
### Controller Examples
|
8
|
+
|
9
|
+
jets call controller '{"path": "/up", "httpMethod": "GET"}' --show-logs | jq
|
10
|
+
|
11
|
+
You'll need to specify enough of the event payload so that the Jets shim handler can find the route and send it to the right controller action.
|
12
|
+
|
13
|
+
jets call controller '{"path":"/posts"}' --show-logs | jq .
|
14
|
+
jets call controller 'file://event.json' --show-logs | jq .
|
15
|
+
|
16
|
+
## Job Examples
|
17
|
+
|
18
|
+
jets call hard_job-drive '{"test":1}'
|
19
|
+
jets call hard_job-drive '{"test":1}' | jq .
|
20
|
+
jets call hard_job-drive file://event.json | jq . # load event with a file
|
21
|
+
|
22
|
+
|
23
|
+
The equivalent AWS Lambda CLI command:
|
24
|
+
|
25
|
+
aws lambda invoke --function-name demo-dev-hard_job-dig --payload '{"path":"/posts","test":1}' outfile.txt
|
26
|
+
cat outfile.txt | jq '.'
|
27
|
+
|
28
|
+
Jets figures out what functions to call by evaluating the app code and finds if the class and method exists. If you want to turn guess mode off and want to always explicitly provide the method name use the `--no-guess` option. The function name will then have to match the lambda function without the namespace. Example:
|
29
|
+
|
30
|
+
jets call controller --no-guess
|
31
|
+
|
32
|
+
If you want to call a function which runs too long time, you can set `read_timeout`.
|
33
|
+
|
34
|
+
jets call some_long_job-index --read_timeout 900
|
35
|
+
|
36
|
+
And you can set `retry_limit`. If you don't want to retry you can set 0.
|
37
|
+
|
38
|
+
jets call some_long_job-index --retry_limit 0
|
39
|
+
|
40
|
+
## Local mode
|
41
|
+
|
42
|
+
Instead of calling AWS lambda remote, you can also have `jets call` use the code directly on your machine. To enable this, use the `--local` flag. Example:
|
43
|
+
|
44
|
+
jets call hard_job-drive --local
|
45
|
+
|
46
|
+
## Logs
|
47
|
+
|
48
|
+
The `jets call` command can also print out the last 4KB of the lambda logs with the `--show-logs` option. The logging output is directed to stderr and the response output from the lambda function itself is directed to stdout so you can safely pipe the results of the call command to other tools like `jq`.
|
@@ -5,7 +5,7 @@ This builds the project and deploys it AWS Lambda. The deployment is mainly hand
|
|
5
5
|
## Example
|
6
6
|
|
7
7
|
$ jets deploy
|
8
|
-
Deploying
|
8
|
+
Deploying stack demo-dev ...
|
9
9
|
=> Compling assets in current project directory
|
10
10
|
=> Copying current project directory to temporary build area: /tmp/jets/demo/app_root
|
11
11
|
=> Tidying project: removing ignored files to reduce package size.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Show logs from Lambda function CloudWatch log group.
|
2
|
+
|
3
|
+
This defaults to the controller Lambda function in the `one_lambda_for_all_controllers` mode. Example:
|
4
|
+
|
5
|
+
❯ jets logs
|
6
|
+
Showing logs for /aws/lambda/demo-dev-controller
|
7
|
+
|
8
|
+
If you want to follow the logs use the `-f` flag.
|
9
|
+
|
10
|
+
❯ jets logs
|
11
|
+
Tailing logs for /aws/lambda/demo-dev-controller
|
12
|
+
|
13
|
+
If you want to see the production logs:
|
14
|
+
|
15
|
+
❯ JETS_ENV=production jets logs -f
|
16
|
+
Tailing logs for /aws/lambda/demo-prod-controller
|
17
|
+
|
18
|
+
If you want to see logs for a job, specify the job and method.
|
19
|
+
|
20
|
+
❯ jets logs -f -n hard_job-dig
|
21
|
+
Tailing logs for /aws/lambda/demo-dev-hard_job-dig
|
@@ -1,10 +1,9 @@
|
|
1
1
|
## Examples
|
2
2
|
|
3
3
|
$ jets new demo
|
4
|
-
|
5
|
-
create
|
6
|
-
create
|
7
|
-
create demo/app/jobs/application_job.rb
|
4
|
+
create app/controllers/application_controller.rb
|
5
|
+
create app/helpers/application_helper.rb
|
6
|
+
create app/jobs/application_job.rb
|
8
7
|
...
|
9
8
|
================================================================
|
10
9
|
Congrats You have successfully created a Jets project.
|
@@ -0,0 +1,37 @@
|
|
1
|
+
## Examples
|
2
|
+
|
3
|
+
$ jets releases
|
4
|
+
Releases for stack: demo-dev
|
5
|
+
+---------+-----------------+--------------+---------+
|
6
|
+
| Version | Status | Released At | Message |
|
7
|
+
+---------+-----------------+--------------+---------+
|
8
|
+
| 27 | UPDATE_COMPLETE | 10 hours ago | Deploy |
|
9
|
+
| 26 | UPDATE_COMPLETE | 11 hours ago | Deploy |
|
10
|
+
| 25 | UPDATE_COMPLETE | 11 hours ago | Deploy |
|
11
|
+
| 24 | UPDATE_COMPLETE | 11 hours ago | Deploy |
|
12
|
+
| 23 | DELETE_COMPLETE | 14 hours ago | Deleted |
|
13
|
+
| 22 | UPDATE_COMPLETE | 14 hours ago | Deploy |
|
14
|
+
| 21 | UPDATE_COMPLETE | 14 hours ago | Deploy |
|
15
|
+
| 20 | UPDATE_COMPLETE | 14 hours ago | Deploy |
|
16
|
+
| 19 | DELETE_COMPLETE | 14 hours ago | Deleted |
|
17
|
+
| 18 | UPDATE_COMPLETE | 14 hours ago | Deploy |
|
18
|
+
| 17 | UPDATE_COMPLETE | 17 hours ago | Deploy |
|
19
|
+
| 16 | UPDATE_COMPLETE | 18 hours ago | Deploy |
|
20
|
+
| 15 | UPDATE_COMPLETE | 18 hours ago | Deploy |
|
21
|
+
| 14 | DELETE_COMPLETE | 18 hours ago | Deleted |
|
22
|
+
| 13 | UPDATE_COMPLETE | 19 hours ago | Deploy |
|
23
|
+
| 12 | UPDATE_COMPLETE | 19 hours ago | Deploy |
|
24
|
+
| 11 | UPDATE_COMPLETE | 19 hours ago | Deploy |
|
25
|
+
| 10 | DELETE_COMPLETE | 19 hours ago | Deleted |
|
26
|
+
| 9 | UPDATE_COMPLETE | 21 hours ago | Deploy |
|
27
|
+
| 8 | UPDATE_COMPLETE | 21 hours ago | Deploy |
|
28
|
+
| 7 | DELETE_COMPLETE | 21 hours ago | Deleted |
|
29
|
+
| 6 | UPDATE_COMPLETE | 21 hours ago | Deploy |
|
30
|
+
| 5 | DELETE_COMPLETE | 22 hours ago | Deleted |
|
31
|
+
| 4 | UPDATE_COMPLETE | 22 hours ago | Deploy |
|
32
|
+
| 3 | UPDATE_COMPLETE | 22 hours ago | Deploy |
|
33
|
+
+---------+-----------------+--------------+---------+
|
34
|
+
|
35
|
+
The shown releases are paginated. If you need to see more releases you can use the `--page` option.
|
36
|
+
|
37
|
+
$ jets releases --page 2
|
@@ -0,0 +1,15 @@
|
|
1
|
+
## Example
|
2
|
+
|
3
|
+
$ jets routes
|
4
|
+
+-------------------+--------+--------------------+--------------------+
|
5
|
+
| As (Prefix) | Verb | Path (URI Pattern) | Controller#action |
|
6
|
+
+-------------------+--------+--------------------+--------------------+
|
7
|
+
| posts | GET | /posts | posts#index |
|
8
|
+
| posts | POST | /posts | posts#create |
|
9
|
+
| new_post | GET | /posts/new | posts#new |
|
10
|
+
| edit_post | GET | /posts/:id/edit | posts#edit |
|
11
|
+
| post | GET | /posts/:id | posts#show |
|
12
|
+
| post | PUT | /posts/:id | posts#update |
|
13
|
+
| post | PATCH | /posts/:id | posts#update |
|
14
|
+
| post | DELETE | /posts/:id | posts#destroy |
|
15
|
+
+-------------------+--------+--------------------+--------------------+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
## Examples
|
2
|
+
|
3
|
+
$ jets runner 'puts "hi"'
|
4
|
+
hi
|
5
|
+
$ jets runner 'puts Jets.env'
|
6
|
+
development
|
7
|
+
|
8
|
+
Using a script in a file. Let's say you have a script:
|
9
|
+
|
10
|
+
script.rb:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
puts "hello world: #{Jets.env}"
|
14
|
+
```
|
15
|
+
|
16
|
+
$ jets runner file://script.rb
|
17
|
+
hello world: development
|
18
|
+
|
19
|
+
|
20
|
+
Optionally pass in an argument on the command line:
|
21
|
+
|
22
|
+
Usage: jets runner file|Ruby code [args]
|
23
|
+
|
24
|
+
The argument will be assigned to the `args` variable.
|
25
|
+
|
26
|
+
Example:
|
27
|
+
|
28
|
+
$ jets runner 'puts "hello world with args: #{args}"' 123
|
29
|
+
hello world with args: 123
|
30
|
+
|
31
|
+
|
32
|
+
Example with script.rb:
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
puts "hello world with args: #{args}"
|
36
|
+
```
|
37
|
+
|
38
|
+
$ jets runner file://script.rb 123
|
39
|
+
hello world with args: 123
|
40
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Jets::Command
|
2
|
+
class Help
|
3
|
+
class << self
|
4
|
+
def text(namespaced_command)
|
5
|
+
file = namespaced_command.to_s.gsub(':','/')
|
6
|
+
path = File.expand_path("../help/#{file}.md", __FILE__)
|
7
|
+
return IO.read(path) if File.exist?(path)
|
8
|
+
|
9
|
+
# Also look up for a help folder within the current command folder
|
10
|
+
called_from = caller.first.split(':').first
|
11
|
+
unnamespaced_command = namespaced_command.to_s.split(':').last
|
12
|
+
path = File.expand_path("../help/#{unnamespaced_command}.md", called_from)
|
13
|
+
return IO.read(path) if File.exist?(path)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/encrypted_file"
|
4
|
+
|
5
|
+
module Jets
|
6
|
+
module Command
|
7
|
+
module Helpers
|
8
|
+
module Editor
|
9
|
+
private
|
10
|
+
def ensure_editor_available(command:)
|
11
|
+
if ENV["EDITOR"].to_s.empty?
|
12
|
+
say "No $EDITOR to open file in. Assign one like this:"
|
13
|
+
say ""
|
14
|
+
say %(EDITOR="mate --wait" #{command})
|
15
|
+
say ""
|
16
|
+
say "For editors that fork and exit immediately, it's important to pass a wait flag,"
|
17
|
+
say "otherwise the credentials will be saved immediately with no chance to edit."
|
18
|
+
|
19
|
+
false
|
20
|
+
else
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def catch_editing_exceptions
|
26
|
+
yield
|
27
|
+
rescue Interrupt
|
28
|
+
say "Aborted changing file: nothing saved."
|
29
|
+
rescue ActiveSupport::EncryptedFile::MissingKeyError => error
|
30
|
+
say error.message
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|