jets 4.0.10 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +53 -0
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/README.md +20 -36
  7. data/Rakefile +3 -3
  8. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  9. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  10. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  11. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  13. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  14. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  15. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  17. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  18. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  19. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  20. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  21. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  22. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  23. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  24. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  25. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  26. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  27. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  28. data/engines/internal/lib/internal/actionview.rb +152 -0
  29. data/engines/internal/lib/internal/activerecord.rb +37 -0
  30. data/engines/internal/lib/internal/activesupport.rb +47 -0
  31. data/engines/internal/lib/internal/engine.rb +13 -0
  32. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  33. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  34. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  36. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  37. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  38. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  39. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  40. data/exe/jets +1 -10
  41. data/jets.gemspec +14 -11
  42. data/lib/jets/app_loader.rb +77 -0
  43. data/lib/jets/application/bootstrap.rb +100 -0
  44. data/lib/jets/application/configuration/defaults.rb +256 -0
  45. data/lib/jets/application/configuration.rb +494 -0
  46. data/lib/jets/application/default_middleware_stack.rb +140 -0
  47. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  48. data/lib/jets/application/finisher.rb +266 -0
  49. data/lib/jets/application/routes_reloader.rb +80 -0
  50. data/lib/jets/application.rb +515 -198
  51. data/lib/jets/authorizer/base.rb +1 -0
  52. data/lib/jets/authorizer/dsl.rb +15 -11
  53. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  54. data/lib/jets/autoloaders/gem.rb +70 -0
  55. data/lib/jets/autoloaders/inflector.rb +21 -0
  56. data/lib/jets/autoloaders.rb +38 -101
  57. data/lib/jets/aws_services/stack_status.rb +1 -1
  58. data/lib/jets/backtrace_cleaner.rb +27 -0
  59. data/lib/jets/booter.rb +29 -176
  60. data/lib/jets/builders/code_builder.rb +45 -117
  61. data/lib/jets/builders/code_size.rb +1 -0
  62. data/lib/jets/builders/gem_replacer.rb +5 -6
  63. data/lib/jets/builders/handler_generator.rb +34 -14
  64. data/lib/jets/builders/lambda_layer.rb +2 -7
  65. data/lib/jets/builders/purger.rb +1 -1
  66. data/lib/jets/builders/rack_packager.rb +1 -1
  67. data/lib/jets/builders/ruby_packager.rb +17 -6
  68. data/lib/jets/builders/shim_vars/app.rb +10 -6
  69. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  70. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  71. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  72. data/lib/jets/bundle.rb +2 -9
  73. data/lib/jets/cfn/base.rb +82 -0
  74. data/lib/jets/cfn/builder/api/base.rb +12 -0
  75. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  76. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  77. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  78. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  79. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  80. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  81. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  82. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  83. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  84. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  85. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  86. data/lib/jets/cfn/builder/controller.rb +28 -0
  87. data/lib/jets/cfn/builder/function.rb +9 -0
  88. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  89. data/lib/jets/cfn/builder/job.rb +10 -0
  90. data/lib/jets/cfn/builder/nested.rb +130 -0
  91. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  92. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  93. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  94. data/lib/jets/cfn/builder/post_process.rb +25 -0
  95. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  96. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  97. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  98. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  99. data/lib/jets/cfn/deployment.rb +45 -0
  100. data/lib/jets/cfn/download.rb +39 -0
  101. data/lib/jets/cfn/params/api/base.rb +39 -0
  102. data/lib/jets/cfn/params/api/cors.rb +10 -0
  103. data/lib/jets/cfn/params/api/methods.rb +69 -0
  104. data/lib/jets/cfn/params/api/resources.rb +28 -0
  105. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  106. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  107. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  108. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  109. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  113. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  115. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +5 -3
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  124. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  128. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  129. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  131. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  132. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  133. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  134. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  135. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  137. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  138. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  139. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  140. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  141. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  142. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  143. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  144. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  145. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  146. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  147. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  148. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  149. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  150. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  151. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  152. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  153. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  154. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  155. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  157. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  158. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  159. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  161. data/lib/jets/cfn/resource/one/function.rb +66 -0
  162. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  163. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  164. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  165. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  166. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  167. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  168. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  169. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  170. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  171. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  172. data/lib/jets/cfn/resource.rb +8 -0
  173. data/lib/jets/cfn/ship.rb +20 -19
  174. data/lib/jets/cfn/template.rb +89 -0
  175. data/lib/jets/cfn/upload.rb +26 -23
  176. data/lib/jets/cli.rb +28 -210
  177. data/lib/jets/command/actions.rb +49 -0
  178. data/lib/jets/command/api_helpers.rb +41 -0
  179. data/lib/jets/command/aws_helpers.rb +26 -0
  180. data/lib/jets/command/base.rb +204 -0
  181. data/lib/jets/command/behavior.rb +83 -0
  182. data/lib/jets/command/environment_argument.rb +42 -0
  183. data/lib/jets/command/help/call.md +48 -0
  184. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  185. data/lib/jets/command/help/logs.md +21 -0
  186. data/lib/jets/{commands → command}/help/new.md +3 -4
  187. data/lib/jets/command/help/projects.md +6 -0
  188. data/lib/jets/command/help/releases.md +37 -0
  189. data/lib/jets/command/help/rollback.md +5 -0
  190. data/lib/jets/command/help/routes.md +15 -0
  191. data/lib/jets/command/help/stacks.md +6 -0
  192. data/lib/jets/command/help.rb +17 -0
  193. data/lib/jets/command/helpers/editor.rb +35 -0
  194. data/lib/jets/command.rb +133 -0
  195. data/lib/jets/commands/application/application_command.rb +40 -0
  196. data/lib/jets/commands/build/build_command.rb +33 -0
  197. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  198. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  199. data/lib/jets/commands/call/base_guesser.rb +4 -4
  200. data/lib/jets/commands/call/call_command.rb +27 -0
  201. data/lib/jets/commands/call/caller.rb +184 -0
  202. data/lib/jets/commands/call/guesser.rb +1 -1
  203. data/lib/jets/commands/clean/base.rb +1 -1
  204. data/lib/jets/commands/clean/build.rb +1 -1
  205. data/lib/jets/commands/clean/clean_command.rb +15 -0
  206. data/lib/jets/commands/clean/log.rb +1 -1
  207. data/lib/jets/commands/configure/configure_command.rb +9 -0
  208. data/lib/jets/commands/console/console_command.rb +38 -0
  209. data/lib/jets/commands/credentials/USAGE +103 -0
  210. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  211. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  212. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  213. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  214. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  215. data/lib/jets/commands/delete/delete_command.rb +155 -0
  216. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  217. data/lib/jets/commands/dev/dev_command.rb +19 -0
  218. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  219. data/lib/jets/commands/encrypted/USAGE +46 -0
  220. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  221. data/lib/jets/commands/gems/gems_command.rb +14 -0
  222. data/lib/jets/commands/generate/generate_command.rb +95 -0
  223. data/lib/jets/commands/help/USAGE +20 -0
  224. data/lib/jets/commands/help/help_command.rb +15 -0
  225. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  226. data/lib/jets/commands/logs/logs_command.rb +45 -0
  227. data/lib/jets/commands/new/new_command.rb +19 -0
  228. data/lib/jets/commands/notes/notes_command.rb +30 -0
  229. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  230. data/lib/jets/commands/projects/projects_command.rb +30 -0
  231. data/lib/jets/commands/rake/rake_command.rb +59 -0
  232. data/lib/jets/commands/releases/releases_command.rb +72 -0
  233. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  234. data/lib/jets/commands/routes/routes_command.rb +19 -0
  235. data/lib/jets/commands/runner/runner_command.rb +60 -0
  236. data/lib/jets/commands/server/server_command.rb +291 -0
  237. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  238. data/lib/jets/commands/status/status_command.rb +9 -0
  239. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  240. data/lib/jets/commands/version/version_command.rb +11 -0
  241. data/lib/jets/commands.rb +17 -0
  242. data/lib/jets/configuration.rb +166 -0
  243. data/lib/jets/controller/base.rb +105 -183
  244. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  245. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  246. data/lib/jets/controller/compat/caching.rb +13 -0
  247. data/lib/jets/controller/compat/future.rb +13 -0
  248. data/lib/jets/controller/compat/route_set.rb +47 -0
  249. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  250. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  251. data/lib/jets/controller/decorate/logging.rb +90 -0
  252. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  253. data/lib/jets/controller/decorate/url_for.rb +10 -0
  254. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  255. data/lib/jets/controller/handler.rb +41 -0
  256. data/lib/jets/controller/middleware/main.rb +16 -8
  257. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  258. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  259. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  260. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  261. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  262. data/lib/jets/controller/request/compat/params.rb +144 -0
  263. data/lib/jets/controller/request/compat/request.rb +125 -0
  264. data/lib/jets/controller/request.rb +35 -18
  265. data/lib/jets/controller/response/compat/response.rb +67 -0
  266. data/lib/jets/controller/response.rb +91 -8
  267. data/lib/jets/core.rb +142 -51
  268. data/lib/jets/core_ext/kernel.rb +2 -2
  269. data/lib/jets/core_ext/symbol.rb +5 -0
  270. data/lib/jets/core_ext.rb +4 -0
  271. data/lib/jets/dev_caching.rb +44 -0
  272. data/lib/jets/dotenv/ssm.rb +5 -2
  273. data/lib/jets/dotenv.rb +2 -1
  274. data/lib/jets/engine/configuration.rb +96 -0
  275. data/lib/jets/engine/turbines.rb +23 -0
  276. data/lib/jets/engine.rb +380 -0
  277. data/lib/jets/exception_reporting.rb +43 -0
  278. data/lib/jets/generators/job/job_generator.rb +41 -0
  279. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  281. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  283. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  284. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  285. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  286. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  287. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  288. data/lib/jets/generators/overrides/app/USAGE +38 -0
  289. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  290. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  291. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  292. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  293. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  294. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  295. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  296. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  297. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  298. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  299. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  300. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  301. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  302. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  303. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  304. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  305. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  307. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  308. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  310. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  312. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  313. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  314. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  315. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  316. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  317. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  318. data/lib/jets/generators.rb +112 -0
  319. data/lib/jets/info.rb +116 -0
  320. data/lib/jets/initializable.rb +95 -0
  321. data/lib/jets/job/base.rb +3 -2
  322. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  323. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  324. data/lib/jets/job/dsl/iot_event.rb +6 -6
  325. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  326. data/lib/jets/job/dsl/log_event.rb +2 -2
  327. data/lib/jets/job/dsl/rule_event.rb +7 -4
  328. data/lib/jets/job/dsl/s3_event.rb +1 -1
  329. data/lib/jets/job/dsl/sns_event.rb +6 -6
  330. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  331. data/lib/jets/klass.rb +5 -6
  332. data/lib/jets/lambda/definition.rb +118 -0
  333. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  334. data/lib/jets/lambda/dsl.rb +64 -53
  335. data/lib/jets/lambda/function.rb +3 -3
  336. data/lib/jets/lambda/function_constructor.rb +6 -6
  337. data/lib/jets/lambda/functions.rb +36 -1
  338. data/lib/jets/mega/request/source.rb +1 -2
  339. data/lib/jets/mega/request.rb +4 -4
  340. data/lib/jets/names.rb +31 -15
  341. data/lib/jets/overrides/dummy/rails.rb +11 -0
  342. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  343. data/lib/jets/overrides/puma.rb +10 -0
  344. data/lib/jets/paths.rb +243 -0
  345. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  346. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  347. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  349. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  350. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  351. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  352. data/lib/jets/preheat.rb +12 -25
  353. data/lib/jets/processors/deducer.rb +2 -2
  354. data/lib/jets/processors/main_processor.rb +6 -13
  355. data/lib/jets/rack/logger.rb +77 -0
  356. data/lib/jets/router/compat/route_set.rb +177 -0
  357. data/lib/jets/router/dsl/mount.rb +40 -6
  358. data/lib/jets/router/dsl.rb +125 -105
  359. data/lib/jets/router/engine_mount.rb +36 -0
  360. data/lib/jets/router/help.rb +130 -0
  361. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  362. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  363. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  364. data/lib/jets/router/matcher.rb +140 -17
  365. data/lib/jets/router/resources/options.rb +6 -4
  366. data/lib/jets/router/route/after_initialize.rb +64 -0
  367. data/lib/jets/router/route/as.rb +93 -0
  368. data/lib/jets/router/route/authorizer.rb +1 -0
  369. data/lib/jets/router/route/compat.rb +45 -0
  370. data/lib/jets/router/route/info.rb +74 -0
  371. data/lib/jets/router/route/node.rb +137 -0
  372. data/lib/jets/router/route/path.rb +93 -0
  373. data/lib/jets/router/route.rb +109 -106
  374. data/lib/jets/router/route_set.rb +214 -0
  375. data/lib/jets/router/scope.rb +204 -69
  376. data/lib/jets/router/state.rb +36 -16
  377. data/lib/jets/router/util.rb +1 -31
  378. data/lib/jets/router.rb +64 -162
  379. data/lib/jets/ruby_version_check.rb +15 -0
  380. data/lib/jets/rule/base.rb +1 -0
  381. data/lib/jets/rule/dsl.rb +7 -7
  382. data/lib/jets/secrets.rb +110 -0
  383. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  384. data/lib/jets/spec_helpers/controllers.rb +32 -24
  385. data/lib/jets/spec_helpers.rb +0 -6
  386. data/lib/jets/stack/builder.rb +3 -2
  387. data/lib/jets/stack/definition.rb +1 -4
  388. data/lib/jets/stack/function.rb +2 -2
  389. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  390. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  391. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  392. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  393. data/lib/jets/stack/output/lookup.rb +1 -1
  394. data/lib/jets/stack/output.rb +2 -2
  395. data/lib/jets/stack/parameter.rb +2 -2
  396. data/lib/jets/stack/resource.rb +3 -3
  397. data/lib/jets/stack/s3_event.rb +51 -37
  398. data/lib/jets/stack.rb +1 -1
  399. data/lib/jets/tasks/engine.rake +85 -0
  400. data/lib/jets/tasks/framework.rake +66 -0
  401. data/lib/jets/tasks/log.rake +41 -0
  402. data/lib/jets/tasks/middleware.rake +9 -0
  403. data/lib/jets/tasks/misc.rake +81 -0
  404. data/lib/jets/tasks/statistics.rake +37 -0
  405. data/lib/jets/tasks/tmp.rake +51 -0
  406. data/lib/jets/tasks/yarn.rake +29 -0
  407. data/lib/jets/tasks/zeitwerk.rake +61 -0
  408. data/lib/jets/tasks.rb +18 -0
  409. data/lib/jets/turbine/configurable.rb +36 -0
  410. data/lib/jets/turbine/configuration.rb +101 -0
  411. data/lib/jets/turbine.rb +164 -20
  412. data/lib/jets/util/camelize.rb +24 -0
  413. data/lib/jets/version.rb +1 -1
  414. data/lib/jets.rb +7 -15
  415. metadata +427 -336
  416. data/bin/release +0 -9
  417. data/lib/jets/application/defaults.rb +0 -230
  418. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  419. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  420. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  421. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  422. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  423. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  424. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  425. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  426. data/lib/jets/cfn/built_template.rb +0 -15
  427. data/lib/jets/cfn/template_source.rb +0 -61
  428. data/lib/jets/commands/base.rb +0 -145
  429. data/lib/jets/commands/call.rb +0 -184
  430. data/lib/jets/commands/clean.rb +0 -19
  431. data/lib/jets/commands/configure.rb +0 -51
  432. data/lib/jets/commands/console.rb +0 -18
  433. data/lib/jets/commands/db/environment-task.rake +0 -3
  434. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  435. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  436. data/lib/jets/commands/db/tasks.rb +0 -34
  437. data/lib/jets/commands/db.rb +0 -13
  438. data/lib/jets/commands/dbconsole.rb +0 -134
  439. data/lib/jets/commands/delete.rb +0 -136
  440. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  441. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  442. data/lib/jets/commands/dynamodb.rb +0 -19
  443. data/lib/jets/commands/gems.rb +0 -13
  444. data/lib/jets/commands/help/call.md +0 -69
  445. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  446. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  447. data/lib/jets/commands/help/routes.md +0 -16
  448. data/lib/jets/commands/help.rb +0 -9
  449. data/lib/jets/commands/import/base.rb +0 -49
  450. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  451. data/lib/jets/commands/import/rack.rb +0 -16
  452. data/lib/jets/commands/import/rails.rb +0 -74
  453. data/lib/jets/commands/import/sequence.rb +0 -90
  454. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  455. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  456. data/lib/jets/commands/import.rb +0 -12
  457. data/lib/jets/commands/main.rb +0 -169
  458. data/lib/jets/commands/markdown/creator.rb +0 -58
  459. data/lib/jets/commands/markdown/index.rb +0 -27
  460. data/lib/jets/commands/markdown/page.rb +0 -125
  461. data/lib/jets/commands/markdown/shell.rb +0 -11
  462. data/lib/jets/commands/new.rb +0 -173
  463. data/lib/jets/commands/rake_command.rb +0 -61
  464. data/lib/jets/commands/rake_tasks.rb +0 -50
  465. data/lib/jets/commands/runner.rb +0 -16
  466. data/lib/jets/commands/sequence.rb +0 -104
  467. data/lib/jets/commands/stack_info.rb +0 -30
  468. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  470. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  471. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  472. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  473. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  474. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  475. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  476. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  477. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  478. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  479. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  480. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  481. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  482. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  483. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  484. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  485. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  486. data/lib/jets/commands/upgrade/version1.rb +0 -136
  487. data/lib/jets/commands/upgrade.rb +0 -105
  488. data/lib/jets/commands/webpacker_template.rb +0 -18
  489. data/lib/jets/controller/callbacks.rb +0 -73
  490. data/lib/jets/controller/cookies/jar.rb +0 -269
  491. data/lib/jets/controller/cookies.rb +0 -38
  492. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  493. data/lib/jets/controller/error.rb +0 -4
  494. data/lib/jets/controller/forgery_protection.rb +0 -43
  495. data/lib/jets/controller/layout.rb +0 -17
  496. data/lib/jets/controller/middleware/cors.rb +0 -60
  497. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  498. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  499. data/lib/jets/controller/middleware/reloader.rb +0 -15
  500. data/lib/jets/controller/parameters_filter.rb +0 -29
  501. data/lib/jets/controller/params.rb +0 -117
  502. data/lib/jets/controller/redirection.rb +0 -61
  503. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  504. data/lib/jets/controller/rendering.rb +0 -96
  505. data/lib/jets/controller/stage.rb +0 -34
  506. data/lib/jets/controller.rb +0 -3
  507. data/lib/jets/db.rb +0 -15
  508. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  509. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  510. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  511. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  512. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  513. data/lib/jets/generator.rb +0 -112
  514. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  515. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  516. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  517. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -57
  518. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  519. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  520. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  521. data/lib/jets/lambda/task.rb +0 -111
  522. data/lib/jets/logger.rb +0 -21
  523. data/lib/jets/middleware/configurator.rb +0 -84
  524. data/lib/jets/middleware/default_stack.rb +0 -53
  525. data/lib/jets/middleware/layer.rb +0 -34
  526. data/lib/jets/middleware/stack.rb +0 -77
  527. data/lib/jets/middleware.rb +0 -33
  528. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  529. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  530. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  531. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  532. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  533. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  534. data/lib/jets/overrides/rails.rb +0 -6
  535. data/lib/jets/rack_server.rb +0 -86
  536. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  537. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  538. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  539. data/lib/jets/resource/api_gateway/method.rb +0 -102
  540. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  541. data/lib/jets/resource/base.rb +0 -28
  542. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  543. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  544. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  545. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  546. data/lib/jets/resource/child_stack/base.rb +0 -24
  547. data/lib/jets/resource/lambda/function.rb +0 -221
  548. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  549. data/lib/jets/resource/permission.rb +0 -45
  550. data/lib/jets/resource.rb +0 -71
  551. data/lib/jets/router/error.rb +0 -4
  552. data/lib/jets/router/finder.rb +0 -47
  553. data/lib/jets/router/helpers/core_helper.rb +0 -27
  554. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  555. data/lib/jets/router/helpers.rb +0 -4
  556. data/lib/jets/router/method_creator/code.rb +0 -99
  557. data/lib/jets/router/method_creator/edit.rb +0 -12
  558. data/lib/jets/router/method_creator/generic.rb +0 -11
  559. data/lib/jets/router/method_creator/index.rb +0 -48
  560. data/lib/jets/router/method_creator/new.rb +0 -12
  561. data/lib/jets/router/method_creator/root.rb +0 -15
  562. data/lib/jets/router/method_creator/show.rb +0 -12
  563. data/lib/jets/router/method_creator.rb +0 -50
  564. data/lib/jets/turbo/database_yaml.rb +0 -41
  565. data/lib/jets/turbo/project/.gitignore +0 -12
  566. data/lib/jets/turbo/project/.jetskeep +0 -1
  567. data/lib/jets/turbo/project/Gemfile +0 -16
  568. data/lib/jets/turbo/project/Rakefile +0 -2
  569. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  570. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  571. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  572. data/lib/jets/turbo/project/config/application.rb +0 -5
  573. data/lib/jets/turbo/project/config/routes.rb +0 -4
  574. data/lib/jets/turbo/project/config.ru +0 -5
  575. data/lib/jets/turbo/rails.rb +0 -127
  576. data/lib/jets/turbo/templates/config/database.yml +0 -30
  577. data/lib/jets/turbo.rb +0 -56
  578. data/readme/prerelease.md +0 -6
  579. data/readme/testing.md +0 -60
  580. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  581. /data/lib/jets/{commands → command}/help/build.md +0 -0
  582. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  583. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  584. /data/lib/jets/{commands → command}/help/console.md +0 -0
  585. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  587. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  588. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  589. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  590. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  591. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  592. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  593. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  594. /data/lib/jets/{commands → command}/help/server.md +0 -0
  595. /data/lib/jets/{commands → command}/help/status.md +0 -0
  596. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  597. /data/lib/jets/{commands → command}/help/url.md +0 -0
  598. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  599. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  600. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  601. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  602. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  610. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  611. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  617. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  618. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,67 @@
