jets 3.1.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +141 -0
  5. data/Gemfile +1 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +21 -43
  8. data/Rakefile +3 -3
  9. data/backers.md +0 -5
  10. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  11. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  12. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  13. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  14. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  16. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  17. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  18. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  19. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  20. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  21. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  22. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  23. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  24. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  25. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  26. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  27. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  28. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  29. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  30. data/engines/internal/lib/internal/actionview.rb +152 -0
  31. data/engines/internal/lib/internal/activerecord.rb +37 -0
  32. data/engines/internal/lib/internal/activesupport.rb +47 -0
  33. data/engines/internal/lib/internal/engine.rb +13 -0
  34. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  35. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  36. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  37. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  39. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  40. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  41. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  42. data/exe/jets +1 -10
  43. data/jets.gemspec +16 -13
  44. data/lib/jets/app_loader.rb +77 -0
  45. data/lib/jets/application/bootstrap.rb +100 -0
  46. data/lib/jets/application/configuration/defaults.rb +256 -0
  47. data/lib/jets/application/configuration.rb +494 -0
  48. data/lib/jets/application/default_middleware_stack.rb +140 -0
  49. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  50. data/lib/jets/application/finisher.rb +266 -0
  51. data/lib/jets/application/routes_reloader.rb +80 -0
  52. data/lib/jets/application.rb +515 -199
  53. data/lib/jets/authorizer/base.rb +1 -0
  54. data/lib/jets/authorizer/dsl.rb +15 -11
  55. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  56. data/lib/jets/autoloaders/gem.rb +70 -0
  57. data/lib/jets/autoloaders/inflector.rb +21 -0
  58. data/lib/jets/autoloaders.rb +38 -101
  59. data/lib/jets/aws_info.rb +2 -2
  60. data/lib/jets/aws_services/stack_status.rb +1 -1
  61. data/lib/jets/aws_services.rb +8 -0
  62. data/lib/jets/backtrace_cleaner.rb +27 -0
  63. data/lib/jets/booter.rb +30 -118
  64. data/lib/jets/builders/code_builder.rb +64 -122
  65. data/lib/jets/builders/code_size.rb +1 -0
  66. data/lib/jets/builders/gem_replacer.rb +6 -12
  67. data/lib/jets/builders/handler_generator.rb +34 -14
  68. data/lib/jets/builders/lambda_layer.rb +2 -7
  69. data/lib/jets/builders/purger.rb +1 -1
  70. data/lib/jets/builders/rack_packager.rb +1 -1
  71. data/lib/jets/builders/ruby_packager.rb +54 -10
  72. data/lib/jets/builders/shim_vars/app.rb +10 -6
  73. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  74. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  75. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  76. data/lib/jets/bundle.rb +2 -9
  77. data/lib/jets/cfn/base.rb +82 -0
  78. data/lib/jets/cfn/builder/api/base.rb +12 -0
  79. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  80. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  81. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  82. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  83. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  84. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  85. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  86. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  87. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  88. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  89. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  90. data/lib/jets/cfn/builder/controller.rb +28 -0
  91. data/lib/jets/cfn/builder/function.rb +9 -0
  92. data/lib/jets/cfn/builder/interface.rb +146 -0
  93. data/lib/jets/cfn/builder/job.rb +10 -0
  94. data/lib/jets/cfn/builder/nested.rb +130 -0
  95. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  96. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  97. data/lib/jets/cfn/builder/parent.rb +149 -0
  98. data/lib/jets/cfn/builder/post_process.rb +25 -0
  99. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  100. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  101. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  102. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  103. data/lib/jets/cfn/deployment.rb +45 -0
  104. data/lib/jets/cfn/download.rb +39 -0
  105. data/lib/jets/cfn/params/api/base.rb +39 -0
  106. data/lib/jets/cfn/params/api/cors.rb +10 -0
  107. data/lib/jets/cfn/params/api/methods.rb +69 -0
  108. data/lib/jets/cfn/params/api/resources.rb +28 -0
  109. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  111. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  113. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  117. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  119. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  128. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  129. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  133. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  134. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  135. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  137. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  138. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  139. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  140. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  141. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  142. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  143. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  144. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  145. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  146. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  147. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  148. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  149. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  150. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  151. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  152. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  153. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  154. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  155. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  156. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  157. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  158. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  159. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  162. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  163. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  164. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  165. data/lib/jets/cfn/resource/one/function.rb +66 -0
  166. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  167. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  168. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  169. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  170. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  171. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  172. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  173. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  174. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  175. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  176. data/lib/jets/cfn/resource.rb +8 -0
  177. data/lib/jets/cfn/ship.rb +30 -16
  178. data/lib/jets/cfn/status.rb +1 -1
  179. data/lib/jets/cfn/template.rb +89 -0
  180. data/lib/jets/cfn/upload.rb +26 -23
  181. data/lib/jets/cli.rb +28 -203
  182. data/lib/jets/command/actions.rb +49 -0
  183. data/lib/jets/command/api_helpers.rb +41 -0
  184. data/lib/jets/command/aws_helpers.rb +26 -0
  185. data/lib/jets/command/base.rb +204 -0
  186. data/lib/jets/command/behavior.rb +83 -0
  187. data/lib/jets/command/environment_argument.rb +42 -0
  188. data/lib/jets/command/help/call.md +48 -0
  189. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  190. data/lib/jets/command/help/logs.md +21 -0
  191. data/lib/jets/{commands → command}/help/new.md +3 -4
  192. data/lib/jets/command/help/projects.md +6 -0
  193. data/lib/jets/command/help/releases.md +37 -0
  194. data/lib/jets/command/help/rollback.md +5 -0
  195. data/lib/jets/command/help/routes.md +15 -0
  196. data/lib/jets/command/help/runner.md +40 -0
  197. data/lib/jets/command/help/stacks.md +6 -0
  198. data/lib/jets/command/help.rb +17 -0
  199. data/lib/jets/command/helpers/editor.rb +35 -0
  200. data/lib/jets/command.rb +133 -0
  201. data/lib/jets/commands/application/application_command.rb +40 -0
  202. data/lib/jets/commands/build/build_command.rb +33 -0
  203. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  204. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  205. data/lib/jets/commands/call/base_guesser.rb +5 -5
  206. data/lib/jets/commands/call/call_command.rb +27 -0
  207. data/lib/jets/commands/call/caller.rb +184 -0
  208. data/lib/jets/commands/call/guesser.rb +1 -1
  209. data/lib/jets/commands/clean/base.rb +1 -1
  210. data/lib/jets/commands/clean/build.rb +1 -1
  211. data/lib/jets/commands/clean/clean_command.rb +15 -0
  212. data/lib/jets/commands/clean/log.rb +4 -4
  213. data/lib/jets/commands/configure/configure_command.rb +9 -0
  214. data/lib/jets/commands/console/console_command.rb +38 -0
  215. data/lib/jets/commands/credentials/USAGE +103 -0
  216. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  217. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  218. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  219. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  220. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  221. data/lib/jets/commands/delete/delete_command.rb +155 -0
  222. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
  223. data/lib/jets/commands/dev/dev_command.rb +19 -0
  224. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  225. data/lib/jets/commands/encrypted/USAGE +46 -0
  226. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  227. data/lib/jets/commands/gems/gems_command.rb +14 -0
  228. data/lib/jets/commands/generate/generate_command.rb +95 -0
  229. data/lib/jets/commands/help/USAGE +20 -0
  230. data/lib/jets/commands/help/help_command.rb +15 -0
  231. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  232. data/lib/jets/commands/logs/logs_command.rb +45 -0
  233. data/lib/jets/commands/new/new_command.rb +19 -0
  234. data/lib/jets/commands/notes/notes_command.rb +30 -0
  235. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  236. data/lib/jets/commands/projects/projects_command.rb +30 -0
  237. data/lib/jets/commands/rake/rake_command.rb +59 -0
  238. data/lib/jets/commands/releases/releases_command.rb +72 -0
  239. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  240. data/lib/jets/commands/routes/routes_command.rb +19 -0
  241. data/lib/jets/commands/runner/runner_command.rb +60 -0
  242. data/lib/jets/commands/server/server_command.rb +291 -0
  243. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  244. data/lib/jets/commands/status/status_command.rb +9 -0
  245. data/lib/jets/commands/url/url_command.rb +92 -0
  246. data/lib/jets/commands/version/version_command.rb +11 -0
  247. data/lib/jets/commands.rb +17 -0
  248. data/lib/jets/configuration.rb +166 -0
  249. data/lib/jets/controller/base.rb +105 -183
  250. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  251. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  252. data/lib/jets/controller/compat/caching.rb +13 -0
  253. data/lib/jets/controller/compat/future.rb +13 -0
  254. data/lib/jets/controller/compat/route_set.rb +47 -0
  255. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  256. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  257. data/lib/jets/controller/decorate/logging.rb +90 -0
  258. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  259. data/lib/jets/controller/decorate/url_for.rb +10 -0
  260. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  261. data/lib/jets/controller/handler.rb +41 -0
  262. data/lib/jets/controller/middleware/main.rb +16 -8
  263. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  264. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  265. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  266. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  267. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  268. data/lib/jets/controller/request/compat/params.rb +144 -0
  269. data/lib/jets/controller/request/compat/request.rb +125 -0
  270. data/lib/jets/controller/request.rb +35 -18
  271. data/lib/jets/controller/response/compat/response.rb +67 -0
  272. data/lib/jets/controller/response.rb +91 -8
  273. data/lib/jets/core.rb +153 -50
  274. data/lib/jets/core_ext/file.rb +9 -0
  275. data/lib/jets/core_ext/kernel.rb +2 -2
  276. data/lib/jets/core_ext/symbol.rb +5 -0
  277. data/lib/jets/core_ext.rb +4 -0
  278. data/lib/jets/dev_caching.rb +44 -0
  279. data/lib/jets/dotenv/ssm.rb +5 -2
  280. data/lib/jets/dotenv.rb +4 -3
  281. data/lib/jets/engine/configuration.rb +96 -0
  282. data/lib/jets/engine/turbines.rb +23 -0
  283. data/lib/jets/engine.rb +380 -0
  284. data/lib/jets/erb.rb +1 -1
  285. data/lib/jets/exception_reporting.rb +43 -0
  286. data/lib/jets/generators/job/job_generator.rb +41 -0
  287. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  288. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  289. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  290. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  291. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  292. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  293. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  294. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  295. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  296. data/lib/jets/generators/overrides/app/USAGE +38 -0
  297. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  298. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  299. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  300. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  301. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  302. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  303. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  304. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  305. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  306. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  307. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  308. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  309. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  311. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  312. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  313. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  314. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  315. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  316. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  317. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  318. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  319. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  320. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  322. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  323. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  324. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  325. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  326. data/lib/jets/generators.rb +112 -0
  327. data/lib/jets/inflections.rb +1 -1
  328. data/lib/jets/info.rb +116 -0
  329. data/lib/jets/initializable.rb +95 -0
  330. data/lib/jets/job/base.rb +5 -2
  331. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  332. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  333. data/lib/jets/job/dsl/iot_event.rb +6 -6
  334. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  335. data/lib/jets/job/dsl/log_event.rb +2 -2
  336. data/lib/jets/job/dsl/rule_event.rb +7 -4
  337. data/lib/jets/job/dsl/s3_event.rb +1 -1
  338. data/lib/jets/job/dsl/sns_event.rb +6 -6
  339. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  340. data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
  341. data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
  342. data/lib/jets/klass.rb +5 -6
  343. data/lib/jets/lambda/definition.rb +118 -0
  344. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  345. data/lib/jets/lambda/dsl.rb +73 -54
  346. data/lib/jets/lambda/function.rb +3 -3
  347. data/lib/jets/lambda/function_constructor.rb +6 -6
  348. data/lib/jets/lambda/functions.rb +36 -1
  349. data/lib/jets/mega/hash_converter.rb +2 -2
  350. data/lib/jets/mega/request/source.rb +1 -2
  351. data/lib/jets/mega/request.rb +4 -4
  352. data/lib/jets/names.rb +79 -0
  353. data/lib/jets/overrides/dummy/rails.rb +11 -0
  354. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  355. data/lib/jets/overrides/puma.rb +10 -0
  356. data/lib/jets/paths.rb +243 -0
  357. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  358. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  359. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  360. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  361. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  362. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  363. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  364. data/lib/jets/preheat.rb +26 -33
  365. data/lib/jets/processors/deducer.rb +2 -2
  366. data/lib/jets/processors/main_processor.rb +6 -13
  367. data/lib/jets/rack/logger.rb +77 -0
  368. data/lib/jets/router/compat/route_set.rb +177 -0
  369. data/lib/jets/router/dsl/mount.rb +40 -6
  370. data/lib/jets/router/dsl.rb +125 -105
  371. data/lib/jets/router/engine_mount.rb +36 -0
  372. data/lib/jets/router/help.rb +130 -0
  373. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  374. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  375. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  376. data/lib/jets/router/matcher.rb +140 -17
  377. data/lib/jets/router/resources/options.rb +6 -4
  378. data/lib/jets/router/route/after_initialize.rb +64 -0
  379. data/lib/jets/router/route/as.rb +93 -0
  380. data/lib/jets/router/route/authorizer.rb +1 -0
  381. data/lib/jets/router/route/compat.rb +45 -0
  382. data/lib/jets/router/route/info.rb +74 -0
  383. data/lib/jets/router/route/node.rb +137 -0
  384. data/lib/jets/router/route/path.rb +93 -0
  385. data/lib/jets/router/route.rb +109 -90
  386. data/lib/jets/router/route_set.rb +214 -0
  387. data/lib/jets/router/scope.rb +204 -69
  388. data/lib/jets/router/state.rb +67 -0
  389. data/lib/jets/router/util.rb +1 -31
  390. data/lib/jets/router.rb +64 -150
  391. data/lib/jets/ruby_version_check.rb +15 -0
  392. data/lib/jets/rule/base.rb +1 -0
  393. data/lib/jets/rule/dsl.rb +7 -7
  394. data/lib/jets/secrets.rb +110 -0
  395. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  396. data/lib/jets/spec_helpers/controllers.rb +32 -24
  397. data/lib/jets/spec_helpers.rb +0 -6
  398. data/lib/jets/stack/builder.rb +3 -2
  399. data/lib/jets/stack/definition.rb +1 -4
  400. data/lib/jets/stack/function.rb +2 -2
  401. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  402. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  403. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  404. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  405. data/lib/jets/stack/output/lookup.rb +1 -1
  406. data/lib/jets/stack/output.rb +2 -2
  407. data/lib/jets/stack/parameter.rb +2 -2
  408. data/lib/jets/stack/resource.rb +3 -3
  409. data/lib/jets/stack/s3_event.rb +51 -37
  410. data/lib/jets/stack.rb +1 -1
  411. data/lib/jets/tasks/engine.rake +85 -0
  412. data/lib/jets/tasks/framework.rake +66 -0
  413. data/lib/jets/tasks/log.rake +41 -0
  414. data/lib/jets/tasks/middleware.rake +9 -0
  415. data/lib/jets/tasks/misc.rake +81 -0
  416. data/lib/jets/tasks/statistics.rake +37 -0
  417. data/lib/jets/tasks/tmp.rake +51 -0
  418. data/lib/jets/tasks/yarn.rake +29 -0
  419. data/lib/jets/tasks/zeitwerk.rake +61 -0
  420. data/lib/jets/tasks.rb +18 -0
  421. data/lib/jets/tmp_loader.rb +1 -1
  422. data/lib/jets/turbine/configurable.rb +36 -0
  423. data/lib/jets/turbine/configuration.rb +101 -0
  424. data/lib/jets/turbine.rb +164 -20
  425. data/lib/jets/util/camelize.rb +24 -0
  426. data/lib/jets/util/yamler.rb +16 -0
  427. data/lib/jets/version.rb +1 -1
  428. data/lib/jets.rb +8 -14
  429. metadata +444 -347
  430. data/.python-version +0 -1
  431. data/.ruby-version +0 -1
  432. data/bin/release +0 -9
  433. data/lib/jets/application/defaults.rb +0 -200
  434. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  435. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  436. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  437. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  438. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  439. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  440. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  441. data/lib/jets/cfn/builders/interface.rb +0 -133
  442. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  443. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  444. data/lib/jets/cfn/built_template.rb +0 -15
  445. data/lib/jets/cfn/template_source.rb +0 -61
  446. data/lib/jets/commands/base.rb +0 -145
  447. data/lib/jets/commands/call.rb +0 -182
  448. data/lib/jets/commands/clean.rb +0 -19
  449. data/lib/jets/commands/configure.rb +0 -51
  450. data/lib/jets/commands/console.rb +0 -12
  451. data/lib/jets/commands/db/environment-task.rake +0 -3
  452. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  453. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  454. data/lib/jets/commands/db/tasks.rb +0 -34
  455. data/lib/jets/commands/db.rb +0 -13
  456. data/lib/jets/commands/dbconsole.rb +0 -134
  457. data/lib/jets/commands/delete.rb +0 -136
  458. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  459. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  460. data/lib/jets/commands/dynamodb.rb +0 -19
  461. data/lib/jets/commands/gems.rb +0 -13
  462. data/lib/jets/commands/help/call.md +0 -69
  463. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  464. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  465. data/lib/jets/commands/help/routes.md +0 -16
  466. data/lib/jets/commands/help/runner.md +0 -17
  467. data/lib/jets/commands/help.rb +0 -9
  468. data/lib/jets/commands/import/base.rb +0 -49
  469. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  470. data/lib/jets/commands/import/rack.rb +0 -16
  471. data/lib/jets/commands/import/rails.rb +0 -74
  472. data/lib/jets/commands/import/sequence.rb +0 -90
  473. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  474. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  475. data/lib/jets/commands/import.rb +0 -12
  476. data/lib/jets/commands/main.rb +0 -166
  477. data/lib/jets/commands/markdown/creator.rb +0 -58
  478. data/lib/jets/commands/markdown/index.rb +0 -27
  479. data/lib/jets/commands/markdown/page.rb +0 -125
  480. data/lib/jets/commands/markdown/shell.rb +0 -11
  481. data/lib/jets/commands/new.rb +0 -173
  482. data/lib/jets/commands/rake_command.rb +0 -61
  483. data/lib/jets/commands/rake_tasks.rb +0 -50
  484. data/lib/jets/commands/runner.rb +0 -16
  485. data/lib/jets/commands/sequence.rb +0 -105
  486. data/lib/jets/commands/stack_info.rb +0 -30
  487. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  488. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  489. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  490. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  491. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  492. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  493. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  494. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  495. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  496. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  497. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  498. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  499. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  500. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  501. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  502. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  503. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  504. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  505. data/lib/jets/commands/upgrade/version1.rb +0 -136
  506. data/lib/jets/commands/upgrade.rb +0 -105
  507. data/lib/jets/commands/url.rb +0 -69
  508. data/lib/jets/commands/webpacker_template.rb +0 -18
  509. data/lib/jets/controller/callbacks.rb +0 -73
  510. data/lib/jets/controller/cookies/jar.rb +0 -269
  511. data/lib/jets/controller/cookies.rb +0 -38
  512. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  513. data/lib/jets/controller/error.rb +0 -4
  514. data/lib/jets/controller/forgery_protection.rb +0 -43
  515. data/lib/jets/controller/layout.rb +0 -17
  516. data/lib/jets/controller/middleware/cors.rb +0 -60
  517. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  518. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  519. data/lib/jets/controller/middleware/reloader.rb +0 -15
  520. data/lib/jets/controller/parameters_filter.rb +0 -29
  521. data/lib/jets/controller/params.rb +0 -117
  522. data/lib/jets/controller/redirection.rb +0 -61
  523. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  524. data/lib/jets/controller/rendering.rb +0 -96
  525. data/lib/jets/controller/stage.rb +0 -34
  526. data/lib/jets/controller.rb +0 -3
  527. data/lib/jets/db.rb +0 -15
  528. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  529. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  530. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  531. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  532. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  533. data/lib/jets/generator.rb +0 -112
  534. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  535. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  536. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  537. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  538. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  539. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  540. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  541. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  542. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  543. data/lib/jets/lambda/task.rb +0 -111
  544. data/lib/jets/logger.rb +0 -21
  545. data/lib/jets/middleware/configurator.rb +0 -84
  546. data/lib/jets/middleware/default_stack.rb +0 -53
  547. data/lib/jets/middleware/layer.rb +0 -34
  548. data/lib/jets/middleware/stack.rb +0 -77
  549. data/lib/jets/middleware.rb +0 -33
  550. data/lib/jets/naming.rb +0 -63
  551. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  552. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  553. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  554. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  555. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  556. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  557. data/lib/jets/overrides/rails.rb +0 -6
  558. data/lib/jets/rack_server.rb +0 -86
  559. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  560. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  561. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  562. data/lib/jets/resource/api_gateway/method.rb +0 -102
  563. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  564. data/lib/jets/resource/base.rb +0 -28
  565. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  566. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  567. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  568. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  569. data/lib/jets/resource/child_stack/base.rb +0 -24
  570. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  571. data/lib/jets/resource/lambda/function.rb +0 -221
  572. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  573. data/lib/jets/resource/permission.rb +0 -45
  574. data/lib/jets/resource.rb +0 -71
  575. data/lib/jets/router/error.rb +0 -4
  576. data/lib/jets/router/finder.rb +0 -47
  577. data/lib/jets/router/helpers/core_helper.rb +0 -27
  578. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  579. data/lib/jets/router/helpers.rb +0 -4
  580. data/lib/jets/router/method_creator/code.rb +0 -99
  581. data/lib/jets/router/method_creator/edit.rb +0 -12
  582. data/lib/jets/router/method_creator/generic.rb +0 -11
  583. data/lib/jets/router/method_creator/index.rb +0 -48
  584. data/lib/jets/router/method_creator/new.rb +0 -12
  585. data/lib/jets/router/method_creator/root.rb +0 -15
  586. data/lib/jets/router/method_creator/show.rb +0 -12
  587. data/lib/jets/router/method_creator.rb +0 -50
  588. data/lib/jets/turbo/database_yaml.rb +0 -41
  589. data/lib/jets/turbo/project/.gitignore +0 -12
  590. data/lib/jets/turbo/project/.jetskeep +0 -1
  591. data/lib/jets/turbo/project/Gemfile +0 -16
  592. data/lib/jets/turbo/project/Rakefile +0 -2
  593. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  594. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  595. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  596. data/lib/jets/turbo/project/config/application.rb +0 -5
  597. data/lib/jets/turbo/project/config/routes.rb +0 -4
  598. data/lib/jets/turbo/project/config.ru +0 -5
  599. data/lib/jets/turbo/rails.rb +0 -127
  600. data/lib/jets/turbo/templates/config/database.yml +0 -30
  601. data/lib/jets/turbo.rb +0 -56
  602. data/readme/prerelease.md +0 -6
  603. data/readme/testing.md +0 -60
  604. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  605. /data/lib/jets/{commands → command}/help/build.md +0 -0
  606. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  607. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  608. /data/lib/jets/{commands → command}/help/console.md +0 -0
  609. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  610. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  611. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  612. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  613. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  614. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  615. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  616. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  617. /data/lib/jets/{commands → command}/help/server.md +0 -0
  618. /data/lib/jets/{commands → command}/help/status.md +0 -0
  619. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  620. /data/lib/jets/{commands → command}/help/url.md +0 -0
  621. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  622. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  623. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  624. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  625. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  626. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  627. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  628. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  629. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  630. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  633. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  634. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  635. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  636. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  637. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  638. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  639. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  640. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  641. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,40 @@
