jets 3.1.0 → 5.0.10

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.
Files changed (650) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +190 -1
  5. data/CONTRIBUTING.md +1 -1
  6. data/Gemfile +1 -5
  7. data/LICENSE.txt +1 -1
  8. data/README.md +28 -50
  9. data/Rakefile +3 -3
  10. data/backers.md +0 -5
  11. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  12. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  13. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  14. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  16. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  17. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  18. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  19. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  20. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  21. data/engines/internal/app/jobs/jets/preheat_job.rb +68 -0
  22. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  23. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  24. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  25. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  26. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  27. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  28. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  29. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  30. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  31. data/engines/internal/lib/internal/actionview.rb +152 -0
  32. data/engines/internal/lib/internal/activerecord.rb +37 -0
  33. data/engines/internal/lib/internal/activesupport.rb +47 -0
  34. data/engines/internal/lib/internal/engine.rb +13 -0
  35. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  36. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  37. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  39. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  40. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  41. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  42. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  43. data/exe/jets +1 -10
  44. data/jets.gemspec +17 -13
  45. data/lib/jets/app_loader.rb +77 -0
  46. data/lib/jets/application/bootstrap.rb +100 -0
  47. data/lib/jets/application/configuration/defaults.rb +256 -0
  48. data/lib/jets/application/configuration.rb +494 -0
  49. data/lib/jets/application/default_middleware_stack.rb +140 -0
  50. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  51. data/lib/jets/application/finisher.rb +266 -0
  52. data/lib/jets/application/routes_reloader.rb +80 -0
  53. data/lib/jets/application.rb +515 -199
  54. data/lib/jets/authorizer/base.rb +1 -0
  55. data/lib/jets/authorizer/dsl.rb +15 -11
  56. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  57. data/lib/jets/autoloaders/gem.rb +70 -0
  58. data/lib/jets/autoloaders/inflector.rb +21 -0
  59. data/lib/jets/autoloaders.rb +38 -101
  60. data/lib/jets/aws_info.rb +2 -2
  61. data/lib/jets/aws_services/stack_status.rb +2 -2
  62. data/lib/jets/aws_services.rb +8 -0
  63. data/lib/jets/backtrace_cleaner.rb +27 -0
  64. data/lib/jets/booter.rb +30 -118
  65. data/lib/jets/builders/code_builder.rb +67 -125
  66. data/lib/jets/builders/code_size.rb +1 -0
  67. data/lib/jets/builders/gem_replacer.rb +6 -12
  68. data/lib/jets/builders/handler_generator.rb +43 -15
  69. data/lib/jets/builders/lambda_layer.rb +2 -7
  70. data/lib/jets/builders/purger.rb +1 -1
  71. data/lib/jets/builders/rack_packager.rb +1 -1
  72. data/lib/jets/builders/ruby_packager.rb +54 -10
  73. data/lib/jets/builders/shim_vars/app.rb +10 -6
  74. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  75. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  76. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  77. data/lib/jets/bundle.rb +2 -9
  78. data/lib/jets/cfn/base.rb +82 -0
  79. data/lib/jets/cfn/builder/api/base.rb +12 -0
  80. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  81. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  82. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  83. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  84. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  85. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  86. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  87. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  88. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  89. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  90. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  91. data/lib/jets/cfn/builder/controller.rb +28 -0
  92. data/lib/jets/cfn/builder/function.rb +9 -0
  93. data/lib/jets/cfn/builder/interface.rb +146 -0
  94. data/lib/jets/cfn/builder/job.rb +10 -0
  95. data/lib/jets/cfn/builder/nested.rb +130 -0
  96. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  97. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  98. data/lib/jets/cfn/builder/parent.rb +149 -0
  99. data/lib/jets/cfn/builder/post_process.rb +25 -0
  100. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  101. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  102. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  103. data/lib/jets/{commands/build.rb → cfn/builder.rb} +58 -80
  104. data/lib/jets/cfn/deployment.rb +85 -0
  105. data/lib/jets/cfn/download.rb +39 -0
  106. data/lib/jets/cfn/params/api/base.rb +39 -0
  107. data/lib/jets/cfn/params/api/cors.rb +10 -0
  108. data/lib/jets/cfn/params/api/methods.rb +69 -0
  109. data/lib/jets/cfn/params/api/resources.rb +28 -0
  110. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +4 -4
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  112. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  114. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  118. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  120. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +4 -4
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  129. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  133. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  134. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  135. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  136. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  137. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  138. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  139. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  140. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  141. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  142. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  143. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  144. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  145. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  146. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  147. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  148. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  149. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  150. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  151. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  152. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  153. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  154. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  155. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  156. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  157. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  158. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  159. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  160. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  162. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  163. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  164. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  165. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  166. data/lib/jets/cfn/resource/one/function.rb +66 -0
  167. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  168. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  169. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  170. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  171. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  172. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  173. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  174. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  175. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  176. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  177. data/lib/jets/cfn/resource.rb +8 -0
  178. data/lib/jets/cfn/ship.rb +33 -29
  179. data/lib/jets/cfn/status.rb +46 -3
  180. data/lib/jets/cfn/template.rb +89 -0
  181. data/lib/jets/cfn/upload.rb +29 -23
  182. data/lib/jets/cli.rb +28 -203
  183. data/lib/jets/command/actions.rb +49 -0
  184. data/lib/jets/command/api_helpers.rb +42 -0
  185. data/lib/jets/command/aws_helpers.rb +26 -0
  186. data/lib/jets/command/base.rb +209 -0
  187. data/lib/jets/command/behavior.rb +83 -0
  188. data/lib/jets/command/environment_argument.rb +42 -0
  189. data/lib/jets/command/help/call.md +48 -0
  190. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  191. data/lib/jets/command/help/gems/check.md +1 -0
  192. data/lib/jets/command/help/logs.md +21 -0
  193. data/lib/jets/{commands → command}/help/new.md +3 -4
  194. data/lib/jets/command/help/projects.md +6 -0
  195. data/lib/jets/command/help/releases.md +19 -0
  196. data/lib/jets/command/help/rollback.md +5 -0
  197. data/lib/jets/command/help/routes.md +15 -0
  198. data/lib/jets/command/help/runner.md +40 -0
  199. data/lib/jets/command/help/stacks.md +6 -0
  200. data/lib/jets/command/help.rb +17 -0
  201. data/lib/jets/command/helpers/editor.rb +35 -0
  202. data/lib/jets/command/rake_decorate.rb +38 -0
  203. data/lib/jets/command.rb +142 -0
  204. data/lib/jets/commands/application/application_command.rb +46 -0
  205. data/lib/jets/commands/build/build_command.rb +33 -0
  206. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  207. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  208. data/lib/jets/commands/call/base_guesser.rb +5 -5
  209. data/lib/jets/commands/call/call_command.rb +27 -0
  210. data/lib/jets/commands/call/caller.rb +184 -0
  211. data/lib/jets/commands/call/guesser.rb +1 -1
  212. data/lib/jets/commands/clean/base.rb +1 -1
  213. data/lib/jets/commands/clean/build.rb +1 -1
  214. data/lib/jets/commands/clean/clean_command.rb +15 -0
  215. data/lib/jets/commands/clean/log.rb +4 -4
  216. data/lib/jets/commands/configure/configure_command.rb +9 -0
  217. data/lib/jets/commands/console/console_command.rb +38 -0
  218. data/lib/jets/commands/credentials/USAGE +103 -0
  219. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  220. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  221. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  222. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  223. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  224. data/lib/jets/commands/delete/delete_command.rb +154 -0
  225. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +34 -53
  226. data/lib/jets/commands/dev/dev_command.rb +19 -0
  227. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  228. data/lib/jets/commands/encrypted/USAGE +46 -0
  229. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  230. data/lib/jets/commands/gems/gems_command.rb +14 -0
  231. data/lib/jets/commands/generate/generate_command.rb +95 -0
  232. data/lib/jets/commands/help/USAGE +20 -0
  233. data/lib/jets/commands/help/help_command.rb +15 -0
  234. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  235. data/lib/jets/commands/logs/logs_command.rb +45 -0
  236. data/lib/jets/commands/new/new_command.rb +19 -0
  237. data/lib/jets/commands/notes/notes_command.rb +30 -0
  238. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  239. data/lib/jets/commands/projects/projects_command.rb +30 -0
  240. data/lib/jets/commands/rake/rake_command.rb +59 -0
  241. data/lib/jets/commands/releases/releases_command.rb +124 -0
  242. data/lib/jets/commands/rollback/rollback_command.rb +33 -0
  243. data/lib/jets/commands/routes/routes_command.rb +19 -0
  244. data/lib/jets/commands/runner/runner_command.rb +60 -0
  245. data/lib/jets/commands/server/server_command.rb +291 -0
  246. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  247. data/lib/jets/commands/status/status_command.rb +16 -0
  248. data/lib/jets/commands/url/url_command.rb +92 -0
  249. data/lib/jets/commands/version/version_command.rb +11 -0
  250. data/lib/jets/commands.rb +17 -0
  251. data/lib/jets/configuration.rb +166 -0
  252. data/lib/jets/controller/base.rb +105 -183
  253. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  254. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  255. data/lib/jets/controller/compat/caching.rb +13 -0
  256. data/lib/jets/controller/compat/future.rb +13 -0
  257. data/lib/jets/controller/compat/route_set.rb +47 -0
  258. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  259. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  260. data/lib/jets/controller/decorate/logging.rb +90 -0
  261. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  262. data/lib/jets/controller/decorate/url_for.rb +10 -0
  263. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  264. data/lib/jets/controller/handler.rb +41 -0
  265. data/lib/jets/controller/middleware/main.rb +16 -8
  266. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  267. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  268. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  269. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  270. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  271. data/lib/jets/controller/request/compat/params.rb +144 -0
  272. data/lib/jets/controller/request/compat/request.rb +125 -0
  273. data/lib/jets/controller/request.rb +35 -18
  274. data/lib/jets/controller/response/compat/response.rb +67 -0
  275. data/lib/jets/controller/response.rb +91 -8
  276. data/lib/jets/core.rb +159 -52
  277. data/lib/jets/core_ext/file.rb +9 -0
  278. data/lib/jets/core_ext/kernel.rb +2 -2
  279. data/lib/jets/core_ext/symbol.rb +5 -0
  280. data/lib/jets/core_ext.rb +4 -0
  281. data/lib/jets/dev_caching.rb +44 -0
  282. data/lib/jets/dotenv/ssm.rb +6 -3
  283. data/lib/jets/dotenv.rb +4 -3
  284. data/lib/jets/engine/configuration.rb +96 -0
  285. data/lib/jets/engine/turbines.rb +23 -0
  286. data/lib/jets/engine.rb +380 -0
  287. data/lib/jets/erb.rb +1 -1
  288. data/lib/jets/exception_reporting.rb +43 -0
  289. data/lib/jets/generators/job/job_generator.rb +41 -0
  290. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  291. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  292. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  293. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  294. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  295. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  296. data/lib/jets/generators/job/templates/event_types/scheduled.rb.tt +8 -0
  297. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +11 -0
  298. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +11 -0
  299. data/lib/jets/generators/overrides/app/USAGE +38 -0
  300. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  301. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  302. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  303. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  304. data/lib/jets/generators/overrides/app/templates/.jetsignore +6 -0
  305. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +28 -0
  306. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  307. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  308. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  309. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  311. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  312. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  313. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  314. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  315. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  316. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +21 -0
  317. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  318. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  319. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  320. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  322. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  323. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  324. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  325. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  326. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  327. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  328. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  329. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  330. data/lib/jets/generators.rb +112 -0
  331. data/lib/jets/inflections.rb +1 -1
  332. data/lib/jets/info.rb +116 -0
  333. data/lib/jets/initializable.rb +95 -0
  334. data/lib/jets/job/base.rb +11 -8
  335. data/lib/jets/job/dsl/dynamodb_event.rb +25 -14
  336. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  337. data/lib/jets/job/dsl/iot_event.rb +6 -6
  338. data/lib/jets/job/dsl/kinesis_event.rb +10 -9
  339. data/lib/jets/job/dsl/log_event.rb +2 -2
  340. data/lib/jets/job/dsl/rule_event.rb +7 -4
  341. data/lib/jets/job/dsl/s3_event.rb +5 -5
  342. data/lib/jets/job/dsl/sns_event.rb +6 -6
  343. data/lib/jets/job/dsl/sqs_event.rb +15 -14
  344. data/lib/jets/job/helpers/{kinesis_event_helper.rb → kinesis_event.rb} +5 -1
  345. data/lib/jets/job/helpers/{log_event_helper.rb → log_event.rb} +5 -1
  346. data/lib/jets/job/helpers/s3_event.rb +50 -0
  347. data/lib/jets/job/helpers/sns_event.rb +26 -0
  348. data/lib/jets/job/helpers/sqs_event.rb +26 -0
  349. data/lib/jets/klass.rb +5 -6
  350. data/lib/jets/lambda/definition.rb +118 -0
  351. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  352. data/lib/jets/lambda/dsl.rb +70 -53
  353. data/lib/jets/lambda/function.rb +3 -3
  354. data/lib/jets/lambda/function_constructor.rb +6 -6
  355. data/lib/jets/lambda/functions.rb +36 -1
  356. data/lib/jets/mega/hash_converter.rb +2 -2
  357. data/lib/jets/mega/request/source.rb +1 -2
  358. data/lib/jets/mega/request.rb +4 -4
  359. data/lib/jets/names.rb +79 -0
  360. data/lib/jets/overrides/dummy/rails.rb +11 -0
  361. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  362. data/lib/jets/overrides/puma.rb +10 -0
  363. data/lib/jets/paths.rb +243 -0
  364. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  365. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  366. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  367. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  368. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  369. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  370. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  371. data/lib/jets/preheat.rb +26 -33
  372. data/lib/jets/processors/deducer.rb +2 -2
  373. data/lib/jets/processors/main_processor.rb +6 -13
  374. data/lib/jets/rack/logger.rb +77 -0
  375. data/lib/jets/router/compat/route_set.rb +177 -0
  376. data/lib/jets/router/dsl/mount.rb +40 -6
  377. data/lib/jets/router/dsl.rb +125 -105
  378. data/lib/jets/router/engine_mount.rb +36 -0
  379. data/lib/jets/router/help.rb +130 -0
  380. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  381. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  382. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  383. data/lib/jets/router/matcher.rb +140 -17
  384. data/lib/jets/router/resources/options.rb +6 -4
  385. data/lib/jets/router/route/after_initialize.rb +64 -0
  386. data/lib/jets/router/route/as.rb +93 -0
  387. data/lib/jets/router/route/authorizer.rb +1 -0
  388. data/lib/jets/router/route/compat.rb +45 -0
  389. data/lib/jets/router/route/info.rb +74 -0
  390. data/lib/jets/router/route/node.rb +137 -0
  391. data/lib/jets/router/route/path.rb +93 -0
  392. data/lib/jets/router/route.rb +109 -90
  393. data/lib/jets/router/route_set.rb +214 -0
  394. data/lib/jets/router/scope.rb +204 -69
  395. data/lib/jets/router/state.rb +67 -0
  396. data/lib/jets/router/util.rb +1 -31
  397. data/lib/jets/router.rb +64 -150
  398. data/lib/jets/ruby_version_check.rb +15 -0
  399. data/lib/jets/rule/base.rb +1 -0
  400. data/lib/jets/rule/dsl.rb +7 -7
  401. data/lib/jets/secrets.rb +110 -0
  402. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  403. data/lib/jets/spec_helpers/controllers.rb +32 -24
  404. data/lib/jets/spec_helpers.rb +0 -6
  405. data/lib/jets/stack/builder.rb +3 -2
  406. data/lib/jets/stack/definition.rb +1 -4
  407. data/lib/jets/stack/function.rb +4 -2
  408. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  409. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  410. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  411. data/lib/jets/stack/main/dsl/sqs.rb +1 -1
  412. data/lib/jets/stack/output/lookup.rb +6 -2
  413. data/lib/jets/stack/output.rb +2 -2
  414. data/lib/jets/stack/parameter.rb +2 -2
  415. data/lib/jets/stack/resource.rb +3 -3
  416. data/lib/jets/stack/s3_event.rb +51 -37
  417. data/lib/jets/stack.rb +1 -1
  418. data/lib/jets/tasks/engine.rake +85 -0
  419. data/lib/jets/tasks/framework.rake +66 -0
  420. data/lib/jets/tasks/log.rake +41 -0
  421. data/lib/jets/tasks/middleware.rake +9 -0
  422. data/lib/jets/tasks/misc.rake +81 -0
  423. data/lib/jets/tasks/statistics.rake +37 -0
  424. data/lib/jets/tasks/tmp.rake +51 -0
  425. data/lib/jets/tasks/yarn.rake +29 -0
  426. data/lib/jets/tasks/zeitwerk.rake +61 -0
  427. data/lib/jets/tasks.rb +18 -0
  428. data/lib/jets/tmp_loader.rb +1 -1
  429. data/lib/jets/turbine/configurable.rb +36 -0
  430. data/lib/jets/turbine/configuration.rb +101 -0
  431. data/lib/jets/turbine.rb +164 -20
  432. data/lib/jets/util/camelize.rb +24 -0
  433. data/lib/jets/util/yamler.rb +18 -0
  434. data/lib/jets/version.rb +1 -1
  435. data/lib/jets.rb +9 -14
  436. metadata +462 -349
  437. data/.python-version +0 -1
  438. data/.ruby-version +0 -1
  439. data/bin/release +0 -9
  440. data/lib/jets/application/defaults.rb +0 -200
  441. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  442. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  443. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  444. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  445. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  446. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  447. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  448. data/lib/jets/cfn/builders/interface.rb +0 -133
  449. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  450. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  451. data/lib/jets/cfn/built_template.rb +0 -15
  452. data/lib/jets/cfn/template_source.rb +0 -61
  453. data/lib/jets/commands/base.rb +0 -145
  454. data/lib/jets/commands/call.rb +0 -182
  455. data/lib/jets/commands/clean.rb +0 -19
  456. data/lib/jets/commands/configure.rb +0 -51
  457. data/lib/jets/commands/console.rb +0 -12
  458. data/lib/jets/commands/db/environment-task.rake +0 -3
  459. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  460. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  461. data/lib/jets/commands/db/tasks.rb +0 -34
  462. data/lib/jets/commands/db.rb +0 -13
  463. data/lib/jets/commands/dbconsole.rb +0 -134
  464. data/lib/jets/commands/delete.rb +0 -136
  465. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  466. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  467. data/lib/jets/commands/dynamodb.rb +0 -19
  468. data/lib/jets/commands/gems.rb +0 -13
  469. data/lib/jets/commands/help/call.md +0 -69
  470. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  471. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  472. data/lib/jets/commands/help/gems/check.md +0 -6
  473. data/lib/jets/commands/help/routes.md +0 -16
  474. data/lib/jets/commands/help/runner.md +0 -17
  475. data/lib/jets/commands/help.rb +0 -9
  476. data/lib/jets/commands/import/base.rb +0 -49
  477. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  478. data/lib/jets/commands/import/rack.rb +0 -16
  479. data/lib/jets/commands/import/rails.rb +0 -74
  480. data/lib/jets/commands/import/sequence.rb +0 -90
  481. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  482. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  483. data/lib/jets/commands/import.rb +0 -12
  484. data/lib/jets/commands/main.rb +0 -166
  485. data/lib/jets/commands/markdown/creator.rb +0 -58
  486. data/lib/jets/commands/markdown/index.rb +0 -27
  487. data/lib/jets/commands/markdown/page.rb +0 -125
  488. data/lib/jets/commands/markdown/shell.rb +0 -11
  489. data/lib/jets/commands/new.rb +0 -173
  490. data/lib/jets/commands/rake_command.rb +0 -61
  491. data/lib/jets/commands/rake_tasks.rb +0 -50
  492. data/lib/jets/commands/runner.rb +0 -16
  493. data/lib/jets/commands/sequence.rb +0 -105
  494. data/lib/jets/commands/stack_info.rb +0 -30
  495. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  496. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  497. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  498. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  499. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  500. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  501. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  502. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  503. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  504. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  505. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  506. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  507. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  508. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  509. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  510. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  511. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  512. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  513. data/lib/jets/commands/upgrade/version1.rb +0 -136
  514. data/lib/jets/commands/upgrade.rb +0 -105
  515. data/lib/jets/commands/url.rb +0 -69
  516. data/lib/jets/commands/webpacker_template.rb +0 -18
  517. data/lib/jets/controller/callbacks.rb +0 -73
  518. data/lib/jets/controller/cookies/jar.rb +0 -269
  519. data/lib/jets/controller/cookies.rb +0 -38
  520. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  521. data/lib/jets/controller/error.rb +0 -4
  522. data/lib/jets/controller/forgery_protection.rb +0 -43
  523. data/lib/jets/controller/layout.rb +0 -17
  524. data/lib/jets/controller/middleware/cors.rb +0 -60
  525. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  526. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  527. data/lib/jets/controller/middleware/reloader.rb +0 -15
  528. data/lib/jets/controller/parameters_filter.rb +0 -29
  529. data/lib/jets/controller/params.rb +0 -117
  530. data/lib/jets/controller/redirection.rb +0 -61
  531. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  532. data/lib/jets/controller/rendering.rb +0 -96
  533. data/lib/jets/controller/stage.rb +0 -34
  534. data/lib/jets/controller.rb +0 -3
  535. data/lib/jets/db.rb +0 -15
  536. data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +0 -8
  537. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  538. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  539. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  540. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  541. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  542. data/lib/jets/generator.rb +0 -112
  543. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  544. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  545. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  546. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  547. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  548. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  549. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  550. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  551. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  552. data/lib/jets/job/helpers/s3_event_helper.rb +0 -13
  553. data/lib/jets/lambda/task.rb +0 -111
  554. data/lib/jets/logger.rb +0 -21
  555. data/lib/jets/middleware/configurator.rb +0 -84
  556. data/lib/jets/middleware/default_stack.rb +0 -53
  557. data/lib/jets/middleware/layer.rb +0 -34
  558. data/lib/jets/middleware/stack.rb +0 -77
  559. data/lib/jets/middleware.rb +0 -33
  560. data/lib/jets/naming.rb +0 -63
  561. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  562. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  563. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  564. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  565. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  566. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  567. data/lib/jets/overrides/rails.rb +0 -6
  568. data/lib/jets/rack_server.rb +0 -86
  569. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  570. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  571. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  572. data/lib/jets/resource/api_gateway/method.rb +0 -102
  573. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  574. data/lib/jets/resource/base.rb +0 -28
  575. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  576. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  577. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  578. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  579. data/lib/jets/resource/child_stack/base.rb +0 -24
  580. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  581. data/lib/jets/resource/lambda/function.rb +0 -221
  582. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  583. data/lib/jets/resource/permission.rb +0 -45
  584. data/lib/jets/resource.rb +0 -71
  585. data/lib/jets/router/error.rb +0 -4
  586. data/lib/jets/router/finder.rb +0 -47
  587. data/lib/jets/router/helpers/core_helper.rb +0 -27
  588. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  589. data/lib/jets/router/helpers.rb +0 -4
  590. data/lib/jets/router/method_creator/code.rb +0 -99
  591. data/lib/jets/router/method_creator/edit.rb +0 -12
  592. data/lib/jets/router/method_creator/generic.rb +0 -11
  593. data/lib/jets/router/method_creator/index.rb +0 -48
  594. data/lib/jets/router/method_creator/new.rb +0 -12
  595. data/lib/jets/router/method_creator/root.rb +0 -15
  596. data/lib/jets/router/method_creator/show.rb +0 -12
  597. data/lib/jets/router/method_creator.rb +0 -50
  598. data/lib/jets/turbo/database_yaml.rb +0 -41
  599. data/lib/jets/turbo/project/.gitignore +0 -12
  600. data/lib/jets/turbo/project/.jetskeep +0 -1
  601. data/lib/jets/turbo/project/Gemfile +0 -16
  602. data/lib/jets/turbo/project/Rakefile +0 -2
  603. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  604. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  605. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  606. data/lib/jets/turbo/project/config/application.rb +0 -5
  607. data/lib/jets/turbo/project/config/routes.rb +0 -4
  608. data/lib/jets/turbo/project/config.ru +0 -5
  609. data/lib/jets/turbo/rails.rb +0 -127
  610. data/lib/jets/turbo/templates/config/database.yml +0 -30
  611. data/lib/jets/turbo.rb +0 -56
  612. data/readme/prerelease.md +0 -6
  613. data/readme/testing.md +0 -60
  614. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  615. /data/lib/jets/{commands → command}/help/build.md +0 -0
  616. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  617. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  618. /data/lib/jets/{commands → command}/help/console.md +0 -0
  619. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  620. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  621. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  622. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  623. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  624. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  625. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  626. /data/lib/jets/{commands → command}/help/server.md +0 -0
  627. /data/lib/jets/{commands → command}/help/status.md +0 -0
  628. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  629. /data/lib/jets/{commands → command}/help/url.md +0 -0
  630. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  633. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  634. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  635. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  636. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  637. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  638. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  639. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  640. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  641. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  642. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  643. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  644. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  645. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  646. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  647. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  648. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  649. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  650. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,184 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support/core_ext/string/filters"
