jets 3.1.0 → 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 (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +141 -0
  5. data/Gemfile +1 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +21 -43
  8. data/Rakefile +3 -3
  9. data/backers.md +0 -5
  10. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  11. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  12. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  13. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  14. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  16. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  17. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  18. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  19. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  20. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  21. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  22. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  23. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  24. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  25. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  26. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  27. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  28. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  29. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  30. data/engines/internal/lib/internal/actionview.rb +152 -0
  31. data/engines/internal/lib/internal/activerecord.rb +37 -0
  32. data/engines/internal/lib/internal/activesupport.rb +47 -0
  33. data/engines/internal/lib/internal/engine.rb +13 -0
  34. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  35. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  36. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  37. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  39. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  40. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  41. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  42. data/exe/jets +1 -10
  43. data/jets.gemspec +16 -13
  44. data/lib/jets/app_loader.rb +77 -0
  45. data/lib/jets/application/bootstrap.rb +100 -0
  46. data/lib/jets/application/configuration/defaults.rb +256 -0
  47. data/lib/jets/application/configuration.rb +494 -0
  48. data/lib/jets/application/default_middleware_stack.rb +140 -0
  49. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  50. data/lib/jets/application/finisher.rb +266 -0
  51. data/lib/jets/application/routes_reloader.rb +80 -0
  52. data/lib/jets/application.rb +515 -199
  53. data/lib/jets/authorizer/base.rb +1 -0
  54. data/lib/jets/authorizer/dsl.rb +15 -11
  55. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  56. data/lib/jets/autoloaders/gem.rb +70 -0
  57. data/lib/jets/autoloaders/inflector.rb +21 -0
  58. data/lib/jets/autoloaders.rb +38 -101
  59. data/lib/jets/aws_info.rb +2 -2
  60. data/lib/jets/aws_services/stack_status.rb +1 -1
  61. data/lib/jets/aws_services.rb +8 -0
  62. data/lib/jets/backtrace_cleaner.rb +27 -0
  63. data/lib/jets/booter.rb +30 -118
  64. data/lib/jets/builders/code_builder.rb +64 -122
  65. data/lib/jets/builders/code_size.rb +1 -0
  66. data/lib/jets/builders/gem_replacer.rb +6 -12
  67. data/lib/jets/builders/handler_generator.rb +34 -14
  68. data/lib/jets/builders/lambda_layer.rb +2 -7
  69. data/lib/jets/builders/purger.rb +1 -1
  70. data/lib/jets/builders/rack_packager.rb +1 -1
  71. data/lib/jets/builders/ruby_packager.rb +54 -10
  72. data/lib/jets/builders/shim_vars/app.rb +10 -6
  73. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  74. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  75. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  76. data/lib/jets/bundle.rb +2 -9
  77. data/lib/jets/cfn/base.rb +82 -0
  78. data/lib/jets/cfn/builder/api/base.rb +12 -0
  79. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  80. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  81. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  82. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  83. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  84. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  85. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  86. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  87. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  88. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  89. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  90. data/lib/jets/cfn/builder/controller.rb +28 -0
  91. data/lib/jets/cfn/builder/function.rb +9 -0
  92. data/lib/jets/cfn/builder/interface.rb +146 -0
  93. data/lib/jets/cfn/builder/job.rb +10 -0
  94. data/lib/jets/cfn/builder/nested.rb +130 -0
  95. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  96. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  97. data/lib/jets/cfn/builder/parent.rb +149 -0
  98. data/lib/jets/cfn/builder/post_process.rb +25 -0
  99. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  100. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  101. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  102. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  103. data/lib/jets/cfn/deployment.rb +45 -0
  104. data/lib/jets/cfn/download.rb +39 -0
  105. data/lib/jets/cfn/params/api/base.rb +39 -0
  106. data/lib/jets/cfn/params/api/cors.rb +10 -0
  107. data/lib/jets/cfn/params/api/methods.rb +69 -0
  108. data/lib/jets/cfn/params/api/resources.rb +28 -0
  109. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  111. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  113. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  117. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  119. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  128. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  129. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  133. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  134. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  135. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  137. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  138. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  139. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  140. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  141. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  142. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  143. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  144. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  145. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  146. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  147. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  148. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  149. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  150. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  151. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  152. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  153. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  154. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  155. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  156. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  157. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  158. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  159. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  162. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  163. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  164. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  165. data/lib/jets/cfn/resource/one/function.rb +66 -0
  166. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  167. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  168. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  169. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  170. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  171. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  172. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  173. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  174. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  175. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  176. data/lib/jets/cfn/resource.rb +8 -0
  177. data/lib/jets/cfn/ship.rb +30 -16
  178. data/lib/jets/cfn/status.rb +1 -1
  179. data/lib/jets/cfn/template.rb +89 -0
  180. data/lib/jets/cfn/upload.rb +26 -23
  181. data/lib/jets/cli.rb +28 -203
  182. data/lib/jets/command/actions.rb +49 -0
  183. data/lib/jets/command/api_helpers.rb +41 -0
  184. data/lib/jets/command/aws_helpers.rb +26 -0
  185. data/lib/jets/command/base.rb +204 -0
  186. data/lib/jets/command/behavior.rb +83 -0
  187. data/lib/jets/command/environment_argument.rb +42 -0
  188. data/lib/jets/command/help/call.md +48 -0
  189. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  190. data/lib/jets/command/help/logs.md +21 -0
  191. data/lib/jets/{commands → command}/help/new.md +3 -4
  192. data/lib/jets/command/help/projects.md +6 -0
  193. data/lib/jets/command/help/releases.md +37 -0
  194. data/lib/jets/command/help/rollback.md +5 -0
  195. data/lib/jets/command/help/routes.md +15 -0
  196. data/lib/jets/command/help/runner.md +40 -0
  197. data/lib/jets/command/help/stacks.md +6 -0
  198. data/lib/jets/command/help.rb +17 -0
  199. data/lib/jets/command/helpers/editor.rb +35 -0
  200. data/lib/jets/command.rb +133 -0
  201. data/lib/jets/commands/application/application_command.rb +40 -0
  202. data/lib/jets/commands/build/build_command.rb +33 -0
  203. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  204. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  205. data/lib/jets/commands/call/base_guesser.rb +5 -5
  206. data/lib/jets/commands/call/call_command.rb +27 -0
  207. data/lib/jets/commands/call/caller.rb +184 -0
  208. data/lib/jets/commands/call/guesser.rb +1 -1
  209. data/lib/jets/commands/clean/base.rb +1 -1
  210. data/lib/jets/commands/clean/build.rb +1 -1
  211. data/lib/jets/commands/clean/clean_command.rb +15 -0
  212. data/lib/jets/commands/clean/log.rb +4 -4
  213. data/lib/jets/commands/configure/configure_command.rb +9 -0
  214. data/lib/jets/commands/console/console_command.rb +38 -0
  215. data/lib/jets/commands/credentials/USAGE +103 -0
  216. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  217. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  218. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  219. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  220. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  221. data/lib/jets/commands/delete/delete_command.rb +155 -0
  222. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
  223. data/lib/jets/commands/dev/dev_command.rb +19 -0
  224. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  225. data/lib/jets/commands/encrypted/USAGE +46 -0
  226. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  227. data/lib/jets/commands/gems/gems_command.rb +14 -0
  228. data/lib/jets/commands/generate/generate_command.rb +95 -0
  229. data/lib/jets/commands/help/USAGE +20 -0
  230. data/lib/jets/commands/help/help_command.rb +15 -0
  231. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  232. data/lib/jets/commands/logs/logs_command.rb +45 -0
  233. data/lib/jets/commands/new/new_command.rb +19 -0
  234. data/lib/jets/commands/notes/notes_command.rb +30 -0
  235. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  236. data/lib/jets/commands/projects/projects_command.rb +30 -0
  237. data/lib/jets/commands/rake/rake_command.rb +59 -0
  238. data/lib/jets/commands/releases/releases_command.rb +72 -0
  239. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  240. data/lib/jets/commands/routes/routes_command.rb +19 -0
  241. data/lib/jets/commands/runner/runner_command.rb +60 -0
  242. data/lib/jets/commands/server/server_command.rb +291 -0
  243. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  244. data/lib/jets/commands/status/status_command.rb +9 -0
  245. data/lib/jets/commands/url/url_command.rb +92 -0
  246. data/lib/jets/commands/version/version_command.rb +11 -0
  247. data/lib/jets/commands.rb +17 -0
  248. data/lib/jets/configuration.rb +166 -0
  249. data/lib/jets/controller/base.rb +105 -183
  250. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  251. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  252. data/lib/jets/controller/compat/caching.rb +13 -0
  253. data/lib/jets/controller/compat/future.rb +13 -0
  254. data/lib/jets/controller/compat/route_set.rb +47 -0
  255. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  256. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  257. data/lib/jets/controller/decorate/logging.rb +90 -0
  258. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  259. data/lib/jets/controller/decorate/url_for.rb +10 -0
  260. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  261. data/lib/jets/controller/handler.rb +41 -0
  262. data/lib/jets/controller/middleware/main.rb +16 -8
  263. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  264. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  265. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  266. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  267. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  268. data/lib/jets/controller/request/compat/params.rb +144 -0
  269. data/lib/jets/controller/request/compat/request.rb +125 -0
  270. data/lib/jets/controller/request.rb +35 -18
  271. data/lib/jets/controller/response/compat/response.rb +67 -0
  272. data/lib/jets/controller/response.rb +91 -8
  273. data/lib/jets/core.rb +153 -50
  274. data/lib/jets/core_ext/file.rb +9 -0
  275. data/lib/jets/core_ext/kernel.rb +2 -2
  276. data/lib/jets/core_ext/symbol.rb +5 -0
  277. data/lib/jets/core_ext.rb +4 -0
  278. data/lib/jets/dev_caching.rb +44 -0
  279. data/lib/jets/dotenv/ssm.rb +5 -2
  280. data/lib/jets/dotenv.rb +4 -3
  281. data/lib/jets/engine/configuration.rb +96 -0
  282. data/lib/jets/engine/turbines.rb +23 -0
  283. data/lib/jets/engine.rb +380 -0
  284. data/lib/jets/erb.rb +1 -1
  285. data/lib/jets/exception_reporting.rb +43 -0
  286. data/lib/jets/generators/job/job_generator.rb +41 -0
  287. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  288. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  289. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  290. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  291. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  292. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  293. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  294. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  295. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  296. data/lib/jets/generators/overrides/app/USAGE +38 -0
  297. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  298. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  299. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  300. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  301. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  302. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  303. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  304. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  305. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  306. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  307. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  308. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  309. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  311. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  312. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  313. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  314. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  315. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  316. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  317. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  318. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  319. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  320. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  322. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  323. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  324. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  325. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  326. data/lib/jets/generators.rb +112 -0
  327. data/lib/jets/inflections.rb +1 -1
  328. data/lib/jets/info.rb +116 -0
  329. data/lib/jets/initializable.rb +95 -0
  330. data/lib/jets/job/base.rb +5 -2
  331. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  332. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  333. data/lib/jets/job/dsl/iot_event.rb +6 -6
  334. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  335. data/lib/jets/job/dsl/log_event.rb +2 -2
  336. data/lib/jets/job/dsl/rule_event.rb +7 -4
  337. data/lib/jets/job/dsl/s3_event.rb +1 -1
  338. data/lib/jets/job/dsl/sns_event.rb +6 -6
  339. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  340. data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
  341. data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
  342. data/lib/jets/klass.rb +5 -6
  343. data/lib/jets/lambda/definition.rb +118 -0
  344. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  345. data/lib/jets/lambda/dsl.rb +73 -54
  346. data/lib/jets/lambda/function.rb +3 -3
  347. data/lib/jets/lambda/function_constructor.rb +6 -6
  348. data/lib/jets/lambda/functions.rb +36 -1
  349. data/lib/jets/mega/hash_converter.rb +2 -2
  350. data/lib/jets/mega/request/source.rb +1 -2
  351. data/lib/jets/mega/request.rb +4 -4
  352. data/lib/jets/names.rb +79 -0
  353. data/lib/jets/overrides/dummy/rails.rb +11 -0
  354. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  355. data/lib/jets/overrides/puma.rb +10 -0
  356. data/lib/jets/paths.rb +243 -0
  357. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  358. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  359. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  360. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  361. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  362. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  363. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  364. data/lib/jets/preheat.rb +26 -33
  365. data/lib/jets/processors/deducer.rb +2 -2
  366. data/lib/jets/processors/main_processor.rb +6 -13
  367. data/lib/jets/rack/logger.rb +77 -0
  368. data/lib/jets/router/compat/route_set.rb +177 -0
  369. data/lib/jets/router/dsl/mount.rb +40 -6
  370. data/lib/jets/router/dsl.rb +125 -105
  371. data/lib/jets/router/engine_mount.rb +36 -0
  372. data/lib/jets/router/help.rb +130 -0
  373. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  374. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  375. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  376. data/lib/jets/router/matcher.rb +140 -17
  377. data/lib/jets/router/resources/options.rb +6 -4
  378. data/lib/jets/router/route/after_initialize.rb +64 -0
  379. data/lib/jets/router/route/as.rb +93 -0
  380. data/lib/jets/router/route/authorizer.rb +1 -0
  381. data/lib/jets/router/route/compat.rb +45 -0
  382. data/lib/jets/router/route/info.rb +74 -0
  383. data/lib/jets/router/route/node.rb +137 -0
  384. data/lib/jets/router/route/path.rb +93 -0
  385. data/lib/jets/router/route.rb +109 -90
  386. data/lib/jets/router/route_set.rb +214 -0
  387. data/lib/jets/router/scope.rb +204 -69
  388. data/lib/jets/router/state.rb +67 -0
  389. data/lib/jets/router/util.rb +1 -31
  390. data/lib/jets/router.rb +64 -150
  391. data/lib/jets/ruby_version_check.rb +15 -0
  392. data/lib/jets/rule/base.rb +1 -0
  393. data/lib/jets/rule/dsl.rb +7 -7
  394. data/lib/jets/secrets.rb +110 -0
  395. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  396. data/lib/jets/spec_helpers/controllers.rb +32 -24
  397. data/lib/jets/spec_helpers.rb +0 -6
  398. data/lib/jets/stack/builder.rb +3 -2
  399. data/lib/jets/stack/definition.rb +1 -4
  400. data/lib/jets/stack/function.rb +2 -2
  401. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  402. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  403. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  404. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  405. data/lib/jets/stack/output/lookup.rb +1 -1
  406. data/lib/jets/stack/output.rb +2 -2
  407. data/lib/jets/stack/parameter.rb +2 -2
  408. data/lib/jets/stack/resource.rb +3 -3
  409. data/lib/jets/stack/s3_event.rb +51 -37
  410. data/lib/jets/stack.rb +1 -1
  411. data/lib/jets/tasks/engine.rake +85 -0
  412. data/lib/jets/tasks/framework.rake +66 -0
  413. data/lib/jets/tasks/log.rake +41 -0
  414. data/lib/jets/tasks/middleware.rake +9 -0
  415. data/lib/jets/tasks/misc.rake +81 -0
  416. data/lib/jets/tasks/statistics.rake +37 -0
  417. data/lib/jets/tasks/tmp.rake +51 -0
  418. data/lib/jets/tasks/yarn.rake +29 -0
  419. data/lib/jets/tasks/zeitwerk.rake +61 -0
  420. data/lib/jets/tasks.rb +18 -0
  421. data/lib/jets/tmp_loader.rb +1 -1
  422. data/lib/jets/turbine/configurable.rb +36 -0
  423. data/lib/jets/turbine/configuration.rb +101 -0
  424. data/lib/jets/turbine.rb +164 -20
  425. data/lib/jets/util/camelize.rb +24 -0
  426. data/lib/jets/util/yamler.rb +16 -0
  427. data/lib/jets/version.rb +1 -1
  428. data/lib/jets.rb +8 -14
  429. metadata +444 -347
  430. data/.python-version +0 -1
  431. data/.ruby-version +0 -1
  432. data/bin/release +0 -9
  433. data/lib/jets/application/defaults.rb +0 -200
  434. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  435. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  436. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  437. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  438. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  439. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  440. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  441. data/lib/jets/cfn/builders/interface.rb +0 -133
  442. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  443. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  444. data/lib/jets/cfn/built_template.rb +0 -15
  445. data/lib/jets/cfn/template_source.rb +0 -61
  446. data/lib/jets/commands/base.rb +0 -145
  447. data/lib/jets/commands/call.rb +0 -182
  448. data/lib/jets/commands/clean.rb +0 -19
  449. data/lib/jets/commands/configure.rb +0 -51
  450. data/lib/jets/commands/console.rb +0 -12
  451. data/lib/jets/commands/db/environment-task.rake +0 -3
  452. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  453. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  454. data/lib/jets/commands/db/tasks.rb +0 -34
  455. data/lib/jets/commands/db.rb +0 -13
  456. data/lib/jets/commands/dbconsole.rb +0 -134
  457. data/lib/jets/commands/delete.rb +0 -136
  458. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  459. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  460. data/lib/jets/commands/dynamodb.rb +0 -19
  461. data/lib/jets/commands/gems.rb +0 -13
  462. data/lib/jets/commands/help/call.md +0 -69
  463. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  464. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  465. data/lib/jets/commands/help/routes.md +0 -16
  466. data/lib/jets/commands/help/runner.md +0 -17
  467. data/lib/jets/commands/help.rb +0 -9
  468. data/lib/jets/commands/import/base.rb +0 -49
  469. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  470. data/lib/jets/commands/import/rack.rb +0 -16
  471. data/lib/jets/commands/import/rails.rb +0 -74
  472. data/lib/jets/commands/import/sequence.rb +0 -90
  473. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  474. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  475. data/lib/jets/commands/import.rb +0 -12
  476. data/lib/jets/commands/main.rb +0 -166
  477. data/lib/jets/commands/markdown/creator.rb +0 -58
  478. data/lib/jets/commands/markdown/index.rb +0 -27
  479. data/lib/jets/commands/markdown/page.rb +0 -125
  480. data/lib/jets/commands/markdown/shell.rb +0 -11
  481. data/lib/jets/commands/new.rb +0 -173
  482. data/lib/jets/commands/rake_command.rb +0 -61
  483. data/lib/jets/commands/rake_tasks.rb +0 -50
  484. data/lib/jets/commands/runner.rb +0 -16
  485. data/lib/jets/commands/sequence.rb +0 -105
  486. data/lib/jets/commands/stack_info.rb +0 -30
  487. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  488. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  489. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  490. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  491. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  492. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  493. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  494. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  495. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  496. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  497. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  498. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  499. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  500. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  501. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  502. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  503. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  504. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  505. data/lib/jets/commands/upgrade/version1.rb +0 -136
  506. data/lib/jets/commands/upgrade.rb +0 -105
  507. data/lib/jets/commands/url.rb +0 -69
  508. data/lib/jets/commands/webpacker_template.rb +0 -18
  509. data/lib/jets/controller/callbacks.rb +0 -73
  510. data/lib/jets/controller/cookies/jar.rb +0 -269
  511. data/lib/jets/controller/cookies.rb +0 -38
  512. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  513. data/lib/jets/controller/error.rb +0 -4
  514. data/lib/jets/controller/forgery_protection.rb +0 -43
  515. data/lib/jets/controller/layout.rb +0 -17
  516. data/lib/jets/controller/middleware/cors.rb +0 -60
  517. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  518. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  519. data/lib/jets/controller/middleware/reloader.rb +0 -15
  520. data/lib/jets/controller/parameters_filter.rb +0 -29
  521. data/lib/jets/controller/params.rb +0 -117
  522. data/lib/jets/controller/redirection.rb +0 -61
  523. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  524. data/lib/jets/controller/rendering.rb +0 -96
  525. data/lib/jets/controller/stage.rb +0 -34
  526. data/lib/jets/controller.rb +0 -3
  527. data/lib/jets/db.rb +0 -15
  528. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  529. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  530. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  531. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  532. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  533. data/lib/jets/generator.rb +0 -112
  534. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  535. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  536. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  537. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  538. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  539. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  540. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  541. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  542. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  543. data/lib/jets/lambda/task.rb +0 -111
  544. data/lib/jets/logger.rb +0 -21
  545. data/lib/jets/middleware/configurator.rb +0 -84
  546. data/lib/jets/middleware/default_stack.rb +0 -53
  547. data/lib/jets/middleware/layer.rb +0 -34
  548. data/lib/jets/middleware/stack.rb +0 -77
  549. data/lib/jets/middleware.rb +0 -33
  550. data/lib/jets/naming.rb +0 -63
  551. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  552. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  553. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  554. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  555. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  556. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  557. data/lib/jets/overrides/rails.rb +0 -6
  558. data/lib/jets/rack_server.rb +0 -86
  559. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  560. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  561. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  562. data/lib/jets/resource/api_gateway/method.rb +0 -102
  563. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  564. data/lib/jets/resource/base.rb +0 -28
  565. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  566. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  567. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  568. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  569. data/lib/jets/resource/child_stack/base.rb +0 -24
  570. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  571. data/lib/jets/resource/lambda/function.rb +0 -221
  572. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  573. data/lib/jets/resource/permission.rb +0 -45
  574. data/lib/jets/resource.rb +0 -71
  575. data/lib/jets/router/error.rb +0 -4
  576. data/lib/jets/router/finder.rb +0 -47
  577. data/lib/jets/router/helpers/core_helper.rb +0 -27
  578. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  579. data/lib/jets/router/helpers.rb +0 -4
  580. data/lib/jets/router/method_creator/code.rb +0 -99
  581. data/lib/jets/router/method_creator/edit.rb +0 -12
  582. data/lib/jets/router/method_creator/generic.rb +0 -11
  583. data/lib/jets/router/method_creator/index.rb +0 -48
  584. data/lib/jets/router/method_creator/new.rb +0 -12
  585. data/lib/jets/router/method_creator/root.rb +0 -15
  586. data/lib/jets/router/method_creator/show.rb +0 -12
  587. data/lib/jets/router/method_creator.rb +0 -50
  588. data/lib/jets/turbo/database_yaml.rb +0 -41
  589. data/lib/jets/turbo/project/.gitignore +0 -12
  590. data/lib/jets/turbo/project/.jetskeep +0 -1
  591. data/lib/jets/turbo/project/Gemfile +0 -16
  592. data/lib/jets/turbo/project/Rakefile +0 -2
  593. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  594. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  595. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  596. data/lib/jets/turbo/project/config/application.rb +0 -5
  597. data/lib/jets/turbo/project/config/routes.rb +0 -4
  598. data/lib/jets/turbo/project/config.ru +0 -5
  599. data/lib/jets/turbo/rails.rb +0 -127
  600. data/lib/jets/turbo/templates/config/database.yml +0 -30
  601. data/lib/jets/turbo.rb +0 -56
  602. data/readme/prerelease.md +0 -6
  603. data/readme/testing.md +0 -60
  604. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  605. /data/lib/jets/{commands → command}/help/build.md +0 -0
  606. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  607. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  608. /data/lib/jets/{commands → command}/help/console.md +0 -0
  609. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  610. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  611. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  612. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  613. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  614. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  615. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  616. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  617. /data/lib/jets/{commands → command}/help/server.md +0 -0
  618. /data/lib/jets/{commands → command}/help/status.md +0 -0
  619. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  620. /data/lib/jets/{commands → command}/help/url.md +0 -0
  621. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  622. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  623. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  624. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  625. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  626. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  627. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  628. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  629. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  630. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  633. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  634. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  635. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  636. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  637. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  638. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  639. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  640. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  641. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,99 @@
1
+ module Jets::Controller::Compat::ActionController
2
+ module Metal
3
+ extend ActiveSupport::Concern
4
+
5
+ delegate :commit_flash,
6
+ :filtered_parameters,
7
+ :parameter_filter,
8
+ :params,
9
+ :reset_session,
10
+ :session,
11
+ :session=,
12
+ :_routes,
13
+ to: :request
14
+ delegate :content_type,
15
+ :content_type=,
16
+ :get_header,
17
+ :headers,
18
+ :location,
19
+ :location=,
20
+ :media_type,
21
+ :response_code,
22
+ :set_header,
23
+ :status,
24
+ :status=,
25
+ :to_a,
26
+ to: :response
27
+ attr_internal :request, :response
28
+
29
+ alias :response_code :status # :nodoc:
30
+
31
+ # End of the module include chain.
32
+ # Go back from the ActionController::Base#initialize() interface
33
+ # to the original Jets::Lambda::Functions#initialize(event, context, meth) interface
34
+ def initialize
35
+ super(@event, @context, @meth)
36
+ end
37
+
38
+ # One key difference between process! vs dispatch!
39
+ #
40
+ # process! - takes the request through the middleware stack
41
+ # dispatch! - does not
42
+ #
43
+ # dispatch! is useful for megamode or mounted applications
44
+ #
45
+ def dispatch!
46
+ # extend Jets.application.routes.url_helpers
47
+ # extend Blorgh::Engine.routes.url_helpers
48
+
49
+ # ActionView::Base.send :include, Jets.application.routes.url_helpers
50
+ # ActionView::Base.send :include, Blorgh::Engine.routes.url_helpers
51
+ # extend Jets.application.routes.mounted_helpers
52
+
53
+ method_override!
54
+ process_action
55
+ commit_flash
56
+ response.to_a
57
+ end
58
+
59
+ # Override @meth when POST with _method=delete
60
+ # By the time processing reaches dispatch which calls method_override!
61
+ # The Rack::MethodOverride middleware has overriden env['REQUEST_METHOD'] with DELETE
62
+ # and set env['rack.methodoverride.original_method']
63
+ def method_override!
64
+ env = request.env
65
+ if env['rack.methodoverride.original_method'] && env['REQUEST_METHOD'] == 'DELETE'
66
+ @original_meth = @meth
67
+ @meth = "destroy"
68
+ end
69
+ end
70
+
71
+ # Not using rack.response.body directly because its value is wrapped in an Array, IE: [body]
72
+ # and ActionController components check response_body assuming it can be nil or a String.
73
+ # So we assign the String at the controller.response_body level and [body] at the
74
+ # the Response#body= level.
75
+ def response_body=(body)
76
+ body = [body] unless body.nil? || body.respond_to?(:each)
77
+ return unless body
78
+ response.body = body
79
+ super
80
+ end
81
+
82
+ # Unsure how Rails defines this but this is the Rails behavior according to the Kingsman/Devise port
83
+ def response=(triplet)
84
+ if triplet.is_a?(Array)
85
+ status, headers, body = triplet
86
+ self.status = status
87
+ self.headers.merge!(headers)
88
+ self.response_body = body
89
+ else
90
+ self.response_body = triplet # string
91
+ end
92
+ end
93
+
94
+ # Tests if render or redirect has already happened.
95
+ def performed?
96
+ response_body || response.committed?
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,13 @@
1
+ module Jets::Controller::Compat
2
+ # Got most from AbstractController::Caching and ActionController::Caching
3
+ module Caching
4
+ extend ActiveSupport::Concern
5
+
6
+ delegate :perform_caching, to: :class
7
+ class_methods do
8
+ def perform_caching
9
+ Jets.config.controller.perform_caching
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Jets::Controller::Compat
2
+ module Future
3
+ # raise_on_missing_callback_actions will be called in Rails 7.1
4
+ def raise_on_missing_callback_actions
5
+ puts <<~EOL
6
+ raise_on_missing_callback_actions called, Jets defaults to true so
7
+ when we upgrade to Rails 7.1 components it'll trigger and will
8
+ fix any issues. Also will need to make it configurable.
9
+ EOL
10
+ true
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,47 @@
1
+ module Jets::Controller::Compat
2
+ module RouteSet
3
+ # Override behavior from ActionDispatch::Routing::UrlFor
4
+ #
5
+ # When Jets include ActionDispatch::Routing::UrlFor is in the Jets::Controller::Base class
6
+ # It sets @_routes = nil
7
+ #
8
+ # We need to set @_routes to the Jets::Controller::Request routes object
9
+ # to provide a Jets custom routes object that's compatiable the Rails routes object.
10
+ #
11
+ # Why does @_routes have to be set?
12
+ #
13
+ # How this works is a bit hard to follow. Here's the current trace with actionpack 7.0.8
14
+ #
15
+ # Here's where controller render goes from controller-land to view-land.
16
+ #
17
+ # action_controller/metal/rendering.rb:158:in `render_to_body'
18
+ # action_view/rendering.rb:114:in `render_to_body'
19
+ #
20
+ # In action_view/rendering.rb render_to_body => _render_template is called and
21
+ # a view_context is created.
22
+ #
23
+ # def view_context
24
+ # view_context_class.new(lookup_context, view_assigns, self)
25
+ # end
26
+ #
27
+ # self is the <PostsController>. The controller instance is the _routes is used.
28
+ # The view_context_class is somehow a wrapped anonymous class that has the
29
+ # ActionView::Base#initialize method.
30
+ #
31
+ # Usage:
32
+ #
33
+ # module Jets::Controller
34
+ # class Base < Jets::Lambda::Functions
35
+ # ...
36
+ # include Compat::RouteSet::ControllerPrepend
37
+ # ...
38
+ # include ActionController::UrlFor # includes ActionDispatch::Routing::UrlFor
39
+ # ...
40
+ # include Compat::RouteSet::ControllerAppend
41
+ #
42
+ def initialize(*)
43
+ @_routes = self.class._routes # set by inherited hook in JetsTurbines::RoutesHelpers.with
44
+ super
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,39 @@
1
+ module Jets::Controller::Decorate
2
+ module ApigwStage
3
+ def add_apigw_stage(url)
4
+ return url unless add_apigw_stage?
5
+ stage_name = ENV['JETS_APIGW_STAGE'] || Jets::Cfn::Resource::ApiGateway::Deployment.stage_name
6
+ uri = URI.parse(url)
7
+ path = uri.path
8
+ original_ends_with_slash = path.ends_with?('/')
9
+ path = "/#{path}" unless path.starts_with?('/')
10
+ segments = path.split('/')
11
+ # unless to prevent stage name being added twice if url_for is called twice on the same string
12
+ segments.insert(1, stage_name) unless segments[1] == stage_name
13
+ new_path = segments.join('/') # modified path
14
+ new_path = "#{new_path}/" if !new_path.ends_with?('/') && original_ends_with_slash
15
+ uri.path = new_path
16
+ uri.to_s
17
+ end
18
+
19
+ def add_apigw_stage?
20
+ return true if ENV['JETS_APIGW_STAGE']
21
+ return false if ENV['JETS_TEST']
22
+ return false unless request # nil for `importmap json` cli and actionmailer
23
+
24
+ # Using request.host which might be different than event['headers']['Host'] when config.app.domain is set.
25
+ # This means that visiting the APIGW domain name directly will not prepend the stage name
26
+ # to the helper method urls. This is ok since the APIGW domain name is not used in production.
27
+ # It's a compromise since we cannot pass the CloudFront host to APIGW.
28
+ # Rather have the CloudFront user-friendly domain name work than APIGW domain name.
29
+ # Examples:
30
+ # https://djvojd3em5.execute-api.us-west-2.amazonaws.com/dev/
31
+ # https://friendly.domain.com/
32
+ host = request.host
33
+ on_cloud9 = !!(host =~ /cloud9\..*\.amazonaws\.com/)
34
+ return false if on_cloud9
35
+
36
+ host.include?('amazonaws.com')
37
+ end
38
+ end
39
+ end
@@ -1,4 +1,4 @@
1
- class Jets::Controller
1
+ module Jets::Controller::Decorate
2
2
  module Authorization
3
3
  extend ActiveSupport::Concern
4
4
 
@@ -0,0 +1,90 @@
1
+ module Jets::Controller::Decorate
2
+ module Logging
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # A little bit tricky. Jets::Controller::Base includes AbstractController::Logger
7
+ # via ActionController::Redirecting.
8
+ # AbstractController::Logger defines a config_accessor :logger
9
+ # This results in logger being nil. We set it to logger here to correct it.
10
+ # Unsure why this does not happen with ActionController::Base though.
11
+ delegate :logger, to: Jets # fixes logger but Rails doesnt need this
12
+ end
13
+
14
+ def dispatch!
15
+ t1 = Time.now
16
+ log_start
17
+ triplet = super # Abstract#dispatch!
18
+ took = Time.now - t1
19
+ log_finish status: status, took: took
20
+ triplet
21
+ end
22
+
23
+ def processing_log
24
+ processing = "Processing #{self.class.name}##{@meth}"
25
+ processing << " (original method #{@original_meth})" if @original_meth
26
+ processing
27
+ end
28
+
29
+ # Documented interface method, careful not to rename
30
+ def log_start
31
+ # Commented out Started because Jets::Rack::Logger middleware handles now
32
+ # ip = request.ip
33
+ # logger.info "Started (Jets) #{request.request_method} \"#{request.path}\" for #{ip} at #{Time.now}"
34
+
35
+ logger.info processing_log
36
+ logger.info " Raw Event: #{@event}" if ENV['JETS_LOG_RAW_EVENT']
37
+ logger.info " Event: #{event_log}" if log_event?
38
+ params = filtered_parameters.to_h.except('controller', 'action')
39
+ # JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
40
+ logger.info " Parameters: #{JSON.dump(params)}" unless params.empty?
41
+ end
42
+
43
+ def log_event?
44
+ return false if ENV['JETS_LOG_EVENT'] == '0'
45
+ Jets.config.logging.event
46
+ end
47
+
48
+ # Documented interface method, careful not to rename
49
+ def log_finish(options={})
50
+ status, took = options[:status], options[:took]
51
+ logger.info "Completed Status Code #{status} in #{"%.3f" % took}s"
52
+ end
53
+
54
+ def event_log
55
+ event = @event.dup # clone to display event
56
+
57
+ if event['isBase64Encoded']
58
+ event['body'] = '[BASE64_ENCODED]'
59
+ else
60
+ event['body'] = filter_json_log(event['body'])
61
+ end
62
+
63
+ event["multiValueQueryStringParameters"] = parameter_filter.filter(event['multiValueQueryStringParameters']) if event['multiValueQueryStringParameters']
64
+ event["pathParameters"] = parameter_filter.filter(event['pathParameters']) if event['pathParameters']
65
+ event["queryStringParameters"] = parameter_filter.filter(event['queryStringParameters']) if event['queryStringParameters']
66
+ json_dump_log(event)
67
+ end
68
+
69
+ # Append _log to reduce chance of name collision with user defined methods
70
+ def filter_json_log(json_text)
71
+ return json_text if json_text.blank?
72
+
73
+ begin
74
+ hash_params = JSON.parse(json_text)
75
+ filtered_params = parameter_filter.filter(hash_params)
76
+ JSON.dump(filtered_params)
77
+ rescue JSON::ParserError
78
+ '[FILTERED]'
79
+ end
80
+ end
81
+
82
+ # Handles binary data safely
83
+ def json_dump_log(data)
84
+ JSON.dump(data)
85
+ rescue Encoding::UndefinedConversionError
86
+ data['body'] = '[BINARY]'
87
+ JSON.dump(data)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,16 @@
1
+ module Jets::Controller::Decorate
2
+ module Redirecting
3
+ include ApigwStage
4
+
5
+ def _compute_redirect_to_location(request, options) # :nodoc:
6
+ adjust = options.respond_to?(:to_str) || options.is_a?(String)
7
+ options = add_apigw_stage(options) if adjust
8
+ super
9
+ end
10
+
11
+ def redirect_back(fallback_location: '/')
12
+ location = request.headers["Referer"] || fallback_location
13
+ redirect_to location
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module Jets::Controller::Decorate
2
+ module UrlFor
3
+ include ApigwStage
4
+
5
+ def url_for(options = nil)
6
+ url = super
7
+ add_apigw_stage(url)
8
+ end
9
+ end
10
+ end
@@ -1,31 +1,49 @@
1
1
  require 'base64'
2
2
 
3
- module Jets::Controller::Rack
4
- class Adapter
3
+ # Also, logic in the opposite direction: Jets::Controller::Middleware::Mimic::Apigw
4
+ # Only called by AWS Lambda before it runs through the middlewares.
5
+ module Jets::Controller::Handler
6
+ class Apigw
5
7
  extend Memoist
6
8
 
7
- # Returns back API Gateway response hash structure
8
- def self.process(event, context)
9
- adapter = new(event, context)
10
- adapter.process
11
- end
12
-
13
- def initialize(event, context)
14
- @event, @context = event, context
9
+ attr_reader :event, :context, :controller, :meth, :rack_env
10
+ def initialize(event, context, controller, meth, rack_env)
11
+ @event = event
12
+ @context = context
13
+ @controller = controller
14
+ @meth = meth
15
+ @rack_env = rack_env
15
16
  end
16
17
 
17
18
  # 1. Convert API Gateway event event to Rack env
18
19
  # 2. Process using full Rack middleware stack
19
20
  # 3. Convert back to API gateway response structure payload
20
- def process
21
- status, headers, body = Jets.application.call(env)
22
- convert_to_api_gateway(status, headers, body)
23
- end
24
-
25
- def env
26
- Env.new(@event, @context, adapter: true).convert # convert to Rack env
21
+ #
22
+ # Returns back API Gateway response hash structure
23
+ # Only called when running in AWS Lambda.
24
+ #
25
+ # Set the jets.* env variables so we have access to them in the middleware.
26
+ # The controller instance is called in the Main middleware.
27
+ # On AWS, will use original event and context.
28
+ # On local server, will use Middleware::Mimic event and context.
29
+ def process_through_middlewares
30
+ env = rack_env.merge(
31
+ 'jets.controller' => @controller, # original controller instance from handler
32
+ 'jets.context' => @context, # original AWS Lambda context
33
+ 'jets.event' => @event, # original AWS Lambda event
34
+ 'jets.meth' => @meth,
35
+ )
36
+ status, headers, body = Jets.application.call(env) # goes through full middleware stack
37
+ # middleware can handle Array or BodyProxy, APIGW require Strings
38
+ case body
39
+ when Rack::Files::Iterator
40
+ str = File.read(body.path)
41
+ else
42
+ # join for Rack::BodyProxy or Array
43
+ str = body.join
44
+ end
45
+ convert_to_api_gateway(status, headers, str)
27
46
  end
28
- memoize :env
29
47
 
30
48
  # Transform the structure to AWS_PROXY compatible structure
31
49
  # http://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html#api-gateway-simple-proxy-for-lambda-output-format
@@ -71,24 +89,5 @@ module Jets::Controller::Rack
71
89
  # Can set JETS_ELB=1 for local testing
72
90
  @event["requestContext"] && @event["requestContext"]["elb"] || ENV['JETS_ELB']
73
91
  end
74
-
75
- # Called from Jets::Controller::Base.process. Example:
76
- #
77
- # adapter.rack_vars(
78
- # 'jets.controller' => self,
79
- # 'lambda.context' => context,
80
- # 'lambda.event' => event,
81
- # 'lambda.meth' => meth,
82
- # )
83
- #
84
- # Passes a these special variables so we have access to them in the middleware.
85
- # The controller instance is called in the Main middleware.
86
- # The lambda.* info is used by the Rack::Local middleware to create a mimiced
87
- # controller for the local server.
88
- #
89
- def rack_vars(vars)
90
- env.merge!(vars)
91
- end
92
-
93
92
  end
94
93
  end
@@ -0,0 +1,41 @@
1
+ module Jets::Controller
2
+ # Only called by AWS Lambda before it runs through the middlewares.
3
+ module Handler
4
+ extend ActiveSupport::Concern
5
+
6
+ # One key difference between process! vs dispatch!
7
+ #
8
+ # process! - takes the request through the middleware stack
9
+ # dispatch! - does not
10
+ #
11
+ # Generally, we want to use process! so it goes through the middleware stacks.
12
+ #
13
+ # The last middleware stack is Jets::Controller::Middleware::Main
14
+ # Which comes back to dispatch! in this same Controller Base class.
15
+ #
16
+ # class Jets::Controller::Middleware::Main
17
+ # def call!
18
+ # setup
19
+ # @controller.dispatch! # Returns triplet
20
+ # end
21
+ # end
22
+ #
23
+ def process!
24
+ apigw = Jets::Controller::Handler::Apigw.new(event, context, self, @meth, @rack_env)
25
+ apigw.process_through_middlewares # Returns API Gateway hash structure
26
+ end
27
+
28
+ class_methods do
29
+ def process(event, context={}, meth)
30
+ rack_env = Jets::Controller::RackAdapter::Env.new(event, context).convert # convert to Rack env
31
+ controller = new(event, context, meth, rack_env)
32
+ # Using send because process! was a private method in Jets::RackController (old) so
33
+ # it doesnt create a lambda function. It's doesnt matter what scope process!
34
+ # is in Controller::Base because Jets lambda functions inheritance doesnt
35
+ # include methods in Controller::Base.
36
+ controller.send(:process!)
37
+ end
38
+ end
39
+ end
40
+ end
41
+
@@ -1,6 +1,6 @@
1
1
  # All roads lead here
2
2
  #
3
- # 1. AWS Lambda: PostsController - Rack::Adapter - Jets.application.call
3
+ # 1. AWS Lambda: PostsController - Handler::Apigw - Jets.application.call
4
4
  # 2. Local server: config.ru - run Jet.application - Jets.application.call
5
5
  #
6
6
  # Then eventually:
@@ -9,22 +9,30 @@
9
9
  #
10
10
  module Jets::Controller::Middleware
11
11
  class Main
12
+ include Jets::ExceptionReporting
13
+
12
14
  def initialize(env)
13
15
  @env = env
14
- @controller = env['jets.controller']
15
- @event = env['lambda.event']
16
- @context = env['lambda.context']
17
- @meth = env['lambda.meth']
16
+ @controller = env['jets.controller'] # original controller instance from handler or mimic
17
+ @context = env['jets.context'] # original AWS Lambda event or mimic context
18
+ @event = env['jets.event'] # original AWS Lambda event or mimic event
19
+ @meth = env['jets.meth']
18
20
  end
19
21
 
20
22
  def call
21
- ENV['JETS_HOST'] = jets_host # Dirty to use what's essentially a global variable but unsure how else to achieve
22
23
  dup.call!
23
24
  end
24
25
 
26
+ # With exception reporting here instead of Controller::Base#process so any
27
+ # exception in the middleware stack is caught.
28
+ # Also using with_exception_reporting instead of
29
+ # prepend Jets::ExceptionReporting::Process because the method is call!
30
+ # not process. The interface is different.
25
31
  def call!
26
- setup
27
- @controller.dispatch! # Returns triplet
32
+ with_exception_reporting do
33
+ setup
34
+ @controller.dispatch! # Returns triplet
35
+ end
28
36
  end
29
37
 
30
38
  # Common setup logical at this point of middleware processing right before
@@ -1,21 +1,43 @@
1
1
  # Takes a Rack env and converts to ApiGateway event
2
- class Jets::Controller::Middleware::Local
3
- class ApiGateway
2
+ # This runs only locally, when not on AWS Lambda
3
+ # Note: Logic in the opposite direction: Jets::Controller::Handler::Apigw#rack_vars
4
+ class Jets::Controller::Middleware::Mimic
5
+ class Apigw
4
6
  extend Memoist
5
7
 
6
8
  def initialize(route, env)
7
9
  @route, @env = route, env
8
10
  end
9
11
 
12
+ # Actual controller instance
13
+ def controller
14
+ controller_class = @route.controller_name.constantize
15
+ meth = @route.action_name
16
+ # must keep the same env as @env, rack env, else constraint lambda proc request will be different
17
+ controller_class.new(event, context, meth, @env)
18
+ end
19
+ memoize :controller # for same object_id in case apigw.controller is called twice
20
+
21
+ def meth
22
+ @route.action_name
23
+ end
24
+ memoize :meth
25
+
26
+ def context
27
+ LambdaContext.new
28
+ end
29
+ memoize :context
30
+
10
31
  def event
11
- resource = @route.path(:api_gateway) # posts/{id}/edit
32
+ resource = @route.path(:api_gateway) # /posts/{id}/edit
12
33
  path = @env['PATH_INFO'].sub('/','') # remove beginning slash
13
34
  {
14
- "resource" => "/#{resource}", # "/posts/{id}/edit"
35
+ "resource" => resource, # "/posts/{id}/edit"
15
36
  "path" => @env['PATH_INFO'], # /posts/tung/edit
16
37
  "httpMethod" => @env['REQUEST_METHOD'], # GET
17
38
  "headers" => request_headers,
18
39
  "queryStringParameters" => query_string_parameters,
40
+ "multiValueQueryStringParameters" => multi_value_query_string_parameters,
19
41
  "pathParameters" => @route.extract_parameters(path),
20
42
  "stageVariables" => nil,
21
43
  "requestContext" => {},
@@ -24,7 +46,9 @@ class Jets::Controller::Middleware::Local
24
46
  }
25
47
  end
26
48
  memoize :event
49
+ alias convert event
27
50
 
51
+ protected
28
52
  # Annoying. The headers part of the AWS Lambda proxy structure
29
53
  # does not consisently use the same casing scheme for the header keys.
30
54
  # Sometimes it looks like this:
@@ -78,7 +102,20 @@ class Jets::Controller::Middleware::Local
78
102
 
79
103
  def query_string_parameters
80
104
  Rack::Utils.parse_nested_query(@env['QUERY_STRING'])
105
+ # @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
106
+ # key, value = parameter.split('=')
107
+ # hash[key] = value
108
+ # end || {}
81
109
  end
110
+ alias multi_value_query_string_parameters query_string_parameters
111
+
112
+ # def multi_value_query_string_parameters
113
+ # @env['QUERY_STRING']&.split('&')&.each_with_object({}) do |parameter, hash|
114
+ # key, value = parameter.split('=')
115
+ # hash[key] = [] if hash[key].nil?
116
+ # hash[key] << value
117
+ # end || {}
118
+ # end
82
119
 
83
120
  # To get the post body:
84
121
  # rack.input: #<StringIO:0x007f8ccf8db9a0>
@@ -0,0 +1,44 @@
1
+ class Jets::Controller::Middleware::Mimic
2
+ # This class uses method_missing to mimic for all possible future methods
3
+ # that AWS Lambda might add to the context object.
4
+ #
5
+ # The current methods available on the Lambda Context object:
6
+ # aws_request_id, invoked_function_arn, log_group_name,
7
+ # log_stream_name, function_name, memory_limit_in_mb, function_version,
8
+ # identity, client_context, deadline_ms
9
+ #
10
+ # Locally, example mimic values:
11
+ #
12
+ # context.aws_request_id "mimic lambda context: aws_request_id"
13
+ # context.invoked_function_arn "mimic lambda context: invoked_function_arn"
14
+ # context.log_group_name "mimic lambda context: log_group_name"
15
+ # context.log_stream_name "mimic lambda context: log_stream_name"
16
+ # context.function_name "mimic lambda context: function_name"
17
+ # context.memory_limit_in_mb "mimic lambda context: memory_limit_in_mb"
18
+ # context.function_version "mimic lambda context: function_version"
19
+ # context.identity "mimic lambda context: identity"
20
+ # context.client_context "mimic lambda context: client_context"
21
+ # context.deadline_ms "mimic lambda context: deadline_ms"
22
+ #
23
+ # On AWS, example real values:
24
+ #
25
+ # context.aws_request_id "b8357b1d-15f2-4197-9c6b-d6873be5eaba"
26
+ # context.invoked_function_arn "arn:aws:lambda:us-west-2:112233445566:function:demo-dev-controller"
27
+ # context.log_group_name "/aws/lambda/demo-dev-controller"
28
+ # context.log_stream_name "2023/09/10/[$LATEST]18323c481c674665b25496c329daa382"
29
+ # context.function_name "demo-dev-controller"
30
+ # context.memory_limit_in_mb "1536"
31
+ # context.function_version "$LATEST"
32
+ # context.identity nil
33
+ # context.client_context nil
34
+ # context.deadline_ms 1694353587386
35
+ #
36
+ class LambdaContext
37
+ def initialize(*)
38
+ end
39
+
40
+ def method_missing(method_name, *args)
41
+ "mimic lambda context: #{method_name}"
42
+ end
43
+ end
44
+ end