1
+ module Jets::Cfn::Builder::Api
2
+ class Resources < Paged
3
+ # interface method
4
+ def compose
5
+ add_gateway_resources
6
+ add_rest_api_parameter
7
+ end
8
+
9
+ # interface method
10
+ def template_path
11
+ Jets::Names.api_resources_template_path(@page_number)
12
+ end
13
+
14
+ def add_rest_api_parameter
15
+ add_parameter(:RestApi)
16
+ end
17
+
18
+ def add_gateway_resources
19
+ @items.each do |path|
20
+ # IE: resource = Jets::Cfn::Resource::ApiGateway::Resource.new(path)
21
+ next if path == '/' || path == '' # skip root path
22
+ resource = api_gateway_resource_class.new(path)
23
+ add_resource(resource)
24
+ add_outputs(resource.outputs)
25
+
26
+ parent_path = resource.parent_path_parameter
27
+ add_parameter(parent_path) unless part_of_template?(parent_path)
28
+ end
29
+ end
30
+
31
+ # interface method
32
+ def api_gateway_resource_class
33
+ Jets::Cfn::Resource::ApiGateway::Resource
34
+ end
35
+
36
+ def part_of_template?(parent_path)
37
+ @template[:Resources].key?(parent_path)
38
+ end
39
+ end
40
+ end
@@ -1,10 +1,5 @@
1
- # Implements:
2
- #
3
- # compose
4
- # template_path
5
- #
6
- module Jets::Cfn::Builders
7
- class AuthorizerBuilder < BaseChildBuilder
1
+ class Jets::Cfn::Builder
2
+ class Authorizer < Nested
8
3
  include Interface
