jets 4.0.10 → 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 (618) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +53 -0
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/README.md +20 -36
  7. data/Rakefile +3 -3
  8. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  9. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  10. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  11. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  13. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  14. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  15. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  17. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  18. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  19. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  20. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  21. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  22. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  23. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  24. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  25. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  26. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  27. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  28. data/engines/internal/lib/internal/actionview.rb +152 -0
  29. data/engines/internal/lib/internal/activerecord.rb +37 -0
  30. data/engines/internal/lib/internal/activesupport.rb +47 -0
  31. data/engines/internal/lib/internal/engine.rb +13 -0
  32. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  33. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  34. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  36. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  37. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  38. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  39. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  40. data/exe/jets +1 -10
  41. data/jets.gemspec +14 -11
  42. data/lib/jets/app_loader.rb +77 -0
  43. data/lib/jets/application/bootstrap.rb +100 -0
  44. data/lib/jets/application/configuration/defaults.rb +256 -0
  45. data/lib/jets/application/configuration.rb +494 -0
  46. data/lib/jets/application/default_middleware_stack.rb +140 -0
  47. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  48. data/lib/jets/application/finisher.rb +266 -0
  49. data/lib/jets/application/routes_reloader.rb +80 -0
  50. data/lib/jets/application.rb +515 -198
  51. data/lib/jets/authorizer/base.rb +1 -0
  52. data/lib/jets/authorizer/dsl.rb +15 -11
  53. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  54. data/lib/jets/autoloaders/gem.rb +70 -0
  55. data/lib/jets/autoloaders/inflector.rb +21 -0
  56. data/lib/jets/autoloaders.rb +38 -101
  57. data/lib/jets/aws_services/stack_status.rb +1 -1
  58. data/lib/jets/backtrace_cleaner.rb +27 -0
  59. data/lib/jets/booter.rb +29 -176
  60. data/lib/jets/builders/code_builder.rb +45 -117
  61. data/lib/jets/builders/code_size.rb +1 -0
  62. data/lib/jets/builders/gem_replacer.rb +5 -6
  63. data/lib/jets/builders/handler_generator.rb +34 -14
  64. data/lib/jets/builders/lambda_layer.rb +2 -7
  65. data/lib/jets/builders/purger.rb +1 -1
  66. data/lib/jets/builders/rack_packager.rb +1 -1
  67. data/lib/jets/builders/ruby_packager.rb +17 -6
  68. data/lib/jets/builders/shim_vars/app.rb +10 -6
  69. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  70. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  71. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  72. data/lib/jets/bundle.rb +2 -9
  73. data/lib/jets/cfn/base.rb +82 -0
  74. data/lib/jets/cfn/builder/api/base.rb +12 -0
  75. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  76. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  77. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  78. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  79. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  80. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  81. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  82. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  83. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  84. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  85. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  86. data/lib/jets/cfn/builder/controller.rb +28 -0
  87. data/lib/jets/cfn/builder/function.rb +9 -0
  88. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  89. data/lib/jets/cfn/builder/job.rb +10 -0
  90. data/lib/jets/cfn/builder/nested.rb +130 -0
  91. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  92. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  93. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  94. data/lib/jets/cfn/builder/post_process.rb +25 -0
  95. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  96. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  97. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  98. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  99. data/lib/jets/cfn/deployment.rb +45 -0
  100. data/lib/jets/cfn/download.rb +39 -0
  101. data/lib/jets/cfn/params/api/base.rb +39 -0
  102. data/lib/jets/cfn/params/api/cors.rb +10 -0
  103. data/lib/jets/cfn/params/api/methods.rb +69 -0
  104. data/lib/jets/cfn/params/api/resources.rb +28 -0
  105. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  106. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  107. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  108. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  109. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  113. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  115. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +5 -3
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  124. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  129. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  131. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  132. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  133. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  134. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  135. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  137. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  138. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  139. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  140. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  141. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  142. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  143. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  144. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  145. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  146. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  147. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  148. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  149. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  150. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  151. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  152. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  153. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  154. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  155. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  157. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  158. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  159. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  161. data/lib/jets/cfn/resource/one/function.rb +66 -0
  162. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  163. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  164. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  165. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  166. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  167. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  168. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  169. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  170. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  171. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  172. data/lib/jets/cfn/resource.rb +8 -0
  173. data/lib/jets/cfn/ship.rb +20 -19
  174. data/lib/jets/cfn/template.rb +89 -0
  175. data/lib/jets/cfn/upload.rb +26 -23
  176. data/lib/jets/cli.rb +28 -210
  177. data/lib/jets/command/actions.rb +49 -0
  178. data/lib/jets/command/api_helpers.rb +41 -0
  179. data/lib/jets/command/aws_helpers.rb +26 -0
  180. data/lib/jets/command/base.rb +204 -0
  181. data/lib/jets/command/behavior.rb +83 -0
  182. data/lib/jets/command/environment_argument.rb +42 -0
  183. data/lib/jets/command/help/call.md +48 -0
  184. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  185. data/lib/jets/command/help/logs.md +21 -0
  186. data/lib/jets/{commands → command}/help/new.md +3 -4
  187. data/lib/jets/command/help/projects.md +6 -0
  188. data/lib/jets/command/help/releases.md +37 -0
  189. data/lib/jets/command/help/rollback.md +5 -0
  190. data/lib/jets/command/help/routes.md +15 -0
  191. data/lib/jets/command/help/stacks.md +6 -0
  192. data/lib/jets/command/help.rb +17 -0
  193. data/lib/jets/command/helpers/editor.rb +35 -0
  194. data/lib/jets/command.rb +133 -0
  195. data/lib/jets/commands/application/application_command.rb +40 -0
  196. data/lib/jets/commands/build/build_command.rb +33 -0
  197. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  198. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  199. data/lib/jets/commands/call/base_guesser.rb +4 -4
  200. data/lib/jets/commands/call/call_command.rb +27 -0
  201. data/lib/jets/commands/call/caller.rb +184 -0
  202. data/lib/jets/commands/call/guesser.rb +1 -1
  203. data/lib/jets/commands/clean/base.rb +1 -1
  204. data/lib/jets/commands/clean/build.rb +1 -1
  205. data/lib/jets/commands/clean/clean_command.rb +15 -0
  206. data/lib/jets/commands/clean/log.rb +1 -1
  207. data/lib/jets/commands/configure/configure_command.rb +9 -0
  208. data/lib/jets/commands/console/console_command.rb +38 -0
  209. data/lib/jets/commands/credentials/USAGE +103 -0
  210. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  211. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  212. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  213. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  214. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  215. data/lib/jets/commands/delete/delete_command.rb +155 -0
  216. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  217. data/lib/jets/commands/dev/dev_command.rb +19 -0
  218. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  219. data/lib/jets/commands/encrypted/USAGE +46 -0
  220. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  221. data/lib/jets/commands/gems/gems_command.rb +14 -0
  222. data/lib/jets/commands/generate/generate_command.rb +95 -0
  223. data/lib/jets/commands/help/USAGE +20 -0
  224. data/lib/jets/commands/help/help_command.rb +15 -0
  225. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  226. data/lib/jets/commands/logs/logs_command.rb +45 -0
  227. data/lib/jets/commands/new/new_command.rb +19 -0
  228. data/lib/jets/commands/notes/notes_command.rb +30 -0
  229. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  230. data/lib/jets/commands/projects/projects_command.rb +30 -0
  231. data/lib/jets/commands/rake/rake_command.rb +59 -0
  232. data/lib/jets/commands/releases/releases_command.rb +72 -0
  233. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  234. data/lib/jets/commands/routes/routes_command.rb +19 -0
  235. data/lib/jets/commands/runner/runner_command.rb +60 -0
  236. data/lib/jets/commands/server/server_command.rb +291 -0
  237. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  238. data/lib/jets/commands/status/status_command.rb +9 -0
  239. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  240. data/lib/jets/commands/version/version_command.rb +11 -0
  241. data/lib/jets/commands.rb +17 -0
  242. data/lib/jets/configuration.rb +166 -0
  243. data/lib/jets/controller/base.rb +105 -183
  244. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  245. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  246. data/lib/jets/controller/compat/caching.rb +13 -0
  247. data/lib/jets/controller/compat/future.rb +13 -0
  248. data/lib/jets/controller/compat/route_set.rb +47 -0
  249. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  250. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  251. data/lib/jets/controller/decorate/logging.rb +90 -0
  252. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  253. data/lib/jets/controller/decorate/url_for.rb +10 -0
  254. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  255. data/lib/jets/controller/handler.rb +41 -0
  256. data/lib/jets/controller/middleware/main.rb +16 -8
  257. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  258. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  259. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  260. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  261. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  262. data/lib/jets/controller/request/compat/params.rb +144 -0
  263. data/lib/jets/controller/request/compat/request.rb +125 -0
  264. data/lib/jets/controller/request.rb +35 -18
  265. data/lib/jets/controller/response/compat/response.rb +67 -0
  266. data/lib/jets/controller/response.rb +91 -8
  267. data/lib/jets/core.rb +142 -51
  268. data/lib/jets/core_ext/kernel.rb +2 -2
  269. data/lib/jets/core_ext/symbol.rb +5 -0
  270. data/lib/jets/core_ext.rb +4 -0
  271. data/lib/jets/dev_caching.rb +44 -0
  272. data/lib/jets/dotenv/ssm.rb +5 -2
  273. data/lib/jets/dotenv.rb +2 -1
  274. data/lib/jets/engine/configuration.rb +96 -0
  275. data/lib/jets/engine/turbines.rb +23 -0
  276. data/lib/jets/engine.rb +380 -0
  277. data/lib/jets/exception_reporting.rb +43 -0
  278. data/lib/jets/generators/job/job_generator.rb +41 -0
  279. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  281. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  283. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  284. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  285. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  286. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  287. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  288. data/lib/jets/generators/overrides/app/USAGE +38 -0
  289. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  290. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  291. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  292. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  293. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  294. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  295. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  296. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  297. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  298. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  299. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  300. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  301. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  302. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  303. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  304. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  305. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  307. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  308. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  310. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  312. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  313. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  314. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  315. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  316. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  317. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  318. data/lib/jets/generators.rb +112 -0
  319. data/lib/jets/info.rb +116 -0
  320. data/lib/jets/initializable.rb +95 -0
  321. data/lib/jets/job/base.rb +3 -2
  322. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  323. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  324. data/lib/jets/job/dsl/iot_event.rb +6 -6
  325. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  326. data/lib/jets/job/dsl/log_event.rb +2 -2
  327. data/lib/jets/job/dsl/rule_event.rb +7 -4
  328. data/lib/jets/job/dsl/s3_event.rb +1 -1
  329. data/lib/jets/job/dsl/sns_event.rb +6 -6
  330. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  331. data/lib/jets/klass.rb +5 -6
  332. data/lib/jets/lambda/definition.rb +118 -0
  333. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  334. data/lib/jets/lambda/dsl.rb +64 -53
  335. data/lib/jets/lambda/function.rb +3 -3
  336. data/lib/jets/lambda/function_constructor.rb +6 -6
  337. data/lib/jets/lambda/functions.rb +36 -1
  338. data/lib/jets/mega/request/source.rb +1 -2
  339. data/lib/jets/mega/request.rb +4 -4
  340. data/lib/jets/names.rb +31 -15
  341. data/lib/jets/overrides/dummy/rails.rb +11 -0
  342. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  343. data/lib/jets/overrides/puma.rb +10 -0
  344. data/lib/jets/paths.rb +243 -0
  345. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  346. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  347. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  349. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  350. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  351. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  352. data/lib/jets/preheat.rb +12 -25
  353. data/lib/jets/processors/deducer.rb +2 -2
  354. data/lib/jets/processors/main_processor.rb +6 -13
  355. data/lib/jets/rack/logger.rb +77 -0
  356. data/lib/jets/router/compat/route_set.rb +177 -0
  357. data/lib/jets/router/dsl/mount.rb +40 -6
  358. data/lib/jets/router/dsl.rb +125 -105
  359. data/lib/jets/router/engine_mount.rb +36 -0
  360. data/lib/jets/router/help.rb +130 -0
  361. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  362. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  363. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  364. data/lib/jets/router/matcher.rb +140 -17
  365. data/lib/jets/router/resources/options.rb +6 -4
  366. data/lib/jets/router/route/after_initialize.rb +64 -0
  367. data/lib/jets/router/route/as.rb +93 -0
  368. data/lib/jets/router/route/authorizer.rb +1 -0
  369. data/lib/jets/router/route/compat.rb +45 -0
  370. data/lib/jets/router/route/info.rb +74 -0
  371. data/lib/jets/router/route/node.rb +137 -0
  372. data/lib/jets/router/route/path.rb +93 -0
  373. data/lib/jets/router/route.rb +109 -106
  374. data/lib/jets/router/route_set.rb +214 -0
  375. data/lib/jets/router/scope.rb +204 -69
  376. data/lib/jets/router/state.rb +36 -16
  377. data/lib/jets/router/util.rb +1 -31
  378. data/lib/jets/router.rb +64 -162
  379. data/lib/jets/ruby_version_check.rb +15 -0
  380. data/lib/jets/rule/base.rb +1 -0
  381. data/lib/jets/rule/dsl.rb +7 -7
  382. data/lib/jets/secrets.rb +110 -0
  383. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  384. data/lib/jets/spec_helpers/controllers.rb +32 -24
  385. data/lib/jets/spec_helpers.rb +0 -6
  386. data/lib/jets/stack/builder.rb +3 -2
  387. data/lib/jets/stack/definition.rb +1 -4
  388. data/lib/jets/stack/function.rb +2 -2
  389. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  390. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  391. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  392. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  393. data/lib/jets/stack/output/lookup.rb +1 -1
  394. data/lib/jets/stack/output.rb +2 -2
  395. data/lib/jets/stack/parameter.rb +2 -2
  396. data/lib/jets/stack/resource.rb +3 -3
  397. data/lib/jets/stack/s3_event.rb +51 -37
  398. data/lib/jets/stack.rb +1 -1
  399. data/lib/jets/tasks/engine.rake +85 -0
  400. data/lib/jets/tasks/framework.rake +66 -0
  401. data/lib/jets/tasks/log.rake +41 -0
  402. data/lib/jets/tasks/middleware.rake +9 -0
  403. data/lib/jets/tasks/misc.rake +81 -0
  404. data/lib/jets/tasks/statistics.rake +37 -0
  405. data/lib/jets/tasks/tmp.rake +51 -0
  406. data/lib/jets/tasks/yarn.rake +29 -0
  407. data/lib/jets/tasks/zeitwerk.rake +61 -0
  408. data/lib/jets/tasks.rb +18 -0
  409. data/lib/jets/turbine/configurable.rb +36 -0
  410. data/lib/jets/turbine/configuration.rb +101 -0
  411. data/lib/jets/turbine.rb +164 -20
  412. data/lib/jets/util/camelize.rb +24 -0
  413. data/lib/jets/version.rb +1 -1
  414. data/lib/jets.rb +7 -15
  415. metadata +427 -336
  416. data/bin/release +0 -9
  417. data/lib/jets/application/defaults.rb +0 -230
  418. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  419. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  420. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  421. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  422. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  423. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  424. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  425. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  426. data/lib/jets/cfn/built_template.rb +0 -15
  427. data/lib/jets/cfn/template_source.rb +0 -61
  428. data/lib/jets/commands/base.rb +0 -145
  429. data/lib/jets/commands/call.rb +0 -184
  430. data/lib/jets/commands/clean.rb +0 -19
  431. data/lib/jets/commands/configure.rb +0 -51
  432. data/lib/jets/commands/console.rb +0 -18
  433. data/lib/jets/commands/db/environment-task.rake +0 -3
  434. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  435. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  436. data/lib/jets/commands/db/tasks.rb +0 -34
  437. data/lib/jets/commands/db.rb +0 -13
  438. data/lib/jets/commands/dbconsole.rb +0 -134
  439. data/lib/jets/commands/delete.rb +0 -136
  440. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  441. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  442. data/lib/jets/commands/dynamodb.rb +0 -19
  443. data/lib/jets/commands/gems.rb +0 -13
  444. data/lib/jets/commands/help/call.md +0 -69
  445. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  446. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  447. data/lib/jets/commands/help/routes.md +0 -16
  448. data/lib/jets/commands/help.rb +0 -9
  449. data/lib/jets/commands/import/base.rb +0 -49
  450. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  451. data/lib/jets/commands/import/rack.rb +0 -16
  452. data/lib/jets/commands/import/rails.rb +0 -74
  453. data/lib/jets/commands/import/sequence.rb +0 -90
  454. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  455. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  456. data/lib/jets/commands/import.rb +0 -12
  457. data/lib/jets/commands/main.rb +0 -169
  458. data/lib/jets/commands/markdown/creator.rb +0 -58
  459. data/lib/jets/commands/markdown/index.rb +0 -27
  460. data/lib/jets/commands/markdown/page.rb +0 -125
  461. data/lib/jets/commands/markdown/shell.rb +0 -11
  462. data/lib/jets/commands/new.rb +0 -173
  463. data/lib/jets/commands/rake_command.rb +0 -61
  464. data/lib/jets/commands/rake_tasks.rb +0 -50
  465. data/lib/jets/commands/runner.rb +0 -16
  466. data/lib/jets/commands/sequence.rb +0 -104
  467. data/lib/jets/commands/stack_info.rb +0 -30
  468. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  470. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  471. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  472. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  473. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  474. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  475. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  476. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  477. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  478. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  479. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  480. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  481. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  482. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  483. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  484. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  485. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  486. data/lib/jets/commands/upgrade/version1.rb +0 -136
  487. data/lib/jets/commands/upgrade.rb +0 -105
  488. data/lib/jets/commands/webpacker_template.rb +0 -18
  489. data/lib/jets/controller/callbacks.rb +0 -73
  490. data/lib/jets/controller/cookies/jar.rb +0 -269
  491. data/lib/jets/controller/cookies.rb +0 -38
  492. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  493. data/lib/jets/controller/error.rb +0 -4
  494. data/lib/jets/controller/forgery_protection.rb +0 -43
  495. data/lib/jets/controller/layout.rb +0 -17
  496. data/lib/jets/controller/middleware/cors.rb +0 -60
  497. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  498. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  499. data/lib/jets/controller/middleware/reloader.rb +0 -15
  500. data/lib/jets/controller/parameters_filter.rb +0 -29
  501. data/lib/jets/controller/params.rb +0 -117
  502. data/lib/jets/controller/redirection.rb +0 -61
  503. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  504. data/lib/jets/controller/rendering.rb +0 -96
  505. data/lib/jets/controller/stage.rb +0 -34
  506. data/lib/jets/controller.rb +0 -3
  507. data/lib/jets/db.rb +0 -15
  508. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  509. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  510. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  511. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  512. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  513. data/lib/jets/generator.rb +0 -112
  514. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  515. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  516. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  517. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -57
  518. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  519. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  520. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  521. data/lib/jets/lambda/task.rb +0 -111
  522. data/lib/jets/logger.rb +0 -21
  523. data/lib/jets/middleware/configurator.rb +0 -84
  524. data/lib/jets/middleware/default_stack.rb +0 -53
  525. data/lib/jets/middleware/layer.rb +0 -34
  526. data/lib/jets/middleware/stack.rb +0 -77
  527. data/lib/jets/middleware.rb +0 -33
  528. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  529. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  530. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  531. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  532. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  533. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  534. data/lib/jets/overrides/rails.rb +0 -6
  535. data/lib/jets/rack_server.rb +0 -86
  536. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  537. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  538. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  539. data/lib/jets/resource/api_gateway/method.rb +0 -102
  540. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  541. data/lib/jets/resource/base.rb +0 -28
  542. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  543. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  544. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  545. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  546. data/lib/jets/resource/child_stack/base.rb +0 -24
  547. data/lib/jets/resource/lambda/function.rb +0 -221
  548. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  549. data/lib/jets/resource/permission.rb +0 -45
  550. data/lib/jets/resource.rb +0 -71
  551. data/lib/jets/router/error.rb +0 -4
  552. data/lib/jets/router/finder.rb +0 -47
  553. data/lib/jets/router/helpers/core_helper.rb +0 -27
  554. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  555. data/lib/jets/router/helpers.rb +0 -4
  556. data/lib/jets/router/method_creator/code.rb +0 -99
  557. data/lib/jets/router/method_creator/edit.rb +0 -12
  558. data/lib/jets/router/method_creator/generic.rb +0 -11
  559. data/lib/jets/router/method_creator/index.rb +0 -48
  560. data/lib/jets/router/method_creator/new.rb +0 -12
  561. data/lib/jets/router/method_creator/root.rb +0 -15
  562. data/lib/jets/router/method_creator/show.rb +0 -12
  563. data/lib/jets/router/method_creator.rb +0 -50
  564. data/lib/jets/turbo/database_yaml.rb +0 -41
  565. data/lib/jets/turbo/project/.gitignore +0 -12
  566. data/lib/jets/turbo/project/.jetskeep +0 -1
  567. data/lib/jets/turbo/project/Gemfile +0 -16
  568. data/lib/jets/turbo/project/Rakefile +0 -2
  569. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  570. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  571. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  572. data/lib/jets/turbo/project/config/application.rb +0 -5
  573. data/lib/jets/turbo/project/config/routes.rb +0 -4
  574. data/lib/jets/turbo/project/config.ru +0 -5
  575. data/lib/jets/turbo/rails.rb +0 -127
  576. data/lib/jets/turbo/templates/config/database.yml +0 -30
  577. data/lib/jets/turbo.rb +0 -56
  578. data/readme/prerelease.md +0 -6
  579. data/readme/testing.md +0 -60
  580. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  581. /data/lib/jets/{commands → command}/help/build.md +0 -0
  582. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  583. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  584. /data/lib/jets/{commands → command}/help/console.md +0 -0
  585. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  587. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  588. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  589. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  590. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  591. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  592. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  593. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  594. /data/lib/jets/{commands → command}/help/server.md +0 -0
  595. /data/lib/jets/{commands → command}/help/status.md +0 -0
  596. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  597. /data/lib/jets/{commands → command}/help/url.md +0 -0
  598. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  599. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  600. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  601. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  602. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  610. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  611. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  617. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  618. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -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::Names.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
