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
data/bin/release DELETED
@@ -1,9 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Wrapper release script so we don't forget to add submodules.
4
- # Should still update the CHANGELOG.md and version.rb before running this script.
5
-
6
- git submodule init
7
- git submodule update
8
- bundle update
9
- rake release
@@ -1,230 +0,0 @@
1
- class Jets::Application
2
- module Defaults
3
- extend ActiveSupport::Concern
4
-
5
- class_methods do
6
- def default_iam_policy
7
- project_namespace = Jets.project_namespace
8
- logs = {
9
- action: ["logs:*"],
10
- effect: "Allow",
11
- resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
12
- }
13
- s3_readonly = {
14
- action: ["s3:Get*", "s3:List*", "s3:HeadBucket"],
15
- effect: "Allow",
16
- resource: "arn:aws:s3:::#{Jets.aws.s3_bucket}*",
17
- }
18
- policies = [logs, s3_readonly]
19
-
20
- cloudformation = {
21
- action: ["cloudformation:DescribeStacks", "cloudformation:DescribeStackResources"],
22
- effect: "Allow",
23
- resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
24
- }
25
- policies << cloudformation
26
-
27
- policies
28
- end
29
-
30
- def vpc_iam_policy_statement
31
- {
32
- Action: %w[
33
- ec2:CreateNetworkInterface
34
- ec2:DeleteNetworkInterface
35
- ec2:DescribeNetworkInterfaces
36
- ec2:DescribeVpcs
37
- ec2:DescribeSubnets
38
- ec2:DescribeSecurityGroups
39
- ],
40
- Effect: "Allow",
41
- Resource: "*",
42
- }
43
- end
44
-
45
- # Used by app/jobs/jets/preheat_job.rb
46
- def preheat_job_iam_policy
47
- policy = [
48
- {
49
- Sid: "Statement1",
50
- Action: ["logs:*"],
51
- Effect: "Allow",
52
- Resource: [{
53
- "Fn::Sub": "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/${WarmLambdaFunction}"
54
- }]
55
- },
56
- {
57
- Sid: "Statement2",
58
- Action: ["lambda:InvokeFunction", "lambda:InvokeAsync"],
59
- Effect: "Allow",
60
- Resource: [{
61
- "Fn::Sub": "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:#{Jets.project_namespace}-*"
62
- }]
63
- }
64
- ]
65
- policy << vpc_iam_policy_statement if Jets.config.function.vpc_config
66
- policy
67
- end
68
- end
69
-
70
- def default_config
71
- config = ActiveSupport::OrderedOptions.new
72
- config.project_name = parse_project_name # must set early because other configs requires this
73
- config.cors = false
74
- config.autoload_paths = [] # allows for customization
75
- config.ignore_paths = [] # allows for customization
76
- config.logger = Jets::Logger.new($stderr)
77
- config.logger.level = Logger::INFO
78
- config.time_zone = "UTC"
79
-
80
- # function properties defaults
81
- config.function = ActiveSupport::OrderedOptions.new
82
- config.function.timeout = 30
83
- # default memory setting based on:
84
- # https://medium.com/epsagon/how-to-make-lambda-faster-memory-performance-benchmark-be6ebc41f0fc
85
- config.function.memory_size = 1536
86
- config.function.ephemeral_storage = { size: 512 } # megabytes
87
-
88
- config.prewarm = ActiveSupport::OrderedOptions.new
89
- config.prewarm.enable = true
90
- config.prewarm.rate = '30 minutes'
91
- config.prewarm.concurrency = 2
92
- config.prewarm.public_ratio = 3
93
- config.prewarm.rack_ratio = 5
94
-
95
- config.gems = ActiveSupport::OrderedOptions.new
96
- config.gems.clean = false
97
- config.gems.disable = false
98
- config.gems.source = "https://api.serverlessgems.com/api/v1"
99
-
100
- config.inflections = ActiveSupport::OrderedOptions.new
101
- config.inflections.irregular = {}
102
-
103
- config.assets = ActiveSupport::OrderedOptions.new
104
- config.assets.base_url = nil # IE: https://cloudfront.com/my/base/path
105
- config.assets.cache_control = nil # IE: public, max-age=3600 , max_age is a shorter way to set cache_control.
106
- config.assets.folders = %w[assets images packs]
107
- config.assets.max_age = 3600
108
- config.assets.webpacker_asset_host = "s3_endpoint" # true = use conventional by default
109
-
110
- config.ruby = ActiveSupport::OrderedOptions.new
111
-
112
- config.middleware = Jets::Middleware::Configurator.new
113
-
114
- config.session = ActiveSupport::OrderedOptions.new
115
- config.session.store = Rack::Session::Cookie # note when accessing it use session[:store] since .store is an OrderedOptions method
116
- config.session.options = {}
117
-
118
- config.api = ActiveSupport::OrderedOptions.new
119
- config.api.api_key_required = false # Turn off API key required
120
- config.api.authorization_type = "NONE"
121
- config.api.auto_replace = nil # https://github.com/boltops-tools/jets/issues/391
122
- config.api.binary_media_types = ['multipart/form-data']
123
- config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
124
- config.api.endpoint_policy = nil # required when endpoint_type is EDGE
125
- config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
126
- config.api.vpc_endpoint_ids = nil
127
-
128
- config.api.authorizers = ActiveSupport::OrderedOptions.new
129
- config.api.authorizers.default_token_source = "Auth" # method.request.header.Auth
130
-
131
- config.domain = ActiveSupport::OrderedOptions.new
132
- # config.domain.name = "#{Jets.project_namespace}.coolapp.com" # Default is nil
133
- # config.domain.cert_arn = "..."
134
- config.domain.endpoint_type = "REGIONAL" # EDGE or REGIONAL. Default to EDGE because CloudFormation update is faster
135
- config.domain.route53 = true # controls whether or not to create the managed route53 record.
136
- # Useful to disable this when user wants to manage the route themself like pointing
137
- # it to CloudFront for blue-green deployments instead.
138
-
139
- # Custom user lambda layers
140
- config.lambda = ActiveSupport::OrderedOptions.new
141
- config.lambda.layers = []
142
-
143
- # Only used for Jets Afterburner, Mega Mode currently. This is a fallback default
144
- # encoding. Usually, the Rails response will return a content-type header and
145
- # the encoding in there is used when possible. Example Content-Type header:
146
- # Content-Type text/html; charset=utf-8
147
- config.encoding = ActiveSupport::OrderedOptions.new
148
- config.encoding.default = "utf-8"
149
-
150
- config.s3_event = ActiveSupport::OrderedOptions.new
151
- # These notification_configuration properties correspond to the ruby aws-sdk
152
- # s3.put_bucket_notification_configuration
153
- # in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
154
- # bucket properties have a similiar structure but is slightly different so it can be confusing.
155
- #
156
- # Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
157
- config.s3_event.configure_bucket = true
158
- config.s3_event.notification_configuration = {
159
- topic_configurations: [
160
- {
161
- events: ["s3:ObjectCreated:*"],
162
- topic_arn: "!Ref SnsTopic", # must use this logical id
163
- },
164
- ],
165
- }
166
-
167
- # So tried to defined this in the jets/mailer.rb Turbine only but jets new requires it
168
- # config.action_mailer = ActiveSupport::OrderedOptions.new
169
-
170
- config.helpers = ActiveSupport::OrderedOptions.new
171
- config.helpers.host = nil # nil by default. Other examples: https://myurl.com:8888
172
-
173
- config.controllers = ActiveSupport::OrderedOptions.new
174
- config.controllers.default_protect_from_forgery = nil
175
- config.controllers.filtered_parameters = []
176
-
177
- config.app = ActiveSupport::OrderedOptions.new
178
- config.app.domain = nil
179
-
180
- config.deploy = ActiveSupport::OrderedOptions.new
181
- config.deploy.stagger = ActiveSupport::OrderedOptions.new
182
- config.deploy.stagger.enabled = false
183
- config.deploy.stagger.batch_size = 10
184
-
185
- config.hot_reload = Jets.env.development?
186
-
187
- config.resource_tags = {}
188
-
189
- config.ruby = ActiveSupport::OrderedOptions.new
190
- config.ruby.check = true
191
- config.ruby.supported_versions = %w[2.5 2.7 3.2] # supported by AWS Lambda
192
-
193
- config
194
- end
195
-
196
- # Essentially folders under app folder will be the default_autoload_paths. Example:
197
- # app/controllers
198
- # app/helpers
199
- # app/jobs
200
- # app/models
201
- # app/rules
202
- # app/shared/resources
203
- #
204
- # Also include:
205
- # app/models/concerns
206
- # app/controllers/concerns
207
- def default_autoload_paths
208
- paths = []
209
- each_app_autoload_path("#{Jets.root}/app/*") do |path|
210
- paths << path
211
- end
212
- # Handle concerns folders
213
- each_app_autoload_path("#{Jets.root}/app/**/concerns") do |path|
214
- paths << path
215
- end
216
-
217
- paths << "#{Jets.root}/app/shared/resources"
218
- paths << "#{Jets.root}/app/shared/extensions"
219
-
220
- paths
221
- end
222
-
223
- def default_ignore_paths
224
- %w[
225
- app/functions
226
- app/shared/functions
227
- ]
228
- end
229
- end
230
- end
@@ -1,16 +0,0 @@
1
- JetsRails.stage = ENV['JETS_STAGE'] || 'dev' # for jets-rails StageMiddleware
2
-
3
- # config/s3_base_url.txt is generated as part of jets build process
4
- s3_base_url = IO.read("#{Rails.root}/config/s3_base_url.txt").strip rescue "s3_base_url_placeholder"
5
- asset_host = "#{s3_base_url}/rack/public"
6
- Rails.application.config.action_controller.asset_host = asset_host
7
- Rails.application.config.public_file_server.enabled = true
8
-
9
- <% unless @api_mode -%>
10
- # Rails.application.config.assets.quiet = false
11
- Rails.application.config.assets.debug = false
12
- Rails.application.config.assets.compile = false
13
- <% end -%>
14
-
15
- # Looks better without colorizatiion in CloudWatch logs
16
- Rails.application.config.colorize_logging = false
@@ -1,114 +0,0 @@
1
- # TODO: Move logic into plugin instead
2
- module Jets::Builders
3
- class ReconfigureRails
4
- def initialize(full_app_root)
5
- # IE: @app_root: /tmp/jets/demo/stage/code/rack
6
- @app_root = full_app_root
7
- end
8
-
9
- # Only support Rails right now. Maybe move into plugin when adding support
10
- # to more frameworks. Or maybe better to just abstract but maintain in Jets.
11
- def run
12
- return unless rails?
13
-
14
- puts "Mega Mode: Reconfiguring Rails app."
15
- copy_initializer
16
- update_gemfile
17
- update_development_environment
18
- set_favicon
19
- end
20
-
21
- def copy_initializer
22
- templates = File.expand_path("./reconfigure_rails", File.dirname(__FILE__))
23
- relative_path = "config/initializers/jets.rb"
24
- src = "#{templates}/#{relative_path}"
25
- result = Jets::Erb.result(src, api_mode: rails_api?)
26
- dest = "#{@app_root}/#{relative_path}"
27
- FileUtils.mkdir_p(File.dirname(dest))
28
- IO.write(dest, result)
29
- end
30
-
31
- def api_mode?
32
- end
33
-
34
- def update_gemfile
35
- gemfile = "#{@app_root}/Gemfile"
36
- lines = IO.readlines(gemfile)
37
- lines = add_jets_rails_gem(lines)
38
- lines = comment_out_ruby_declaration(lines)
39
- write_content(gemfile, lines)
40
- end
41
-
42
- def add_jets_rails_gem(lines)
43
- return lines if lines.detect { |l| l =~ /jets-rails/ }
44
- lines << "\n"
45
- lines << %Q|gem "jets-rails"\n|
46
- lines
47
- end
48
-
49
- # Jets packages up and uses only one version of ruby and different declarations
50
- # of ruby can cause issues.
51
- def comment_out_ruby_declaration(lines)
52
- lines.map do |l|
53
- l =~ /^(ruby[ (].*)/ ? "# #{$1} # commented out by jets" : l
54
- end
55
- end
56
-
57
- def update_development_environment
58
- env_file = "#{@app_root}/config/environments/development.rb"
59
- lines = IO.readlines(env_file)
60
- new_lines = lines.map do |line|
61
- if line =~ /(config\.file_watcher.*)/
62
- " # #{$1} # commented out by jets\n"
63
- else
64
- line
65
- end
66
- end
67
- write_content(env_file, new_lines)
68
- end
69
-
70
- # Evaluate the application layout and see if has a custom favicon defined yet.
71
- # If not insert one and rewrite the application layout.
72
- #
73
- # This avoids serving binary assets from API gateway, instead serve it from s3 directly.
74
- def set_favicon
75
- app_layout = "#{@app_root}/app/views/layouts/application.html.erb"
76
- return unless File.exist?(app_layout)
77
-
78
- favicon = '<link rel="shortcut icon" href="<%= asset_path("/favicon.ico") %>">'
79
-
80
- lines = IO.readlines(app_layout)
81
- has_favicon = !!lines.find { |l| l.include?(favicon) }
82
- return if has_favicon
83
-
84
- content = IO.read(app_layout)
85
- content = content.sub('</head>', "\n #{favicon}\n </head>")
86
-
87
- IO.write(app_layout, content)
88
- end
89
-
90
- # lines is an Array
91
- def write_content(path, lines)
92
- content = lines.join + "\n"
93
- IO.write(path, content)
94
- end
95
-
96
- # Rudimentary rails detection
97
- # Duplicated in builders/code_builders.rb
98
- def rails?
99
- config_ru = "#{@app_root}/config.ru"
100
- return false unless File.exist?(config_ru)
101
- !IO.readlines(config_ru).grep(/Rails.application/).empty?
102
- end
103
-
104
- # Rudimentary rails api detection
105
- # Duplicated in builders/code_builders.rb
106
- # Another way of checking is loading a rails console and checking Rails.application.config.api_only
107
- # Using this way for simplicity.
108
- def rails_api?
109
- config_app = "#{@app_root}/config/application.rb"
110
- return false unless File.exist?(config_app)
111
- !IO.readlines(config_app).grep(/config.api_only.*=.*true/).empty?
112
- end
113
- end
114
- end
@@ -1,44 +0,0 @@
1
- module Jets::Cfn::Builders
2
- class ApiResourcesBuilder
3
- include Interface
4
- include Jets::AwsServices
5
-
6
- def initialize(options={}, paths=[], page)
7
- @options, @paths, @page = options, paths, page
8
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
- end
10
-
11
- # compose is an interface method
12
- def compose
13
- add_rest_api_parameter
14
- add_gateway_routes
15
- end
16
-
17
- # template_path is an interface method
18
- def template_path
19
- Jets::Names.api_resources_template_path(@page)
20
- end
21
-
22
- def add_rest_api_parameter
23
- add_parameter("RestApi", Description: "RestApi")
24
- end
25
-
26
- def add_gateway_routes
27
- @paths.each do |path|
28
- homepage = path == ''
29
- next if homepage # handled by RootResourceId output already
30
-
31
- resource = Jets::Resource::ApiGateway::Resource.new(path)
32
- add_resource(resource)
33
- add_outputs(resource.outputs)
34
-
35
- parent_path = resource.parent_path_parameter
36
- add_parameter(parent_path) unless part_of_template?(parent_path)
37
- end
38
- end
39
-
40
- def part_of_template?(parent_path)
41
- @template["Resources"].key?(parent_path)
42
- end
43
- end
44
- end
@@ -1,88 +0,0 @@
1
- # Implements:
2
- #
3
- # * template_path
4
- #
5
- # FYI
6
- #
7
- # * compose implemented by the classes that include this
8
- module Jets::Cfn::Builders
9
- class BaseChildBuilder
10
- include Interface
11
-
12
- # The app_class is can be a controller, job or anonymous function class.
13
- # IE: PostsController, HardJob
14
- def initialize(app_class)
15
- @app_class = app_class
16
- @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
17
- end
18
-
19
- # template_path is an interface method for Interface module
20
- def template_path
21
- Jets::Names.app_template_path(@app_class)
22
- end
23
-
24
- def add_common_parameters
25
- common_parameters = Jets::Resource::ChildStack::CommonParameters.common_parameters
26
- common_parameters.each do |k,_|
27
- add_parameter(k, Description: k.to_s)
28
- end
29
-
30
- depends_on_params.each do |output_key, output_value|
31
- desc = output_value.gsub("!GetAtt ", "") # desc doesnt allow !GetAtt
32
- add_parameter(output_key, Description: desc)
33
- end
34
- end
35
-
36
- def depends_on_params
37
- return {} unless @app_class.depends_on
38
- depends = Jets::Stack::Depends.new(@app_class.depends_on)
39
- depends.params
40
- end
41
-
42
- def add_functions
43
- validate_function_names!
44
- add_class_iam_policy
45
- @app_class.tasks.each do |task|
46
- add_function(task)
47
- add_function_iam_policy(task)
48
- end
49
- end
50
-
51
- def add_function(task)
52
- resource = Jets::Resource::Lambda::Function.new(task)
53
- add_resource(resource)
54
- end
55
-
56
- def add_class_iam_policy
57
- return unless @app_class.build_class_iam?
58
-
59
- resource = Jets::Resource::Iam::ClassRole.new(@app_class)
60
- add_resource(resource)
61
- end
62
-
63
- def add_function_iam_policy(task)
64
- return unless task.build_function_iam?
65
-
66
- resource = Jets::Resource::Iam::FunctionRole.new(task)
67
- add_resource(resource)
68
- end
69
-
70
- def validate_function_names!
71
- invalids = @app_class.tasks.reject do |task|
72
- task.meth.to_s =~ /^[a-zA-Z][a-zA-Z0-9_]/
73
- end
74
- return if invalids.empty?
75
- list = invalids.map do |task|
76
- " #{task.class_name}##{task.meth}" # IE: PostsController#index
77
- end.join("\n")
78
- puts "ERROR: Detected invalid AWS Lambda function names".color(:red)
79
- puts <<~EOL
80
- Lambda function names must start with a letter and can only contain letters, numbers, and underscores.
81
- Invalid function names:
82
-
83
- #{list}
84
- EOL
85
- exit 1
86
- end
87
- end
88
- end
@@ -1,50 +0,0 @@
1
- # Implements:
2
- #
3
- # compose
4
- # template_path
5
- #
6
- module Jets::Cfn::Builders
7
- class ControllerBuilder < BaseChildBuilder
8
- # compose is an interface method for Interface module
9
- def compose
10
- add_common_parameters
11
- add_api_gateway_parameters
12
- add_functions
13
- add_routes
14
- add_resources
15
- end
16
-
17
- def add_api_gateway_parameters
18
- return if Jets::Router.routes.empty?
19
-
20
- add_parameter("RestApi", Description: "RestApi")
21
- scoped_routes.each do |route|
22
- resource = Jets::Resource::ApiGateway::Resource.new(route.path)
23
- add_parameter(resource.logical_id, description: resource.desc)
24
- if route.authorizer
25
- add_parameter(route.authorizer_id, description: route.authorizer_metadata)
26
- end
27
- end
28
-
29
- if @app_class.authorizer
30
- add_parameter(@app_class.authorizer_id, description: @app_class.authorizer_metadata)
31
- end
32
- end
33
-
34
- def add_routes
35
- scoped_routes.each_with_index do |route, i|
36
- method = Jets::Resource::ApiGateway::Method.new(route)
37
- add_resource(method)
38
- add_resource(method.permission)
39
- add_resource(method.cors) if Jets.config.cors
40
- end
41
- end
42
-
43
- # routes scoped to this controller template.
44
- def scoped_routes
45
- @routes ||= Jets::Router.routes.select do |route|
46
- route.controller_name == @app_class.to_s
47
- end
48
- end
49
- end
50
- end
@@ -1,14 +0,0 @@
1
- # Implements:
2
- #
3
- # compose
4
- # template_path
5
- #
6
- module Jets::Cfn::Builders
7
- class FunctionBuilder < BaseChildBuilder
8
- # compose is an interface method for Interface module
9
- def compose
10
- add_common_parameters
11
- add_functions
12
- end
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- # Implements:
2
- #
3
- # compose
4
- # template_path
5
- #
6
- module Jets::Cfn::Builders
7
- class JobBuilder < BaseChildBuilder
8
- def compose
9
- add_common_parameters
10
- add_functions
11
- add_resources
12
- end
13
- end
14
- end
@@ -1,80 +0,0 @@
1
- module Jets::Cfn::Builders
2
- class PageBuilder
3
- extend Memoist
4
- cattr_reader :pages
5
-
6
- # Build page slices
7
- def build
8
- map = build_map
9
- pages = []
10
- map.each do |path, existing_page|
11
- if existing_page
12
- pages[existing_page] ||= []
13
- pages[existing_page] << path
14
- end
15
- end
16
-
17
- # Remove existing paths from map. Leave behind new paths
18
- pages.each do |page|
19
- page.each do |i|
20
- map.delete(i)
21
- end
22
- end
23
-
24
- # Fill up available space in each page so all existing pages are full
25
- keys = map.keys
26
- pages.each do |page|
27
- break if keys.empty?
28
- while page.size < page_limit
29
- path = keys.shift
30
- break if path.nil?
31
- page << path
32
- end
33
- end
34
-
35
- # Add remaining slices to new additional pages
36
- pages += keys.each_slice(page_limit).to_a
37
-
38
- @@pages = pages
39
-
40
- pages
41
- end
42
-
43
- # Build map that has paths as keys and page number as value
44
- # Example: {"a1"=>0, "a2"=>0, "b1"=>1, "b2"=>1, "c1"=>2, "c2"=>2}
45
- def build_map
46
- map = {}
47
- new_paths.each do |path|
48
- map[path] = find_page_index(path)
49
- end
50
- map
51
- end
52
-
53
- def find_page_index(new_path)
54
- pages = old_pages || []
55
- pages.each_with_index do |slice, i|
56
- slice.find do |old_path|
57
- return i if old_path == new_path
58
- end
59
- end
60
- nil
61
- end
62
-
63
- def old_pages
64
- state = Jets::Router::State.new
65
- state.load("pages")
66
- end
67
- memoize :old_pages
68
-
69
- def new_paths
70
- Jets::Router.all_paths.reject { |p| p == '' }
71
- end
72
-
73
- # Relevant is CloudFormation Outputs limit is 200
74
- # JETS_APIGW_PAGE_LIMIT is based on that
75
- # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
76
- def page_limit
77
- Integer(ENV['JETS_APIGW_PAGE_LIMIT'] || 200)
78
- end
79
- end
80
- end
@@ -1,15 +0,0 @@
1
- module Jets::Cfn
2
- # Caches the built template to reduce filesystem IO calls.
3
- class BuiltTemplate
4
- class << self
5
- @@cache = {}
6
- def get(path)
7
- if @@cache[path]
8
- @@cache[path] # using cache
9
- else
10
- @@cache[path] = Jets::Util::Yamler.load_file(path) # setting and using cache
11
- end
12
- end
13
- end
14
- end
15
- end