jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /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,155 @@
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
+ if @options[:wait]
37
+ stack = find_stack(parent_stack_name)
38
+ wait_for_stack
39
+ Jets::Cfn::Deployment.new(stack_name: stack.stack_id, message: "Deleted").create
40
+ end
41
+
42
+ delete_logs
43
+
44
+ puts "Project #{Jets.project_namespace.color(:green)} deleted!"
45
+ end
46
+
47
+ def wait_for_stack
48
+ status = Jets::Cfn::Status.new(@options)
49
+ start_time = Time.now
50
+ status.wait
51
+ took = Time.now - start_time
52
+ puts "Time took for deletion: #{status.pretty_time(took).color(:green)}."
53
+ end
54
+
55
+ def delete_logs
56
+ puts "Deleting CloudWatch logs"
57
+ log = Jets::Commands::Clean::Log.new(mute: true, yes: true)
58
+ log.clean
59
+ end
60
+
61
+ def confirm_project_exists
62
+ stack = find_stack(parent_stack_name)
63
+ return if stack
64
+ puts "ERROR: Project #{parent_stack_name} does not exist".color(:red)
65
+ exit 1
66
+ end
67
+
68
+ def empty_s3_bucket
69
+ return unless s3_bucket_name # Happens when minimal stack fails to build
70
+ return unless bucket_exists?(s3_bucket_name)
71
+
72
+ resp = s3.list_objects(bucket: s3_bucket_name)
73
+ if resp.contents.size > 0
74
+ # IE: objects = [{key: "objectkey1"}, {key: "objectkey2"}]
75
+ objects = resp.contents.map { |item| {key: item.key} }
76
+ s3.delete_objects(
77
+ bucket: s3_bucket_name,
78
+ delete: {
79
+ objects: objects,
80
+ quiet: false,
81
+ }
82
+ )
83
+ empty_s3_bucket # keep deleting objects until bucket is empty
84
+ end
85
+ end
86
+
87
+ def s3_bucket_name
88
+ return @s3_bucket_name if defined?(@s3_bucket_name)
89
+
90
+ resp = cfn.describe_stacks(stack_name: parent_stack_name)
91
+ outputs = resp.stacks[0].outputs
92
+ if outputs.empty?
93
+ @s3_bucket_name = false
94
+ else
95
+ @s3_bucket_name = outputs.find {|o| o.output_key == 'S3Bucket'}.output_value
96
+ end
97
+ end
98
+
99
+ # Thanks: https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/s3-example-does-bucket-exist.html
100
+ def bucket_exists?(bucket_name)
101
+ bucket_exists = false
102
+ begin
103
+ resp = s3.head_bucket(bucket: bucket_name, use_accelerate_endpoint: false)
104
+ bucket_exists = true
105
+ rescue
106
+ end
107
+ bucket_exists
108
+ end
109
+
110
+ def parent_stack_name
111
+ Jets::Names.parent_stack_name
112
+ end
113
+
114
+ def are_you_sure?
115
+ if @options[:yes]
116
+ sure = 'y'
117
+ else
118
+ puts "Are you sure you want to want to delete the #{Jets.project_namespace.color(:green)} project? (y/N)"
119
+ sure = $stdin.gets
120
+ end
121
+
122
+ unless sure =~ /^y/
123
+ puts "Phew! Jets #{Jets.project_namespace.color(:green)} project was not deleted."
124
+ exit 0
125
+ end
126
+ end
127
+
128
+ # All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
129
+ #
130
+ # Returns resp so we can use it to grab data about the stack without calling api again.
131
+ def check_deleteable_status
132
+ return true if !stack_exists?(@parent_stack_name)
133
+
134
+ # Assumes stack exists
135
+ resp = cfn.describe_stacks(stack_name: @parent_stack_name)
136
+ status = resp.stacks[0].stack_status
137
+
138
+ return true if status == 'ROLLBACK_COMPLETE'
139
+
140
+ if status =~ /_IN_PROGRESS$/
141
+ puts "The '#{@parent_stack_name}' stack status is #{status}. " \
142
+ "It is not in an updateable status. Please wait until the stack is ready and try again.".color(:red)
143
+ exit 0
144
+ elsif resp.stacks[0].outputs.empty?
145
+ # This Happens when the miminal stack fails at the very beginning.
146
+ # There is no s3 bucket at all. User should delete the stack.
147
+ puts "The minimal stack failed to create. Please delete the stack first and try again. " \
148
+ "You can delete the CloudFormation stack or use the `jets delete` command"
149
+ exit 0
150
+ else
151
+ true
152
+ end
153
+ end
154
+ end
155
+ end
@@ -1,41 +1,39 @@
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
38
  buckets = Jets::Job::Base.s3_events.keys
41
39
  buckets.each do |bucket|
@@ -51,34 +49,29 @@ module Jets::Commands
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
72
  def status
79
- Jets::Cfn::Status.new(stack_name)
73
+ @status ||= Jets::Cfn::Status.new(stack_name)
80
74
  end
81
- memoize :status
82
75
 
83
76
  def stack_name
84
77
  Jets::Names.parent_stack_name
@@ -101,18 +94,6 @@ 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
@@ -124,14 +105,14 @@ module Jets::Commands
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
@@ -0,0 +1,14 @@
1
+ module Jets::Command
2
+ class GemsCommand < Base
3
+ desc "check", "Check if precompiled Lambda gems are available"
4
+ long_desc Help.text("gems:check")
5
+ option :verbose, type: :boolean, desc: "Verbose mode"
6
+ def check
7
+ Jets.boot
8
+ check = Jets::Api::Gems::Check.new(@options)
9
+ check.run! # exits early if missing gems found
10
+ # If reach here, means all gems are ok.
11
+ puts "Congrats! All gems are available in as precompiled Lambda gems 👍"
12
+ end
13
+ end
14
+ end