jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,7 +1,5 @@
1
- require 'erb'
2
-
3
- module Jets::Cfn::Builders
4
- class ParentBuilder
1
+ class Jets::Cfn::Builder
2
+ class Parent
5
3
  include Interface
6
4
  include Jets::AwsServices
7
5
  include Stagger
@@ -11,13 +9,13 @@ module Jets::Cfn::Builders
11
9
  @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
12
10
  end
13
11
 
14
- # compose is an interface method
12
+ # interface method
15
13
  def compose
16
14
  build_minimal_resources
17
- build_child_resources if full?
15
+ build_child_resources
18
16
  end
19
17
 
20
- # template_path is an interface method
18
+ # interface method
21
19
  def template_path
22
20
  Jets::Names.parent_template_path
23
21
  end
@@ -36,38 +34,26 @@ module Jets::Cfn::Builders
36
34
  #
37
35
  # Use minimal s3 bucket policy to allow public read access to assets.
38
36
  # Leave the other options as comments to help document the default behavior.
39
- resource = Jets::Resource::S3::Bucket.new(logical_id: "s3_bucket",
40
- PublicAccessBlockConfiguration: {
41
- BlockPublicAcls: false,
42
- # BlockPublicPolicy: false,
43
- # IgnorePublicAcls: false,
44
- # RestrictPublicBuckets: false
45
- },
46
- OwnershipControls: {
47
- Rules: [{ObjectOwnership: "ObjectWriter"}]
48
- },
49
- bucket_encryption: {
50
- server_side_encryption_configuration: [
51
- server_side_encryption_by_default: {
52
- sse_algorithm: "AES256"
53
- }]}
54
- )
37
+ resource = Jets::Cfn::Resource::S3::JetsBucket.new
55
38
  add_resource(resource)
56
39
  add_outputs(resource.outputs)
57
40
 
58
41
  return unless full?
59
42
  # Add application-wide IAM policy from Jets.config.iam_role
60
- resource = Jets::Resource::Iam::ApplicationRole.new
43
+ resource = Jets::Cfn::Resource::Iam::ApplicationRole.new
61
44
  add_resource(resource)
62
45
  add_outputs(resource.outputs)
63
46
 
64
47
  return if Jets.poly_only?
65
- resource = Jets::Resource::Lambda::GemLayer.new
48
+ resource = Jets::Cfn::Resource::Lambda::GemLayer.new
66
49
  add_resource(resource)
67
50
  add_outputs(resource.outputs)
68
51
  end
69
52
 
70
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"
71
57
  for_each_path(:app) do |path|
72
58
  add_app_class_stack(path)
73
59
  end
@@ -75,69 +61,83 @@ module Jets::Cfn::Builders
75
61
  add_shared_resources(path)
76
62
  end
77
63
 
78
- if full? and !Jets::Router.routes.empty?
79
- for_each_path(:authorizers) do |path|
80
- add_authorizer_resources(path)
81
- end
82
- add_api_gateway
83
- add_api_resources
84
- add_api_deployment
64
+ return if Jets::Router.no_routes?
65
+ for_each_path(:authorizers) do |path|
66
+ add_authorizer_resources(path)
85
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
86
77
  end
87
78
 
88
- # Example paths:
89
- # #{Jets.build_root}/templates/demo-dev-2-shared-resources.yml
90
- # #{Jets.build_root}/templates/demo-dev-2-app-comments_controller.yml
91
- # #{Jets.build_root}/templates/demo-dev-2-authorizers-main_authorizer.yml
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
92
88
  def for_each_path(type)
93
- expression = "#{Jets::Names.template_path_prefix}-#{type}-*"
89
+ expression = "#{Jets::Names.templates_folder}/#{type}-*"
94
90
  Dir.glob(expression).each do |path|
95
91
  next unless File.file?(path)
96
92
  yield(path)
97
93
  end
98
94
  end
99
95
 
100
- def full?
101
- @options[:templates] || @options[:stack_type] == :full
102
- end
103
-
104
96
  def add_app_class_stack(path)
