jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,195 +1,117 @@
1
+ require "action_controller"
2
+ require "action_controller/log_subscriber"
3
+ require "active_support/concern"
4
+ require "active_support/callbacks"
5
+ require "abstract_controller/callbacks"
1
6
  require "json"
2
7
  require "rack/utils" # Rack::Utils.parse_nested_query
3
8
 
4
9
  # Controller public methods get turned into Lambda functions.
5
- class Jets::Controller
6
- class Base < Jets::Lambda::Functions
7
- include ActiveSupport::Rescuable
8
- include Authorization
9
- include Callbacks
10
- include Cookies
11
- include ForgeryProtection
12
- include Jets::Router::Helpers
13
- include Layout
14
- include Params
15
- include Rendering
16
-
17
- delegate :headers, to: :request
18
- delegate :set_header, to: :response
19
- attr_reader :request, :response
20
- attr_accessor :session
21
- def initialize(event, context={}, meth)
22
- super
23
- @request = Request.new(event, context)
24
- @response = Response.new
25
- end
26
-
27
- # Overrides Base.process
28
- def self.process(event, context={}, meth)
29
- controller = new(event, context, meth)
30
- # Using send because process! is private method in Jets::RackController so
31
- # it doesnt create a lambda function. It's doesnt matter what scope process!
32
- # is in Controller::Base because Jets lambda functions inheritance doesnt
33
- # include methods in Controller::Base.
34
- # TODO: Can process! be a protected method to avoid this?
35
- controller.send(:process!)
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
- # Most of the time, you want process! instead of dispatch!
44
- #
45
- def process!
46
- adapter = Jets::Controller::Rack::Adapter.new(event, context)
47
- adapter.rack_vars(
48
- 'jets.controller' => self,
49
- 'lambda.context' => context,
50
- 'lambda.event' => event,
51
- 'lambda.meth' => meth,
52
- )
53
-
54
- # adapter.process calls
55
- #
56
- # Jets.application.call(env)
57
- #
58
- # and that goes through the middleware stacks. The last middleware stack is Jets::Controller::Middleware::Main
59
- #
60
- # class Jets::Controller::Middleware::Main
61
- # def call!
62
- # setup
63
- # @controller.dispatch! # Returns triplet
64
- # end
65
- # end
66
- #
67
- adapter.process # Returns API Gateway hash structure
68
- end
69
-
70
- # One key difference between process! vs dispatch!
71
- #
72
- # process! - takes the request through the middleware stack
73
- # dispatch! - does not
74
- #
75
- # dispatch! is useful for megamode or mounted applications
76
- #
77
- def dispatch!
78
- method_override!
79
-
80
- t1 = Time.now
81
- log_start
82
-
83
- begin
84
- if run_before_actions(break_if: -> { @rendered })
85
- send(@meth)
86
- action_completed = true
87
- else
88
- Jets.logger.info "Filter chain halted as #{@last_callback_name} rendered or redirected"
89
- end
90
-
91
- triplet = ensure_render
92
- run_after_actions if action_completed
93
- rescue Exception => exception
94
- rescue_with_handler(exception) || raise
95
- triplet = ensure_render
96
- end
97
-
98
- took = Time.now - t1
99
- status = triplet[0]
100
- log_finish(status: status, took: took)
101
- triplet # status, headers, body
102
- end
103
-
104
- # Override @meth when POST with _method=delete
105
- # By the time processing reaches dispatch which calls method_override!
106
- # The Rack::MethodOverride middleware has overriden env['REQUEST_METHOD'] with DELETE
107
- # and set env['rack.methodoverride.original_method']
108
- def method_override!
109
- env = request.env
110
- if env['rack.methodoverride.original_method'] && env['REQUEST_METHOD'] == 'DELETE'
111
- @original_meth = @meth
112
- @meth = "delete"
113
- end
114
- end
115
-
116
- def processing_log
117
- processing = "Processing #{self.class.name}##{@meth}"
118
- processing << " (original method #{@original_meth})" if @original_meth
119
- processing
120
- end
121
-
122
- # Documented interface method, careful not to rename
123
- def log_start
124
- # JSON.dump makes logging look pretty in CloudWatch logs because it keeps it on 1 line
125
- ip = request.ip
126
- Jets.logger.info "Started #{@event['httpMethod']} \"#{@event['path']}\" for #{ip} at #{Time.now}"
127
- Jets.logger.info processing_log
128
- Jets.logger.info " Event: #{event_log}"
129
- Jets.logger.info " Parameters: #{JSON.dump(filtered_parameters.to_h)}"
130
- end
131
-
132
- # Documented interface method, careful not to rename
133
- def log_finish(options={})
134
- status, took = options[:status], options[:took]
135
- Jets.logger.info "Completed Status Code #{status} in #{took}s"
136
- end
137
-
138
- def event_log
139
- display_event = @event.dup
10
+ module Jets::Controller
11
+ DEFAULT_CONTENT_TYPE = "text/html; charset=utf-8"
140
12
 