@@ -2,20 +2,24 @@
2
2
  #
3
3
  # * compose
4
4
  # * template_path
5
- module Jets::Cfn::Builders
5
+ #
6
+ class Jets::Cfn::Builder
6
7
  module Interface
7
8
  extend Memoist
9
+ include Jets::Util::Camelize
8
10
 
9
- def build(parent=false)
10
- # Do not bother building or writing the template unless there are functions defined
11
- return if @app_class && !@app_class.build?
12
-
13
- if @options.nil? || @options[:templates] || @options[:stack_type] != :minimal || parent
14
- compose # must be implemented by subclass
15
- end
11
+ def build
12
+ return unless build?
13
+ compose # must be implemented by subclass
16
14
  write
17
15
  end
18
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
+
19
23
  def write
20
24
  FileUtils.mkdir_p(File.dirname(template_path))
21
25
  IO.write(template_path, text)
@@ -28,26 +32,13 @@ module Jets::Cfn::Builders
28
32
  end
29
33
 
30
34
  def text
31
- text = YAML.dump(template)
32
- post_process_template(text)
33
- end
34
-
35
- # post process the text so that
36
- # "!Ref IamRole" => !Ref IamRole
37
- # We strip the surrounding quotes
38
- def post_process_template(text)
39
- results = text.split("\n").map do |line|
40
- if line.include?(': "!') # IE: IamRole: "!Ref IamRole",
41
- # IamRole: "!Ref IamRole" => IamRole: !Ref IamRole
42
- line.sub(/: "(.*)"/, ': \1')
43
- elsif line.include?('- "!') # IE: - "!GetAtt Foo.Arn"
44
- # IamRole: - "!GetAtt Foo.Arn" => - !GetAtt Foo.Arn
45
- line.sub(/- "(.*)"/, '- \1')
46
- else
47
- line
48
- end
49
- end
50
- results.join("\n") + "\n"
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
51
42
  end