9
4
  include Jets::AwsServices
10
5
 
@@ -14,6 +9,7 @@ module Jets::Cfn::Builders
14
9
  @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
15
10
  end
16
11
 
12
+ # interface method
17
13
  def compose
18
14
  add_common_parameters
19
15
  add_api_gateway_parameters
@@ -25,22 +21,27 @@ module Jets::Cfn::Builders
25
21
  add_cognito_outputs
26
22
  end
27
23
 
24
+ # interface method
25
+ def template_path
26
+ Jets::Names.authorizer_template_path(@path)
27
+ end
28
+
28
29
  def add_cognito_authorizers
29
30
  @app_class.cognito_authorizers.each do |authorizer|
30
- resource = Jets::Resource.new(authorizer[:definition], authorizer[:replacements])
31
+ resource = Jets::Cfn::Resource.new(authorizer[:definition], authorizer[:replacements])
31
32
  add_resource(resource)
32
33
  end
33
34
  end
34
35
 
35
36
  def add_outputs
36
37
  # IE: @app_class = MainAuthorizer
37
- # The associated resource is the Jets::Resource::ApiGateway::Authorizer definition built during evaluation
38
+ # The associated resource is the Jets::Cfn::Resource::ApiGateway::Authorizer definition built during evaluation
38
39
  # of the user defined Authorizer class. We'll use it to compute the logical id.