1
+ module Jets::Controller::Response::Compat
2
+ module Response
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ # Must come before include ActionDispatch::Http::Cache::Response
7
+ # Aliasing these off because AD::Http::Cache::Response defines them.
8
+ alias :_cache_control :cache_control
9
+ alias :_cache_control= :cache_control=
10
+ end
11
+
12
+ class_methods do
13
+ cattr_accessor :default_charset, default: "utf-8"
14
+ end
15
+
16
+ ContentTypeHeader = Struct.new :mime_type, :charset
17
+ NullContentTypeHeader = ContentTypeHeader.new nil, nil
18
+
19
+ CONTENT_TYPE = "Content-Type"
20
+ CONTENT_TYPE_PARSER = /
21
+ \A
22
+ (?<mime_type>[^;\s]+\s*(?:;\s*(?:(?!charset)[^;\s])+)*)?
23
+ (?:;\s*charset=(?<quote>"?)(?<charset>[^;\s]+)\k<quote>)?
24
+ /x # :nodoc:
25
+
26
+ def parse_content_type(content_type)
27
+ if content_type && match = CONTENT_TYPE_PARSER.match(content_type)
28
+ ContentTypeHeader.new(match[:mime_type], match[:charset])
29
+ else
30
+ NullContentTypeHeader
31
+ end
32
+ end
33
+
34
+ # Small internal convenience method to get the parsed version of the current
35
+ # content type header.
36
+ def parsed_content_type_header
37
+ parse_content_type(get_header("Content-Type"))
38
+ end
39
+
40
+ def set_content_type(content_type, charset)
41
+ type = content_type || ""
42
+ type = "#{type}; charset=#{charset.to_s.downcase}" if charset
43
+ set_header CONTENT_TYPE, type
44
+ end
45
+
46
+ # Sets the HTTP character set. In case of +nil+ parameter
47
+ # it sets the charset to +default_charset+.
48
+ #
49
+ # response.charset = 'utf-16' # => 'utf-16'
50
+ # response.charset = nil # => 'utf-8'
51
+ def charset=(charset)
52
+ content_type = parsed_content_type_header.mime_type
53
+ if false == charset
54
+ set_content_type content_type, nil
55
+ else
56
+ set_content_type content_type, charset || self.class.default_charset
57
+ end
58
+ end
59
+
60
+ # The charset of the response. HTML wants to know the encoding of the
61
+ # content you're giving them, so we need to send that along.
62
+ def charset
63
+ header_info = parsed_content_type_header
64
+ header_info.charset || self.class.default_charset
65
+ end
66
+ end
67
+ end
@@ -1,21 +1,96 @@
1
+ require 'action_dispatch/http/cache'
2
+ require 'action_dispatch/http/filter_redirect'
3
+ require 'monitor'
1
4
  require 'rack/response'
5
+ require 'rack/utils'
2
6
 
3
- class Jets::Controller
7
+ module Jets::Controller
4
8
  # The response object. See Rack::Response and Rack::Response::Helpers for
5
9
  # more info:
6
10
  # http://rubydoc.info/github/rack/rack/master/Rack/Response
7
11
  # http://rubydoc.info/github/rack/rack/master/Rack/Response/Helpers
8
12
  class Response < ::Rack::Response
9
- DROP_BODY_RESPONSES = [204, 304]
13
+ include Compat::Response
14
+
15
+ include ActionDispatch::Http::FilterRedirect
16
+ include ActionDispatch::Http::Cache::Response
17
+ include MonitorMixin
18
+
19
+ attr_accessor :request
20
+
10
21
  def initialize(*)
11
22
  super
12
- # headers['Content-Type'] ||= 'text/html'
23
+ prepare_cache_control!
24
+ end
25
+
26
+ # What Rack::Response#initialize does.
27
+ def body=(body)
28
+ if body.nil?
29
+ @body = []
30
+ @buffered = true
31
+ @length = 0
32
+ elsif body.respond_to?(:to_str)
33
+ @body = [body]
34
+ @buffered = true
35
+ @length = body.to_str.bytesize
36
+ else
37
+ @body = body
38
+ @buffered = false
39
+ @length = 0
40
+ end
41
+ @body
42
+ end
43
+
44
+ # Sets the HTTP status code.
45
+ def status=(status)
46
+ @status = Rack::Utils.status_code(status)
47
+ end
48
+
49
+ def to_a
50
+ commit!
51
+ rack_response status, headers.to_hash
52
+ end
53
+
54
+ def committed?; synchronize { @committed }; end
55
+ # sending? and send? are for compatibility but not used for Jets
56
+ def sending?; synchronize { @sending }; end
57
+ def sent?; synchronize { @sent }; end
58
+
59
+ def commit!
60
+ synchronize do
61
+ before_committed
62
+ @committed = true
63
+ end
13
64
  end
14
65
 
15
- # TODO: unsure if we should even have these methods. We dont really use them.
16
- def body=(value)
17
- value = value.body while Rack::Response === value
18
- @body = String === value ? [value.to_str] : value
66
+ def before_committed
67
+ assign_default_content_type_and_charset!
68
+ merge_and_normalize_cache_control!(@cache_control)
69
+ handle_conditional_get!
70
+ handle_no_content!
71
+ end
72
+
73
+ def assign_default_content_type_and_charset!
74
+ return if media_type
75
+
76
+ ct = parsed_content_type_header
77
+ set_content_type(ct.mime_type || Mime[:html].to_s,
78
+ ct.charset || self.class.default_charset)
79
+ end
80
+
81
+ def handle_no_content!
82
+ if NO_CONTENT_CODES.include?(@status)
83
+ headers.delete "Content-Length"
84
+ end
85
+ end
86
+
87
+ NO_CONTENT_CODES = [100, 101, 102, 103, 204, 205, 304]
88
+ def rack_response(status, header)
89
+ if NO_CONTENT_CODES.include?(status)
90
+ [status, header, []]
91
+ else
92
+ [status, header, body]
93
+ end
19
94
  end
20
95
 
21
96
  def each
@@ -44,7 +119,14 @@ class Jets::Controller
44
119
  [status.to_i, headers, result]
45
120
  end
46
121
 
47
- private
122
+ # The response code of the request.
123
+ alias response_code status
124
+
125
+ def media_type
126
+ headers["Content-Type"]
127
+ end
128
+
129
+ private
48
130
 
49
131
  def calculate_content_length?
50
132
  headers["Content-Type"] and not headers["Content-Length"] and Array === body
@@ -54,6 +136,7 @@ class Jets::Controller
54
136
  status.to_i / 100 == 1 or drop_body?
55
137
  end
56
138
 
139
+ DROP_BODY_RESPONSES = [204, 304]
57
140
  def drop_body?
58
141
  DROP_BODY_RESPONSES.include?(status.to_i)
59
142
  end
data/lib/jets/core.rb CHANGED
@@ -1,25 +1,28 @@
1
1
  module Jets::Core
2
2
  extend Memoist
3
3
 
4
- def application
5
- Jets::Application.instance
6
- end
4
+ mattr_accessor :cache
7
5
 
8
- def config
9
- application.config
6
+ delegate :aws, :autoloaders, :config, to: :application
7
+
8
+ @application = @app_class = nil
9
+
10
+ attr_writer :application
11
+ attr_accessor :app_class
12
+ def application
13
+ @application ||= (app_class.instance if app_class)
10
14
  end
11
15
 
12
- def aws
13
- application.aws
16
+ def backtrace_cleaner
17
+ @backtrace_cleaner ||= Jets::BacktraceCleaner.new
14
18
  end
15
19
 
16
- # Load all application base classes and project classes
17
- def boot
18
- Jets::Booter.boot!
20
+ # The Configuration instance used to configure the Rails environment
21
+ def configuration
22
+ application.config
19
23
  end
20
24
 
21
25
  def root
22
- # Do not memoize this method. Turbo mode can change it
23
26
  root = ENV['JETS_ROOT'].to_s
24
27
  root = Dir.pwd if root == ''
25
28
  Pathname.new(root)
@@ -44,25 +47,84 @@ module Jets::Core
44
47
  extra
45
48
  end
46
49
 
47
- def build_root
48
- "/tmp/jets/#{config.project_name}".freeze
50
+ def project_name
51
+ path = "config/project_name"
52
+ if ENV['JETS_PROJECT_NAME'] && !ENV['JETS_PROJECT_NAME'].blank?
53
+ ENV['JETS_PROJECT_NAME']
54
+ elsif File.exist?(path)
55
+ IO.read(path).strip
56
+ elsif parsed_project_name
57
+ parsed_project_name
58
+ else
59
+ Dir.pwd.split("/").last # conventionally infer app name from current directory
60
+ end
61
+ end
62
+
63
+ def project_namespace
64
+ [project_name, short_env, extra].compact.join('-').gsub('_','-')
65
+ end
66
+
67
+ def table_namespace
68
+ [project_name, short_env].compact.join('-')
69
+ end
70
+
71
+ ENV_MAP = {
72
+ development: 'dev',
73
+ production: 'prod',
74
+ staging: 'stag',
75
+ }
76
+ def short_env
77
+ ENV_MAP[Jets.env.to_sym] || Jets.env
78
+ end
79
+
80
+ # Double evaling config/application.rb causes subtle issues:
81
+ # * double loading of shared resources: Jets::Stack.subclasses will have the same
82
+ # class twice when config is called when declaring a function
83
+ # * forces us to rescue all exceptions, which is a big hammer
84
+ #
85
+ # Lets parse for the project name instead for now.
86
+ #
87
+ # Keep for backwards compatibility
88
+ def parsed_project_name
89
+ lines = IO.readlines("#{Jets.root}/config/application.rb")
90
+ project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ && l !~ /^\s+#/ }
91
+ if project_name_line
92
+ parsed = project_name_line.gsub(/.*=/,'').strip
93
+ # The +? makes it non-greedy
94
+ # See: https://ruby-doc.org/core-2.5.1/Regexp.html#class-Regexp-label-Repetition
95
+ md = parsed.match(/['"](.+?)['"]/)
96
+ md ? md[1] : raise("Unable to parse project name from config/application.rb: #{project_name_line}")
97
+ end
98
+ end
99
+ memoize :parsed_project_name
100
+
101
+ # Load all application base classes and project classes
102
+ def boot
103
+ Jets::Booter.boot!
104
+ end
105
+
106
+ def build_root
107
+ "/tmp/jets/#{Jets.project_name}".freeze
49
108
  end
50
109
  memoize :build_root
51
110
 
52
111
  def logger
53
- Jets.application.config.logger
112
+ @logger
113
+ end
114
+
115
+ def logger=(logger)
116
+ @logger = logger
117
+ end
118
+
119
+ def deprecator # :nodoc:
120
+ @deprecator ||= ActiveSupport::Deprecation.new
54
121
  end
55
- memoize :logger
56
122
 
57
123
  def webpacker?
58
124
  Gem.loaded_specs.keys.any?{|k| k.start_with?("webpacker")}
59
125
  end
60
126
  memoize :webpacker?
61
127
 
62
- def load_tasks
63
- Jets::Commands::RakeTasks.load!
64
- end
65
-
66
128
  def version
67
129
  Jets::VERSION
68
130
  end
@@ -87,32 +149,9 @@ def build_root
87
149
  @@prewarm_count
88
150
  end
89
151
 
90
- def project_namespace
91
- [config.project_name, config.short_env, config.extra].compact.join('-').gsub('_','-')
92
- end
93
-
94
- def rack?
95
- path = "#{Jets.root}/rack"
96
- File.exist?(path) || File.symlink?(path)
97
- end
98
-
99
152
  def poly_only?
100
153
  return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers
101
- Jets::Commands::Build.poly_only?
102
- end
103
-
104
- def report_exception(exception)
105
- puts "DEPRECATED: report_exception. Use on_exception instead.".color(:yellow)
106
- on_exception(exception)
107
- end
108
-
109
- def on_exception(exception)
110
- Jets::Turbine.subclasses.each do |subclass|
111
- reporters = subclass.on_exceptions || []
112
- reporters.each do |label, block|
113
- block.call(exception)
114
- end
115
- end
154
+ Jets::Cfn::Builder.poly_only?
116
155
  end
117
156
 
118
157
  def custom_domain?
@@ -136,21 +175,14 @@ def build_root
136
175
  def once
137
176
  boot
138
177
  override_lambda_ruby_runtime
178
+ # require "jets/overrides/puma" # leaving around as a comment in case needed in the future
139
179
  tmp_load!
140
- start_rack_server
141
180
  end
142
181
 
143
182
  def tmp_load!
144
183
  Jets::TmpLoader.load!
145
184
  end
146
185
 
147
- # Megamode support
148
- def start_rack_server(options={})
149
- rack = Jets::RackServer.new(options)
150
- rack.start
151
- rack.wait_for_socket
152
- end
153
-
154
186
  def override_lambda_ruby_runtime
155
187
  require "jets/overrides/lambda"
156
188
  end
@@ -166,4 +198,63 @@ def build_root
166
198
  version = RUBY_VERSION.split('.')[0..1].join('.')
167
199
  "ruby#{version}"
168
200
  end
201
+
202
+ def one_lambda_per_controller?
203
+ Jets.config.cfn.build.controllers == "one_lambda_per_controller"
204
+ end
205
+
206
+ def one_lambda_for_all_controllers?
207
+ Jets.config.cfn.build.controllers == "one_lambda_for_all_controllers"
208
+ end
209
+
210
+ # Do not memoize here. The JetsBucket.name does it's own special memoization.
211
+ def s3_bucket
212
+ Jets::Cfn::Resource::S3::JetsBucket.name
213
+ end
214
+
215
+ def report_exception(exception)
216
+ # See Jets::ExceptionReporting decorate_exception_with_exception_reported!
217
+ if exception.respond_to?(:with_exception_reported?) && exception.with_exception_reported?
218
+ return
219
+ end
220
+
221
+ Jets.application.turbines.each do |turbine|
222
+ turbine.on_exception_blocks.each do |block|
223
+ block.call(exception)
224
+ end
225
+ end
226
+ end
227
+
228
+ # Returns the ActiveSupport::ErrorReporter of the current \Jets project,
229
+ # otherwise it returns +nil+ if there is no project.
230
+ #
231
+ # Jets.error.handle(IOError) do
232
+ # # ...
233
+ # end
234
+ # Jets.error.report(error)
235
+ def error
236
+ application && application.executor.error_reporter
237
+ # ActiveSupport.error_reporter
238
+ end
239
+
240
+ # Returns a Pathname object of the public folder of the current
241
+ # \Jets project, otherwise it returns +nil+ if there is no project:
242
+ #
243
+ # Jets.public_path
244
+ # # => #<Pathname:/Users/someuser/some/path/project/public>
245
+ def public_path
246
+ application && Pathname.new(application.paths["public"].first)
247
+ end
248
+
249
+ def autoloaders
250
+ application.autoloaders
251
+ end
252
+
253
+ # It's useful to eager load and find out any error within the jets code immediately.
254
+ # Leaving in place because think the layer of protection is good.
255
+ # Eager load outside of a jets project can error. IE: `jets -h`
256
+ # Eager load inside a jets project is fine.
257
+ def eager_load_gem?
258
+ File.exist?("config/application.rb") || ENV['JETS_TEST'] || defined?(ENGINE_ROOT) # jets project
259
+ end
169
260
  end
@@ -5,8 +5,8 @@ module Kernel
5
5
  # @param path [String]
6
6
  # @return [Boolean]
7
7
  def require(path)
8
- # Hack to prevent Rails const from being defined
9
- # Actionview requires "rails-html-sanitizer" and that creates a Rails module
8
+ # Hack to prevent Jets const from being defined
9
+ # Actionview requires "jets-html-sanitizer" and that creates a Jets module
10
10
  path = "jets-html-sanitizer" if path == "rails-html-sanitizer" && !ENV['JETS_RAILS_CONST']
11
11
  jets_original_require(path)
12
12
  end
@@ -0,0 +1,5 @@
1
+ class Symbol
2
+ def camelize
3
+ to_s.camelize.to_sym
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ require "jets/core_ext/bundler"
2
+ require "jets/core_ext/file"
3
+ require "jets/core_ext/symbol"
4
+ # Do not require jets/core_ext/kernel because it is a special case
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ module Jets
6
+ module DevCaching # :nodoc:
7
+ class << self
8
+ FILE = "tmp/caching-dev.txt"
9
+
10
+ def enable_by_file
11
+ FileUtils.mkdir_p("tmp")
12
+
13
+ if File.exist?(FILE)
14
+ delete_cache_file
15
+ puts "Development mode is no longer being cached."
16
+ else
17
+ create_cache_file
18
+ puts "Development mode is now being cached."
19
+ end
20
+
21
+ FileUtils.touch "tmp/restart.txt"
22
+ end
23
+
24
+ def enable_by_argument(caching)
25
+ FileUtils.mkdir_p("tmp")
26
+
27
+ if caching
28
+ create_cache_file
29
+ elsif caching == false && File.exist?(FILE)
30
+ delete_cache_file
31
+ end
32
+ end
33
+
34
+ private
35
+ def create_cache_file
36
+ FileUtils.touch FILE
37
+ end
38
+
39
+ def delete_cache_file
40
+ File.delete FILE
41
+ end
42
+ end
43
+ end
44
+ end
@@ -45,15 +45,18 @@ class Jets::Dotenv
45
45
  rescue Aws::SSM::Errors::ParameterNotFound
46
46
  @missing << [key, value, name]
47
47
  ''
48
+ rescue Aws::SSM::Errors::ValidationException
49
+ puts "ERROR: Invalid SSM parameter name: #{name.inspect}".color(:red)
50
+ raise
48
51
  end
49
52
 
50
53
  def ssm_name(key, value)
51
54
  if value == "SSM"
52
- "/#{Jets.config.project_name}/#{Jets.env}/#{key}"
55
+ "/#{Jets.project_name}/#{Jets.env}/#{key}"
53
56
  else
54
57
  value.start_with?("/") ?
55
58
  value :
56
- "/#{Jets.config.project_name}/#{Jets.env}/#{value}"
59
+ "/#{Jets.project_name}/#{Jets.env}/#{value}"
57
60
  end
58
61
  end
59
62
 
data/lib/jets/dotenv.rb CHANGED
@@ -16,12 +16,13 @@ class Jets::Dotenv
16
16
  end
17
17
 
18
18
  def on_aws?
19
+ return true if ENV['ON_AWS']
19
20
  !!ENV['_HANDLER'] # https://docs.aws.amazon.com/lambda/latest/dg/lambda-environment-variables.html
20
21
  end
21
22
 
22
23
  # dotenv files with the following precedence:
23
24
  #
24
- # - .env.development.jets_env_extra (highest)
25
+ # - .env.development.jets_extra (highest)
25
26
  # - .env.development.remote (2nd highest, only if JETS_ENV_REMOTE=1)
26
27
  # - .env.development.local (unless JETS_ENV_REMOTE=1)
27
28
  # - .env.development
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ class Engine
5
+ class Configuration < ::Jets::Turbine::Configuration
6
+ attr_reader :root
7
+ attr_accessor :middleware, :javascript_path
8
+ attr_writer :eager_load_paths, :autoload_once_paths, :autoload_paths
9
+
10
+ def initialize(root = nil)
11
+ super()
12
+ @root = root
13
+ @generators = app_generators.dup
14
+ @middleware = Jets::Configuration::MiddlewareStackProxy.new
15
+ @javascript_path = "javascript"
16
+ end
17
+
18
+ # Holds generators configuration:
19
+ #
20
+ # config.generators do |g|
21
+ # g.orm :data_mapper, migration: true
22
+ # g.template_engine :haml
23
+ # g.test_framework :rspec
24
+ # end
25
+ #
26
+ # If you want to disable color in console, do:
27
+ #
28
+ # config.generators.colorize_logging = false
29
+ #
30
+ def generators
31
+ @generators ||= Jets::Configuration::Generators.new
32
+ yield(@generators) if block_given?
33
+ @generators
34
+ end
35
+
36
+ def paths
37
+ @paths ||= begin
38
+ paths = Jets::Paths::Root.new(@root)
39
+
40
+ paths.add "app", eager_load: true,
41
+ glob: "{*,*/concerns}",
42
+ exclude: ["assets", javascript_path]
43
+ paths.add "app/assets", glob: "*"
44
+ paths.add "app/controllers", eager_load: true
45
+ paths.add "app/channels", eager_load: true
46
+ paths.add "app/helpers", eager_load: true
47
+ paths.add "app/models", eager_load: true
48
+ paths.add "app/mailers", eager_load: true
49
+ paths.add "app/views"
50
+ # Jets
51
+ paths.add "app/functions", ignore: true
52
+ paths.add "app/shared", eager_load: false
53
+ paths.add "app/shared/extensions", collapse: true
54
+ paths.add "app/shared/functions", ignore: true
55
+ paths.add "app/shared/resources", collapse: true
56
+
57
+ paths.add "lib", load_path: true
58
+ paths.add "lib/assets", glob: "*"
59
+ paths.add "lib/tasks", glob: "**/*.rake"
60
+
61
+ paths.add "config"
62
+ paths.add "config/environments", glob: -"#{Jets.env}.rb"
63
+ paths.add "config/initializers", glob: "**/*.rb"
64
+ paths.add "config/locales", glob: "**/*.{rb,yml}"
65
+ paths.add "config/routes.rb"
66
+ paths.add "config/routes", glob: "**/*.rb"
67
+
68
+ paths.add "db"
69
+ paths.add "db/migrate"
70
+ paths.add "db/seeds.rb"
71
+
72
+ paths.add "vendor", load_path: true
73
+ paths.add "vendor/assets", glob: "*"
74
+
75
+ paths
76
+ end
77
+ end
78
+
79
+ def root=(value)
80
+ @root = paths.path = Pathname.new(value).expand_path
81
+ end
82
+
83
+ def eager_load_paths
84
+ @eager_load_paths ||= paths.eager_load
85
+ end
86
+
87
+ def autoload_once_paths
88
+ @autoload_once_paths ||= paths.autoload_once
89
+ end
90
+
91
+ def autoload_paths
92
+ @autoload_paths ||= paths.autoload_paths
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jets
4
+ class Engine < Turbine
5
+ class Turbines
6
+ include Enumerable
7
+ attr_reader :_all
8
+
9
+ def initialize
10
+ @_all ||= ::Jets::Turbine.subclasses.map(&:instance) +
11
+ ::Jets::Engine.subclasses.map(&:instance)
12
+ end
13
+
14
+ def each(*args, &block)
15
+ _all.each(*args, &block)
16
+ end
17
+
18
+ def -(others)
19
+ _all - others
20
+ end
21
+ end
22
+ end
23
+ end