jets 4.0.10 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8612274c29e1e3f75b05e46d4d6e47571abc9b3dbd76322486a2cb6626c0f5a
4
- data.tar.gz: 9282f2d3543c0b9a02718e8078a276797104f1798d65d8a6617d08210c08361e
3
+ metadata.gz: 54e94ceb6d67976943a212a5ccceb71bb3e7bd6c6928775c0e7b824be127e42d
4
+ data.tar.gz: cab6dba2a8108c047daec4706e15d226e0e7f4eb46e9b6f2617465ea186b451e
5
5
  SHA512:
6
- metadata.gz: dd5f0ef934488eadaa573f00f693687eb352d18d46bffd927b5d3afaebc5010fcf0d04ef6622bc38af05501aa7d9eea4dccbdca8bc6d2ba64f25bb8ec88cc818
7
- data.tar.gz: b661cc6ec392586322e2cf0f0cec81d186b9522545e9fb63f9335035411e8bb7937431da73614f44c963ddbb7d7582c4a5978226f5eaf9d7398d52b686ba5271
6
+ metadata.gz: c050d7738b47e826403bc383baa0b2db251246b3d3dc359135e8e1039f8404448021477b38fbfab57f2be1cd09f7ffe8aa925cff70e313a96e61735f46f4fee2
7
+ data.tar.gz: 152c89e1b3e9d124f63687181f48c13ef09e3140062665a6b11baf9a99e830869cd7c8df46a2e1e8e59c58bc08bbb76d6430d235fd296ed176bcf0628890531a
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  _yardoc
8
8
  coverage
9
9
  doc/
10
+ docs/
10
11
  InstalledFiles
11
12
  lib/bundler/man
12
13
  pkg
@@ -15,10 +16,13 @@ spec/reports
15
16
  test/tmp
16
17
  test/version_tmp
17
18
  tmp
19
+ node_modules
18
20
 
19
21
  .codebuild/definitions
20
22
  /html
21
23
  /demo
22
24
  Gemfile.lock
23
- spec/fixtures/apps/franky/dynamodb/migrate
25
+ spec/fixtures/demo/dynamodb/migrate
26
+ spec/fixtures/demo/public/assets
24
27
  spec/fixtures/project/handlers
28
+ yarn.lock
data/CHANGELOG.md CHANGED
@@ -3,6 +3,58 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/).
5
5
 
6
+ ## [5.0.0] - 2023-12-05
7
+ Single Lambda Function for Controllers
8
+ * For controllers, a single Lambda function is deployed going forward.
9
+ * APIGW serves as proxy endpoint for requests to the single Lambda function. Techniquely, there are 2 APIGW endpoints.
10
+ * Jobs and other classes still create a discrete lambda function per Ruby method.
11
+
12
+ Jets Engines support
13
+ * Jets Engines closely resemble Rails engines.
14
+ * Use as many Rails middlewares as possible
15
+
16
+ Jets Controllers are "ActionController and ActionView compatible."
17
+ * View Scope has first-class citizens access to Jets Controller instances.
18
+ * Breaking Change: `resources :posts` and `delete` route method routes to controller `destroy` method like rails instead of `delete` method.
19
+
20
+ Jets Controllers now support:
21
+ * around filters
22
+ * cache control and etag caching support
23
+ * content security policy
24
+ * cookies support via actionpack
25
+ * flash support
26
+ * forgery protection improvements
27
+ * importmap support
28
+ * i18n support
29
+
30
+ New Jets CLI structure that
31
+ * Close to Rails CLI structure
32
+
33
+ Jets Pro support
34
+ * deploys, release history, rollback support
35
+ * use jets-api gem
36
+
37
+ Refactor CloudFormation Builders
38
+ * Use CamelCase properties internally
39
+ * Short name template filenames and class names without the _builder.
40
+ * Fully qualify LambdaFunction logical id.
41
+
42
+ Misc
43
+ * Remove afterburner turbo and mega mode to prepare for container-based Rails support.
44
+ * Autoloaders refactor. gem (Jets internal), main (user app), once (user app)
45
+ * CORS via with middleware only.
46
+ * Improve ActionMailer integration. Improve preview support.
47
+ * logger active support logger and tagged logging support
48
+ * dynamodb event conventional table namespace
49
+ * enable iot rule by default bug fix
50
+ * create named route methods for all CRUD actions
51
+ * Jets.cache support
52
+
53
+ Breaking changes:
54
+ * Pass request.headers straight without downcase. IE: `X-Amzn-Trace-Id`. Introduce request.downcase_headers instead.
55
+ * Jets.config.prewarm.concurrency option removed.
56
+ * dynomite decoupling and integration improvements
57
+
6
58
  ## [4.0.10] - 2023-12-04
