jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,20 @@
1
+ require "bundler/setup"
2
+ require "jets"
3
+ Jets.once # runs once in lambda execution context
4
+
5
+ <%# # IE: handlers/controllers/up_controller.index -%>
6
+ <% handler = @vars.handler_base + '.#{action}' -%>
7
+ def lambda_handler(event:, context:)
8
+ if event['_prewarm']
9
+ Jets.process(event, context, nil)
10
+ return
11
+ end
12
+
13
+ <% if @vars.process_type == "controller" -%>
14
+ if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
15
+ route = Jets::Router.find_route_by_event(event)
16
+ event["pathParameters"] = route.rebuild_path_parameters(event) # override
17
+ end
18
+ <% end -%>
19
+ Jets.process(event, context, "<%= handler -%>")
20
+ end
@@ -7,6 +7,12 @@ Jets.once # runs once in lambda execution context
7
7
  meth = handler.split('.').last
8
8
  -%>
9
9
  def <%= meth -%>(event:, context:)
10
+ <% if @vars.process_type == "controller" -%>
11
+ if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
12
+ route = Jets::Router.find_route_by_event(event)
13
+ event["pathParameters"] = route.rebuild_path_parameters(event) # override
14
+ end
15
+ <% end -%>
10
16
  Jets.process(event, context, "<%= handler -%>")
11
17
  end
12
18
  <% end %>
data/lib/jets/bundle.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "jets/turbo"
2
-
3
1
  module Jets
4
2
  # Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
5
3
  module Bundle
@@ -16,7 +14,7 @@ module Jets
16
14
  #
17
15
  def setup
18
16
  return unless jets_project?
19
- return unless bundler_enabled?
17
+ return unless gemfile?
20
18
  Kernel.require "bundler/setup"
21
19
  Bundler.setup # Same as Bundler.setup(:default)
22
20
  rescue LoadError => e
@@ -40,7 +38,7 @@ module Jets
40
38
  # project with another Gemfile, the load errors will also be rescued.
41
39
  def require
42
40
  return unless jets_project?
43
- return unless bundler_enabled?
41
+ return unless gemfile?
44
42
  Kernel.require "bundler/setup"
45
43
  Bundler.require(*bundler_groups)
46
44
  rescue LoadError => e
@@ -66,11 +64,6 @@ module Jets
66
64
  EOL
67
65
  end
68
66
 
69
- # Also check for Afterburner mode since in that mode jets is a standalone tool.
70
- def bundler_enabled?
71
- !Jets::Turbo.afterburner? && gemfile?
72
- end
73
-
74
67
  def gemfile?
75
68
  ENV['BUNDLE_GEMFILE'] || File.exist?("Gemfile")
76
69
  end