105
- resource = Jets::Resource::ChildStack::AppClass.new(@options[:s3_bucket], path: path)
97
+ resource = Jets::Cfn::Resource::Nested::AppClass.new(@options.merge(path: path))
106
98
  add_stagger(resource)
107
99
  add_child_resources(resource)
108
100
  end
109
101
 
110
102
  def add_authorizer_resources(path)
111
- resource = Jets::Resource::ChildStack::Authorizer.new(@options[:s3_bucket], path: path)
103
+ resource = Jets::Cfn::Resource::Nested::Authorizer.new(@options.merge(path: path))
112
104
  add_child_resources(resource)
113
105
  end
114
106
 
115
107
  def add_shared_resources(path)
116
- resource = Jets::Resource::ChildStack::Shared.new(@options[:s3_bucket], path: path)
108
+ resource = Jets::Cfn::Resource::Nested::Shared.new(@options.merge(path: path))
117
109
  add_child_resources(resource) if resource.resources?
118
110
  end
119
111
 
120
112
  def add_api_gateway
121
- resource = Jets::Resource::ChildStack::ApiGateway.new(@options[:s3_bucket])
113
+ resource = Jets::Cfn::Resource::Nested::Api::Gateway.new(@options)
122
114
  add_child_resources(resource)
123
115
  end
124
116
 
125
117
  def add_api_resources
126
- expression = "#{Jets::Names.template_path_prefix}-api-resources-*"
127
- # IE: path: #{Jets.build_root}/templates/demo-dev-2-api-resources-1.yml"
128
- Dir.glob(expression).sort.each do |path|
129
- next unless File.file?(path)
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
130
124
 
131
- regexp = Regexp.new("#{Jets.config.project_namespace}-api-resources-(\\d+).yml") # tricky to escape \d pattern
132
- md = path.match(regexp)
133
- page = md[1]
134
- resource = Jets::Resource::ChildStack::ApiResource.new(@options[:s3_bucket], page: page)
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))
135
129
  add_child_resources(resource)
136
130
  end
137
131
  end
138
132
 
139
133
  def add_api_deployment
140
- resource = Jets::Resource::ChildStack::ApiDeployment.new(@options[:s3_bucket])
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
141
  add_child_resources(resource)
142
142
  end
143
143
 
@@ -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
@@ -1,10 +1,6 @@
1
- # Implements:
2
- #
3
- # compose
4
- # template_path
5
- #
6
- module Jets::Cfn::Builders
7
- class RuleBuilder < BaseChildBuilder
1
+ class Jets::Cfn::Builder
2
+ class Rule < Nested
3
+ # interface method
8
4
  def compose
9
5
  add_common_parameters
10
6
  add_functions
@@ -16,7 +12,7 @@ module Jets::Cfn::Builders
16
12
  # List of AWS Config Managed Rules: https://amzn.to/2BOt9KN
17
13
  def add_managed_rules
18
14
  @app_class.managed_rules.each do |rule|
19
- resource = Jets::Resource.new(rule[:definition], rule[:replacements])
15
+ resource = Jets::Cfn::Resource.new(rule[:definition], rule[:replacements])
20
16
  add_resource(resource)
21
17
  end
22
18
  end
@@ -1,12 +1,13 @@
1
- module Jets::Cfn::Builders
2
- class SharedBuilder < BaseChildBuilder
1
+ class Jets::Cfn::Builder
2
+ class Shared < Nested
3
+ # interface method
3
4
  def compose
4
5
  stack = @app_class.new # @app_class is subclass. IE: Alarm < Jets::Stack
5
6
  builder = Jets::Stack::Builder.new(stack)
6
7
  @template = builder.template # overwrite entire @template
7
8
  end
8
9
 
9
- # template_path is an interface method for Interface module
10
+ # interface method
10
11
  def template_path
11
12
  Jets::Names.shared_template_path(@app_class)
12
13
  end
@@ -1,4 +1,4 @@
1
- module Jets::Cfn::Builders::Util
1
+ module Jets::Cfn::Builder::Util
2
2
  class Source
3
3
  class << self
4
4
  def version
@@ -1,72 +1,64 @@
1
- require 'digest'
2
-
3
- module Jets::Commands
4
- class Build
5
- include StackInfo
1
+ module Jets::Cfn
2
+ class Builder
3
+ extend Memoist
4
+ include Jets::AwsServices
6
5
 