141
- if @event['isBase64Encoded']
142
- display_event['body'] = '[BASE64_ENCODED]'
143
- else
144
- display_event['body'] = parameter_filter.filter_json(display_event['body'])
145
- end
13
+ class RoutingError < StandardError; end
146
14
 
147
- display_event["queryStringParameters"] = parameter_filter.filter(display_event['queryStringParameters'])
148
- display_event["pathParameters"] = parameter_filter.filter(display_event['pathParameters'])
149
- json_dump(display_event)
15
+ class Base < Jets::Lambda::Functions
16
+ # Make Jets controller "compatible" with Rails
17
+ # Note: Rolling include into a single Compat module causes naming conflicts with ActionController and AbstractController.
18
+ # So we include each module individually. It's clearer this way anyway.
19
+ include Compat::AbstractController::Base
20
+ include Compat::ActionController::Metal
21
+ include Compat::RouteSet
22
+ include Compat::Caching
23
+ include Compat::Future
24
+
25
+ # Order matters due to use of super and the module included chain.
26
+ include AbstractController::Rendering # at top to normalize render options asap
27
+ include AbstractController::Translation
28
+ include AbstractController::AssetPaths
29
+
30
+ include ActionController::Helpers
31
+ include Jets::Router::Helpers::NamedRoutes
32
+
33
+ include ActionController::UrlFor # includes ActionDispatch::Routing::UrlFor
34
+ include ActionController::Redirecting
35
+ include ActionView::Layouts # includes ActionView::Rendering
36
+ include ActionController::Rendering
37
+ include ActionController::Renderers::All # for use_renderers :json, :js, :xml
38
+ include ActionController::ConditionalGet
39
+ include ActionController::EtagWithTemplateDigest
40
+ include ActionController::EtagWithFlash
41
+ include ActionController::Caching
42
+ include ActionController::MimeResponds
43
+ include ActionController::ImplicitRender # includes BasicImplicitRender action_controller/metal/basic_implicit_render.rb
44
+ include ActionController::StrongParameters
45
+ include ActionController::ParameterEncoding
46
+ include ActionController::Cookies
47
+ include ActionController::Flash
48
+ include ActionController::FormBuilder
49
+ include ActionController::RequestForgeryProtection
50
+ include ActionController::ContentSecurityPolicy
51
+ include ActionController::PermissionsPolicy
52
+ # include ActionController::Streaming # not supported
53
+ # include ActionController::DataStreaming # not supported
54
+ include ActionController::HttpAuthentication::Basic::ControllerMethods
55
+ include ActionController::HttpAuthentication::Digest::ControllerMethods
56
+ include ActionController::HttpAuthentication::Token::ControllerMethods
57
+ # include ActionController::DefaultHeaders # not needed
58
+ include ActionController::Logging # log_at: ability to change log level
59
+
60
+ # More Jets overrides and customizations
61
+ include Handler # Lambda Handler process! method. Runs on AWS only.
62
+ include RackAdapter::Action # action rack method
63
+
64
+ # Before callbacks should also be executed as early as possible, so
65
+ # also include them at the bottom.
66
+ include AbstractController::Callbacks
67
+
68
+ # Must near bottom because decorating Rails behavior
69
+ include Decorate::Authorization # APIGW Authorizers
70
+ include Decorate::UrlFor # add_apigw_stage
71
+ include Decorate::Redirecting # add_apigw_stage
72
+ include Decorate::Logging
73
+
74
+ # Append rescue at the bottom to wrap as much as possible.
75
+ include ActionController::Rescue
76
+
77
+ # Add instrumentations hooks at the bottom, to ensure they instrument
78
+ # all the methods properly.
79
+ include ActionController::Instrumentation # TODO: figure why notifications dont work
80
+
81
+ # Params wrapper should come before instrumentation so they are
82
+ # properly showed in logs
83
+ include ActionController::ParamsWrapper
84
+
85
+ def initialize(event, context, meth, rack_env)
86
+ # Passing in rack env so the same rack env (same object id) is used.
87
+ # This is important for:
88
+ # 1. Constraints lambda procs
89
+ # 2. Controller.action rack methods
90
+ @event = event
91
+ @context = context
92
+ @meth = meth
93
+ @rack_env = rack_env
94
+ @_request = Jets::Controller::Request.new(event: event, rack_env: @rack_env)
95
+ # Note: Rails sets request.route in the Rails::Engine#build_request instead.
96
+ # The Jets request class is built slightly differently, so set it here.
97
+ # The request.routes method is need to that url_helpers work in generally.
98
+ # It's just how Rails ActionView implements url_helpers.
99
+ @_request.routes = self.class._routes
100
+ @_response = Jets::Controller::Response.new
101
+ @_response.request = @request
102
+ # Jets::Controller::Base#initialize interface is different than ActionController::Controller::Base.
103
+ # The super call goes to ActionController modules that can decorate and call super again.
104
+ # At the end of the module chain is Jets::Controller::Compat::ActionController::Metal#initialize
105
+ # which goes back to the original Jets::Lambda::Functions#initialize(event, context, meth) interface.
106
+ super() # ActionController::Base#initialize() interface
150
107
  end