@@ -0,0 +1,82 @@
1
+ # Classes that inherit from this method should NOT define and override:
2
+ #
3
+ # logical_id
4
+ # type
5
+ # properties
6
+ # attributes
7
+ #
8
+ # These are computed methods that derive their values from the resource definition itself.
9
+ # Overriding these methods will remove the computed logical which handles things
10
+ # like camelizing and replacements.
11
+ module Jets::Cfn
12
+ class Base
13
+ extend Memoist
14
+ include Jets::Util::Camelize
15
+
16
+ # interface method
17
+ def replacements
18
+ @replacements || {}
19
+ end
20
+
21
+ def replacer
22
+ Resource::Replacer.new(replacements)
23
+ end
24
+ memoize :replacer
25
+
26
+ def template
27
+ standarize(definition)
28
+ end
29
+ memoize :template
30
+
31
+ # CloudFormation Resources reference: https://amzn.to/2NKg6ip
32
+ def standarize(*definition)
33
+ Resource::Standardizer.new(definition).template
34
+ end
35
+
36
+ def logical_id
37
+ id = template.keys.first
38
+ id = replacer.replace_value(id) # IE: replace possible {namespace} in the logical id
39
+ Jets::Camelizer.camelize(id) # logical id limit is 256 chars
40
+ end
41
+
42
+ def type
43
+ attributes[:Type]
44
+ end
45
+
46
+ def properties
47
+ attributes[:Properties]
48
+ end
49
+
50
+ def attributes
51
+ attributes = template.values.first
52
+ attributes = replacer.replace_placeholders(attributes)
53
+ camelize(attributes)
54
+ end
55
+
56
+ def parameters
57
+ {}
58
+ end
59
+
60
+ def outputs
61
+ {}
62
+ end
63
+
64
+ def permission
65
+ Resource::Lambda::Permission.new(replacements, self)
66
+ end
67
+ memoize :permission
68
+
69
+ class << self
70
+ def truncate_id(id, postfix = '')
71
+ # Api Gateway resource name has a limit of 64 characters.
72
+ # Yet it throws not found when ID is longer than 62 characters and I don't know why.
73
+ # To keep it safe, let's stick to the 62 characters limit.
74
+ if id.size + postfix.size > 62
75
+ "#{id[0..(55 - postfix.size)]}#{Digest::MD5.hexdigest(id)[0..5]}#{postfix}"
76
+ else
77
+ "#{id}#{postfix}"
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,12 @@
1
+ module Jets::Cfn::Builder::Api
2
+ class Base
3
+ extend Memoist
4
+ include Jets::Cfn::Builder::Interface
5
+ include Jets::AwsServices
6
+
7
+ def initialize(options={})
8
+ @options = options
9
+ @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
10
+ end
11
+ end
12
+ end
@@ -1,21 +1,11 @@
1
- module Jets::Cfn::Builders
2
- class ApiDeploymentBuilder
3
- include Interface
4
- include Jets::AwsServices
5
-
6
- def initialize(options={})
7
- @options = options
8
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
- end
10
-
11
- # compose is an interface method
1
+ module Jets::Cfn::Builder::Api
2
+ class Deployment < Base
3
+ # interface method
12
4
  def compose
13
- deployment = Jets::Resource::ApiGateway::Deployment.new
5
+ deployment = Jets::Cfn::Resource::ApiGateway::Deployment.new
14
6
  add_resource(deployment)
15
7
  add_parameters(deployment.parameters)
16
8
  add_outputs(deployment.outputs)
17
-
18
- add_base_path_mapping
19
9
  end
20
10
 
21
11
  # Because Jets generates a new timestamped logical id for the API Deployment
@@ -30,27 +20,27 @@ module Jets::Cfn::Builders
30
20
  def add_base_path_mapping
31
21
  return unless Jets.custom_domain?
32
22
 
33
- function = Jets::Resource::ApiGateway::BasePath::Function.new
23
+ function = Jets::Cfn::Resource::ApiGateway::BasePath::Function.new
34
24
  add_resource(function)
35
25
  add_outputs(function.outputs)
36
26
 
37
- mapping = Jets::Resource::ApiGateway::BasePath::Mapping.new
27
+ mapping = Jets::Cfn::Resource::ApiGateway::BasePath::Mapping.new
38
28
  add_resource(mapping)
39
29
  add_outputs(mapping.outputs)
40
30
 
41
- iam_role = Jets::Resource::ApiGateway::BasePath::Role.new
31
+ iam_role = Jets::Cfn::Resource::ApiGateway::BasePath::Role.new
42
32
  add_resource(iam_role)
43
33
  add_outputs(iam_role.outputs)
44
34
  end
45
35
 
46
- # template_path is an interface method
36
+ # interface method
47
37
  def template_path
48
38
  Jets::Names.api_deployment_template_path
49
39
  end
50
40
 
51
- # do not bother writing a template if routes are empty
41
+ # do not write a template if routes are empty
52
42
  def write
53
- super unless Jets::Router.routes.empty?
43
+ super unless Jets::Router.no_routes?
54
44
  end
55
45
  end
56
46
  end