7
6
  def initialize(options)
8
- @options = options.dup
9
- end
10
-
11
- def run
12
- puts "Building project for Lambda..."
13
-
14
- return if @options[:noop]
15
- # run gets called from the CLI and does not have all the stack_options yet.
16
- # We compute it and change the options early here.
17
- @options.merge!(stack_type: stack_type, s3_bucket: s3_bucket)
18
- build
7
+ @options = options
19
8
  end
20
9
 
21
10
  def build
22
- build_code unless @options[:templates]
23
- build_templates
24
- end
25
-
26
- def build_code
27
- Jets::Builders::CodeBuilder.new.build unless @options[:noop]
28
- end
29
-
30
- def build_templates
31
- puts "Building CloudFormation templates."
11
+ puts "Building CloudFormation templates"
32
12
  clean_templates
33
- build_minimal_template
34
- build_all_templates if full?
35
- puts "Generated CloudFormation templates at #{Jets.build_root}/templates"
13
+ build_minimal_parent_template
14
+ if @options[:stack_type] == :full
15
+ build_all_templates
16
+ build_full_parent_template # must be called at the end
17
+ end
18
+ Jets::Router::State.save_apigw_state if ENV['JETS_API_STATE_DEBUG']
19
+ puts "Built CloudFormation templates at #{Jets.build_root}/templates"
36
20
  end
37
21
 
38
- def full?
39
- @options[:templates] || @options[:stack_type] == :full
22
+ def build_minimal_parent_template
23
+ Parent.new(@options.merge(stack_type: :minimal)).build
40
24
  end
41
25
 
42
26
  def build_all_templates
43
27
  # CloudFormation templates
44
28
  # 1. Shared and authorizer templates - child templates needs them
45
- build_api_gateway_templates
29
+ build_api_gateway_templates unless Jets::Router.no_routes?
46
30
  build_authorizer_templates # controllers can use these
47
31
  # 2. Child templates - parent template needs them
32
+ build_one_lambda_for_all_controllers
48
33
  build_app_child_templates
49
- # 2. Child templates - parent template needs them
34
+ # 3. Child templates - parent template needs them
50
35
  build_shared_resources_templates
51
- # 4. Finally parent template
52
- build_parent_template # must be called at the end
53
36
  end
54
37
 
55
- def build_minimal_template
56
- Jets::Cfn::Builders::ParentBuilder.new(@options).build(parent=true)
38
+ def build_full_parent_template
39
+ Parent.new(@options.merge(stack_type: :full)).build
57
40
  end
58
41
 
59
42
  def build_api_gateway_templates
60
- Jets::Cfn::Builders::ApiGatewayBuilder.new(@options).build
61
- Jets::Cfn::Builders::ApiDeploymentBuilder.new(@options).build
43
+ Api::Gateway.new(@options).build
44
+ Api::Resources.build_pages(@options)
45
+ Api::Methods.build_pages(@options)
46
+ Api::Deployment.new(@options).build
47
+ Api::Mapping.new(@options).build
62
48
  end
63
49
 
64
50
  def build_authorizer_templates
65
51
  authorizer_files.each do |path|
66
- Jets::Cfn::Builders::AuthorizerBuilder.new(path).build
52
+ Authorizer.new(path).build
67
53
  end
68
54
  end
69
55
 
56
+ def build_one_lambda_for_all_controllers
57
+ return if Jets.config.mode == "job"
58
+ return unless Jets.one_lambda_for_all_controllers?
59
+ OneController.new(@options).build
60
+ end
61
+
70
62
  def build_app_child_templates
71
63
  app_files.each do |path|
72
64
  build_child_template(path)
@@ -75,7 +67,7 @@ module Jets::Commands
75
67
 
76
68
  def build_shared_resources_templates
77
69
  Jets::Stack.subclasses.each do |subclass|
78
- Jets::Cfn::Builders::SharedBuilder.new(subclass).build
70
+ Shared.new(subclass).build
79
71
  end
80
72
  end
81
73
 