39
- @app_class.tasks.each do |task|
40
- authorizer = task.associated_resources.first
40
+ @app_class.definitions.each do |definition|
41
+ authorizer = definition.associated_resources.first
41
42
  next unless authorizer
42
43
 
43
- resource = Jets::Resource.new(authorizer.definition, task.replacements)
44
+ resource = Jets::Cfn::Resource.new(authorizer.definition, definition.replacements)
44
45
  logical_id = resource.logical_id
45
46
  add_output(logical_id, value: "!Ref #{logical_id}")
46
47
  end
@@ -48,20 +49,16 @@ module Jets::Cfn::Builders
48
49
 
49
50
  def add_cognito_outputs
50
51
  @app_class.cognito_authorizers.each do |authorizer|
51
- resource = Jets::Resource.new(authorizer[:definition], authorizer[:replacements])
52
+ resource = Jets::Cfn::Resource.new(authorizer[:definition], authorizer[:replacements])
52
53
  logical_id = resource.logical_id
53
54
  add_output(logical_id, value: "!Ref #{logical_id}")
54
55
  end
55
56
  end
56
57
 
57
58
  def add_api_gateway_parameters
58
- return if Jets::Router.routes.empty?
59
+ return if Jets::Router.no_routes?
59
60
 
60
- add_parameter("RestApi", Description: "RestApi")
61
- end
62
-
63
- def template_path
64
- Jets::Naming.authorizer_template_path(@path)
61
+ add_parameter(:RestApi)
65
62
  end
