jets 4.0.10 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +53 -0
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/README.md +20 -36
  7. data/Rakefile +3 -3
  8. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  9. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  10. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  11. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  13. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  14. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  15. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  17. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  18. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  19. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  20. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  21. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  22. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  23. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  24. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  25. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  26. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  27. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  28. data/engines/internal/lib/internal/actionview.rb +152 -0
  29. data/engines/internal/lib/internal/activerecord.rb +37 -0
  30. data/engines/internal/lib/internal/activesupport.rb +47 -0
  31. data/engines/internal/lib/internal/engine.rb +13 -0
  32. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  33. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  34. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  36. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  37. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  38. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  39. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  40. data/exe/jets +1 -10
  41. data/jets.gemspec +14 -11
  42. data/lib/jets/app_loader.rb +77 -0
  43. data/lib/jets/application/bootstrap.rb +100 -0
  44. data/lib/jets/application/configuration/defaults.rb +256 -0
  45. data/lib/jets/application/configuration.rb +494 -0
  46. data/lib/jets/application/default_middleware_stack.rb +140 -0
  47. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  48. data/lib/jets/application/finisher.rb +266 -0
  49. data/lib/jets/application/routes_reloader.rb +80 -0
  50. data/lib/jets/application.rb +515 -198
  51. data/lib/jets/authorizer/base.rb +1 -0
  52. data/lib/jets/authorizer/dsl.rb +15 -11
  53. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  54. data/lib/jets/autoloaders/gem.rb +70 -0
  55. data/lib/jets/autoloaders/inflector.rb +21 -0
  56. data/lib/jets/autoloaders.rb +38 -101
  57. data/lib/jets/aws_services/stack_status.rb +1 -1
  58. data/lib/jets/backtrace_cleaner.rb +27 -0
  59. data/lib/jets/booter.rb +29 -176
  60. data/lib/jets/builders/code_builder.rb +45 -117
  61. data/lib/jets/builders/code_size.rb +1 -0
  62. data/lib/jets/builders/gem_replacer.rb +5 -6
  63. data/lib/jets/builders/handler_generator.rb +34 -14
  64. data/lib/jets/builders/lambda_layer.rb +2 -7
  65. data/lib/jets/builders/purger.rb +1 -1
  66. data/lib/jets/builders/rack_packager.rb +1 -1
  67. data/lib/jets/builders/ruby_packager.rb +17 -6
  68. data/lib/jets/builders/shim_vars/app.rb +10 -6
  69. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  70. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  71. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  72. data/lib/jets/bundle.rb +2 -9
  73. data/lib/jets/cfn/base.rb +82 -0
  74. data/lib/jets/cfn/builder/api/base.rb +12 -0
  75. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  76. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  77. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  78. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  79. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  80. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  81. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  82. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  83. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  84. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  85. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  86. data/lib/jets/cfn/builder/controller.rb +28 -0
  87. data/lib/jets/cfn/builder/function.rb +9 -0
  88. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  89. data/lib/jets/cfn/builder/job.rb +10 -0
  90. data/lib/jets/cfn/builder/nested.rb +130 -0
  91. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  92. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  93. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  94. data/lib/jets/cfn/builder/post_process.rb +25 -0
  95. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  96. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  97. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  98. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  99. data/lib/jets/cfn/deployment.rb +45 -0
  100. data/lib/jets/cfn/download.rb +39 -0
  101. data/lib/jets/cfn/params/api/base.rb +39 -0
  102. data/lib/jets/cfn/params/api/cors.rb +10 -0
  103. data/lib/jets/cfn/params/api/methods.rb +69 -0
  104. data/lib/jets/cfn/params/api/resources.rb +28 -0
  105. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  106. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  107. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  108. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  109. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  113. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  115. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +5 -3
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  124. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  129. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  131. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  132. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  133. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  134. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  135. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  137. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  138. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  139. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  140. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  141. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  142. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  143. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  144. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  145. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  146. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  147. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  148. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  149. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  150. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  151. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  152. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  153. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  154. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  155. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  157. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  158. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  159. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  161. data/lib/jets/cfn/resource/one/function.rb +66 -0
  162. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  163. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  164. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  165. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  166. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  167. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  168. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  169. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  170. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  171. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  172. data/lib/jets/cfn/resource.rb +8 -0
  173. data/lib/jets/cfn/ship.rb +20 -19
  174. data/lib/jets/cfn/template.rb +89 -0
  175. data/lib/jets/cfn/upload.rb +26 -23
  176. data/lib/jets/cli.rb +28 -210
  177. data/lib/jets/command/actions.rb +49 -0
  178. data/lib/jets/command/api_helpers.rb +41 -0
  179. data/lib/jets/command/aws_helpers.rb +26 -0
  180. data/lib/jets/command/base.rb +204 -0
  181. data/lib/jets/command/behavior.rb +83 -0
  182. data/lib/jets/command/environment_argument.rb +42 -0
  183. data/lib/jets/command/help/call.md +48 -0
  184. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  185. data/lib/jets/command/help/logs.md +21 -0
  186. data/lib/jets/{commands → command}/help/new.md +3 -4
  187. data/lib/jets/command/help/projects.md +6 -0
  188. data/lib/jets/command/help/releases.md +37 -0
  189. data/lib/jets/command/help/rollback.md +5 -0
  190. data/lib/jets/command/help/routes.md +15 -0
  191. data/lib/jets/command/help/stacks.md +6 -0
  192. data/lib/jets/command/help.rb +17 -0
  193. data/lib/jets/command/helpers/editor.rb +35 -0
  194. data/lib/jets/command.rb +133 -0
  195. data/lib/jets/commands/application/application_command.rb +40 -0
  196. data/lib/jets/commands/build/build_command.rb +33 -0
  197. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  198. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  199. data/lib/jets/commands/call/base_guesser.rb +4 -4
  200. data/lib/jets/commands/call/call_command.rb +27 -0
  201. data/lib/jets/commands/call/caller.rb +184 -0
  202. data/lib/jets/commands/call/guesser.rb +1 -1
  203. data/lib/jets/commands/clean/base.rb +1 -1
  204. data/lib/jets/commands/clean/build.rb +1 -1
  205. data/lib/jets/commands/clean/clean_command.rb +15 -0
  206. data/lib/jets/commands/clean/log.rb +1 -1
  207. data/lib/jets/commands/configure/configure_command.rb +9 -0
  208. data/lib/jets/commands/console/console_command.rb +38 -0
  209. data/lib/jets/commands/credentials/USAGE +103 -0
  210. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  211. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  212. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  213. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  214. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  215. data/lib/jets/commands/delete/delete_command.rb +155 -0
  216. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  217. data/lib/jets/commands/dev/dev_command.rb +19 -0
  218. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  219. data/lib/jets/commands/encrypted/USAGE +46 -0
  220. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  221. data/lib/jets/commands/gems/gems_command.rb +14 -0
  222. data/lib/jets/commands/generate/generate_command.rb +95 -0
  223. data/lib/jets/commands/help/USAGE +20 -0
  224. data/lib/jets/commands/help/help_command.rb +15 -0
  225. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  226. data/lib/jets/commands/logs/logs_command.rb +45 -0
  227. data/lib/jets/commands/new/new_command.rb +19 -0
  228. data/lib/jets/commands/notes/notes_command.rb +30 -0
  229. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  230. data/lib/jets/commands/projects/projects_command.rb +30 -0
  231. data/lib/jets/commands/rake/rake_command.rb +59 -0
  232. data/lib/jets/commands/releases/releases_command.rb +72 -0
  233. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  234. data/lib/jets/commands/routes/routes_command.rb +19 -0
  235. data/lib/jets/commands/runner/runner_command.rb +60 -0
  236. data/lib/jets/commands/server/server_command.rb +291 -0
  237. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  238. data/lib/jets/commands/status/status_command.rb +9 -0
  239. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  240. data/lib/jets/commands/version/version_command.rb +11 -0
  241. data/lib/jets/commands.rb +17 -0
  242. data/lib/jets/configuration.rb +166 -0
  243. data/lib/jets/controller/base.rb +105 -183
  244. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  245. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  246. data/lib/jets/controller/compat/caching.rb +13 -0
  247. data/lib/jets/controller/compat/future.rb +13 -0
  248. data/lib/jets/controller/compat/route_set.rb +47 -0
  249. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  250. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  251. data/lib/jets/controller/decorate/logging.rb +90 -0
  252. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  253. data/lib/jets/controller/decorate/url_for.rb +10 -0
  254. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  255. data/lib/jets/controller/handler.rb +41 -0
  256. data/lib/jets/controller/middleware/main.rb +16 -8
  257. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  258. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  259. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  260. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  261. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  262. data/lib/jets/controller/request/compat/params.rb +144 -0
  263. data/lib/jets/controller/request/compat/request.rb +125 -0
  264. data/lib/jets/controller/request.rb +35 -18
  265. data/lib/jets/controller/response/compat/response.rb +67 -0
  266. data/lib/jets/controller/response.rb +91 -8
  267. data/lib/jets/core.rb +142 -51
  268. data/lib/jets/core_ext/kernel.rb +2 -2
  269. data/lib/jets/core_ext/symbol.rb +5 -0
  270. data/lib/jets/core_ext.rb +4 -0
  271. data/lib/jets/dev_caching.rb +44 -0
  272. data/lib/jets/dotenv/ssm.rb +5 -2
  273. data/lib/jets/dotenv.rb +2 -1
  274. data/lib/jets/engine/configuration.rb +96 -0
  275. data/lib/jets/engine/turbines.rb +23 -0
  276. data/lib/jets/engine.rb +380 -0
  277. data/lib/jets/exception_reporting.rb +43 -0
  278. data/lib/jets/generators/job/job_generator.rb +41 -0
  279. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  281. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  283. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  284. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  285. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  286. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  287. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  288. data/lib/jets/generators/overrides/app/USAGE +38 -0
  289. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  290. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  291. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  292. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  293. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  294. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  295. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  296. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  297. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  298. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  299. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  300. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  301. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  302. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  303. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  304. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  305. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  307. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  308. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  310. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  312. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  313. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  314. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  315. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  316. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  317. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  318. data/lib/jets/generators.rb +112 -0
  319. data/lib/jets/info.rb +116 -0
  320. data/lib/jets/initializable.rb +95 -0
  321. data/lib/jets/job/base.rb +3 -2
  322. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  323. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  324. data/lib/jets/job/dsl/iot_event.rb +6 -6
  325. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  326. data/lib/jets/job/dsl/log_event.rb +2 -2
  327. data/lib/jets/job/dsl/rule_event.rb +7 -4
  328. data/lib/jets/job/dsl/s3_event.rb +1 -1
  329. data/lib/jets/job/dsl/sns_event.rb +6 -6
  330. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  331. data/lib/jets/klass.rb +5 -6
  332. data/lib/jets/lambda/definition.rb +118 -0
  333. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  334. data/lib/jets/lambda/dsl.rb +64 -53
  335. data/lib/jets/lambda/function.rb +3 -3
  336. data/lib/jets/lambda/function_constructor.rb +6 -6
  337. data/lib/jets/lambda/functions.rb +36 -1
  338. data/lib/jets/mega/request/source.rb +1 -2
  339. data/lib/jets/mega/request.rb +4 -4
  340. data/lib/jets/names.rb +31 -15
  341. data/lib/jets/overrides/dummy/rails.rb +11 -0
  342. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  343. data/lib/jets/overrides/puma.rb +10 -0
  344. data/lib/jets/paths.rb +243 -0
  345. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  346. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  347. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  349. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  350. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  351. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  352. data/lib/jets/preheat.rb +12 -25
  353. data/lib/jets/processors/deducer.rb +2 -2
  354. data/lib/jets/processors/main_processor.rb +6 -13
  355. data/lib/jets/rack/logger.rb +77 -0
  356. data/lib/jets/router/compat/route_set.rb +177 -0
  357. data/lib/jets/router/dsl/mount.rb +40 -6
  358. data/lib/jets/router/dsl.rb +125 -105
  359. data/lib/jets/router/engine_mount.rb +36 -0
  360. data/lib/jets/router/help.rb +130 -0
  361. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  362. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  363. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  364. data/lib/jets/router/matcher.rb +140 -17
  365. data/lib/jets/router/resources/options.rb +6 -4
  366. data/lib/jets/router/route/after_initialize.rb +64 -0
  367. data/lib/jets/router/route/as.rb +93 -0
  368. data/lib/jets/router/route/authorizer.rb +1 -0
  369. data/lib/jets/router/route/compat.rb +45 -0
  370. data/lib/jets/router/route/info.rb +74 -0
  371. data/lib/jets/router/route/node.rb +137 -0
  372. data/lib/jets/router/route/path.rb +93 -0
  373. data/lib/jets/router/route.rb +109 -106
  374. data/lib/jets/router/route_set.rb +214 -0
  375. data/lib/jets/router/scope.rb +204 -69
  376. data/lib/jets/router/state.rb +36 -16
  377. data/lib/jets/router/util.rb +1 -31
  378. data/lib/jets/router.rb +64 -162
  379. data/lib/jets/ruby_version_check.rb +15 -0
  380. data/lib/jets/rule/base.rb +1 -0
  381. data/lib/jets/rule/dsl.rb +7 -7
  382. data/lib/jets/secrets.rb +110 -0
  383. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  384. data/lib/jets/spec_helpers/controllers.rb +32 -24
  385. data/lib/jets/spec_helpers.rb +0 -6
  386. data/lib/jets/stack/builder.rb +3 -2
  387. data/lib/jets/stack/definition.rb +1 -4
  388. data/lib/jets/stack/function.rb +2 -2
  389. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  390. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  391. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  392. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  393. data/lib/jets/stack/output/lookup.rb +1 -1
  394. data/lib/jets/stack/output.rb +2 -2
  395. data/lib/jets/stack/parameter.rb +2 -2
  396. data/lib/jets/stack/resource.rb +3 -3
  397. data/lib/jets/stack/s3_event.rb +51 -37
  398. data/lib/jets/stack.rb +1 -1
  399. data/lib/jets/tasks/engine.rake +85 -0
  400. data/lib/jets/tasks/framework.rake +66 -0
  401. data/lib/jets/tasks/log.rake +41 -0
  402. data/lib/jets/tasks/middleware.rake +9 -0
  403. data/lib/jets/tasks/misc.rake +81 -0
  404. data/lib/jets/tasks/statistics.rake +37 -0
  405. data/lib/jets/tasks/tmp.rake +51 -0
  406. data/lib/jets/tasks/yarn.rake +29 -0
  407. data/lib/jets/tasks/zeitwerk.rake +61 -0
  408. data/lib/jets/tasks.rb +18 -0
  409. data/lib/jets/turbine/configurable.rb +36 -0
  410. data/lib/jets/turbine/configuration.rb +101 -0
  411. data/lib/jets/turbine.rb +164 -20
  412. data/lib/jets/util/camelize.rb +24 -0
  413. data/lib/jets/version.rb +1 -1
  414. data/lib/jets.rb +7 -15
  415. metadata +427 -336
  416. data/bin/release +0 -9
  417. data/lib/jets/application/defaults.rb +0 -230
  418. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  419. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  420. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  421. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  422. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  423. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  424. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  425. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  426. data/lib/jets/cfn/built_template.rb +0 -15
  427. data/lib/jets/cfn/template_source.rb +0 -61
  428. data/lib/jets/commands/base.rb +0 -145
  429. data/lib/jets/commands/call.rb +0 -184
  430. data/lib/jets/commands/clean.rb +0 -19
  431. data/lib/jets/commands/configure.rb +0 -51
  432. data/lib/jets/commands/console.rb +0 -18
  433. data/lib/jets/commands/db/environment-task.rake +0 -3
  434. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  435. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  436. data/lib/jets/commands/db/tasks.rb +0 -34
  437. data/lib/jets/commands/db.rb +0 -13
  438. data/lib/jets/commands/dbconsole.rb +0 -134
  439. data/lib/jets/commands/delete.rb +0 -136
  440. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  441. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  442. data/lib/jets/commands/dynamodb.rb +0 -19
  443. data/lib/jets/commands/gems.rb +0 -13
  444. data/lib/jets/commands/help/call.md +0 -69
  445. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  446. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  447. data/lib/jets/commands/help/routes.md +0 -16
  448. data/lib/jets/commands/help.rb +0 -9
  449. data/lib/jets/commands/import/base.rb +0 -49
  450. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  451. data/lib/jets/commands/import/rack.rb +0 -16
  452. data/lib/jets/commands/import/rails.rb +0 -74
  453. data/lib/jets/commands/import/sequence.rb +0 -90
  454. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  455. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  456. data/lib/jets/commands/import.rb +0 -12
  457. data/lib/jets/commands/main.rb +0 -169
  458. data/lib/jets/commands/markdown/creator.rb +0 -58
  459. data/lib/jets/commands/markdown/index.rb +0 -27
  460. data/lib/jets/commands/markdown/page.rb +0 -125
  461. data/lib/jets/commands/markdown/shell.rb +0 -11
  462. data/lib/jets/commands/new.rb +0 -173
  463. data/lib/jets/commands/rake_command.rb +0 -61
  464. data/lib/jets/commands/rake_tasks.rb +0 -50
  465. data/lib/jets/commands/runner.rb +0 -16
  466. data/lib/jets/commands/sequence.rb +0 -104
  467. data/lib/jets/commands/stack_info.rb +0 -30
  468. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  470. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  471. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  472. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  473. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  474. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  475. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  476. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  477. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  478. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  479. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  480. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  481. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  482. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  483. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  484. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  485. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  486. data/lib/jets/commands/upgrade/version1.rb +0 -136
  487. data/lib/jets/commands/upgrade.rb +0 -105
  488. data/lib/jets/commands/webpacker_template.rb +0 -18
  489. data/lib/jets/controller/callbacks.rb +0 -73
  490. data/lib/jets/controller/cookies/jar.rb +0 -269
  491. data/lib/jets/controller/cookies.rb +0 -38
  492. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  493. data/lib/jets/controller/error.rb +0 -4
  494. data/lib/jets/controller/forgery_protection.rb +0 -43
  495. data/lib/jets/controller/layout.rb +0 -17
  496. data/lib/jets/controller/middleware/cors.rb +0 -60
  497. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  498. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  499. data/lib/jets/controller/middleware/reloader.rb +0 -15
  500. data/lib/jets/controller/parameters_filter.rb +0 -29
  501. data/lib/jets/controller/params.rb +0 -117
  502. data/lib/jets/controller/redirection.rb +0 -61
  503. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  504. data/lib/jets/controller/rendering.rb +0 -96
  505. data/lib/jets/controller/stage.rb +0 -34
  506. data/lib/jets/controller.rb +0 -3
  507. data/lib/jets/db.rb +0 -15
  508. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  509. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  510. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  511. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  512. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  513. data/lib/jets/generator.rb +0 -112
  514. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  515. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  516. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  517. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -57
  518. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  519. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  520. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  521. data/lib/jets/lambda/task.rb +0 -111
  522. data/lib/jets/logger.rb +0 -21
  523. data/lib/jets/middleware/configurator.rb +0 -84
  524. data/lib/jets/middleware/default_stack.rb +0 -53
  525. data/lib/jets/middleware/layer.rb +0 -34
  526. data/lib/jets/middleware/stack.rb +0 -77
  527. data/lib/jets/middleware.rb +0 -33
  528. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  529. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  530. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  531. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  532. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  533. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  534. data/lib/jets/overrides/rails.rb +0 -6
  535. data/lib/jets/rack_server.rb +0 -86
  536. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  537. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  538. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  539. data/lib/jets/resource/api_gateway/method.rb +0 -102
  540. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  541. data/lib/jets/resource/base.rb +0 -28
  542. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  543. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  544. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  545. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  546. data/lib/jets/resource/child_stack/base.rb +0 -24
  547. data/lib/jets/resource/lambda/function.rb +0 -221
  548. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  549. data/lib/jets/resource/permission.rb +0 -45
  550. data/lib/jets/resource.rb +0 -71
  551. data/lib/jets/router/error.rb +0 -4
  552. data/lib/jets/router/finder.rb +0 -47
  553. data/lib/jets/router/helpers/core_helper.rb +0 -27
  554. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  555. data/lib/jets/router/helpers.rb +0 -4
  556. data/lib/jets/router/method_creator/code.rb +0 -99
  557. data/lib/jets/router/method_creator/edit.rb +0 -12
  558. data/lib/jets/router/method_creator/generic.rb +0 -11
  559. data/lib/jets/router/method_creator/index.rb +0 -48
  560. data/lib/jets/router/method_creator/new.rb +0 -12
  561. data/lib/jets/router/method_creator/root.rb +0 -15
  562. data/lib/jets/router/method_creator/show.rb +0 -12
  563. data/lib/jets/router/method_creator.rb +0 -50
  564. data/lib/jets/turbo/database_yaml.rb +0 -41
  565. data/lib/jets/turbo/project/.gitignore +0 -12
  566. data/lib/jets/turbo/project/.jetskeep +0 -1
  567. data/lib/jets/turbo/project/Gemfile +0 -16
  568. data/lib/jets/turbo/project/Rakefile +0 -2
  569. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  570. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  571. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  572. data/lib/jets/turbo/project/config/application.rb +0 -5
  573. data/lib/jets/turbo/project/config/routes.rb +0 -4
  574. data/lib/jets/turbo/project/config.ru +0 -5
  575. data/lib/jets/turbo/rails.rb +0 -127
  576. data/lib/jets/turbo/templates/config/database.yml +0 -30
  577. data/lib/jets/turbo.rb +0 -56
  578. data/readme/prerelease.md +0 -6
  579. data/readme/testing.md +0 -60
  580. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  581. /data/lib/jets/{commands → command}/help/build.md +0 -0
  582. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  583. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  584. /data/lib/jets/{commands → command}/help/console.md +0 -0
  585. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  587. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  588. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  589. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  590. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  591. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  592. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  593. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  594. /data/lib/jets/{commands → command}/help/server.md +0 -0
  595. /data/lib/jets/{commands → command}/help/status.md +0 -0
  596. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  597. /data/lib/jets/{commands → command}/help/url.md +0 -0
  598. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  599. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  600. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  601. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  602. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  610. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  611. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  617. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  618. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ module Command