4
+ require "active_support/deprecation"
5
+
6
+ module Jets
7
+ class DBConsole
8
+ def self.start(*args)
9
+ new(*args).start
10
+ end
11
+
12
+ def initialize(options = {})
13
+ @options = options
14
+ end
15
+
16
+ def start
17
+ ENV["JETS_ENV"] ||= @options[:environment] || environment
18
+ config = db_config.configuration_hash
19
+
20
+ case db_config.adapter
21
+ when /^(jdbc)?mysql/
22
+ args = {
23
+ host: "--host",
24
+ port: "--port",
25
+ socket: "--socket",
26
+ username: "--user",
27
+ encoding: "--default-character-set",
28
+ sslca: "--ssl-ca",
29
+ sslcert: "--ssl-cert",
30
+ sslcapath: "--ssl-capath",
31
+ sslcipher: "--ssl-cipher",
32
+ sslkey: "--ssl-key"
33
+ }.filter_map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }
34
+
35
+ if config[:password] && @options[:include_password]
36
+ args << "--password=#{config[:password]}"
37
+ elsif config[:password] && !config[:password].to_s.empty?
38
+ args << "-p"
39
+ end
40
+
41
+ args << db_config.database
42
+
43
+ find_cmd_and_exec(["mysql", "mysql5"], *args)
44
+
45
+ when /^postgres|^postgis/
46
+ ENV["PGUSER"] = config[:username] if config[:username]
47
+ ENV["PGHOST"] = config[:host] if config[:host]
48
+ ENV["PGPORT"] = config[:port].to_s if config[:port]
49
+ ENV["PGPASSWORD"] = config[:password].to_s if config[:password] && @options[:include_password]
50
+ ENV["PGSSLMODE"] = config[:sslmode].to_s if config[:sslmode]
51
+ ENV["PGSSLCERT"] = config[:sslcert].to_s if config[:sslcert]
52
+ ENV["PGSSLKEY"] = config[:sslkey].to_s if config[:sslkey]
53
+ ENV["PGSSLROOTCERT"] = config[:sslrootcert].to_s if config[:sslrootcert]
54
+ find_cmd_and_exec("psql", db_config.database)
55
+
56
+ when "sqlite3"
57
+ args = []
58
+
59
+ args << "-#{@options[:mode]}" if @options[:mode]
60
+ args << "-header" if @options[:header]
61
+ args << File.expand_path(db_config.database, Jets.respond_to?(:root) ? Jets.root : nil)
62
+
63
+ find_cmd_and_exec("sqlite3", *args)
64
+
65
+ when "oracle", "oracle_enhanced"
66
+ logon = ""
67
+
68
+ if config[:username]
69
+ logon = config[:username].dup
70
+ logon << "/#{config[:password]}" if config[:password] && @options[:include_password]
71
+ logon << "@#{db_config.database}" if db_config.database
72
+ end
73
+
74
+ find_cmd_and_exec("sqlplus", logon)
75
+
76
+ when "sqlserver"
77
+ args = []
78
+
79
+ args += ["-d", "#{db_config.database}"] if db_config.database
80
+ args += ["-U", "#{config[:username]}"] if config[:username]
81
+ args += ["-P", "#{config[:password]}"] if config[:password]
82
+
83
+ if config[:host]
84
+ host_arg = +"tcp:#{config[:host]}"
85
+ host_arg << ",#{config[:port]}" if config[:port]
86
+ args += ["-S", host_arg]
87
+ end
88
+
89
+ find_cmd_and_exec("sqlcmd", *args)
90
+
91
+ else
92
+ abort "Unknown command-line client for #{db_config.database}."
93
+ end
94
+ end
95
+
96
+ def db_config
97
+ return @db_config if defined?(@db_config)
98
+
99
+ # If the user provided a database, use that. Otherwise find
100
+ # the first config in the database.yml
101
+ if database
102
+ @db_config = configurations.configs_for(env_name: environment, name: database, include_hidden: true)
103
+ else
104
+ @db_config = configurations.find_db_config(environment)
105
+ end
106
+
107
+ unless @db_config
108
+ missing_db = database ? "'#{database}' database is not" : "No databases are"
109
+ raise ActiveRecord::AdapterNotSpecified,
110
+ "#{missing_db} configured for '#{environment}'. Available configuration: #{configurations.inspect}"
111
+ end
112
+
113
+ @db_config
114
+ end
115
+
116
+ def environment
117
+ Jets.respond_to?(:env) ? Jets.env : Jets::Command.environment
118
+ end
119
+
120
+ def database
121
+ @options[:database]
122
+ end
123
+
124
+ private
125
+ def configurations # :doc:
126
+ # require APP_PATH
127
+ ActiveRecord::Base.configurations = Jets.application.config.database_configuration
128
+ ActiveRecord::Base.configurations
129
+ end
130
+
131
+ def find_cmd_and_exec(commands, *args) # :doc:
132
+ commands = Array(commands)
133
+
134
+ dirs_on_path = ENV["PATH"].to_s.split(File::PATH_SEPARATOR)
135
+ unless (ext = RbConfig::CONFIG["EXEEXT"]).empty?
136
+ commands = commands.map { |cmd| "#{cmd}#{ext}" }
137
+ end
138
+
139
+ full_path_command = nil
140
+ found = commands.detect do |cmd|
141
+ dirs_on_path.detect do |path|
142
+ full_path_command = File.join(path, cmd)
143
+ begin
144
+ stat = File.stat(full_path_command)
145
+ rescue SystemCallError
146
+ else
147
+ stat.file? && stat.executable?
148
+ end
149
+ end
150
+ end
151
+
152
+ if found
153
+ exec full_path_command, *args
154
+ else
155
+ abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
156
+ end
157
+ end
158
+ end
159
+
160
+ module Command
161
+ class DbconsoleCommand < Base # :nodoc:
162
+ include EnvironmentArgument
163
+
164
+ class_option :include_password, aliases: "-p", type: :boolean,
165
+ desc: "Automatically provide the password from database.yml"
166
+
167
+ class_option :mode, enum: %w( html list line column ), type: :string,
168
+ desc: "Automatically put the sqlite3 database in the specified mode (html, list, line, column)."
169
+
170
+ class_option :header, type: :boolean
171
+
172
+ class_option :database, aliases: "--db", type: :string,
173
+ desc: "Specifies the database to use."
174
+
175
+ desc "dbconsole", "Starts DB REPL console"
176
+ long_desc Help.text(:dbconsole)
177
+ def perform
178
+ extract_environment_option_from_argument
179
+ require_application_and_environment!
180
+ Jets::DBConsole.start(options)
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jets/generators"
4
+ require "jets/commands/generate/generate_command"
5
+
6
+ module Jets
7
+ module Command
8
+ class DegenerateCommand < GenerateCommand # :nodoc:
9
+ desc "Degenerate", "Opposite of generate. Removes the generated code."
10
+ long_desc Help.text(:degenerate)
11
+ def perform(*)
12
+ super
13
+ end
14
+
15
+ private
16
+ def behavior
17
+ :revoke
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,154 @@
1
+ module Jets::Command
2
+ class DeleteCommand < Base # :nodoc:
3
+ desc "delete", "Delete the Jets project and all its resources"
4
+ long_desc Help.text(:delete)
5
+ option :yes, aliases: %w[y], type: :boolean, desc: "Skip are you sure prompt."
6
+ option :wait, type: :boolean, default: true, desc: "Wait for stack deletion to complete."
7
+ def perform
8
+ Delete.new(options).run
9
+ end
10
+ end
11
+
12
+ class Delete
13
+ include Jets::AwsServices
14
+ include AwsHelpers
15
+
16
+ def initialize(options={})
17
+ @options = options
18
+ end
19
+
20
+ def run
21
+ puts("Deleting project...")
22
+ return if @options[:noop]
23
+
24
+ are_you_sure?
25
+ confirm_project_exists
26
+
27
+ # Must first remove all objects from s3 bucket in order to delete stack
28
+ puts "First, deleting objects in s3 bucket #{s3_bucket_name}" if s3_bucket_name
29
+ empty_s3_bucket
30
+
31
+ stack_in_progress?(parent_stack_name)
32
+
33
+ cfn.delete_stack(stack_name: parent_stack_name)
34
+ puts "Deleting #{Jets.project_namespace.color(:green)}..."
35
+
36
+ stack = find_stack(parent_stack_name)
37
+ if @options[:wait]
38
+ wait_for_stack
39
+ end
40
+ Jets::Cfn::Deployment.new(stack_name: stack.stack_id).delete
41
+
42
+ delete_logs
43
+ puts "Project #{Jets.project_namespace.color(:green)} deleted!"
44
+ end
45
+
46
+ def wait_for_stack
47
+ status = Jets::Cfn::Status.new
48
+ start_time = Time.now
49
+ status.wait
50
+ took = Time.now - start_time
51
+ puts "Time took for deletion: #{status.pretty_time(took).color(:green)}."
52
+ end
53
+
54
+ def delete_logs
55
+ puts "Deleting CloudWatch logs"
56
+ log = Jets::Commands::Clean::Log.new(mute: true, yes: true)
57
+ log.clean
58
+ end
59
+
60
+ def confirm_project_exists
61
+ stack = find_stack(parent_stack_name)
62
+ return if stack
63
+ puts "ERROR: Stack #{parent_stack_name} does not exist".color(:red)
64
+ exit 1
65
+ end
66
+
67
+ def empty_s3_bucket
68
+ return unless s3_bucket_name # Happens when minimal stack fails to build
69
+ return unless bucket_exists?(s3_bucket_name)
70
+
71
+ resp = s3.list_objects(bucket: s3_bucket_name)
72
+ if resp.contents.size > 0
73
+ # IE: objects = [{key: "objectkey1"}, {key: "objectkey2"}]
74
+ objects = resp.contents.map { |item| {key: item.key} }
75
+ s3.delete_objects(
76
+ bucket: s3_bucket_name,
77
+ delete: {
78
+ objects: objects,
79
+ quiet: false,
80
+ }
81
+ )
82
+ empty_s3_bucket # keep deleting objects until bucket is empty
83
+ end
84
+ end
85
+
86
+ def s3_bucket_name
87
+ return @s3_bucket_name if defined?(@s3_bucket_name)
88
+
89
+ resp = cfn.describe_stacks(stack_name: parent_stack_name)
90
+ outputs = resp.stacks[0].outputs
91
+ if outputs.empty?
92
+ @s3_bucket_name = false
93
+ else
94
+ @s3_bucket_name = outputs.find {|o| o.output_key == 'S3Bucket'}.output_value
95
+ end
96
+ end
97
+
98
+ # Thanks: https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/s3-example-does-bucket-exist.html
99
+ def bucket_exists?(bucket_name)
100
+ bucket_exists = false
101
+ begin
102
+ resp = s3.head_bucket(bucket: bucket_name, use_accelerate_endpoint: false)
103
+ bucket_exists = true
104
+ rescue
105
+ end
106
+ bucket_exists
107
+ end
108
+
109
+ def parent_stack_name
110
+ Jets::Names.parent_stack_name
111
+ end
112
+
113
+ def are_you_sure?
114
+ if @options[:yes]
115
+ sure = 'y'
116
+ else
117
+ puts "Are you sure you want to want to delete the #{Jets.project_namespace.color(:green)} project? (y/N)"
118
+ sure = $stdin.gets
119
+ end
120
+
121
+ unless sure =~ /^y/
122
+ puts "Phew! Jets #{Jets.project_namespace.color(:green)} project was not deleted."
123
+ exit 0
124
+ end
125
+ end
126
+
127
+ # All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
128
+ #
129
+ # Returns resp so we can use it to grab data about the stack without calling api again.
130
+ def check_deleteable_status
131
+ return true if !stack_exists?(@parent_stack_name)
132
+
133
+ # Assumes stack exists
134
+ resp = cfn.describe_stacks(stack_name: @parent_stack_name)
135
+ status = resp.stacks[0].stack_status
136
+
137
+ return true if status == 'ROLLBACK_COMPLETE'
138
+
139
+ if status =~ /_IN_PROGRESS$/
140
+ puts "The '#{@parent_stack_name}' stack status is #{status}. " \
141
+ "It is not in an updateable status. Please wait until the stack is ready and try again.".color(:red)
142
+ exit 0
143
+ elsif resp.stacks[0].outputs.empty?
144
+ # This Happens when the miminal stack fails at the very beginning.
145
+ # There is no s3 bucket at all. User should delete the stack.
146
+ puts "The minimal stack failed to create. Please delete the stack first and try again. " \
147
+ "You can delete the CloudFormation stack or use the `jets delete` command"
148
+ exit 0
149
+ else
150
+ true
151
+ end
152
+ end
153
+ end
154
+ end
@@ -1,43 +1,41 @@
1
- require "aws-sdk-core"
2
-
3
- module Jets::Commands
4
- class Deploy
5
- extend Memoist
6
- include StackInfo
7
- def initialize(options)
8
- @options = options
9
- end
10
-
11
- def run
12
- deployment_env = Jets.config.project_namespace.color(:green)
13
- puts "Deploying to Lambda #{deployment_env} environment..."
1
+ module Jets::Command
2
+ class DeployCommand < Base # :nodoc:
3
+ include EnvironmentArgument
4
+
5
+ desc "deploy", "Builds and deploys project to AWS Lambda"
6
+ long_desc Help.text(:deploy)
7
+ option :message, aliases: :m, desc: "Custom message to use for the deployment message"
8
+ def perform
9
+ extract_environment_option_from_argument
10
+ require_application_and_environment!
11
+
12
+ stack = Jets.project_namespace.color(:green)
13
+ puts "Deploying stack #{stack} ..."
14
14
  return if @options[:noop]