66
63
  end
67
64
  end
@@ -0,0 +1,28 @@
1
+ class Jets::Cfn::Builder
2
+ class Controller < Nested
3
+ # interface method
4
+ def compose
5
+ add_common_parameters
6
+ add_api_gateway_parameters
7
+ add_functions
8
+ add_resources
9
+ add_outputs
10
+ end
11
+
12
+ def add_outputs
13
+ outputs = {}
14
+ @template[:Resources].each do |logical_id, resource|
15
+ next unless resource[:Type] == "AWS::Lambda::Function"
16
+ outputs.merge!(logical_id => {
17
+ Value: "!GetAtt #{logical_id}.Arn"
18
+ })
19
+ end
20
+ @template[:Outputs] = outputs
21
+ end
22
+
23
+ def add_api_gateway_parameters
24
+ return if Jets::Router.no_routes?
25
+ add_parameter(:RestApi)
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ class Jets::Cfn::Builder
2
+ class Function < Nested
3
+ # interface method
4
+ def compose
5
+ add_common_parameters
6
+ add_functions
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,146 @@
1
+ # The class including this module should implement these methods:
2
+ #
3
+ # * compose
4
+ # * template_path
5
+ #
6
+ class Jets::Cfn::Builder
7
+ module Interface
8
+ extend Memoist
9
+ include Jets::Util::Camelize
10
+
11
+ def build
12
+ return unless build?
13
+ compose # must be implemented by subclass
14
+ write
15
+ end
16
+
17
+ # Do not bother building or writing the template unless there are functions defined
18
+ def build?
19
+ build = @app_class && !@app_class.build?
20
+ !build
21
+ end
22
+
23
+ def write
24
+ FileUtils.mkdir_p(File.dirname(template_path))
25
+ IO.write(template_path, text)
26
+ end
27
+
28
+ def template
29
+ # need the to_hash or the YAML dump has
30
+ # !ruby/hash:ActiveSupport::HashWithIndifferentAccess
31
+ @template.to_hash
32
+ end
33
+
34
+ def text
35
+ # -1 means unlimited line width, it prevents the YAML.dump from wrapping
36
+ # Otherwise the PostProcess class will not work properly.
37
+ text = YAML.dump(template, line_width: -1)
38
+ # post process the text so that
39
+ # "!Ref IamRole" => !Ref IamRole
40
+ # We strip the surrounding quotes
41
+ PostProcess.new(text).process
42
+ end
43
+
44
+ def add_description(desc)
45
+ @template[:Description] = desc
46
+ end
47
+
48
+ def add_parameters(attributes)
49
+ attributes.each do |name,value|
50
+ add_parameter(name.camelize.to_sym, Description: value)
51
+ end
52
+ end
53
+
54
+ def add_parameter(name, options={})
55
+ defaults = { Type: "String" }
56
+ options = defaults.merge(options)
57
+ @template[:Parameters] ||= {}
58
+ @template[:Parameters][name.camelize.to_sym] = camelize(options)
59
+ end
60
+
61
+ def add_outputs(attributes)
62
+ attributes.each do |name,value|
63
+ add_output(name.camelize.to_sym, Value: value)
64
+ end
65
+ end
66
+
67
+ def add_output(name, options={})
68
+ @template[:Outputs] ||= {}
69
+ @template[:Outputs][name.camelize.to_sym] = camelize(options)
70
+ end
71
+
72
+ def add_resources
73
+ @app_class.definitions.each do |definition|
74
+ definition.associated_resources.each do |associated|
75
+ resource = Jets::Cfn::Resource.new(associated.definition, definition.replacements)
76
+ add_resource(resource)
77
+ add_resource(resource.permission)
78
+ end
79
+ end
80
+ end
81
+
82
+ # Note: Jets::Cfn::Resource::Iam classes are special treated.
83
+ # They are only a few resources that result in creating 2 CloudFormation resources.
84
+ # Cfn::Builder::Api::Methods also creates a method, permission, and possible cors resource.
85
+ # Though that is more of an internal Jets resource.
86
+ # In this case for Iam, both Iam::Policy and Iam::Role are created.
87
+ # This allows the user to refer to the Lambda Function name in the IAM Policy itself.
88
+ # We need separate resources to avoid CloudFormation erroring with a circular dependency.
89
+ # Using separate IAM::Policy and IAM::Role resources allows us avoid the circular dependency error.
90
+ #
91
+ # Handling logic here also centralizes code for this special behavior.
92
+ # Also important to note, this does not change the user-facing interface.
93
+ # IE: Users still uses code like:
94
+ #
95
+ # iam_policy("s3", "sns")
96
+ #
97
+ # and be none-the-wiser about the special behavior.
98
+ def add_resource(resource)
99
+ add_template_resource(resource.logical_id, resource.type, resource.attributes)
100
+
101
+ if resource.class.to_s.include?("Jets::Cfn::Resource::Iam")
102
+ role = resource # for clarity: resource is a Iam::*Role class
103
+ iam_policy = Jets::Cfn::Resource::Iam::Policy.new(role)
104
+ add_template_resource(iam_policy.logical_id, iam_policy.type, iam_policy.attributes)
105
+ end
106
+ end
107
+
108
+ # The add_resource method can take an options Hash with both with either
109
+ # top level attributes or properties.
110
+ #
111
+ # Example:
112
+ #
113
+ # Top level options:
114
+ #
115
+ # add_template_resource("MyId", "AWS::ApiGateway::RestApi",
116
+ # Type: "AWS::ApiGateway::RestApi",
117
+ # Properties: {
118
+ # Name: "my-api"
119
+ # },
120
+ # DependsOn: ["AnotherResource"]
121
+ # )
122
+ #
123
+ # Simple options with properties only:
124
+ #
125
+ # add_template_resource("MyId", "AWS::CloudFormationStack",
126
+ # TemplateURL: "template_url",
127
+ # Parameters: {},
128
+ # )
129
+ #
130
+ def add_template_resource(logical_id, type, options)
131
+ options = camelize(options)
132
+
133
+ attributes = if options.include?(:Type)
134
+ base = { Type: type }
135
+ base.merge(options) # options are top-level attributes
136
+ else
137
+ {
138
+ Type: type,
139
+ Properties: options # options are properties
140
+ }
141
+ end
142
+
143
+ @template[:Resources][logical_id] = attributes
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,10 @@
1
+ class Jets::Cfn::Builder
2
+ class Job < Nested
3
+ # interface method
4
+ def compose
5
+ add_common_parameters
6
+ add_functions
7
+ add_resources
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,130 @@
1
+ # Note: compose implemented by the classes that include this
2
+ class Jets::Cfn::Builder
3
+ class Nested
4
+ include Interface
5
+
6
+ # The app_class is can be a controller, job or anonymous function class.
7
+ # IE: PostsController, HardJob
8
+ def initialize(app_class)
9
+ @app_class = app_class
10
+ @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
11
+ end
12
+
13
+ # interface method
14
+ def template_path
15
+ Jets::Names.app_template_path(@app_class)
16
+ end
17
+
18
+ def add_common_parameters
19
+ common_parameters = Jets::Cfn::Params::Common.parameters
20
+ common_parameters.each do |k,_|
21
+ add_parameter(k)
22
+ end
23
+
24
+ depends_on_params.each do |output_key, _|
25
+ add_parameter(output_key)
26
+ end
27
+ end
28
+
29
+ def depends_on_params
30
+ return {} if Jets.one_lambda_for_all_controllers? && @app_class.to_s.ends_with?("Controller")
31
+ return {} if @app_class.is_a?(Hash)
32
+ return {} unless @app_class.depends_on
33
+ depends = Jets::Stack::Depends.new(@app_class.depends_on)
34
+ depends.params
35
+ end
36
+
37
+ def add_functions
38
+ validate_function_names!
39
+ if Jets.one_lambda_per_controller? && @app_class.to_s.ends_with?("Controller")
40
+ one_lambda_per_controller
41
+ else
42
+ one_lambda_per_method
43
+ end
44
+ end
45
+
46
+ def one_lambda_per_method
47
+ add_class_iam_policy
48
+ @app_class.definitions.each do |definition|
49
+ add_function(definition)
50
+ add_function_iam_policy(definition)
51
+ end
52
+ end
53
+
54
+ def one_lambda_per_controller
55
+ add_class_iam_policy
56
+ definition = Jets::Lambda::Definition.new(@app_class, "lambda_handler",
57
+ lang: :ruby,
58
+ )
59
+ add_function(definition)
60
+ unless Jets::Router.no_routes?
61
+ controller = Jets::Cfn::Resource::Lambda::Function::Controller.new(definition)
62
+ add_resource(controller.permission)
63
+ end
64
+ end
65
+
66
+ def add_function(definition)
67
+ resource = Jets::Cfn::Resource::Lambda::Function.new(definition)
68
+ add_resource(resource)
69
+ # apigw lambda permission is also added to the controller template next to the function
70
+ route = Jets::Router.find_by_definition(definition)
71
+ if route
72
+ # Creates a permission more directly to set principal apigateway.amazonaws.com
73
+ method = Jets::Cfn::Resource::ApiGateway::Method.new(route)
74
+ add_resource(method.permission)
75
+ end
76
+ end
77
+
78
+ # routes scoped to this controller template.
79
+ def scoped_routes
80
+ @routes ||= Jets::Router.routes.select do |route|
81
+ route.controller_name == @app_class.to_s
82
+ end
83
+ end
84
+
85
+ def add_class_iam_policy
86
+ return unless build_class_iam_policy?
87
+
88
+ resource = Jets::Cfn::Resource::Iam::ClassRole.new(@app_class)
89
+ add_resource(resource)
90
+ end
91
+
92
+ def build_class_iam_policy?
93
+ should_build = false
94
+ klass = @app_class
95
+ while klass && klass != Object
96
+ if klass&.build_class_iam?
97
+ should_build = true
98
+ break
99
+ end
100
+ klass = klass.superclass
101
+ end
102
+ should_build
103
+ end
104
+
105
+ def add_function_iam_policy(definition)
106
+ return unless definition.build_function_iam?
107
+
108
+ resource = Jets::Cfn::Resource::Iam::FunctionRole.new(definition)
109
+ add_resource(resource)
110
+ end
111
+
112
+ def validate_function_names!
113
+ invalids = @app_class.definitions.reject do |definition|
114
+ definition.meth.to_s =~ /^[a-zA-Z][a-zA-Z0-9_]/
115
+ end
116
+ return if invalids.empty?
117
+ list = invalids.map do |definition|
118
+ " #{definition.class_name}##{definition.meth}" # IE: PostsController#index
119
+ end.join("\n")
120
+ puts "ERROR: Detected invalid AWS Lambda function names".color(:red)
121
+ puts <<~EOL
122
+ Lambda function names must start with a letter and can only contain letters, numbers, and underscores.
123
+ Invalid function names:
124
+
125
+ #{list}
126
+ EOL
127
+ exit 1
128
+ end
129
+ end
130
+ end
@@ -0,0 +1,53 @@
1
+ class Jets::Cfn::Builder
2
+ class OneController < Nested
3
+ def build?
4
+ true
5
+ end
6
+
7
+ # interface method
8
+ def compose
9
+ add_one_function
10
+ add_common_parameters
11
+ add_api_gateway_parameters
12
+ add_outputs
13
+ end
14
+
15
+ # interface method
16
+ def template_path
17
+ Jets::Names.one_controller_template_path
18
+ end
19
+
20
+ def add_one_function
21
+ resource = Jets::Cfn::Resource::One::Function.new
22
+ add_resource(resource)
23
+ add_application_controller_iam_policy
24
+ unless Jets::Router.no_routes?
25
+ permission = Jets::Cfn::Resource::One::Permission.new
26
+ add_resource(permission)
27
+ end
28
+ end
29
+
30
+ def add_application_controller_iam_policy
31
+ klass = ApplicationController
32
+ return unless klass.build_class_iam?
33
+ resource = Jets::Cfn::Resource::Iam::ClassRole.new(klass)
34
+ add_resource(resource)
35
+ end
36
+
37
+ def add_outputs
38
+ outputs = {}
39
+ @template[:Resources].each do |logical_id, resource|
40
+ next unless resource[:Type] == "AWS::Lambda::Function"
41
+ outputs.merge!(logical_id => {
42
+ Value: "!GetAtt #{logical_id}.Arn"
43
+ })
44
+ end
45
+ @template[:Outputs] = outputs
46
+ end
47
+
48
+ def add_api_gateway_parameters
49
+ return if Jets::Router.no_routes?
50
+ add_parameter(:RestApi)
51
+ end
52
+ end
53
+ end
@@ -1,4 +1,4 @@
1
- class Jets::Cfn::Builders::ParentBuilder
1
+ class Jets::Cfn::Builder::Parent
2
2
  module Stagger