5
+ class RakeCommand < Base # :nodoc:
6
+ extend Jets::Command::Actions
7
+
8
+ namespace "rake"
9
+
10
+ class << self
11
+ def printing_commands
12
+ formatted_rake_tasks.map(&:first)
13
+ end
14
+
15
+ def perform(task, args, config)
16
+ Jets.boot
17
+ require_rake
18
+ # Wonder if there's a better way to do this.
19
+ # We do not use the rask_task block to require dummy/rails
20
+ # because don't want Rails const to be defined for other rake tasks
21
+ # like jets:assets:precompile. We want the Rails const to be defined
22
+ # lazily at runtime only for db rake tasks.
23
+ require "jets/overrides/dummy/rails" if task.include?("db:")
24
+
25
+ Rake.with_application do |rake|
26
+ rake.init("jets", [task, *args])
27
+ rake.load_rakefile
28
+ if Jets.respond_to?(:root)
29
+ rake.options.suppress_backtrace_pattern = /\A(?!#{Regexp.quote(Jets.root.to_s)})/
30
+ end
31
+ rake.standard_exception_handling { rake.top_level }
32
+ end
33
+ end
34
+
35
+ private
36
+ def rake_tasks
37
+ require_rake
38
+
39
+ return @rake_tasks if defined?(@rake_tasks)
40
+
41
+ require_application!
42
+
43
+ Rake::TaskManager.record_task_metadata = true
44
+ Rake.application.instance_variable_set(:@name, "jets")
45
+ load_tasks
46
+ @rake_tasks = Rake.application.tasks.select(&:comment)
47
+ end
48
+
49
+ def formatted_rake_tasks
50
+ rake_tasks.map { |t| [ t.name_with_args, t.comment ] }
51
+ end
52
+
53
+ def require_rake
54
+ require "rake" # Defer booting Rake until we know it's needed.
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,72 @@
1
+ module Jets::Command
2
+ class ReleasesCommand < Base # :nodoc:
3
+ desc "history", "List releases"
4
+ long_desc Help.text(:history)
5
+ paging_options(order: 'desc').call
6
+ def perform
7
+ Release.new(options.merge(paging_params)).list
8
+ end
9
+ end
10
+
11
+ class Release
12
+ include Jets::Command::ApiHelpers
13
+ def initialize(options={})
14
+ @options = options
15
+ end
16
+
17
+ def list
18
+ no_token_exit!
19
+ resp = Jets::Api::Stack.retrieve(:current)
20
+ if resp["error"] == "not_found"
21
+ puts "No release history. Stack not found: #{Jets.project_namespace}"
22
+ # Return early and avoid calling Jets::Api::Release.list if stack not found
23
+ # Note: Jets::Api::Release.list also checks for no stack found
24
+ return
25
+ end
26
+
27
+ name = "#{resp['name']} #{resp['location']}"
28
+ resp = Jets::Api::Release.list(@options)
29
+ check_for_error_message!(resp) # can also return "Stack not found #{name}" message
30
+ data = resp["data"]
31
+ if data.empty?
32
+ $stderr.puts "No releases found for stack: #{name}"
33
+ else
34
+ $stderr.puts "Releases for stack: #{name}"
35
+ show_items(data)
36
+ end
37
+ rescue Jets::Api::RequestError => e
38
+ puts "ERROR: Unable to list history. #{e.class}: #{e.message}"
39
+ end
40
+
41
+ def show_items(items)
42
+ presenter = CliFormat::Presenter.new
43
+ presenter.header = ["Version", "Status", "Released At", "Message"]
44
+ items.each do |item|
45
+ version = item["version"]
46
+ status = item["stack_status"]
47
+ released_at = item["pretty_created_at"] || item["created_at"]
48
+ message = item["message"] || "Deployed"
49
+
50
+ row = [version, status, format_time(released_at), message]
51
+ presenter.rows << row
52
+ end
53
+ presenter.show
54
+ end
55
+
56
+ def format_time(string)
57
+ if string.include?("ago") # IE: 5 minutes ago
58
+ string
59
+ else
60
+ time = Time.parse(string)
61
+ time.in_time_zone(Time.zone)
62
+ end
63
+ end
64
+
65
+ def get(version)
66
+ resp = Jets::Api::Release.retrieve(version)
67
+ check_for_error_message!(resp)
68
+ rescue Jets::Api::RequestError => e
69
+ puts "ERROR: Unable to get history. #{e.class}: #{e.message}"
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,41 @@
1
+ require "jets/commands/releases/releases_command"
2
+
3
+ module Jets::Command
4
+ class RollbackCommand < Base # :nodoc:
5
+ desc "rollback", "Rollback to a previous release"
6
+ long_desc Help.text(:rollback)
7
+ def perform(version=nil)
8
+ Rollback.new(options.merge(version: version)).run
9
+ end
10
+ end
11
+
12
+ class Rollback
13
+ include Jets::Command::ApiHelpers
14
+ attr_reader :version
15
+ def initialize(options={})
16
+ @options = options
17
+ @version = options[:version]
18
+ # Handle more gracefully than the way Jets does it currently
19
+ if @version.nil?
20
+ puts <<~EOL
21
+ ERROR: version required
22
+ Usage: jets rollback VERSION
23
+ EOL
24
+ exit 1
25
+ end
26
+ end
27
+
28
+ def run
29
+ no_token_exit!
30
+ Jets.boot
31
+ payload = Release.new(@options).get(version)
32
+ check_for_error_message!(payload)
33
+
34
+ puts "Rolling back to version #{version}"
35
+ # Download previous cfn templates
36
+ Jets::Cfn::Download.new.download_templates(version)
37
+ # Run cloudformation update
38
+ Jets::Cfn::Ship.new(@options.merge(rollback_version: version)).run # also creates the Jets Api deployment record
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "cli-format"
4
+
5
+ module Jets::Command
6
+ class RoutesCommand < Base # :nodoc:
7
+ option :controller, aliases: :c, desc: "Filter by a specific controller, e.g. PostsController or Admin::PostsController"
8
+ option :format, default: "table", desc: "Output formats: #{CliFormat.formats.join(', ')}" # csv, equal, json, space, table, tab
9
+ option :grep, aliases: :g, desc: "Grep routes by a specific pattern"
10
+ option :reject, aliases: :r, desc: "Reject filter routes by a specific pattern"
11
+
12
+ desc "routes", "Print out your application routes"
13
+ long_desc Help.text(:routes)
14
+ def perform(*)
15
+ require_application_and_environment!
16
+ Jets::Router::Help.new(options).print
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ module Command
5
+ class RunnerCommand < Base # :nodoc:
6
+ include EnvironmentArgument
7
+
8
+ self.environment_desc = "The environment for the runner to operate under (test/development/production)"
9
+
10
+ no_commands do
11
+ def help
12
+ super
13
+ say self.class.desc
14
+ end
15
+ end
16
+
17
+ def self.banner(*)
18
+ "#{super} [<'Some.ruby(code)'> | <filename.rb> | -]"
19
+ end
20
+
21
+ desc "runner", "Run Ruby code in the context of Jets app non-interactively"
22
+ long_desc Help.text(:runner)
23
+ def perform(code_or_file = nil, *command_argv)
24
+ extract_environment_option_from_argument
25
+
26
+ unless code_or_file
27
+ help
28
+ exit 1
29
+ end
30
+
31
+ require_application_and_environment!
32
+ Jets.application.load_runner
33
+
34
+ args = command_argv
35
+
36
+ ARGV.replace(command_argv)
37
+
38
+ if code_or_file == "-"
39
+ eval($stdin.read, TOPLEVEL_BINDING, "stdin")
40
+ elsif File.exist?(code_or_file)
41
+ expanded_file_path = File.expand_path code_or_file
42
+ $0 = expanded_file_path
43
+ Kernel.load expanded_file_path
44
+ else
45
+ begin
46
+ # Jets changed TOPLEVEL_BINDING to binding to have access to args
47
+ # To keep args working https://github.com/boltops-tools/jets/pull/669
48
+ eval(code_or_file, binding, __FILE__, __LINE__)
49
+ rescue SyntaxError, NameError => e
50
+ error "Please specify a valid ruby command or the path of a script to run."
51
+ error "Run '#{self.class.executable} -h' for help."
52
+ error ""
53
+ error e
54
+ exit 1
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,291 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+ require "action_dispatch"
5
+ require "jets"
6
+ require "active_support/core_ext/string/filters"
7
+
8
+ module Jets
9
+ class Server < ::Rack::Server
10
+ class Options
11
+ def parse!(args)
12
+ Jets::Command::ServerCommand.new([], args).server_options
13
+ end
14
+ end
15
+
16
+ def initialize(options = nil)
17
+ @default_options = options || {}
18
+ super(@default_options)
19
+ set_environment
20
+ end
21
+
22
+ def opt_parser
23
+ Options.new
24
+ end
25
+
26
+ def set_environment
27
+ ENV["JETS_ENV"] ||= options[:environment]
28
+ end
29
+
30
+ def start(after_stop_callback = nil)
31
+ trap(:INT) { exit }
32
+ create_tmp_directories
33
+ setup_dev_caching
34
+ # TODO: should this be commented out? Think it needs to be because Lambda will
35
+ # not run through the server...
36
+ # However, need to test puma and see if this will surface errors when there's an app error.
37
+ # log_to_stdout if options[:log_stdout]
38
+
39
+ super()
40
+ ensure
41
+ after_stop_callback.call if after_stop_callback
42
+ end
43
+
44
+ def serveable? # :nodoc:
45
+ server
46
+ true
47
+ rescue LoadError, NameError
48
+ false
49
+ end
50
+
51
+ def middleware
52
+ Hash.new([])
53
+ end
54
+
55
+ def default_options
56
+ super.merge(@default_options)
57
+ end
58
+
59
+ def served_url
60
+ "#{options[:SSLEnable] ? 'https' : 'http'}://#{options[:Host]}:#{options[:Port]}" unless use_puma?
61
+ end
62
+
63
+ private
64
+ def setup_dev_caching
65
+ if options[:environment] == "development"
66
+ Jets::DevCaching.enable_by_argument(options[:caching])
67
+ end
68
+ end
69
+
70
+ def create_tmp_directories
71
+ %w(cache pids sockets).each do |dir_to_make|
72
+ FileUtils.mkdir_p(File.join(Jets.root, "tmp", dir_to_make))
73
+ end
74
+ end
75
+
76
+ def log_to_stdout
77
+ wrapped_app # touch the app so the logger is set up
78
+
79
+ console = ActiveSupport::Logger.new(STDOUT)
80
+ console.formatter = Jets.logger.formatter
81
+ console.level = Jets.logger.level
82
+
83
+ unless ActiveSupport::Logger.logger_outputs_to?(Jets.logger, STDOUT)
84
+ Jets.logger.extend(ActiveSupport::Logger.broadcast(console))
85
+ end
86
+ end
87
+
88
+ def use_puma?
89
+ server.to_s == "Rack::Handler::Puma"
90
+ end
91
+ end
92
+
93
+ module Command
94
+ class ServerCommand < Base # :nodoc:
95
+ include EnvironmentArgument
96
+
97
+ # Hard-coding a bunch of handlers here as we don't have a public way of
98
+ # querying them from the Rack::Handler registry.
99
+ RACK_SERVERS = %w(cgi fastcgi webrick lsws scgi thin puma unicorn falcon)
100
+
101
+ DEFAULT_PORT = 8888
102
+ DEFAULT_PIDFILE = "tmp/pids/server.pid"
103
+
104
+ class_option :port, aliases: "-p", type: :numeric,
105
+ desc: "Runs Jets on the specified port - defaults to 8888.", banner: :port
106
+ class_option :binding, aliases: "-b", type: :string,
107
+ desc: "Binds Jets to the specified IP - defaults to 'localhost' in development and '0.0.0.0' in other environments'.",
108
+ banner: :IP
109
+ class_option :config, aliases: "-c", type: :string, default: "config.ru",
110
+ desc: "Uses a custom rackup configuration.", banner: :file
111
+ class_option :daemon, aliases: "-d", type: :boolean, default: false,
112
+ desc: "Runs server as a Daemon."
113
+ class_option :using, aliases: "-u", type: :string,
114
+ desc: "Specifies the Rack server used to run the application (thin/puma/webrick).", banner: :name
115
+ class_option :pid, aliases: "-P", type: :string,
116
+ desc: "Specifies the PID file - defaults to #{DEFAULT_PIDFILE}."
117
+ class_option :dev_caching, aliases: "-C", type: :boolean, default: nil,
118
+ desc: "Specifies whether to perform caching in development."
119
+ class_option :restart, type: :boolean, default: nil, hide: true
120
+ class_option :early_hints, type: :boolean, default: nil, desc: "Enables HTTP/2 early hints."
121
+ class_option :log_to_stdout, type: :boolean, default: nil, optional: true,
122
+ desc: "Whether to log to stdout. Enabled by default in development when not daemonized."
123
+
124
+ def initialize(args, local_options, *)
125
+ super
126
+
127
+ @original_options = local_options - %w( --restart )
128
+ end
129
+
130
+ desc "server", "Runs a local server that mimics API Gateway for development"
131
+ long_desc Help.text(:server)
132
+ def perform
133
+ extract_environment_option_from_argument
134
+ set_application_directory!
135
+ prepare_restart
136
+
137
+ Jets::Server.new(server_options).tap do |server|
138
+ # Require application after server sets environment to propagate
139
+ # the --environment option.
140
+ # require APP_PATH
141
+ Jets.boot
142
+ Dir.chdir(Jets.application.root)
143
+
144
+ if server.serveable?
145
+ print_boot_information(server.server, server.served_url)
146
+ after_stop_callback = -> { say "Exiting" unless options[:daemon] }
147
+ server.start(after_stop_callback)
148
+ else
149
+ say rack_server_suggestion(options[:using])
150
+ end
151
+ end
152
+ end
153
+
154
+ no_commands do
155
+ def server_options
156
+ {
157
+ user_supplied_options: user_supplied_options,
158
+ server: options[:using],
159
+ log_stdout: log_to_stdout?,
160
+ Port: port,
161
+ Host: host,
162
+ DoNotReverseLookup: true,
163
+ config: options[:config],
164
+ environment: environment,
165
+ daemonize: options[:daemon],
166
+ pid: pid,
167
+ caching: options[:dev_caching],
168
+ restart_cmd: restart_command,
169
+ early_hints: early_hints
170
+ }
171
+ end
172
+ end
173
+
174
+ private
175
+ def user_supplied_options
176
+ @user_supplied_options ||= begin
177
+ # Convert incoming options array to a hash of flags
178
+ # ["-p3001", "-C", "--binding", "127.0.0.1"] # => {"-p"=>true, "-C"=>true, "--binding"=>true}
179
+ user_flag = {}
180
+ @original_options.each do |command|
181
+ if command.start_with?("--")
182
+ option = command.split("=")[0]
183
+ user_flag[option] = true
184
+ elsif command =~ /\A(-.)/
185
+ user_flag[Regexp.last_match[0]] = true
186
+ end
187
+ end
188
+
189
+ # Collect all options that the user has explicitly defined so we can
190
+ # differentiate them from defaults
191
+ user_supplied_options = []
192
+ self.class.class_options.select do |key, option|
193
+ if option.aliases.any? { |name| user_flag[name] } || user_flag["--#{option.name}"]
194
+ name = option.name.to_sym
195
+ case name
196
+ when :port
197
+ name = :Port
198
+ when :binding
199
+ name = :Host
200
+ when :dev_caching
201
+ name = :caching
202
+ when :daemonize
203
+ name = :daemon
204
+ end
205
+ user_supplied_options << name
206
+ end
207
+ end
208
+ user_supplied_options << :Host if ENV["HOST"] || ENV["BINDING"]
209
+ user_supplied_options << :Port if ENV["PORT"]
210
+ user_supplied_options << :pid if ENV["PIDFILE"]
211
+ user_supplied_options.uniq
212
+ end
213
+ end
214
+
215
+ def port
216
+ options[:port] || ENV.fetch("PORT", DEFAULT_PORT).to_i
217
+ end
218
+
219
+ def host
220
+ if options[:binding]
221
+ options[:binding]
222
+ else
223
+ default_host = environment == "development" ? "localhost" : "0.0.0.0"
224
+
225
+ ENV.fetch("BINDING", default_host)
226
+ end
227
+ end
228
+
229
+ def environment
230
+ options[:environment] || Jets::Command.environment
231
+ end
232
+
233
+ def restart_command
234
+ "jets server #{@original_options.join(" ")} --restart"
235
+ end
236
+
237
+ def early_hints
238
+ options[:early_hints]
239
+ end
240
+
241
+ def log_to_stdout?
242
+ options.fetch(:log_to_stdout) do
243
+ options[:daemon].blank? && environment == "development"
244
+ end
245
+ end
246
+
247
+ def pid
248
+ File.expand_path(options[:pid] || ENV.fetch("PIDFILE", DEFAULT_PIDFILE))
249
+ end
250
+
251
+ def self.banner(*)
252
+ "jets server -u [thin/puma/webrick] [options]"
253
+ end
254
+
255
+ def prepare_restart
256
+ FileUtils.rm_f(pid) if options[:restart]
257
+ end
258
+
259
+ def rack_server_suggestion(server)
260
+ if server.in?(RACK_SERVERS)
261
+ <<~MSG
262
+ Could not load server "#{server}". Maybe you need to the add it to the Gemfile?
263
+
264
+ gem "#{server}"
265
+
266
+ Run `jets server --help` for more options.
267
+ MSG
268
+ else
269
+ error = CorrectableError.new("Could not find server '#{server}'.", server, RACK_SERVERS)
270
+ if error.respond_to?(:detailed_message)
271
+ formatted_message = error.detailed_message
272
+ else
273
+ formatted_message = error.message
274
+ end
275
+ <<~MSG
276
+ #{formatted_message}
277
+ Run `jets server --help` for more options.
278
+ MSG
279
+ end
280
+ end
281
+
282
+ def print_boot_information(server, url)
283
+ say <<~MSG
284
+ => Booting #{ActiveSupport::Inflector.demodulize(server)}
285
+ => Jets #{Jets.version} application starting in #{Jets.env} #{url}
286
+ => Run `jets server --help` for more startup options
287
+ MSG
288
+ end
289
+ end
290
+ end
291
+ end
@@ -0,0 +1,39 @@
1
+ module Jets::Command
2
+ class StacksCommand < Base # :nodoc:
3
+ desc "stacks", "List deployed stacks"
4
+ long_desc Help.text(:stacks)
5
+ paging_options.call
6
+ option :all_projects, desc: "Show all stacks across all projects", type: :boolean, default: false
7
+ def perform
8
+ name = Jets.project_name
9
+ no_token_exit!
10
+ params = paging_params.merge(options)
11
+ resp = Jets::Api::Stack.list(params)
12
+ check_for_error_message!(resp)
13
+
14
+ data = resp["data"]
15
+ if data.empty?
16
+ $stderr.puts "No stacks deployed yet: #{name}"
17
+ else
18
+ message = if options[:all_projects]
19
+ "Stacks for all projects:"
20
+ else
21
+ "Stacks for project: #{name}"
22
+ end
23
+ $stderr.puts message
24
+ show_items(data)
25
+ end
26
+ rescue Jets::Api::RequestError => e
27
+ puts "WARNING: Unable to list stacks. #{e.class}: #{e.message}"
28
+ end
29
+
30
+ private
31
+ def show_items(items)
32
+ presenter = CliFormat::Presenter.new
33
+ presenter.header = ["Name"]
34
+ items.each do |item|
35
+ puts "#{item['name']} #{item['location']}"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ module Jets::Command
2
+ class StatusCommand < Base
3
+ desc "status", "Shows the current status of the Jets app"
4
+ long_desc Help.text(:status)
5
+ def perform
6
+ Jets::Cfn::Status.new(options).run
7
+ end
8
+ end
9
+ end
@@ -1,4 +1,14 @@
1
- module Jets::Commands
1
+ module Jets::Command
2
+ class UrlCommand < Base # :nodoc:
3
+ option :format, aliases: :f, desc: "Output format: json or text", default: "text"
4
+
5
+ desc "url", "App url if routes are defined"
6
+ long_desc Help.text(:url)
7
+ def url(*)
8
+ Url.new(options).display
9
+ end
10
+ end
11
+
2
12
  class Url
3
13
  include Jets::AwsServices
4
14
 
@@ -7,21 +17,34 @@ module Jets::Commands
7
17
  end
8
18
 
9
19
  def display
20
+ Jets.boot
10
21
  stack_name = Jets::Names.parent_stack_name
11
22
  unless stack_exists?(stack_name)
12
- puts "Stack for #{Jets.config.project_name.color(:green)} project for environment #{Jets.env.color(:green)}. Couldn't find #{stack_name.color(:green)} stack."
13
- exit
23
+ $stderr.puts "Stack for #{Jets.project_name.color(:green)} project for environment #{Jets.env.color(:green)}. Couldn't find #{stack_name.color(:green)} stack."
24
+ exit 1
14
25
  end
15
26
 
16
27
  stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
17
28
 
29
+ data = {}
30
+
18
31
  api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
19
32
  if api_gateway_stack_arn && endpoint_available?
20
- api_gateway_endpoint = get_gateway_endpoint(api_gateway_stack_arn)
21
- STDOUT.puts "API Gateway Endpoint: #{api_gateway_endpoint}"
22
- show_custom_domain
33
+ data[:api_gateway_endpoint] = get_gateway_endpoint(api_gateway_stack_arn)
34
+ get_custom_domain!(data)
35
+ end
36
+
37
+ if data.empty?
38
+ $stderr.puts "API Gateway not found. This jets app does have an API Gateway associated with it. Please double check your config/routes.rb if you were expecting to see a url for the app. Also check that #{stack_name.color(:green)} is a jets app."
39
+ exit 1
40
+ end
41
+
42
+ if @options[:format] == "json"
43
+ puts data.to_json
23
44
  else
24
- puts "API Gateway not found. This jets app does have an API Gateway associated with it. Please double check your config/routes.rb if you were expecting to see a url for the app. Also check that #{stack_name.color(:green)} is a jets app."
45
+ puts "API Gateway Endpoint: #{data[:api_gateway_endpoint]}"
46
+ puts "Custom Domain: #{data[:custom_domain]}" if data[:custom_domain]
47
+ puts "App Domain: #{data[:app_domain]}" if data[:app_domain]
25
48
  end
26
49
  end
27
50
 
@@ -29,26 +52,26 @@ module Jets::Commands
29
52
  stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
30
53
  rest_api = lookup(stack[:outputs], "RestApi")
31
54
  region_id = lookup(stack[:outputs], "Region")
32
- stage_name = Jets::Resource::ApiGateway::Deployment.stage_name
55
+ stage_name = Jets::Cfn::Resource::ApiGateway::Deployment.stage_name
33
56
 
34
57
  # https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-api.html
35
58
  # https://my-api-id.execute-api.region-id.amazonaws.com/stage-name/{resourcePath}
36
59
  "https://#{rest_api}.execute-api.#{region_id}.amazonaws.com/#{stage_name}"
37
60
  end
38
61
 
39
- def show_custom_domain
62
+ def get_custom_domain!(data)
40
63
  return unless endpoint_available? && Jets.custom_domain? && Jets.config.domain.route53
41
64
 
42
- domain_name = Jets::Resource::ApiGateway::DomainName.new
65
+ domain_name = Jets::Cfn::Resource::ApiGateway::DomainName.new
43
66
  # Looks funny but its right.
44
- # domain_name is a method on the Jets::Resource::ApiGateway::Domain instance
67
+ # domain_name is a method on the Jets::Cfn::Resource::ApiGateway::Domain instance
45
68
  url = "https://#{domain_name.domain_name}"
46
- puts "Custom Domain: #{url}"
47
- puts "App Domain: #{Jets.config.app.domain}" if Jets.config.app.domain
69
+ data[:custom_domain] = url
70
+ data[:app_domain] = "https://#{Jets.config.app.domain}" if Jets.config.app.domain
48
71
  end
49
72
 
50
73
  def endpoint_unavailable?
51
- return false if Jets::Router.routes.empty?
74
+ return false if Jets::Router.no_routes?
52
75
  resp, status = stack_status
53
76
  return false if status.include?("ROLLBACK")
54
77
  end