15
15
 
16
16
  check_dev_mode
17
17
  validate_routes!
18
18
 
19
- # deploy full nested stack when stack already exists
20
19
  # Delete existing rollback stack from previous bad minimal deploy
21
20
  delete_minimal_stack if minimal_rollback_complete?
22
21
  exit_unless_updateable! # Stack could be in a weird rollback state or in progress state
23
22
 
24
23
  if first_run?
25
24
  ship(stack_type: :minimal)
26
- Jets.application.reload_configs!
27
25
  end
28
26
 
29
- # Build code after the minimal stack because need s3 bucket for assets
30
- # on_aws? and s3_base_url logic
27
+ # Build code after the minimal stack because need s3 bucket for assets on_aws? and s3_base_url logic
31
28
  # TODO: possible deploy hook point: before_build
32
- build_code
29
+ Jets::Builders::CodeBuilder.new.build
33
30
 
34
31
  # TODO: possible deploy hook point: before_ship
35
32
  create_s3_event_buckets
36
- ship(stack_type: :full, s3_bucket: s3_bucket)
33
+ ship(stack_type: :full, s3_bucket: Jets.s3_bucket)
37
34
  end
38
35
 
36
+ private
39
37
  def create_s3_event_buckets
40
- buckets = Jets::Job::Base.s3_events.keys
38
+ buckets = Jets::Job::Base._s3_events.keys
41
39
  buckets.each do |bucket|