@@ -85,32 +77,34 @@ module Jets::Commands
85
77
  return if authorizer?(path) # AuthorizerBuilder is built earlier
86
78
 
87
79
  md = path.match(%r{app/(.*?)/}) # extract: controller, job or function
88
- process_class = md[1].classify
89
- builder_class = "Jets::Cfn::Builders::#{process_class}Builder".constantize
80
+ app_class = md[1].classify
81
+
82
+ if app_class == "Controller" && Jets.one_lambda_for_all_controllers? # app/controllers
83
+ return
84
+ end
85
+
86
+ builder_class = "Jets::Cfn::Builder::#{app_class}".constantize
90
87
 
91
- # Examples:
92
- # Jets::Cfn::Builders::ControllerBuilder.new(PostsController)
93
- # Jets::Cfn::Builders::JobBuilder.new(EasyJob)
94
- # Jets::Cfn::Builders::RuleBuilder.new(CheckRule)
95
- # Jets::Cfn::Builders::FunctionBuilder.new(Hello)
96
- # Jets::Cfn::Builders::FunctionBuilder.new(HelloFunction)
97
88
  app_class = Jets::Klass.from_path(path)
98
89
  if Jets.poly_only? && app_class == Jets::PreheatJob
99
90
  return # No prewarm when there's only poly functions
100
91
  end
101
92
 
102
- builder = builder_class.new(app_class)
103
- builder.build
93
+ # Builder class fully qualified name:
94
+ # Controller => Jets::Cfn::Builder::Controller
95
+ # Examples:
96
+ # Controller.new(PostsController).build
97
+ # Job.new(EasyJob).build
98
+ # Rule.new(CheckRule).build
99
+ # Function.new(Hello).build
100
+ # Function.new(HelloFunction).build
101
+ builder_class.new(app_class).build
104
102
  end
105
103
 
106
104
  def authorizer?(path)
107
105
  path.include?("app/authorizers")
108
106
  end
109
107
 
110
- def build_parent_template
111
- Jets::Cfn::Builders::ParentBuilder.new(@options).build(parent=true)
112
- end
113
-
114
108
  def clean_templates
115
109
  FileUtils.rm_rf("#{Jets.build_root}/templates")
116
110
  end
@@ -142,7 +136,6 @@ module Jets::Commands
142
136
  relative_path = path.sub("#{Jets.root}/", '') # rid of the Jets.root at beginning
143
137
  paths << relative_path
144
138
  end
145
- paths += internal_app_files
146
139
  paths
147
140
  end
148
141
 
@@ -200,7 +193,7 @@ module Jets::Commands
200
193
  def app_has_ruby?
201
194
  has_ruby = app_files.detect do |path|
202
195
  app_class = Jets::Klass.from_path(path) # IE: PostsController, Jets::PublicController
203
- langs = app_class.tasks.map(&:lang)
196
+ langs = app_class.definitions.map(&:lang)
204
197
  langs.include?(:ruby) && app_class != Jets::PreheatJob
205
198
  end
206
199
  !!has_ruby
@@ -219,27 +212,6 @@ module Jets::Commands
219
212
  has_ruby
220
213
  end
221
214
 
222
- # Add internal Jets controllers if they are being used
223
- # TODO: Interesting, this eventually just used to generate handlers and controllers only.
224
- # Maybe rename to make that clear.
225
- # The copying of other internal files like views is done in builders/code_builder.rb copy_internal_jets_code
226
- def internal_app_files
227
- paths = []
228
- internal = File.expand_path("../internal", __dir__)
229
-
230
- controllers = "#{internal}/app/controllers/jets"
231
- paths << "#{controllers}/public_controller.rb" if router_has?("Jets::PublicController")
232
- paths << "#{controllers}/rack_controller.rb" if router_has?("Jets::RackController")
233
- paths << "#{controllers}/mailers_controller.rb" if router_has?("Jets::MailersController")
234
- paths << "#{controllers}/mount_controller.rb" if router_has?("Jets::MountController")
235
-
236
- if Jets.config.prewarm.enable
237
- paths << "#{internal}/app/jobs/jets/preheat_job.rb"
238
- end
239
-
240
- paths
241
- end
242
-
243
215
  def router_has?(controller)