52
43
 
53
44
  def add_description(desc)
@@ -56,7 +47,7 @@ module Jets::Cfn::Builders
56
47
 
57
48
  def add_parameters(attributes)
58
49
  attributes.each do |name,value|
59
- add_parameter(name.to_s.camelize, Description: value)
50
+ add_parameter(name.camelize.to_sym, Description: value)
60
51
  end
61
52
  end
62
53
 
@@ -64,32 +55,35 @@ module Jets::Cfn::Builders
64
55
  defaults = { Type: "String" }
65
56
  options = defaults.merge(options)
66
57
  @template[:Parameters] ||= {}
67
- @template[:Parameters][name.to_s.camelize] = Jets::Camelizer.transform(options)
58
+ @template[:Parameters][name.camelize.to_sym] = camelize(options)
68
59
  end
69
60
 
70
61
  def add_outputs(attributes)
71
62
  attributes.each do |name,value|
72
- add_output(name.to_s.camelize, Value: value)
63
+ add_output(name.camelize.to_sym, Value: value)
73
64
  end
74
65
  end
75
66
 
76
67
  def add_output(name, options={})
77
68
  @template[:Outputs] ||= {}
78
- @template[:Outputs][name.camelize] = Jets::Camelizer.transform(options)
69
+ @template[:Outputs][name.camelize.to_sym] = camelize(options)
79
70
  end