42
40
  Jets::AwsServices::S3Bucket.ensure_exists(bucket)
43
41
  end
@@ -46,42 +44,37 @@ module Jets::Commands
46
44
  def delete_minimal_stack
47
45
  puts "Existing stack is in ROLLBACK_COMPLETE state from a previous failed minimal deploy. Deleting stack and continuing."
48
46
  cfn.delete_stack(stack_name: stack_name)
49
- status.wait
50
- status.reset
47
+ cfn_status.wait
48
+ cfn_status.reset
51
49
  end
52
50
 
53
51
  def check_dev_mode
54
- if File.exist?("#{Jets.root}/dev.mode")
52
+ if File.exist?("#{Jets.root}/dev.mode") && !ENV['JETS_SKIP_DEV_MODE_CHECK']
55
53
  puts "The dev.mode file exists. Please removed it and run bundle update before you deploy.".color(:red)
56
54
  exit 1
57
55
  end
58
56
  end
59
57
 
60
- def build_code
61
- Jets::Commands::Build.new(@options).build_code
62
- end
63
-
64
58
  def validate_routes!
65
59
  valid = Jets::Router.validate_routes!
66
- unless valid
67
- puts "Deploy fail: The jets application contain invalid routes.".color(:red)
68
- exit 1
69
- end
60
+ return if valid
61
+
62
+ puts "Deploy fail: The jets application contain invalid routes.".color(:red)
63
+ exit 1
70
64
  end