@@ -1,40 +1,30 @@
1
- module Jets::Cfn::Builders
2
- class ApiGatewayBuilder
3
- extend Memoist
4
- include Interface
5
- include Jets::AwsServices
6
-
7
- def initialize(options={})
8
- @options = options
9
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
10
- end
11
-
12
- # compose is an interface method
1
+ module Jets::Cfn::Builder::Api
2
+ class Gateway < Base
3
+ # interface method
13
4
  def compose
14
- add_gateway_routes # "child template": build before add_gateway_rest_api. RestApi logical id and change detection is dependent on it.
15
5
  add_gateway_rest_api # changes parent template
16
6
  add_custom_domain # changes parent template
17
7
  end
18
8
 
19
- # template_path is an interface method
9
+ # interface method
20
10
  def template_path
21
11
  Jets::Names.api_gateway_template_path
22
12
  end
23
13
 
24
- # do not bother writing a template if routes are empty
14
+ # do write a template if routes are empty
25
15
  def write
26
- super unless Jets::Router.routes.empty?
16
+ super unless Jets::Router.no_routes?
27
17
  end
28
18
 
29
19
  # If the are routes in config/routes.rb add Gateway API in parent stack
30
20
  def add_gateway_rest_api
31
- rest_api = Jets::Resource::ApiGateway::RestApi.new
21
+ rest_api = Jets::Cfn::Resource::ApiGateway::RestApi.new
32
22
  add_resource(rest_api)
33
23
  add_outputs(rest_api.outputs)
34
24
 
35
- deployment = Jets::Resource::ApiGateway::Deployment.new
25
+ deployment = Jets::Cfn::Resource::ApiGateway::Deployment.new
36
26
  outputs = deployment.outputs(true)
37
- add_output("RestApiUrl", Value: outputs["RestApiUrl"])
27
+ add_output(:RestApiUrl, Value: outputs[:RestApiUrl])
38
28
  end
39
29
 
40
30
  def add_custom_domain
@@ -48,7 +38,7 @@ module Jets::Cfn::Builders
48
38
  end
49
39
 
50
40
  def add_route53_dns
51
- dns = Jets::Resource::Route53::RecordSet.new
41
+ dns = Jets::Cfn::Resource::Route53::RecordSet.new
52
42
  if !existing_domain_name?(dns.domain_name) or existing_dns_record_on_stack?
53
43
  add_resource(dns)
54
44
  add_outputs(dns.outputs)
@@ -56,10 +46,10 @@ module Jets::Cfn::Builders
56
46
  end
57
47
 
58
48
  def create_domain_name
59
- resource = Jets::Resource::ApiGateway::DomainName.new
49
+ resource = Jets::Cfn::Resource::ApiGateway::DomainName.new
60
50
 
61
51
  return {
62
- "DomainName" => resource.domain_name
52
+ DomainName: resource.domain_name
63
53
  } if (existing_domain_name?(resource) and !existing_domain_name_on_stack?)
64
54
 
65
55
  add_resource(resource)
@@ -67,9 +57,9 @@ module Jets::Cfn::Builders
67
57
  end
68
58
 
69
59
  def existing_domain_name?(resource)
70
- apigateway.get_domain_name({
60
+ apigateway.get_domain_name(
71
61
  domain_name: resource.domain_name
72
- })
62
+ )
73
63
  true
74
64
  # IE: Aws::APIGateway::Errors::NotFoundException Invalid domain name identifier specified
75
65
  rescue Aws::APIGateway::Errors::NotFoundException
@@ -110,18 +100,5 @@ module Jets::Cfn::Builders
110
100
  nil
111
101
  end
112
102
  memoize :api_gateway_physical_resource_id
113
-
114
- # Adds route related Resources and Outputs
115
- # Delegates to ApiResourcesBuilder
116
- PAGE_LIMIT = Integer(ENV['JETS_AWS_OUTPUTS_LIMIT'] || 200) # Allow override for testing
117
- def add_gateway_routes
118
- # Reject homepage. Otherwise we have 200 - 1 resources on the first page.
119
- # There's a next call in ApiResources.add_gateway_resources to skip the homepage.
120
- page_builder = Jets::Cfn::Builders::PageBuilder.new
121
- pages = page_builder.build
122
- pages.each_with_index do |paths, i|
123
- ApiResourcesBuilder.new(@options, paths, i+1).build
124
- end
125
- end
126
103
  end