80
71
 
81
72
  def add_resources
82
- @app_class.tasks.each do |task|
83
- task.associated_resources.each do |associated|
84
- resource = Jets::Resource.new(associated.definition, task.replacements)
73
+ @app_class.definitions.each do |definition|
74
+ definition.associated_resources.each do |associated|
75
+ resource = Jets::Cfn::Resource.new(associated.definition, definition.replacements)
85
76
  add_resource(resource)
86
77
  add_resource(resource.permission)
87
78
  end
88
79
  end
89
80
  end
90
81
 
91
- # Note: Jets::Resource::Iam classes are special treated. They are the only resources that result
92
- # in creating 2 CloudFormation resources: Iam::Policy and Iam::Role.
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.
93
87
  # This allows the user to refer to the Lambda Function name in the IAM Policy itself.
94
88
  # We need separate resources to avoid CloudFormation erroring with a circular dependency.
95
89
  # Using separate IAM::Policy and IAM::Role resources allows us avoid the circular dependency error.
@@ -104,9 +98,9 @@ module Jets::Cfn::Builders
104
98
  def add_resource(resource)
105
99
  add_template_resource(resource.logical_id, resource.type, resource.attributes)
106
100
 
107
- if resource.class.to_s.include?("Jets::Resource::Iam")
101
+ if resource.class.to_s.include?("Jets::Cfn::Resource::Iam")
108
102
  role = resource # for clarity: resource is a Iam::*Role class