71
65
 
72
66
  def ship(stack_options)
73
- options = @options.merge(stack_options) # includes stack_type and s3_bucket
74
- Jets::Commands::Build.new(options).build_templates
67
+ options = @options.merge(stack_options) # includes stack_type
68
+ Jets::Cfn::Builder.new(options).build
75
69
  Jets::Cfn::Ship.new(options).run
76
70
  end
77
71
 
78
- def status
79
- Jets::Cfn::Status.new(stack_name)
72
+ def cfn_status
73
+ @cfn_status ||= Jets::Cfn::Status.new(stack_name)
80
74
  end
81
- memoize :status
82
75
 
83
76
  def stack_name
84
- Jets::Naming.parent_stack_name
77
+ Jets::Names.parent_stack_name
85
78
  end
86
79
 
87
80
  # Checks for a few things before deciding to delete the parent stack
@@ -101,37 +94,25 @@ module Jets::Commands
101
94
  resource_statuses == ['DELETE_COMPLETE']
102
95
  end
103
96
 
104
- def find_stack(stack_name)
105
- resp = cfn.describe_stacks(stack_name: stack_name)
106
- resp.stacks.first
107
- rescue Aws::CloudFormation::Errors::ValidationError => e
108
- # example: Stack with id demo-dev does not exist
109
- if e.message =~ /Stack with/ && e.message =~ /does not exist/
110
- nil
111
- else
112
- raise
113
- end
114
- end
115
-
116
97
  # All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
