jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,28 @@
1
+ module Jets::Cfn::Params::Api
2
+ class Resources < Base
3
+ # interface method
4
+ def build
5
+ # For the nested ApiResources template defined in the parent template, we need
6
+ # grab the parameters from the other paged ApiResources templates if not in
7
+ # the current template.
8
+ @template[:Parameters].keys.each do |key|
9
+ key = key.to_sym
10
+ case key.to_s
11
+ when "RestApi"
12
+ @params.merge!(key => "!GetAtt ApiGateway.Outputs.RestApi")
13
+ when "RootResourceId"
14
+ @params.merge!(key => "!GetAtt ApiGateway.Outputs.RootResourceId")
15
+ else
16
+ @params.merge!(key => "!GetAtt #{self.class.stack_logical_id(key)}.Outputs.#{key}")
17
+ end
18
+ end
19
+ end
20
+
21
+ class << self
22
+ # IE: path: #{Jets.build_root}/templates/api-resources-1.yml"
23
+ def stack_logical_id(parameter)
24
+ Jets::Cfn::Template.lookup_logical_id("api-resources", parameter)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,6 @@
1
- module Jets::Resource::ChildStack
2
- module CommonParameters
3
- def common_parameters
1
+ module Jets::Cfn::Params
2
+ module Common
3
+ def parameters
4
4
  parameters = {
5
5
  IamRole: "!GetAtt IamRole.Arn",
6
6
  S3Bucket: "!Ref S3Bucket",
@@ -1,5 +1,5 @@
1
- module Jets::Resource::ApiGateway
2
- class Authorizer < Jets::Resource::Base
1
+ module Jets::Cfn::Resource::ApiGateway
2
+ class Authorizer < Jets::Cfn::Base
3
3
  def initialize(props={})
4
4
  @props = props # associated_properties from dsl.rb
5
5
  end
@@ -7,27 +7,27 @@ module Jets::Resource::ApiGateway
7
7
  def definition
8
8
  {
9
9
  authorizer_logical_id => {
10
- type: "AWS::ApiGateway::Authorizer",
11
- properties: props,
10
+ Type: "AWS::ApiGateway::Authorizer",
11
+ Properties: props,
12
12
  }
13
13
  }
14
14
  end
15
15
 
16
16
  def props
17
17
  default = {
18
- # authorizer_credentials: '',
19
- # authorizer_result_ttl_in_seconds: '',
20
- # auth_type: '',
21
- # identity_source: '', # required
22
- # identity_validation_expression: '',
23
- # name: '',
24
- # provider_arns: [],
25
- rest_api_id: '!Ref RestApi', # Required: Yes
26
- type: '', # Required: Yes
18
+ # AuthorizerCredentials: '',
19
+ # AuthorizerResultTtlInSeconds: '',
20
+ # AuthType: '',
21
+ # IdentitySource: '', # required
22
+ # IdentityValidationExpression: '',
23
+ # Name: '',
24
+ # ProviderARNs: [],
25
+ RestApiId: '!Ref RestApi', # Required: Yes
26
+ Type: '', # Required: Yes
27
27
  }
28
28
 
29
- unless @props[:type].to_s.upcase == 'COGNITO_USER_POOLS'
30
- @props[:authorizer_uri] = { # Required: Conditional
29
+ unless @props[:Type].to_s.upcase == 'COGNITO_USER_POOLS'
30
+ @props[:AuthorizerUri] = { # Required: Conditional
31
31
  "Fn::Join" => ['', [
32
32
  'arn:aws:apigateway:',
33
33
  "!Ref 'AWS::Region'",
@@ -37,7 +37,7 @@ module Jets::Resource::ApiGateway
37
37
  ]]
38
38
  }
39
39
  end
40
- @props[:authorizer_result_ttl_in_seconds] = @props.delete(:ttl) if @props[:ttl]
40
+ @props[:AuthorizerResultTtlInSeconds] = @props.delete(:ttl) if @props[:ttl] # shorthand
41
41
 
42
42
  normalize_type!(@props)
43
43
  normalize_identity_source!(@props)
@@ -45,7 +45,7 @@ module Jets::Resource::ApiGateway
45
45
  end
46
46
 
47
47
  def authorizer_logical_id
48
- "{namespace}_authorizer" # IE: protect_authorizer
48
+ "{namespace}Authorizer" # IE: protect_authorizer
49
49
  end
50
50
 
51
51
  def outputs
@@ -58,13 +58,13 @@ module Jets::Resource::ApiGateway
58
58
  private
59
59
  # Also sets a default if it's not provided
60
60
  def normalize_type!(props)
61
- type = props[:type] || :request
62
- @props[:type] = type.to_s.upcase
61
+ type = props[:Type] || :request
62
+ @props[:Type] = type.to_s.upcase
63
63
  end
64
64
 
65
65
  # Also sets a default if it's not provided
66
66
  def normalize_identity_source!(props)
67
- identity_source = props[:identity_source] || Jets.config.api.authorizers.default_token_source
67
+ identity_source = props[:IdentitySource] || Jets.config.api.authorizers.default_token_source
68
68
  # request authorizer type can have multiple identity sources.
69
69
  # token authorizer type has only one identity source.
70
70
  # We handle both cases.
@@ -76,7 +76,7 @@ module Jets::Resource::ApiGateway
76
76
  "method.request.header.#{source}" # convention
77
77
  end
78
78
  end
79
- @props[:identity_source] = identity_sources.join(',')
79
+ @props[:IdentitySource] = identity_sources.join(',')
80
80
  end
81
81
  end
82
82
  end
@@ -0,0 +1,57 @@
1
+ module Jets::Cfn::Resource::ApiGateway::BasePath
2
+ class Function < Jets::Cfn::Base
3
+ include Jets::Cfn::Resource::Lambda::Function::Environment
4
+
5
+ def definition
6
+ {
7
+ BasePathFunction: {
8
+ Type: "AWS::Lambda::Function",
9
+ Properties: {
10
+ FunctionName: function_name,
11
+ Description: "Jets#base_path",
12
+ Code: {
13
+ S3Bucket: "!Ref S3Bucket",
14
+ S3Key: code_s3_key,
15
+ },
16
+ Role: "!GetAtt BasePathRole.Arn",
17
+ Handler: handler,
18
+ Runtime: get_runtime,
19
+ Timeout: 60,
20
+ MemorySize: 1536,
21
+ Environment: env_properties[:Environment],
22
+ Layers: layers,
23
+ }
24
+ }
25
+ }
26
+ end
27
+
28
+ def get_runtime
29
+ props = camelize(Jets.application.config.function.to_h)
30
+ props[:Runtime] || Jets.ruby_runtime
31
+ end
32
+
33
+ def layers
34
+ return Jets.config.lambda.layers if Jets.config.pro.disable
35
+ ["!Ref GemLayer"] + Jets.config.lambda.layers
36
+ end
37
+
38
+ # JETS_RESET is respected here because CloudFormation Custom Resources
39
+ # do not allow updates to the ServiceToken property.
40
+ # Changing the base-path Lambda Function name results in a CloudFormation error:
41
+ #
42
+ # Modifying service token is not allowed
43
+ #
44
+ def function_name
45
+ "#{Jets.project_namespace}-jets-base-path"
46
+ end
47
+
48
+ def handler
49
+ "handlers/functions/jets/base_path.lambda_handler"
50
+ end
51
+
52
+ def code_s3_key
53
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
54
+ "jets/code/code-#{checksum}.zip" # s3_key
55
+ end
56
+ end
57
+ end
@@ -16,28 +16,29 @@
16
16
  # * Also tried to change the domain name of to something like demo-dev-[random].mydomain.com
17
17
  # That does not work because the domain name has to match the route53 record exactly.
18
18
  #
19
- module Jets::Resource::ApiGateway::BasePath
20
- class Mapping < Jets::Resource::Base
19
+ module Jets::Cfn::Resource::ApiGateway::BasePath
20
+ class Mapping < Jets::Cfn::Base
21
21
  def definition
22
22
  function_logical_id = "BasePathFunction" # lambda function that supports custom resource
23
23
  {
24
- base_path_mapping: {
25
- type: "Custom::BasePathMapping",
26
- properties: {
27
- service_token: "!GetAtt #{function_logical_id}.Arn",
28
- # base_path: '', # empty path represents root
29
- # domain_name: "!Ref DomainName",
30
- # rest_api_id: "!Ref RestApi", # since this is in the Deployment template
31
- # stage: Deployment.stage_name,
24
+ BasePathMapping: {
25
+ Type: "Custom::BasePathMapping",
26
+ Properties: {
27
+ ServiceToken: "!GetAtt #{function_logical_id}.Arn",
28
+ # A change to any of these properties updates the CloudFormation Custom Resource
29
+ # IE: It runs the Lambda function that implements the custom resource
30
+ BasePath: Jets.config.domain.base_path, # '' empty path represents root
31
+ DomainName: "!Ref DomainName",
32
+ RestApiId: "!Ref RestApi",
33
+ Stage: Jets::Cfn::Resource::ApiGateway::Deployment.stage_name,
32
34
  },
33
- depends_on: Jets::Resource::ApiGateway::Deployment.logical_id,
34
35
  }
35
36
  }
36
37
  end
37
38
 
38
39
  def outputs
39
40
  {
40
- "BasePathMapping" => "!Ref BasePathMapping",
41
+ BasePathMapping: "!Ref BasePathMapping",
41
42
  }
42
43
  end
43
44
  end
@@ -0,0 +1,70 @@
1
+ module Jets::Cfn::Resource::ApiGateway::BasePath
2
+ class Role < Jets::Cfn::Base
3
+ extend Memoist
4
+ include Jets::AwsServices
5
+
6
+ def definition
7
+ {
8
+ BasePathRole: {
9
+ Type: "AWS::IAM::Role",
10
+ Properties: {
11
+ # RoleName: role_name,
12
+ Path: "/",
13
+ AssumeRolePolicyDocument: {
14
+ Version: "2012-10-17",
15
+ Statement: [{
16
+ Effect: "Allow",
17
+ Principal: {Service: ["lambda.amazonaws.com"]},
18
+ Action: ["sts:AssumeRole"]}
19
+ ]
20
+ },
21
+ Policies: [
22
+ PolicyName: "base-path-mapping-policy", # cannot be empty
23
+ PolicyDocument: policy_document,
24
+ ]
25
+ },
26
+ }
27
+ }
28
+ end
29
+
30
+ def policy_document
31
+ project_namespace = Jets.project_namespace
32
+ default_policy_statements = Jets.application.config.default_iam_policy # Array of Hashes
33
+ apigateway = [{
34
+ Action: [ "apigateway:*" ],
35
+ Effect: "Allow",
36
+ Resource: "arn:aws:apigateway:#{Jets.aws.region}::/restapis/*", # scoped to all restapis because this changes
37
+ },{
38
+ Action: [ "apigateway:*" ],
39
+ Effect: "Allow",
40
+ Resource: "arn:aws:apigateway:#{Jets.aws.region}::/domainnames/*", # scoped to all restapis because this changes
41
+ }]
42
+ cloudformation = [{
43
+ Action: ["cloudformation:DescribeStacks"],
44
+ Effect: "Allow",
45
+ Resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
46
+ }]
47
+
48
+ # Combine the statements
49
+ {
50
+ Version: '2012-10-17',
51
+ Statement: default_policy_statements + apigateway + cloudformation
52
+ }
53
+ end
54
+
55
+ # Duplicated in rest_api/change_detection.rb, base_path/role.rb, rest_api/routes.rb
56
+ def rest_api_id
57
+ stack_name = Jets::Names.parent_stack_name
58
+ return "RestApi" unless stack_exists?(stack_name)
59
+
60
+ stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
61
+
62
+ api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
63
+
64
+ # resources = cfn.describe_stack_resources(stack_name: api_gateway_stack_arn).stack_resources
65
+ stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
66
+ rest_api_id = lookup(stack[:outputs], "RestApi")
67
+ end
68
+ memoize :rest_api_id
69
+ end
70
+ end
@@ -1,45 +1,38 @@
1
- module Jets::Resource::ApiGateway
2
- class Deployment < Jets::Resource::Base
1
+ module Jets::Cfn::Resource::ApiGateway
2
+ class Deployment < Jets::Cfn::Base
3
3
  def definition
4
4
  {
5
5
  deployment_logical_id => {
6
- type: "AWS::ApiGateway::Deployment",
7
- properties: {
8
- description: "Version #{timestamp} deployed by jets",
9
- rest_api_id: "!Ref #{RestApi.logical_id}",
10
- stage_name: stage_name,
6
+ Type: "AWS::ApiGateway::Deployment",
7
+ Properties: {
8
+ Description: "Version #{timestamp} deployed by jets",
9
+ RestApiId: "!Ref #{RestApi.logical_id}",
10
+ StageName: stage_name,
11
11
  }
12
12
  }
13
13
  }
14
14
  end
15
15
 
16
16
  def parameters
17
- p = {
18
- "GemLayer" => "GemLayer",
19
- "IamRole" => "IamRole",
20
- "RestApi" => "RestApi",
21
- "S3Bucket" => "S3Bucket",
17
+ {
18
+ RestApi: "RestApi",
22
19
  }
23
- p[:DomainName] = "DomainName" if Jets.custom_domain?
24
- p[:BasePath] = "BasePath" unless Jets.config.domain.base_path.nil?
25
- p
26
20
  end
27
21
 
28
22
  def outputs(internal=false)
29
23
  rest_api = internal ? RestApi.internal_logical_id : "RestApi"
30
24
  {
31
- "RestApiUrl" => "!Sub 'https://${#{rest_api}}.execute-api.${AWS::Region}.amazonaws.com/#{stage_name}/'",
25
+ RestApiUrl: "!Sub 'https://${#{rest_api}}.execute-api.${AWS::Region}.amazonaws.com/#{stage_name}/'",
32
26
  }
33
27
  end
34
28
 
35
29
  def depends_on
36
- expression = "#{Jets::Names.template_path_prefix}-*_controller*"
30
+ expression = "#{Jets::Names.templates_folder}/*_controller*"
37
31
  controller_logical_ids = []
38
32
  Dir.glob(expression).each do |path|
39
33
  next unless File.file?(path)
40
34
 
41
- regexp = Regexp.new(".*#{Jets.config.project_namespace}-")
42
- controller_name = path.sub(regexp, '').sub('.yml', '')
35
+ controller_name = path.sub("#{Jets::Names.templates_folder}/", '').sub('.yml', '')
43
36
  # map the path to a camelized logical_id. Example:
44
37
  # /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
45
38
  # PostsController
@@ -57,7 +50,7 @@ module Jets::Resource::ApiGateway
57
50
 
58
51
  def self.stage_name
59
52
  # Stage name only allows a-zA-Z0-9_
60
- [Jets.config.short_env, Jets.config.extra].compact.join('_').gsub('-','_')
53
+ [Jets.short_env, Jets.extra].compact.join('_').gsub('-','_')
61
54
  end
62
55
 
63
56
  def timestamp
@@ -8,34 +8,34 @@
8
8
  # DomainName: api.mydomain.com
9
9
  # CertificateArn: arn:aws:acm:us-east-1:111122223333:certificate/fb1b9770-a305-495d-aefb-27e5e101ff3
10
10
  #
11
- module Jets::Resource::ApiGateway
12
- class DomainName < Jets::Resource::Base
11
+ module Jets::Cfn::Resource::ApiGateway
12
+ class DomainName < Jets::Cfn::Base
13
13
  def definition
14
14
  properties = {
15
- domain_name: domain_name,
16
- endpoint_configuration: {
17
- types: endpoint_types
15
+ DomainName: domain_name,
16
+ EndpointConfiguration: {
17
+ Types: endpoint_types
18
18
  }
19
19
  }
20
20
  # Can really only be REGIONAL or EDGE
21
21
  if endpoint_types.include?("REGIONAL")
22
- properties[:regional_certificate_arn] = cert_arn
22
+ properties[:RegionalCertificateArn] = cert_arn
23
23
  end
24
24
  if endpoint_types.include?("EDGE")
25
- properties[:certificate_arn] = cert_arn
25
+ properties[:CertificateArn] = cert_arn
26
26
  end
27
27
 
28
28
  {
29
- domain_name: {
30
- type: "AWS::ApiGateway::DomainName",
31
- properties: properties
29
+ DomainName: {
30
+ Type: "AWS::ApiGateway::DomainName",
31
+ Properties: properties
32
32
  }
33
33
  }
34
34
  end
35
35
 
36
36
  def outputs
37
37
  {
38
- "DomainName" => "!Ref DomainName",
38
+ DomainName: "!Ref DomainName",
39
39
  }
40
40
  end
41
41
 
@@ -1,4 +1,4 @@
1
- class Jets::Resource::ApiGateway::Method
1
+ class Jets::Cfn::Resource::ApiGateway::Method
2
2
  module Authorization
3
3
  private
4
4
  def authorizer_id
@@ -0,0 +1,92 @@
1
+ # Converts a Jets::Route to a CloudFormation Jets::Cfn::Resource::ApiGateway::Method resource
2
+ module Jets::Cfn::Resource::ApiGateway
3
+ class Method < Jets::Cfn::Base
4
+ include Authorization
5
+
6
+ # route - Jets::Route
7
+ def initialize(route)
8
+ @route = route
9
+ end
10
+
11
+ def definition
12
+ {
13
+ method_logical_id => {
14
+ Type: "AWS::ApiGateway::Method",
15
+ Properties: props
16
+ }
17
+ }
18
+ end
19
+
20
+ # Note: The {namespace} in
21
+ # functions/${{namespace}LambdaFunction.Arn}/invocations
22
+ # is replaced by Jets::Cfn::Resource::Replacer
23
+ #
24
+ # Jets::Cfn::Resource::ApiGateway::Method
25
+ # Jets::Cfn::Resource (attributes delegate to resource)
26
+ # Jets::Cfn::Resource => replacer
27
+ #
28
+ def props
29
+ function_logical_id = Jets.one_lambda_for_all_controllers? ?
30
+ "JetsControllerLambdaFunction" :
31
+ "{namespace}LambdaFunction"
32
+
33
+ resource_id = ResourceId.new(@route.path).resource_id
34
+ props = {
35
+ ResourceId: "!Ref #{resource_id}",
36
+ RestApiId: "!Ref #{RestApi.logical_id}",
37
+ HttpMethod: @route.http_method,
38
+ RequestParameters: {},
39
+ AuthorizationType: authorization_type,
40
+ ApiKeyRequired: api_key_required?,
41
+ Integration: {
42
+ IntegrationHttpMethod: "POST",
43
+ Type: "AWS_PROXY",
44
+ Uri: "!Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${#{function_logical_id}}/invocations"
45
+ },
46
+ MethodResponses: []
47
+ }
48
+ props[:AuthorizerId] = authorizer_id if authorizer_id
49
+ props[:AuthorizationScopes] = authorization_scopes if authorization_scopes
50
+
51
+ props
52
+ end
53
+
54
+ def method_logical_id
55
+ # https://stackoverflow.com/questions/6104240/how-do-i-strip-non-alphanumeric-characters-from-a-string-and-keep-spaces
56
+ # Add path to the logical id to allow 2 different paths to be connected to the same controller action.
57
+ # Example:
58
+ #
59
+ # root "jets/public#show"
60
+ # any "*catchall", to: "jets/public#show"
61
+ #
62
+ # Without the path in the logical id, the logical id would be ShowApiMethod for both routes and only the
63
+ # last one would be created in the CloudFormation template.
64
+ path = @route.path.gsub('*','')
65
+ .gsub(/[^0-9a-z]/i, ' ')
66
+ .gsub(/\s+/, '_')
67
+ path = nil if path == ''
68
+ http_verb = @route.http_method.downcase
69
+ [http_verb, path, "api_method"].compact.join('_')
70
+ end
71
+
72
+ def replacements
73
+ # Mimic task to grab replacements
74
+ # Use functions/${namespace} in Uri
75
+ resources = [definition]
76
+ action_name = Jets.one_lambda_per_controller? ? "lambda_handler" : @route.action_name
77
+ task = Jets::Lambda::Definition.new(@route.controller_name, action_name,
78
+ resources: resources)
79
+ task.replacements
80
+ end
81
+
82
+ private
83
+
84
+ def controller_klass
85
+ @controller_klass ||= "#{controller_name}_controller".camelize.constantize
86
+ end
87
+
88
+ def controller_name
89
+ @controller_name ||= @route.to.split('#').first
90
+ end
91
+ end
92
+ end
@@ -1,18 +1,20 @@
1
- module Jets::Resource::ApiGateway
2
- class Resource < Jets::Resource::Base
1
+ module Jets::Cfn::Resource::ApiGateway
2
+ class Resource < Jets::Cfn::Base
3
3
  def initialize(path, internal: false)
4
- @path = path # Examples: "posts/:id/edit" or "posts"
4
+ # The original implementation uses path without the leading slash.
5
+ # Remove it here so the path_part is calculated correctly.
6
+ @path = path.delete_prefix('/') # Examples: "posts/:id/edit" or "posts"
5
7
  @internal = internal
6
8
  end
7
9
 
8
10
  def definition
9
11
  {
10
12
  resource_logical_id => {
11
- type: "AWS::ApiGateway::Resource",
12
- properties: {
13
- parent_id: parent_id,
14
- path_part: path_part,
15
- rest_api_id: "!Ref #{RestApi.logical_id(@internal)}",
13
+ Type: "AWS::ApiGateway::Resource",
14
+ Properties: {
15
+ ParentId: parent_id,
16
+ PathPart: path_part,
17
+ RestApiId: "!Ref #{RestApi.logical_id(@internal)}",
16
18
  }
17
19
  }
18
20
  }
@@ -26,9 +28,11 @@ module Jets::Resource::ApiGateway
26
28
 
27
29
  def resource_logical_id
28
30
  if @path == ''
31
+ # Not including ApiResource in the logical id so it doesn't collide with a
32
+ # user-defined ApiResource that happens to be named RootResourceId.
29
33
  "RootResourceId"
30
34
  else
31
- Jets::Resource.truncate_id path_logical_id(@path), "ApiResource"
35
+ Jets::Cfn::Resource.truncate_id(path_logical_id(@path), "ApiResource")
32
36
  end
33
37
  end
34
38
 
@@ -41,7 +45,7 @@ module Jets::Resource::ApiGateway
41
45
  if @path.include?('/') # posts/:id or posts/:id/edit
42
46
  parent_path = @path.split('/')[0..-2].join('/')
43
47
  parent_logical_id = path_logical_id(parent_path)
44
- Jets::Resource.truncate_id(parent_logical_id, "ApiResource")
48
+ Jets::Cfn::Resource.truncate_id(parent_logical_id, "ApiResource")
45
49
  else
46
50
  "RootResourceId"
47
51
  end
@@ -0,0 +1,25 @@
1
+ module Jets::Cfn::Resource::ApiGateway
2
+ class ResourceId
3
+ def initialize(path)
4
+ @path = path
5
+ end
6
+
7
+ # Used by Method and Cors
8
+ def resource_id
9
+ @path == '/' ?
10
+ "RootResourceId" :
11
+ resource_logical_id.camelize + "ApiResource"
12
+ end
13
+
14
+ # Example: Posts
15
+ def resource_logical_id
16
+ camelized_path.underscore
17
+ end
18
+
19
+ def camelized_path
20
+ path = @path
21
+ path = "homepage" if path == '/'
22
+ path.gsub('/','_').gsub(':','').gsub('*','').gsub('.','').camelize
23
+ end
24
+ end
25
+ end
@@ -1,4 +1,4 @@
1
- class Jets::Resource::ApiGateway::RestApi
1
+ class Jets::Cfn::Resource::ApiGateway::RestApi
2
2
  class ChangeDetection
3
3
  extend Memoist
4
4
  include Jets::AwsServices
@@ -1,4 +1,4 @@
1
- class Jets::Resource::ApiGateway::RestApi::LogicalId
1
+ class Jets::Cfn::Resource::ApiGateway::RestApi::LogicalId
2
2
  class Message
3
3
  def routes_changed
4
4
  <<~EOL
@@ -1,4 +1,4 @@
1
- class Jets::Resource::ApiGateway::RestApi
1
+ class Jets::Cfn::Resource::ApiGateway::RestApi
2
2
  class LogicalId
3
3
  extend Memoist
4
4
  include Jets::AwsServices
@@ -1,4 +1,4 @@
1
- class Jets::Resource::ApiGateway::RestApi::Routes::Change
1
+ class Jets::Cfn::Resource::ApiGateway::RestApi::Routes::Change
2
2
  class Base
3
3
  extend Memoist
4
4
  include Jets::AwsServices
@@ -14,11 +14,12 @@ class Jets::Resource::ApiGateway::RestApi::Routes::Change
14
14
  return [] if data.nil?
15
15
 
16
16
  data.map do |item|
17
- method = item.dig('options','method') || item.dig('options','http_method')
18
17
  Jets::Router::Route.new(
18
+ http_method: item['http_method'],
19
19
  path: item['path'],
20
- method: method,
21
20
  to: item['to'],
21
+ engine: item['engine'],
22
+ internal: item['internal'],
22
23
  )
23
24
  end
24
25
  end
@@ -1,11 +1,11 @@
1
- class Jets::Resource::ApiGateway::RestApi::Routes::Change
1
+ class Jets::Cfn::Resource::ApiGateway::RestApi::Routes::Change
2
2
  class MediaTypes < Base
3
3
  def changed?
4
4
  current_binary_media_types != new_binary_media_types
5
5
  end
6
6
 
7
7
  def new_binary_media_types
8
- rest_api = Jets::Resource::ApiGateway::RestApi.new
8
+ rest_api = Jets::Cfn::Resource::ApiGateway::RestApi.new
9
9
  rest_api.binary_media_types
10
10
  end
11
11
  memoize :new_binary_media_types