244
216
  Jets::Router.has_controller?(controller)
245
217
  end
@@ -0,0 +1,45 @@
1
+ module Jets::Cfn
2
+ class Deployment
3
+ extend Memoist
4
+ include Jets::AwsServices
5
+ include Jets::Command::AwsHelpers
6
+ include Jets::Command::ApiHelpers
7
+
8
+ def initialize(options={})
9
+ @options = options
10
+ @stack_name = options[:stack_name] # stack name or stack id (deleted)
11
+ @rollback_version = options[:rollback_version]
12
+ end
13
+
14
+ def create
15
+ Jets.boot # needed since Jets is lazy loaded
16
+ return if Jets.config.pro.disable
17
+ return unless Jets::Api.token
18
+ stack = find_stack(@stack_name)
19
+ return unless stack
20
+
21
+ record_deployment(stack)
22
+ end
23
+
24
+ def record_deployment(stack)
25
+ deploy_user = ENV['JETS_DEPLOY_USER'] || ENV['USER']
26
+ resp = Jets::Api::Release.create(
27
+ stack_arn: stack.stack_id,
28
+ stack_status: stack.stack_status,
29
+ message: message,
30
+ deploy_user: deploy_user,
31
+ )
32
+ check_for_error_message!(resp)
33
+ puts "Release version: #{resp["version"]}" if resp["version"]
34
+ resp
35
+ rescue Jets::Api::RequestError => e
36
+ puts "WARNING: Unable to create release. #{e.class}: #{e.message}"
37
+ end
38
+
39
+ def message
40
+ return @options[:message][0..255] if @options[:message]
41
+ # else default message
42
+ @rollback_version ? "Rollback to #{@rollback_version}" : "Deploy"
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ module Jets::Cfn
2
+ class Download
3
+ include Jets::AwsServices
4
+
5
+ def download_templates(version)
6
+ bucket = s3_resource.bucket(bucket_name)
7
+ unless bucket.exists?
8
+ puts "ERROR: The bucket #{bucket_name} does not exist.".color(:red)
9
+ exit 1
10
+ end
11
+
12
+ # Cleanup templates folder
13
+ FileUtils.rm_rf(Jets::Names.templates_folder)
14
+ FileUtils.mkdir_p(Jets::Names.templates_folder)
15
+
16
+ key_path = "jets/cfn-templates/versions/#{version}"
17
+ objects = bucket.objects(prefix: key_path)
18
+ if objects.count > 0
19
+ objects.each do |object|
20
+ file_name = "#{Jets::Names.templates_folder}/#{object.key.split('/').last}"
21
+ object.get(response_target: file_name)
22
+ puts "Downloaded #{file_name} from s3://#{bucket_name}/#{object.key}" if ENV['JETS_DEBUG']
23
+ end
24
+ else
25
+ puts "ERROR: Cannot rollback to this version because the CloudFormation templates are not available.".color(:red)
26
+ puts <<~EOL
27
+ This can happen the app was deployed before Jets Pro features were enabled,
28
+ or if the stack was delete and redeployed. Deleted stacks history are not
29
+ rollbackable because their original s3 bucket is deleted.
30
+ EOL
31
+ exit 1
32
+ end
33
+ end
34
+
35
+ def bucket_name
36
+ Jets.s3_bucket
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,39 @@
1
+ # Params are an attempt to centralize the logic for building parameters.
2
+ # Params are built at two different times:
3
+ # 1. Cfn::Builders::Api::Methods.build_pages
4
+ # => Api::Pages::Methods => api-methods-1.yml nested stack
5
+ # Only uses keys.
6
+ # 2. Cfn::Builders::Parent
7
+ # => Resource::Nested::Api::Methods => parent.yml logical id ApiMethods1
8
+ # Uses both keys and values.
9
+ module Jets::Cfn::Params::Api
10
+ class Base
11
+ extend Memoist
12
+
13
+ def initialize(options={})
14
+ @options = options
15
+ @template = load_template # current paged template_path
16
+ @params = ActiveSupport::HashWithIndifferentAccess.new
17
+ end
18
+
19
+ def params
20
+ build # interface method
21
+ @params
22
+ end
23
+ memoize :params
24
+
25
+ # Nice to be able to use template or template_path so the common Template.load_file
26
+ # is centralized.
27
+ def load_template
28
+ if @options[:template]
29
+ # At Cfn::Builders::Api::Methods build time, template is in memory
30
+ @options[:template]
31
+ else
32
+ # At Resource::Nested::Api::Methods build time, template is on disk
33
+ Jets::Cfn::Template.load_file(@options[:template_path])
34
+ end
35
+ end
36
+
37
+ def build; end # noop by default
38
+ end
39
+ end
@@ -0,0 +1,10 @@
1
+ module Jets::Cfn::Params::Api
2
+ class Cors < Base
3
+ # interface method
4
+ def build
5
+ resources = Resources.new(@options).params
6
+ methods = Methods.new(@options).params
7
+ @params = resources.merge(methods)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,69 @@
1
+ module Jets::Cfn::Params::Api
2
+ class Methods < Base
3
+ # interface method
4
+ def build
5
+ @params.merge!(RestApi: "!GetAtt ApiGateway.Outputs.RestApi") # common
6
+ @template[:Resources].each do |logical_id, resource|
7
+ create_params_from_resource(resource)
8
+ end
9
+ end
10
+
11
+ def create_params_from_resource(resource)
12
+ case resource[:Type]
13
+ when "AWS::ApiGateway::Method"
14
+ # function name
15
+ create_function_name_param(resource)
16
+ # authorizer id
17
+ create_authorizer_param(resource)
18
+ # resource id
19
+ resource_id = resource[:Properties][:ResourceId].sub("!Ref ", "")
20
+ @params.merge!(resource_id => api_method_stack_value(resource_id))
21
+ when "AWS::Lambda::Permission"
22
+ # function name
23
+ function_name = resource[:Properties][:FunctionName].sub("!Ref ", "")
24
+ @params.merge!(function_name => controller_stack_value(function_name))
25
+ end
26
+ end
27
+
28
+ def create_authorizer_param(resource)
29
+ authorizer_id_ref = resource[:Properties][:AuthorizerId]
30
+ return unless authorizer_id_ref
31
+ authorizer_id = authorizer_id_ref.sub("!Ref ", "")
32
+ @params.merge!(authorizer_id => api_authorizer_stack_value(authorizer_id))
33
+ end
34
+
35
+ # IE: !GetAtt MainAuthorizer.Outputs.MainAuthorizerProtectAuthorizer
36
+ def api_authorizer_stack_value(authorizer_id)
37
+ stack = authorizer_id.sub(/(.*?)Authorizer.*Authorizer$/, '\1') # IE: Main
38
+ stack += "Authorizer" # IE: MainAuthorizer
39
+ "!GetAtt #{stack}.Outputs.#{authorizer_id}"
40
+ end
41
+
42
+ def create_function_name_param(resource)
43
+ # Type can be: AWS_PROXY or MOCK (cors)
44
+ return unless resource[:Properties][:Integration][:Type] == "AWS_PROXY"
45
+ uri = resource[:Properties][:Integration][:Uri]
46
+ md = uri.match(%r|functions/\${(.*)}/invocations|)
47
+ function_name = md[1]
48
+ @params.merge!(function_name => controller_stack_value(function_name))
49
+ end
50
+
51
+ # function_name: UpControllerIndexLambdaFunction
52
+ def controller_stack_value(function_name)
53
+ controller = function_name.sub(/Controller.*/, "Controller")
54
+ # IE: !GetAtt UpController.Outputs.UpControllerIndexLambdaFunction
55
+ "!GetAtt #{controller}.Outputs.#{function_name}"
56
+ end
57
+
58
+ def api_method_stack_value(resource_id)
59
+ # IE: !GetAtt ApiResources1.Outputs.UpApiResource
60
+ api_stack = if resource_id == "RootResourceId"
61
+ "ApiGateway"
62
+ else
63
+ Jets::Cfn::Params::Api::Resources.stack_logical_id(resource_id)
64
+ end
65
+ "!GetAtt #{api_stack}.Outputs.#{resource_id}"
66
+ end
67
+ end
68
+ end
69
+