3
3
  def add_stagger(resource)
4
4
  batch_size = stagger_batch_size # shorter convenience variable
@@ -0,0 +1,149 @@
1
+ class Jets::Cfn::Builder
2
+ class Parent
3
+ include Interface
4
+ include Jets::AwsServices
5
+ include Stagger
6
+
7
+ def initialize(options={})
8
+ @options = options
9
+ @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
10
+ end
11
+
12
+ # interface method
13
+ def compose
14
+ build_minimal_resources
15
+ build_child_resources
16
+ end
17
+
18
+ # interface method
19
+ def template_path
20
+ Jets::Names.parent_template_path
21
+ end
22
+
23
+ def build_minimal_resources
24
+ add_description("Jets: #{Jets.version} Code: #{Util::Source.version}")
25
+
26
+ # Initial s3 bucket, used to store code zipfile and templates Jets generates
27
+ #
28
+ # AWS changed the default behavior of s3 buckets to block public access
29
+ # https://aws.amazon.com/blogs/aws/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/
30
+ # https://github.com/aws-amplify/amplify-cli/issues/12503
31
+ #
32
+ # Jets uploads assets to s3 bucket with acl: "public-read" here
33
+ # https://github.com/boltops-tools/jets/blob/c5858ec2706a606665a92c3ada3f16ae4c753372/lib/jets/cfn/upload.rb#L97
34
+ #
35
+ # Use minimal s3 bucket policy to allow public read access to assets.
36
+ # Leave the other options as comments to help document the default behavior.
37
+ resource = Jets::Cfn::Resource::S3::JetsBucket.new
38
+ add_resource(resource)
39
+ add_outputs(resource.outputs)
40
+
41
+ return unless full?
42
+ # Add application-wide IAM policy from Jets.config.iam_role
43
+ resource = Jets::Cfn::Resource::Iam::ApplicationRole.new
44
+ add_resource(resource)
45
+ add_outputs(resource.outputs)
46
+
47
+ return if Jets.poly_only?
48
+ resource = Jets::Cfn::Resource::Lambda::GemLayer.new
49
+ add_resource(resource)
50
+ add_outputs(resource.outputs)
51
+ end
52
+
53
+ def build_child_resources
54
+ return unless full?
55
+
56
+ add_one_lambda_controller if Jets.one_lambda_for_all_controllers? && Jets.config.mode != "job"
57
+ for_each_path(:app) do |path|
58
+ add_app_class_stack(path)
59
+ end
60
+ for_each_path(:shared) do |path|
61
+ add_shared_resources(path)
62
+ end
63
+
64
+ return if Jets::Router.no_routes?
65
+ for_each_path(:authorizers) do |path|
66
+ add_authorizer_resources(path)
67
+ end
68
+ add_api_gateway
69
+ add_api_resources
70
+ add_api_methods
71
+ add_api_deployment
72
+ add_api_mapping
73
+ end
74
+
75
+ def full?
76
+ @options[:stack_type] == :full
77
+ end
78
+
79
+ def add_one_lambda_controller
80
+ resource = Jets::Cfn::Resource::Nested::OneController.new(@options)
81
+ add_child_resources(resource)
82
+ end
83
+
84
+ # Example paths:
85
+ # #{Jets.build_root}/templates/shared-resources.yml
86
+ # #{Jets.build_root}/templates/app-comments_controller.yml
87
+ # #{Jets.build_root}/templates/authorizers-main_authorizer.yml
88
+ def for_each_path(type)
89
+ expression = "#{Jets::Names.templates_folder}/#{type}-*"
90
+ Dir.glob(expression).each do |path|
91
+ next unless File.file?(path)
92
+ yield(path)
93
+ end
94
+ end
95
+
96
+ def add_app_class_stack(path)
97
+ resource = Jets::Cfn::Resource::Nested::AppClass.new(@options.merge(path: path))
98
+ add_stagger(resource)
99
+ add_child_resources(resource)
100
+ end
101
+
102
+ def add_authorizer_resources(path)
103
+ resource = Jets::Cfn::Resource::Nested::Authorizer.new(@options.merge(path: path))
104
+ add_child_resources(resource)
105
+ end
106
+
107
+ def add_shared_resources(path)
108
+ resource = Jets::Cfn::Resource::Nested::Shared.new(@options.merge(path: path))
109
+ add_child_resources(resource) if resource.resources?
110
+ end
111
+
112
+ def add_api_gateway
113
+ resource = Jets::Cfn::Resource::Nested::Api::Gateway.new(@options)
114
+ add_child_resources(resource)
115
+ end
116
+
117
+ def add_api_resources
118
+ pages = Api::Pages::Resources.pages
119
+ pages.each do |page|
120
+ resource = Jets::Cfn::Resource::Nested::Api::Resources.new(@options.merge(page_number: page.number))
121
+ add_child_resources(resource)
122
+ end
123
+ end
124
+
125
+ def add_api_methods
126
+ pages = Api::Pages::Methods.pages
127
+ pages.each do |page|
128
+ resource = Jets::Cfn::Resource::Nested::Api::Methods.new(@options.merge(page_number: page.number))
129
+ add_child_resources(resource)
130
+ end
131
+ end
132
+
133
+ def add_api_deployment
134
+ resource = Jets::Cfn::Resource::Nested::Api::Deployment.new(@options)
135
+ add_child_resources(resource)
136
+ end
137
+
138
+ def add_api_mapping
139
+ return unless Jets.custom_domain?
140
+ resource = Jets::Cfn::Resource::Nested::Api::Mapping.new(@options)
141
+ add_child_resources(resource)
142
+ end
143
+
144
+ def add_child_resources(resource)
145
+ add_resource(resource)
146
+ add_outputs(resource.outputs)
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,25 @@
1
+ # post process the text so that
2
+ # "!Ref IamRole" => !Ref IamRole
3
+ # We strip the surrounding quotes
4
+ class Jets::Cfn::Builder
5
+ class PostProcess
6
+ def initialize(text)
7
+ @text = text
8
+ end
9
+
10
+ def process
11
+ results = @text.split("\n").map do |line|
12
+ if line.include?(': "!') # IE: IamRole: "!Ref IamRole",
13
+ # IamRole: "!Ref IamRole" => IamRole: !Ref IamRole
14
+ line.sub(/: "(.*)"/, ': \1')
15
+ elsif line.include?('- "!') # IE: - "!GetAtt Foo.Arn"
16
+ # IamRole: - "!GetAtt Foo.Arn" => - !GetAtt Foo.Arn
17
+ line.sub(/- "(.*)"/, '- \1')
18
+ else
19
+ line
20
+ end
21
+ end
22
+ results.join("\n") + "\n"
23
+ end
24
+ end
25
+ end