7
59
  - [#678](https://github.com/boltops-tools/jets/pull/678) handle option method or http_method from route state
8
60
 
@@ -28,6 +80,7 @@ This project *loosely tries* to adhere to [Semantic Versioning](http://semver.or
28
80
 
29
81
  ## [4.0.3] - 2023-08-03
30
82
  - [#657](https://github.com/boltops-tools/jets/pull/657) [Fix] ApiGateway for local Middleware: fix query_string_parameters
83
+ Breaking Changes:
31
84
 
32
85
  ## [4.0.2] - 2023-08-03
33
86
  - [#660](https://github.com/boltops-tools/jets/pull/660) Fix prewarming
data/Gemfile CHANGED
@@ -4,11 +4,7 @@ source "https://rubygems.org"
4
4
  gemspec
5
5
 
6
6
  # required here for specs
7
- # TODO: Only require webpacker in Gemfile of project if possible.
8
- # Need both because of jets/application.rb and jets/webpacker/middleware_setup.rb
9
7
  group :development, :test do
10
8
  gem "mysql2", "~> 0.5.2"
11
- gem "dynomite"
12
- gem "jetpacker"
13
- gem "rspec_junit_formatter"
9
+ gem "dynomite", "~> 2.0.0"
14
10
  end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2021 Tung Nguyen
1
+ Copyright (c) Tung Nguyen
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -16,12 +16,13 @@ Please **watch/star** this repo to help grow and support the project.
16
16
 
17
17
  ## What is Ruby on Jets?
18
18
 
19
- Jets is a Ruby Serverless Framework. Jets allows you to create serverless applications with a beautiful language: Ruby. It includes everything required to build an application and deploy it to AWS Lambda.
19
+ Jets is a Ruby Serverless Framework. Jets allows you to create serverless applications with a beautiful language: Ruby. It includes everything required to build and deploy an application to AWS Lambda.
20
20
 
21
- It is key to understand AWS Lambda and API Gateway to understand Jets conceptually. Jets maps your code to Lambda functions and API Gateway resources.
21
+ Understanding AWS Lambda and API Gateway is key to understanding Jets conceptually. Jets map your code to Lambda functions and other AWS Resources like API Gateway and Event Rules.
22
22
 
23
- * **AWS Lambda** is Functions as a Service. It allows you to upload and run functions without worrying about the underlying infrastructure.
23
+ * **AWS Lambda** is functions as a service. It allows you to upload and run functions without worrying about the underlying infrastructure.
24
24
  * **API Gateway** is the routing layer for Lambda. It is used to route REST URL endpoints to Lambda functions.
25
+ * **EventBridge Rules** are events as a service. You can automatically run Lambda functions triggered from AWS services. You decide what events to catch and how to react to them.
25
26
 
26
27
  The official documentation is at [Ruby on Jets](http://rubyonjets.com).
27
28
 
@@ -42,14 +43,14 @@ end
42
43
 
43
44
  Here's the function in the Lambda console:
44
45
 
45
- ![Code Example in AWS Lambda console](https://raw.githubusercontent.com/tongueroo/jets/master/docs/img/docs/jets-simple-lambda-function-console.png)
46
+ ![Code Example in AWS Lambda console](https://img.boltops.com/tools/jets/readme/simple-lambda-function.png)
46
47
 
47
48
 
48
- Though simple functions are supported by Jets, they do not add much value as other ways to write Ruby code with Jets. Classes like [Controllers](http://rubyonjets.com/docs/controllers/) and [Jobs](http://rubyonjets.com/docs/jobs/) add many conveniences and are more powerful to use. We’ll cover them next.
49
+ Though simple functions are supported by Jets, they do not add as much value as other ways to write Ruby code with Jets. Classes like [Controllers](http://rubyonjets.com/docs/controllers/) and [Jobs](http://rubyonjets.com/docs/jobs/) add many conveniences and are more powerful to use. We’ll cover them next.
49
50
 
50
51
  ### Jets Controllers
51
52
 
52
- A Jets controller handles a web request and renders a response. Here's an example:
53
+ A Jets controller handles a web request and renders a response. Here's an example:
53
54
 
54
55
  app/controllers/posts_controller.rb:
55
56
 
@@ -69,11 +70,9 @@ class PostsController < ApplicationController
69
70
  end
70
71
  ```
71
72
 
72
- Helper methods like `params` provide the parameters from the API Gateway event. The `render` method renders a Lambda Proxy structure back that API Gateway understands.
73
+ Helper methods like `params` provide the parameters from the API Gateway event. The `render` method returns a Lambda Proxy structure that API Gateway understands.
73
74
 
74
- Jets creates Lambda functions for each public method in your controller. Here they are in the Lambda console:
75
-
76
- ![Lambda Functions for each public method in AWS Console](https://raw.githubusercontent.com/tongueroo/jets/master/docs/img/docs/demo-lambda-functions-controller.png)
75
+ Jets creates single Lambda functions to handle your Jets Controller requests. The Lambda Function handler is a shim that routes to your controller action.
77
76
 
78
77
  ### Jets Routing
79
78
 
@@ -83,23 +82,14 @@ config/routes.rb:
83
82
 
84
83
  ```ruby
85
84
  Jets.application.routes.draw do
86
- get "posts", to: "posts#index"
87
- get "posts/new", to: "posts#new"
88
- get "posts/:id", to: "posts#show"
89
- post "posts", to: "posts#create"
90
- get "posts/:id/edit", to: "posts#edit"
91
- put "posts", to: "posts#update"
92
- delete "posts", to: "posts#delete"
93
-
94
- resources :comments # expands to the RESTful routes above
95
-
85
+ resources :posts
96
86
  any "posts/hot", to: "posts#hot" # GET, POST, PUT, etc request all work
97
87
  end
98
88
  ```
99
89
 
100
90
  The `routes.rb` gets translated to API Gateway resources:
101
91
 
102
- ![API Gateway Resources generated from routes in AWS console](https://raw.githubusercontent.com/tongueroo/jets/master/docs/img/quick-start/demo-api-gateway.png)
92
+ ![API Gateway Resources generated from routes in AWS console](https://img.boltops.com/tools/jets/readme/apigw.png)
103
93
 
104
94
  Test your API Gateway endpoints with curl or postman. Note, replace the URL endpoint with the one that is created:
105
95
 
@@ -111,7 +101,7 @@ Test your API Gateway endpoints with curl or postman. Note, replace the URL endp
111
101
 
112
102
  ### Jets Jobs
113
103
 
114
- A Jets job handles asynchronous background jobs performed outside of the web request/response cycle. Here's an example:
104
+ A Jets job handles asynchronous background jobs outside the web request/response cycle. Here's an example:
115
105
 
116
106
  app/jobs/hard_job.rb:
117
107
 
@@ -129,9 +119,13 @@ class HardJob < ApplicationJob
129
119
  end
130
120
  ```
131
121
 
132
- `HardJob#dig` runs every 10 hours and `HardJob#lift` runs every 12 hours. The `rate` and `cron` methods created CloudWatch Event Rules. Example:
122
+ ![Jets Jobs in AWS Lambda Console](https://img.boltops.com/tools/jets/readme/jets-jobs.png)
123
+
124
+ `HardJob#dig` runs every 10 hours, and `HardJob#lift` runs every 12 hours. The `rate` and `cron` methods created CloudWatch Event Rules. Example:
125
+
126
+ ![CloudWatch Event Rules in AWS Console](https://img.boltops.com/tools/jets/readme/jets-jobs-event-rules.png)
133
127
 
134
- ![CloudWatch Event Rules in AWS Console](https://raw.githubusercontent.com/tongueroo/jets/master/docs/img/docs/demo-job-cloudwatch-rule.png)
128
+ This simple example uses Scheduled Events. There are many more possibilities, see the [Events Docs](https://docs.rubyonjets.com/docs/events/).
135
129
 
136
130
  ### Jets Deployment
137
131
 
@@ -141,29 +135,19 @@ You can test your application with a local server that mimics API Gateway: [Jets
141
135
 
142
136
  After deployment, you can test the Lambda functions with the AWS Lambda console or the CLI.
143
137
 
144
- ### AWS Lambda Console
145
-
146
- ![Lambda Console](https://s3.amazonaws.com/boltops-demo/images/screenshots/lambda-console-posts-controller-index.png)
147
-
148
138
  ### Live Demos
149
139
 
150
140
  Here are some demos of Jets applications:
151
141
 
152
142
  * [Quintessential CRUD Jets app](https://demo.rubyonjets.com/)
153
143
  * [API Demo](https://api.demo.rubyonjets.com/)
154
- * [Jets Afterburner: Easy Rails Support](https://afterburner.demo.rubyonjets.com/)
155
- * [Mega Mode: Jets and Rails Combined](https://mega.demo.rubyonjets.com/)
156
144
  * [Image Upload with CarrierWave](https://upload.demo.rubyonjets.com/)
157
145
 
158
- Please feel free to add your own example to the [jets-examples](https://github.com/tongueroo/jets-examples) repo.
159
-
160
- ### Rails Support
161
-
162
- [Jets Afterburner Mode](http://rubyonjets.com/docs/rails-support/) provides Rails support with little effort. This allows you to run a Rails application on AWS Lambda. Also here's a Tutorial Blog Post: [Jets Afterburner: Rails Support](https://blog.boltops.com/2018/12/21/jets-afterburner-serverless-rails-on-aws-lambda-in-5-minutes).
146
+ Please feel free to add your examples to the [rubyonjets/examples](https://github.com/rubyonjets/examples) repo.
163
147
 
164
148
  ### More Info
165
149
 
166
- For more documentation, check out the official docs: [Ruby on Jets](http://rubyonjets.com/). Here's a list of useful links:
150
+ For more documentation, check out the official docs: [Ruby on Jets](http://rubyonjets.com/). Here's a list of useful links:
167
151
 
168
152
  * [Quick Start](http://rubyonjets.com/quick-start/)
169
153
  * [Local Jets Server](http://rubyonjets.com/docs/local-server/)
data/Rakefile CHANGED
@@ -8,10 +8,11 @@ task :default => :spec
8
8
  RSpec::Core::RakeTask.new
9
9
 
10
10
  require_relative "lib/jets"
11
+
11
12
  desc "Generates cli reference docs as markdown"
12
13
  task :docs do
13
- Jets::Autoloaders.once.eager_load
14
- Jets::Commands::Markdown::Creator.create_all
14
+ require "cli_markdown_jets"
15
+ CliMarkdown::Creator.new.create_all
15
16
  end
16
17
 
17
18
  # Thanks: https://docs.ruby-lang.org/en/2.1.0/RDoc/Task.html
@@ -21,4 +22,3 @@ require 'jets/rdoc'
21
22
  RDoc::Task.new do |rdoc|
22
23
  rdoc.options += Jets::Rdoc.options
23
24
  end
24
-
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Jets::ApplicationController < Jets::Controller::Base # :nodoc:
4
+ prepend_view_path File.expand_path("../../../app/views", __dir__)
5
+ layout "application"
6
+
7
+ before_action :disable_content_security_policy_nonce!
8
+
9
+ content_security_policy do |policy|
10
+ policy.script_src :self, :unsafe_inline
11
+ policy.style_src :self, :unsafe_inline
12
+ end
13
+
14
+ private
15
+ def require_local!
16
+ unless local_request?
17
+ render html: "<p>For security purposes, this information is only available to local requests.</p>".html_safe, status: :forbidden
18
+ end
19
+ end
20
+
21
+ def local_request?
22
+ Jets.application.config.consider_all_requests_local || request.local?
23
+ end
24
+
25
+ def disable_content_security_policy_nonce!
26
+ request.content_security_policy_nonce_generator = nil
27
+ end
28
+ end
@@ -0,0 +1,6 @@
1
+ # Parent class for MountController
2
+ class Jets::BareController < Jets::Controller::Base
3
+ layout false
4
+ abstract!
5
+ skip_forgery_protection
6
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ # Built-in Health Check Endpoint
5
+ #
6
+ # \Jets also comes with a built-in health check endpoint that is reachable at
7
+ # the +/up+ path. This endpoint will return a 200 status code if the app has
8
+ # booted with no exceptions, and a 500 status code otherwise.
9
+ #
10
+ # In production, many applications are required to report their status upstream,
11
+ # whether it's to an uptime monitor that will page an engineer when things go
12
+ # wrong, or a load balancer or Kubernetes controller used to determine a pod's
13
+ # health. This health check is designed to be a one-size fits all that will work
14
+ # in many situations.
15
+ #
16
+ # While any newly generated \Jets applications will have the health check at
17
+ # +/up+, you can configure the path to be anything you'd like in your
18
+ # <tt>"config/routes.rb"</tt>:
19
+ #
20
+ # Jets.application.routes.draw do
21
+ # get "healthz" => "jets/health#show", as: :jets_health_check
22
+ # end
23
+ #
24
+ # The health check will now be accessible via the +/healthz+ path.
25
+ #
26
+ # NOTE: This endpoint does not reflect the status of all of your application's
27
+ # dependencies, such as the database or redis cluster. Replace
28
+ # <tt>"jets/health#show"</tt> with your own controller action if you have
29
+ # application specific needs.
30
+ #
31
+ # Think carefully about what you want to check as it can lead to situations
32
+ # where your application is being restarted due to a third-party service going
33
+ # bad. Ideally, you should design your application to handle those outages
34
+ # gracefully.
35
+ class HealthController < Jets::Controller::Base
36
+ rescue_from(Exception) { render_down }
37
+
38
+ def show
39
+ render_up
40
+ end
41
+
42
+ private
43
+ def render_up
44
+ render html: html_status(color: "green")
45
+ end
46
+
47
+ def render_down
48
+ render html: html_status(color: "red"), status: 500
49
+ end
50
+
51
+ def html_status(color:)
52
+ %(<!DOCTYPE html><html><body style="background-color: #{color}"></body></html>).html_safe
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Jets::InfoController < Jets::ApplicationController # :nodoc:
4
+ prepend_view_path ActionDispatch::DebugView::RESCUES_TEMPLATE_PATH
5
+ layout -> { request.xhr? ? false : "application" }
6
+
7
+ before_action :require_local!
8
+
9
+ def index
10
+ redirect_to action: :routes
11
+ end
12
+
13
+ def properties
14
+ @info = Jets::Info.to_html
15
+ @page_title = "Properties"
16
+ end
17
+
18
+ def routes
19
+ if path = params[:path]
20
+ path = URI::DEFAULT_PARSER.escape path
21
+ normalized_path = with_leading_slash path
22
+ render json: {
23
+ exact: match_route { |it| it.match normalized_path },
24
+ fuzzy: match_route { |it| it.spec.to_s.match path }
25
+ }
26
+ else
27
+ @routes_table = routes_table
28
+ @page_title = "Routes"
29
+ end
30
+ end
31
+
32
+ private
33
+ def routes_table
34
+ text = Jets::Router::Help.new(format: "markdown").text
35
+ Kramdown::Document.new(text).to_html
36
+ end
37
+
38
+ def match_route
39
+ _routes.routes.filter_map { |route| route.path.spec.to_s if yield route.path }
40
+ end
41
+
42
+ def with_leading_slash(path)
43
+ ("/" + path).squeeze("/")
44
+ end
45
+ end
@@ -1,16 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Jets::MailersController < Jets::Controller::Base # :nodoc:
4
+ around_action :set_locale, only: :preview
4
5
  before_action :find_preview, only: [:preview]
5
- before_action :set_locale, only: [:preview]
6
- # TODO: allow multiple actions
7
- # before_action :find_preview, :set_locale, only: :preview
6
+ before_action :require_local!, unless: :show_previews?
8
7
 
9
- # TODO: add helper_method support
10
- # helper_method :part_query, :locale_query
8
+ helper_method :part_query, :locale_query
11
9
 
12
- # TODO: content_security_policy
13
- # content_security_policy(false)
10
+ content_security_policy(false)
14
11
 
15
12
  def index
16
13
  @previews = ActionMailer::Preview.all
@@ -20,25 +17,26 @@ class Jets::MailersController < Jets::Controller::Base # :nodoc:
20
17
  def preview
21
18
  if params[:path] == @preview.preview_name
22
19
  @page_title = "Mailer Previews for #{@preview.preview_name}"
23
- render :mailer
20
+ render action: "mailer"
24
21
  else
25
22
  @email_action = File.basename(params[:path])
26
23
 
27
24
  if @preview.email_exists?(@email_action)
25
+ @page_title = "Mailer Preview for #{@preview.preview_name}##{@email_action}"
28
26
  @email = @preview.call(@email_action, params)
29
27
 
30
28
  if params[:part]
31
29
  part_type = Mime::Type.lookup(params[:part])
32
30
 
33
31
  if part = find_part(part_type)
34
- response.headers["Content-Type"] = params[:part]
32
+ response.content_type = part_type
35
33
  render plain: part.respond_to?(:decoded) ? part.decoded : part
36
34
  else
37
35
  raise AbstractController::ActionNotFound, "Email part '#{part_type}' not found in #{@preview.name}##{@email_action}"
38
36
  end
39
37
  else
40
- @part = find_preferred_part(Mime[:html], Mime[:text])
41
- render :email, layout: false, formats: %w[html]
38
+ @part = find_preferred_part(request.format, Mime[:html], Mime[:text])
39
+ render action: "email", layout: false, formats: [:html]
42
40
  end
43
41
  else
44
42
  raise AbstractController::ActionNotFound, "Email '#{@email_action}' not found in #{@preview.name}"
@@ -53,7 +51,7 @@ class Jets::MailersController < Jets::Controller::Base # :nodoc:
53
51
 
54
52
  def find_preview # :doc:
55
53
  candidates = []
56
- params[:path].to_s.scan(%r{/|$}) { candidates << $` } # ` # hack to fix syntax highlighting
54
+ params[:path].to_s.scan(%r{/|$}) { candidates << $` }
57
55
  preview = candidates.detect { |candidate| ActionMailer::Preview.exists?(candidate) }
58
56
 
59
57
  if preview
@@ -91,7 +89,7 @@ class Jets::MailersController < Jets::Controller::Base # :nodoc:
91
89
  request.query_parameters.merge(locale: locale).to_query
92
90
  end
93
91
 
94
- def set_locale
95
- I18n.locale = params[:locale] || I18n.default_locale
92
+ def set_locale(&block)
93
+ I18n.with_locale(params[:locale] || I18n.default_locale, &block)
96
94
  end
97
95
  end
@@ -15,11 +15,8 @@ class Jets::MountController < Jets::BareController
15
15
 
16
16
  status, headers, io = mount_class.call(env)
17
17
  body = read_body(io)
18
- render(
19
- status: status,
20
- headers: headers,
21
- body: body,
22
- )
18
+ self.headers.merge!(headers)
19
+ render body: body, status: status
23
20
  end
24
21
 
25
22
  private
@@ -32,15 +29,14 @@ private
32
29
  result.join
33
30
  end
34
31
 
35
- # Locally Jets::Router::Finder gets called twice because it also gets called in Jets::Controller::Middleware::Local
36
- # On Lambda, Jets::Router::Finder only gets called once.
37
- # TODO: Maybe add caching improvement.
32
+ # Locally Jets::Router::Matcher gets called in Jets::Controller::Middleware::Mimic
33
+ # On Lambda, Jets::Router::Matcher in handlers.
38
34
  def find_route
39
- Jets::Router::Finder.new(event["path"], "ANY").run
35
+ Jets::Router::Matcher.new.find_by_request(request, "ANY")
40
36
  end
41
37
 
42
38
  def build_env(path)
43
- env = Jets::Controller::Rack::Env.new(event, context, adapter: true).convert
39
+ env = Jets::Controller::RackAdapter::Env.new(event, context, adapter: true).convert
44
40
  # remap path info
45
41
  mount_at = mount_at(path)
46
42
  path_info = env["PATH_INFO"]
@@ -3,7 +3,6 @@ require "mini_mime"
3
3
 
4
4
  class Jets::PublicController < Jets::Controller::Base
5
5
  layout false
6
- internal true
7
6
 
8
7
  def show
9
8
  catchall = params[:catchall].blank? ? 'index.html' : params[:catchall]
@@ -25,7 +24,12 @@ class Jets::PublicController < Jets::Controller::Base
25
24
  render file: catchall_path, content_type: content_type
26
25
  end
27
26
  else
28
- render file: "#{public_path}/404", status: 404
27
+ not_found_path = "#{public_path}/404.html"
28
+ if File.exist?(not_found_path)
29
+ render file: not_found_path, status: 404
30
+ else
31
+ render plain: "404 Not Found", status: 404
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Jets::WelcomeController < Jets::ApplicationController # :nodoc:
4
+ skip_forgery_protection
5
+ layout false
6
+
7
+ def index
8
+ end
9
+ end
@@ -3,7 +3,8 @@ begin
3
3
  # When require bundler/setup fails, AWS Lambda won't be able to load base_path_mapping
4
4
  # So we'll require base_path_mapping within begin/rescue block so that it does not also
5
5
  # fail the entire lambda function.
6
- require 'jets/internal/app/functions/jets/base_path_mapping'
6
+ # require 'jets/internal/app/functions/jets/base_path_mapping'
7
+ require_relative "base_path_mapping"
7
8
  rescue Exception => e
8
9
  # Note: rescue LoadError is not enough in AWS Lambda environment
9
10
  # Actual exceptions:
@@ -66,6 +66,7 @@ class BasePathMapping
66
66
  }
67
67
  puts "BasePathMapping delete options #{options.inspect}"
68
68
  apigateway.delete_base_path_mapping(options)
69
+ wait_for_delete
69
70
  puts "BasePathMapping delete complete"
70
71
  # https://github.com/tongueroo/jets/issues/255
71
72
  # Used to return: Aws::APIGateway::Errors::NotFoundException
@@ -75,6 +76,24 @@ class BasePathMapping
75
76
  raise(e) unless fail_silently
76
77
  end
77
78
 
79
+ # Wait for deletion to complete
80
+ # Otherwise, CloudFormation continues too fast during a `jets delete`
81
+ # and the initially fails deletion. CloudFormaton then retries until it's successfully.
82
+ # The stack ultimately finishes deleting successfully but the error messages
83
+ # are confusing to the user.
84
+ def wait_for_delete
85
+ loop do
86
+ resp = apigateway.get_base_path_mapping(
87
+ domain_name: domain_name,
88
+ base_path: base_path.empty? ? '(none)' : base_path,
89
+ )
90
+ break if resp.nil? || resp.empty?
91
+ sleep(5)
92
+ end
93
+ rescue Aws::APIGateway::Errors::NotFoundException
94
+ nil
95
+ end
96
+
78
97
  def create
79
98
  puts "BasePathMapping create"
80
99
  options = {
@@ -113,8 +132,8 @@ class BasePathMapping
113
132
  raise(e)
114
133
  end
115
134
 
116
- def deployment_stack
117
- @deployment_stack ||= cfn.describe_stacks(stack_name: @event['StackId']).stacks.first
135
+ def mapping_stack
136
+ @mapping_stack ||= cfn.describe_stacks(stack_name: @event['StackId']).stacks.first
118
137
  end
119
138
 
120
139
  def rest_api_id
@@ -130,7 +149,8 @@ class BasePathMapping
130
149
  end
131
150
 
132
151
  def parameter_value(parameter_key)
133
- param = deployment_stack[:parameters].find { |p| p.parameter_key == parameter_key }
152
+ puts "mapping_stack #{mapping_stack.inspect}"
153
+ param = mapping_stack[:parameters].find { |p| p.parameter_key == parameter_key }
134
154
  param&.parameter_value # possible for this to be nil when removing the config: IE: config.domain.name = nil
135
155
  end
136
156
 
@@ -140,7 +160,7 @@ class BasePathMapping
140
160
  end
141
161
 
142
162
  def parent_stack_name
143
- deployment_stack[:root_id]
163
+ mapping_stack[:root_id]
144
164
  end
145
165
 
146
166
  def apigateway
@@ -166,6 +186,6 @@ end
166
186
 
167
187
  if __FILE__ == $0
168
188
  event = JSON.load(File.read(ARGV[0]))
169
- context = nil # stub out
170
- BasePathMapping.new(event, context).update
189
+ stage_name = 'dev' # change to test
190
+ BasePathMapping.new(event, stage_name).update
171
191
  end