127
104
  end
@@ -0,0 +1,54 @@
1
+ module Jets::Cfn::Builder::Api
2
+ class Mapping < Base
3
+ # interface method
4
+ def compose
5
+ add_parameters(parameters)
6
+ add_base_path_mapping
7
+ end
8
+
9
+ def parameters
10
+ p = {
11
+ GemLayer: "GemLayer",
12
+ IamRole: "IamRole",
13
+ RestApi: "RestApi",
14
+ S3Bucket: "S3Bucket",
15
+ }
16
+ p[:DomainName] = "DomainName" if Jets.custom_domain?
17
+ p[:BasePath] = "BasePath"
18
+ p
19
+ end
20
+
21
+ # Because Jets generates a new timestamped logical id for the API Deployment
22
+ # resource it also creates a new root base path mapping and fails. Additionally,
23
+ # the base path mapping depends on the API Deploy for the stage name.
24
+ #
25
+ # We resolve this by using a custom resource that does an in-place update.
26
+ #
27
+ # Note, also tried to change the domain name of to something like demo-dev-[random].mydomain.com
28
+ # but that does not work because the domain name has to match the route53 record exactly.
29
+ #
30
+ def add_base_path_mapping
31
+ function = Jets::Cfn::Resource::ApiGateway::BasePath::Function.new
32
+ add_resource(function)
33
+ add_outputs(function.outputs)
34
+
35
+ mapping = Jets::Cfn::Resource::ApiGateway::BasePath::Mapping.new
36
+ add_resource(mapping)
37
+ add_outputs(mapping.outputs)
38
+
39
+ iam_role = Jets::Cfn::Resource::ApiGateway::BasePath::Role.new
40
+ add_resource(iam_role)
41
+ add_outputs(iam_role.outputs)
42
+ end
43
+
44
+ # interface method
45
+ def template_path
46
+ Jets::Names.api_mapping_template_path
47
+ end
48
+
49
+ # do not write a template unless custom domain is used
50
+ def write
51
+ super if Jets.custom_domain?
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,72 @@
1
+ module Jets::Cfn::Builder::Api
2
+ class Methods < Paged
3
+ # interface method
4
+ def compose
5
+ return if routes.empty?
6
+ add_api_methods
7
+ add_api_gateway_parameters
8
+ end
9
+
10
+ # Resources Example (only showing keys we care about):
11
+ #
12
+ # UpIndexGetApiMethod:
13
+ # Type: AWS::ApiGateway::Method
14
+ # Properties:
15
+ # ResourceId: !Ref UpApiResource
16
+ # RestApiId: !Ref RestApi
17
+ # Integration:
18
+ # Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${UpControllerIndexLambdaFunction}/invocations
19
+ #
20
+ def add_api_methods
21
+ routes.each_with_index do |route, i|
22
+ method = Jets::Cfn::Resource::ApiGateway::Method.new(route)
23
+ add_resource(method)
24
+ end
25
+ end
26
+
27
+ def add_api_gateway_parameters
28
+ api_methods = Jets::Cfn::Params::Api::Methods.new(template: @template)
29
+ api_methods.params.each do |key, _|
30
+ add_parameter(key)
31
+ end
32
+ end
33
+
34
+ def routes
35
+ ensure_one_apigw_method_proxy_routes!
36
+ @items.map do |uid|
37
+ Jets::Router.routes.find do |route|
38
+ route.path == "/" && route.path == uid.split('|').last || # root route. any http method works
39
+ "#{route.http_method}|#{route.path}" == uid # Match the method and path. IE: GET|posts/:id
40
+ end
41
+ end.compact
42
+ end
43
+ memoize :routes
44
+
45
+ # Only add missing root route with one_apigw_method_for_all_routes setting.
46
+ # Add the root route because that's how it works locally.
47
+ # With one_apigw_method_for_all_routes, it all goes to one lambda function
48
+ # and routing is determined by config/routes.rb
49
+ def ensure_one_apigw_method_proxy_routes!
50
+ return unless Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
51
+
52
+ # find before modifications
53
+ catchall_route = Jets::Router.routes.find { |route| route.path =~ /^\/\*/ }
54
+ root_route = Jets::Router.routes.find { |route| route.http_method == "GET" && route.path == "/" }
55
+
56
+ # modifications
57
+ unless catchall_route
58
+ # Note: catchall to route does not matter. In one_apigw_method_for_all_routes mode it all goes to one lambda function
59
+ # and then gets routed by config/routes.rb
60
+ Jets::Router.routes << Jets::Router::Route.new(path: '/*catchall', http_method: 'ANY', to: 'jets/public#show')
61
+ end
62
+ if !root_route && catchall_route
63
+ Jets::Router.routes << Jets::Router::Route.new(path: '/', http_method: 'GET', to: catchall_route.to)
64
+ end
65
+ end
66
+
67
+ # template_path is an interface method
68
+ def template_path
69
+ Jets::Names.api_methods_template_path(@page_number)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,30 @@
1
+ module Jets::Cfn::Builder::Api
2
+ class Paged < Base
3
+ class << self
4
+ def build_pages(options={})
5
+ # IE: Pages::Methods.pages Pages::Resources.pages
6
+ pages_class.pages.each do |page|
7
+ # Key builder here:
8
+ # Jets::Cfn::Builder::Api::Methods
9
+ # Jets::Cfn::Builder::Api::Resources
10
+ new(options.merge(page: page)).build
11
+ end
12
+ end
13
+
14
+ # Examples:
15
+ # Pages::Methods.new(options)
16
+ # Pages::Resources.new(options)
17
+ def pages_class
18
+ class_name = self.to_s.gsub(/.*::Api::/, '') # IE: Methods or Resources
19
+ "Jets::Cfn::Builder::Api::Pages::#{class_name}".constantize
20
+ end
21
+ end
22
+
23
+ def initialize(options={})
24
+ super
25
+ @page = options[:page]
26
+ @items = @page.items # interface method: Cors: paths, Resources: paths, Methods: routes
27
+ @page_number = @page.number # interface method
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,105 @@
1
+ module Jets::Cfn::Builder::Api::Pages
2
+ class Base
3
+ class_attribute :pages
4
+ @@pages = {}
5
+
6
+ class << self
7
+ extend Memoist
8
+
9
+ # Returns: Array<Page>
10
+ def pages
11
+ return @@pages[self.name] if @@pages[self.name]
12
+
13
+ pages = []
14
+ uids_map = build_uids_map
15
+ uids_map.each do |uid, existing_page|
16
+ if existing_page
17
+ pages[existing_page] ||= []
18
+ pages[existing_page] << uid
19
+ end
20
+ end
21
+ pages.compact! # not using page 0 so need to compact to remove the first nil element
22
+
23
+ # Remove existing uids from uids_map. Leave behind new uids
24
+ pages.each do |page|
25
+ page.each do |i|
26
+ uids_map.delete(i)
27
+ end
28
+ end
29
+
30
+ # Fill up available space in each page so all existing pages are full
31
+ keys = uids_map.keys
32
+ pages.each do |page|
33
+ break if keys.empty?
34
+ while page.size < page_limit
35
+ uid = keys.shift
36
+ break if uid.nil?
37
+ page << uid
38
+ end
39
+ end
40
+
41
+ # Add remaining slices to new additional pages
42
+ pages += keys.each_slice(page_limit).to_a
43
+
44
+ @@pages[self.name] = []
45
+ pages.each_with_index do |uids, i|
46
+ # Note: page number starts at 1
47
+ # Because of this we need to do a pages.compact! above to remove the first nil element. Feel this is easier for follow for us humans.
48
+ @@pages[self.name] << Page.new(items: uids, number: i+1)
49
+ end
50
+
51
+ @@pages[self.name]
52
+ end
53
+
54
+ # Build map that has uids as keys and page number as value
55
+ # For Resources, the uid is the path
56
+ # Example: {"a1"=>0, "a2"=>0, "b1"=>1, "b2"=>1, "c1"=>2, "c2"=>2}
57
+ # For Methods, the uid is the method|path
58
+ # Example: {"GET|a1"=>0, "GET|a2"=>0, "GET|b1"=>1, "GET|b2"=>1, "GET|c1"=>2, "GET|c2"=>2}
59
+ def build_uids_map
60
+ map = {}
61
+ # uids is interface method
62
+ uids.each do |uid|
63
+ map[uid] = find_page_index(uid)
64
+ end
65
+ map
66
+ end
67
+
68
+ def find_page_index(new_uid)
69
+ slices = previously_deployed || []
70
+ slices.each_with_index do |slice, page_number|
71
+ items = slice["items"]
72
+ items.find do |old_uid|
73
+ return page_number if old_uid == new_uid # found
74
+ end
75
+ end
76
+ nil # not found
77
+ end
78
+
79
+ def previously_deployed
80
+ state = Jets::Router::State.new
81
+ name = self.to_s.split('::').last.downcase
82
+ deployed = state.load(name) # IE: state.load("resources") or state.load("methods")
83
+ deployed
84
+ end
85
+ memoize :previously_deployed
86
+
87
+ # Relevant CloudFormation limits:
88
+ # Resources 500
89
+ # Parameters 200
90
+ # Outputs 200
91
+ # For API Gateway Methods template,
92
+ # Lambda Functions and APIGW Resources are passed in as parameters.
93
+ # Each APIGW Method can use 2 parameters.
94
+ # So use page limit of 100 to provide a buffer.
95
+ # Technically, can use a different limit for Resources and Cors templates,
96
+ # but keeping all at 100 for consistency.
97
+ #
98
+ # JETS_API_PAGE_LIMIT is based on that
99
+ # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
100
+ def page_limit
101
+ Integer(ENV['JETS_API_PAGE_LIMIT'] || 100)
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,17 @@
1
+ module Jets::Cfn::Builder::Api::Pages
2
+ class Methods < Base
3
+ class << self
4
+ # interface method
5
+ def uids
6
+ if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
7
+ return ['ANY|/', 'ANY|/*catchall']
8
+ end
9
+
10
+ routes = Jets::Router.routes
11
+ routes.map do |route|
12
+ "#{route.http_method}|#{route.path}" # IE: GET|posts/:id
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ module Jets::Cfn::Builder::Api::Pages
2
+ # Note: Do not use, it behaves differently in Ruby 2 v Ruby 3
3
+ # Page = Struct.new(:items, :number)
4
+ #
5
+ # In Ruby 2, assigning an Array to items creates an extra :items key in the structure
6
+ #
7
+ # #<struct Page items={:items=>["*catchall", "posts"],
8
+ #
9
+ # In Ruby 3, assigning an Array to items.
10
+ #
11
+ # #<struct Page items=["*catchall", "posts"], number=1>
12
+ #
13
+ class Page
14
+ attr_accessor :items, :number
15
+ def initialize(items:, number:)
16
+ @items, @number = items, number
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module Jets::Cfn::Builder::Api::Pages
2
+ class Resources < Base
3
+ class << self
4
+ # interface method
5
+ def uids
6
+ if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
7
+ return ['/', '/*catchall']
8
+ end
9
+
10
+ # Note: Do not use
11
+ # Jets::Router.routes.map(&:path)
12
+ # It does not include all the top of the leaves. Example:
13
+ # admin is not included
14
+ # admin/new is included
15
+ # Also, do not include the root/homepage path. It's already created
16
+ # in api-gateway.yml
17
+ Jets::Router.all_paths.reject { |p| p.blank? }
18
+ end
19
+ end
20
+ end
21
+ end