117
98
  def exit_unless_updateable!
118
99
  return if ENV['JETS_FORCE_UPDATEABLE'] # useful for debugging if stack stack updating
119
100
 
120
- stack_name = Jets::Naming.parent_stack_name
101
+ stack_name = Jets::Names.parent_stack_name
121
102
  exists = stack_exists?(stack_name)
122
103
  return unless exists # continue because stack could be updating
123
104
 
124
105
  stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
125
106
  status = stack["stack_status"]
126
107
  if status =~ /^ROLLBACK_/ ||
127
- status =~ /_IN_PROGRESS$/
108
+ status =~ /_IN_PROGRESS$/
128
109
  region = `aws configure get region`.strip rescue "us-east-1"
129
110
  url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
130
- puts "The parent stack of the #{Jets.config.project_name.color(:green)} project is not in an updateable state."
111
+ puts "The parent stack of the #{Jets.project_name.color(:green)} project is not in an updateable state."
131
112
  puts "Stack name #{stack_name.color(:yellow)} status #{stack["stack_status"].color(:yellow)}"
132
113
  puts "Here's the CloudFormation url to check for more details #{url}"
133
114
  exit 1
134
115
  end
135
116
  end
136
- end
117
+ end
137
118
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "jets/dev_caching"
4
+
5
+ module Jets
6
+ module Command
7
+ class DevCommand < Base # :nodoc:
8
+ no_commands do
9
+ def help
10
+ say "jets dev:cache # Toggle development mode caching on/off."
11
+ end
12
+ end
13
+
14
+ def cache
15
+ Jets::DevCaching.enable_by_file
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,5 +1,5 @@
1
- module Jets::Commands
2
- class Dotenv < Jets::Commands::Base
1
+ module Jets::Command
2
+ class DotenvCommand < Base # :nodoc:
3
3
  desc "show", "Shows evaulated dotenv values"