151
108
 
152
- # Handles binary data safely
153
- def json_dump(data)
154
- JSON.dump(data)
155
- rescue Encoding::UndefinedConversionError
156
- data['body'] = '[BINARY]'
157
- JSON.dump(data)
158
- end
109
+ abstract!
159
110
 
160
- def controller_paths
161
- paths = []
162
- klass = self.class
163
- while klass != Jets::Controller::Base
164
- paths << klass.controller_path
165
- klass = klass.superclass
166
- end
167
- paths
168
- end
169
-
170
- def controller_name
171
- self.class.to_s.underscore
172
- end
111
+ use_renderers :json, :js, :xml
112
+ end
173
113
 
174
- def action_name
175
- @meth
176
- end
114
+ # See Jets::Controller::Compat::ActionController::Metal dispatch! method
177
115
 
178
- class_attribute :internal_controller
179
- class << self
180
- def internal(value=nil)
181
- if !value.nil?
182
- self.internal_controller = value
183
- else
184
- self.internal_controller
185
- end
186
- end
187
-
188
- def helper_method(*meths)
189
- meths.each do |meth|
190
- Jets::Router::Helpers.define_helper_method(meth)
191
- end
192
- end
193
- end
194
- end
116
+ ActiveSupport.run_load_hooks(:jets_controller, Base)
195
117
  end