109
- iam_policy = Jets::Resource::Iam::Policy.new(role)
103
+ iam_policy = Jets::Cfn::Resource::Iam::Policy.new(role)
110
104
  add_template_resource(iam_policy.logical_id, iam_policy.type, iam_policy.attributes)
111
105
  end
112
106
  end
@@ -119,34 +113,34 @@ module Jets::Cfn::Builders
119
113
  # Top level options:
120
114
  #
121
115
  # add_template_resource("MyId", "AWS::ApiGateway::RestApi",
122
- # type: "AWS::ApiGateway::RestApi",
123
- # properties: {
124
- # name: "my-api"
116
+ # Type: "AWS::ApiGateway::RestApi",
117
+ # Properties: {
118
+ # Name: "my-api"
125
119
  # },
126
- # depends_on: ["AnotherResource"]
120
+ # DependsOn: ["AnotherResource"]
127
121
  # )
128
122
  #
129
123
  # Simple options with properties only:
130
124
  #
131
125
  # add_template_resource("MyId", "AWS::CloudFormationStack",
132
- # template_url: "template_url",
133
- # parameters: {},
126
+ # TemplateURL: "template_url",
127
+ # Parameters: {},
134
128
  # )
135
129
  #
136
130
  def add_template_resource(logical_id, type, options)
137
- options = Jets::Camelizer.transform(options)
131
+ options = camelize(options)
138
132
 
139
- attributes = if options.include?('Type')
140
- base = { 'Type' => type }
133
+ attributes = if options.include?(:Type)
134
+ base = { Type: type }
141
135
  base.merge(options) # options are top-level attributes
142
136
  else
143
137
  {
144
- 'Type' => type,
145
- 'Properties' => options # options are properties
138
+ Type: type,
139
+ Properties: options # options are properties
146
140
  }
147
141
  end
148
142
 
149
- @template['Resources'][logical_id] = attributes
143
+ @template[:Resources][logical_id] = attributes
150
144
  end
151
145
  end
152
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
@@ -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