4
4
  long_desc Help.text('dotenv:show')
5
5
  def show
@@ -0,0 +1,46 @@
1
+ ## Storing Encrypted Files in Source Control
2
+
3
+ The Jets `encrypted` commands provide access to encrypted files or configurations.
4
+ See the `Jets.application.encrypted` documentation for using them in your app.
5
+
6
+ This is a more generalized concept of `jets credentials`.
7
+
8
+ ## Encryption Keys
9
+
10
+ By default, Jets looks for the encryption key in `config/master.key` or
11
+ `ENV["JETS_MASTER_KEY"]`, but that lookup can be overridden with `--key`:
12
+
13
+ jets encrypted:edit config/encrypted_file.yml.enc --key config/encrypted_file.key
14
+
15
+ Don't commit the key! Add it to your source control's ignore file. If you use
16
+ Git, Jets handles this for you.
17
+
18
+ ## Editing Files
19
+
20
+ To edit or create an encrypted file use:
21
+
22
+ jets encrypted:edit config/encrypted_file.yml.enc
23
+
24
+ This opens a temporary file in `$EDITOR` with the decrypted contents for editing.
25
+
26
+ ## Viewing Files
27
+
28
+ To print the decrypted contents of an encrypted file use:
29
+
30
+ jets encrypted:show config/encrypted_file.yml.enc
31
+
32
+ ## Access in App
33
+
34
+ Let's say you have encrypted like so:
35
+
36
+ ❯ jets encrypted:show config/encrypted_file.yml.enc
37
+ cloud:
38
+ foo: bar
39
+
40
+ You can access them in the app like so:
41
+
42
+ $ jets console
43
+ > file = ActiveSupport::EncryptedFile.new(content_path: "./config/encrypted_file.yml.enc", key_path: "./config/master.key", env_key: Jets.env, raise_if_missing_key: true)
44
+ > YAML.load(file.read)
45
+ => {"cloud"=>{"foo"=>"bar"}}
46
+ >
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "pathname"
4
+ require "active_support"
5
+ require "jets/command/helpers/editor"
6
+
7
+ module Jets
8
+ module Command
9
+ class EncryptedCommand < Jets::Command::Base # :nodoc:
10
+ include Helpers::Editor
11
+
12
+ class_option :key, aliases: "-k", type: :string,
13
+ default: "config/master.key", desc: "The Jets.root relative path to the encryption key"
14
+
15
+ no_commands do
16
+ def help
17
+ say "Usage:\n #{self.class.banner}"
18
+ say ""
19
+ say self.class.desc
20
+ end
21
+ end
22
+
23
+ def edit(file_path)
24
+ require_application!
25
+ encrypted = Jets.application.encrypted(file_path, key_path: options[:key])
26
+
27
+ ensure_editor_available(command: "bin/jets encrypted:edit") || (return)
28
+ ensure_encryption_key_has_been_added(options[:key]) if encrypted.key.nil?
29
+ ensure_encrypted_file_has_been_added(file_path, options[:key])
30
+
31
+ catch_editing_exceptions do
32
+ change_encrypted_file_in_system_editor(file_path, options[:key])
33
+ end
34
+
35
+ say "File encrypted and saved."
36
+ rescue ActiveSupport::MessageEncryptor::InvalidMessage
37
+ say "Couldn't decrypt #{file_path}. Perhaps you passed the wrong key?"
38
+ end
39
+
40
+ def show(file_path)
41
+ require_application!
42
+ encrypted = Jets.application.encrypted(file_path, key_path: options[:key])
43
+
44
+ say encrypted.read.presence || missing_encrypted_message(key: encrypted.key, key_path: options[:key], file_path: file_path)
45
+ end
46
+
47
+ private
48
+ def ensure_encryption_key_has_been_added(key_path)
49
+ encryption_key_file_generator.add_key_file(key_path)
50
+ encryption_key_file_generator.ignore_key_file(key_path)
51
+ end
52
+
53
+ def ensure_encrypted_file_has_been_added(file_path, key_path)
54
+ encrypted_file_generator.add_encrypted_file_silently(file_path, key_path)
55
+ end
56
+
57
+ def change_encrypted_file_in_system_editor(file_path, key_path)
58
+ Jets.application.encrypted(file_path, key_path: key_path).change do |tmp_path|
59
+ system("#{ENV["EDITOR"]} #{tmp_path}")
60
+ end
61
+ end
62
+
63
+
64
+ def encryption_key_file_generator
65
+ require "rails/generators"
66
+ require "rails/generators/rails/encryption_key_file/encryption_key_file_generator"
67
+
68
+ Rails::Generators::EncryptionKeyFileGenerator.new
69
+ end
70
+
71
+ def encrypted_file_generator
72
+ require "rails/generators"
73
+ require "rails/generators/rails/encrypted_file/encrypted_file_generator"
74
+
75
+ Rails::Generators::EncryptedFileGenerator.new
76
+ end
77
+
78
+ def missing_encrypted_message(key:, key_path:, file_path:)
79
+ if key.nil?
80
+ "Missing '#{key_path}' to decrypt data. See `bin/jets encrypted:help`"
81
+ else
82
+ "File '#{file_path}' does not exist. Use `bin/jets encrypted:edit #{file_path}` to change that."
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end