@@ -0,0 +1,126 @@
1
+ require "abstract_controller/error"
2
+ require "active_support/configurable"
3
+ require "active_support/descendants_tracker"
4
+ require "active_support/core_ext/module/anonymous"
5
+ require "active_support/core_ext/module/attr_internal"
6
+
7
+ module Jets::Controller::Compat::AbstractController
8
+ module Base
9
+ extend ActiveSupport::Concern
10
+ include ActiveSupport::Configurable
11
+
12
+ delegate :action_methods,
13
+ :controller_name,
14
+ :controller_path,
15
+ to: :class
16
+ class_methods do
17
+ # A list of method names that should be considered actions. This
18
+ # includes all public instance methods on a controller, less
19
+ # any internal methods (see internal_methods), adding back in
20
+ # any methods that are internal, but still exist on the class
21
+ # itself.
22
+ #
23
+ # ==== Returns
24
+ # * <tt>Set</tt> - A set of all methods that should be considered actions.
25
+ def action_methods
26
+ @action_methods ||= begin
27
+ # All public instance methods of this class, including ancestors
28
+ methods = (public_instance_methods(true) -
29
+ # Except for public instance methods of Base and its ancestors
30
+ internal_methods +
31
+ # Be sure to include shadowed public instance methods of this class
32
+ public_instance_methods(false))
33
+
34
+ methods.map!(&:to_s)
35
+
36
+ methods.to_set
37
+ end
38
+ end
39
+
40
+ # A list of all internal methods for a controller. This finds the first
41
+ # abstract superclass of a controller, and gets a list of all public
42
+ # instance methods on that abstract class. Public instance methods of
43
+ # a controller would normally be considered action methods, so methods
44
+ # declared on abstract classes are being removed.
45
+ # (ActionController::Metal and ActionController::Base are defined as abstract)
46
+ def internal_methods
47
+ controller = self
48
+
49
+ controller = controller.superclass until controller.abstract?
50
+ controller.public_instance_methods(true)
51
+ end
52
+
53
+ def controller_name
54
+ @controller_name ||= name.demodulize.delete_suffix("Controller").underscore
55
+ end
56
+
57
+ def controller_path
58
+ @controller_path ||= name.delete_suffix("Controller").underscore
59
+ end
60
+
61
+ # Returns true if the given controller is capable of rendering
62
+ # a path. A subclass of +AbstractController::Base+
63
+ # may return false. An Email controller for example does not
64
+ # support paths, only full URLs.
65
+ def supports_path?
66
+ true
67
+ end
68
+ end
69
+
70
+ ##
71
+ # Returns the body of the HTTP response sent by the controller.
72
+ attr_internal :response_body
73
+
74
+ ##
75
+ # Returns the name of the action this controller is processing.
76
+ def action_name
77
+ @meth
78
+ end
79
+
80
+ def available_action?(action_name)
81
+ self.class.action_methods.include?(action_name.to_s)
82
+ end
83
+
84
+ # Tests if a response body is set. Used to determine if the
85
+ # +process_action+ callback needs to be terminated in
86
+ # AbstractController::Callbacks.
87
+ def performed?
88
+ if response_body.respond_to?(:each)
89
+ !response_body.compact.empty? # [""] is considered true
90
+ else # nil
91
+ !response_body.nil?
92
+ end
93
+ end
94
+
95
+ def inspect # :nodoc:
96
+ "#<#{self.class.name}:#{'%#016x' % (object_id << 1)}>"
97
+ end
98
+
99
+ private
100
+ # Returns true if the name can be considered an action because
101
+ # it has a method defined in the controller.
102
+ #
103
+ # ==== Parameters
104
+ # * <tt>name</tt> - The name of an action to be tested
105
+ def action_method?(name)
106
+ self.class.action_methods.include?(name)
107
+ end
108
+
109
+ # Call the action. Override this in a subclass to modify the
110
+ # behavior around processing an action. This, and not #process,
111
+ # is the intended way to override action dispatching.
112
+ #
113
+ # Notice that the first argument is the method to be dispatched
114
+ # which is *not* necessarily the same as the action name.
115
+ def process_action
116
+ send_action(action_name) # to BasicImplicitRender#send_action => super (posts#index) or default_render
117
+ end
118
+
119
+ # Actually call the method associated with the action. Override
120
+ # this method if you wish to change how action methods are called,
121
+ # not to add additional behavior around it. For example, you would
122
+ # override #send_action if you want to inject arguments into the
123
+ # method.
124
+ alias send_action send
125
+ end
126
+ end
@@ -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