jets 3.1.0 → 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 (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +141 -0
  5. data/Gemfile +1 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +21 -43
  8. data/Rakefile +3 -3
  9. data/backers.md +0 -5
  10. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  11. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  12. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  13. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  14. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  16. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  17. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  18. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  19. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  20. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  21. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  22. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  23. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  24. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  25. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  26. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  27. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  28. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  29. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  30. data/engines/internal/lib/internal/actionview.rb +152 -0
  31. data/engines/internal/lib/internal/activerecord.rb +37 -0
  32. data/engines/internal/lib/internal/activesupport.rb +47 -0
  33. data/engines/internal/lib/internal/engine.rb +13 -0
  34. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  35. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  36. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  37. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  39. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  40. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  41. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  42. data/exe/jets +1 -10
  43. data/jets.gemspec +16 -13
  44. data/lib/jets/app_loader.rb +77 -0
  45. data/lib/jets/application/bootstrap.rb +100 -0
  46. data/lib/jets/application/configuration/defaults.rb +256 -0
  47. data/lib/jets/application/configuration.rb +494 -0
  48. data/lib/jets/application/default_middleware_stack.rb +140 -0
  49. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  50. data/lib/jets/application/finisher.rb +266 -0
  51. data/lib/jets/application/routes_reloader.rb +80 -0
  52. data/lib/jets/application.rb +515 -199
  53. data/lib/jets/authorizer/base.rb +1 -0
  54. data/lib/jets/authorizer/dsl.rb +15 -11
  55. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  56. data/lib/jets/autoloaders/gem.rb +70 -0
  57. data/lib/jets/autoloaders/inflector.rb +21 -0
  58. data/lib/jets/autoloaders.rb +38 -101
  59. data/lib/jets/aws_info.rb +2 -2
  60. data/lib/jets/aws_services/stack_status.rb +1 -1
  61. data/lib/jets/aws_services.rb +8 -0
  62. data/lib/jets/backtrace_cleaner.rb +27 -0
  63. data/lib/jets/booter.rb +30 -118
  64. data/lib/jets/builders/code_builder.rb +64 -122
  65. data/lib/jets/builders/code_size.rb +1 -0
  66. data/lib/jets/builders/gem_replacer.rb +6 -12
  67. data/lib/jets/builders/handler_generator.rb +34 -14
  68. data/lib/jets/builders/lambda_layer.rb +2 -7
  69. data/lib/jets/builders/purger.rb +1 -1
  70. data/lib/jets/builders/rack_packager.rb +1 -1
  71. data/lib/jets/builders/ruby_packager.rb +54 -10
  72. data/lib/jets/builders/shim_vars/app.rb +10 -6
  73. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  74. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  75. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  76. data/lib/jets/bundle.rb +2 -9
  77. data/lib/jets/cfn/base.rb +82 -0
  78. data/lib/jets/cfn/builder/api/base.rb +12 -0
  79. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  80. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  81. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  82. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  83. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  84. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  85. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  86. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  87. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  88. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  89. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  90. data/lib/jets/cfn/builder/controller.rb +28 -0
  91. data/lib/jets/cfn/builder/function.rb +9 -0
  92. data/lib/jets/cfn/builder/interface.rb +146 -0
  93. data/lib/jets/cfn/builder/job.rb +10 -0
  94. data/lib/jets/cfn/builder/nested.rb +130 -0
  95. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  96. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  97. data/lib/jets/cfn/builder/parent.rb +149 -0
  98. data/lib/jets/cfn/builder/post_process.rb +25 -0
  99. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  100. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  101. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  102. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  103. data/lib/jets/cfn/deployment.rb +45 -0
  104. data/lib/jets/cfn/download.rb +39 -0
  105. data/lib/jets/cfn/params/api/base.rb +39 -0
  106. data/lib/jets/cfn/params/api/cors.rb +10 -0
  107. data/lib/jets/cfn/params/api/methods.rb +69 -0
  108. data/lib/jets/cfn/params/api/resources.rb +28 -0
  109. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  111. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  113. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  117. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  119. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  128. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  129. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  133. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  134. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  135. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  137. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  138. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  139. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  140. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  141. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  142. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  143. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  144. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  145. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  146. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  147. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  148. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  149. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  150. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  151. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  152. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  153. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  154. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  155. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  156. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  157. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  158. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  159. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  162. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  163. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  164. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  165. data/lib/jets/cfn/resource/one/function.rb +66 -0
  166. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  167. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  168. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  169. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  170. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  171. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  172. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  173. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  174. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  175. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  176. data/lib/jets/cfn/resource.rb +8 -0
  177. data/lib/jets/cfn/ship.rb +30 -16
  178. data/lib/jets/cfn/status.rb +1 -1
  179. data/lib/jets/cfn/template.rb +89 -0
  180. data/lib/jets/cfn/upload.rb +26 -23
  181. data/lib/jets/cli.rb +28 -203
  182. data/lib/jets/command/actions.rb +49 -0
  183. data/lib/jets/command/api_helpers.rb +41 -0
  184. data/lib/jets/command/aws_helpers.rb +26 -0
  185. data/lib/jets/command/base.rb +204 -0
  186. data/lib/jets/command/behavior.rb +83 -0
  187. data/lib/jets/command/environment_argument.rb +42 -0
  188. data/lib/jets/command/help/call.md +48 -0
  189. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  190. data/lib/jets/command/help/logs.md +21 -0
  191. data/lib/jets/{commands → command}/help/new.md +3 -4
  192. data/lib/jets/command/help/projects.md +6 -0
  193. data/lib/jets/command/help/releases.md +37 -0
  194. data/lib/jets/command/help/rollback.md +5 -0
  195. data/lib/jets/command/help/routes.md +15 -0
  196. data/lib/jets/command/help/runner.md +40 -0
  197. data/lib/jets/command/help/stacks.md +6 -0
  198. data/lib/jets/command/help.rb +17 -0
  199. data/lib/jets/command/helpers/editor.rb +35 -0
  200. data/lib/jets/command.rb +133 -0
  201. data/lib/jets/commands/application/application_command.rb +40 -0
  202. data/lib/jets/commands/build/build_command.rb +33 -0
  203. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  204. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  205. data/lib/jets/commands/call/base_guesser.rb +5 -5
  206. data/lib/jets/commands/call/call_command.rb +27 -0
  207. data/lib/jets/commands/call/caller.rb +184 -0
  208. data/lib/jets/commands/call/guesser.rb +1 -1
  209. data/lib/jets/commands/clean/base.rb +1 -1
  210. data/lib/jets/commands/clean/build.rb +1 -1
  211. data/lib/jets/commands/clean/clean_command.rb +15 -0
  212. data/lib/jets/commands/clean/log.rb +4 -4
  213. data/lib/jets/commands/configure/configure_command.rb +9 -0
  214. data/lib/jets/commands/console/console_command.rb +38 -0
  215. data/lib/jets/commands/credentials/USAGE +103 -0
  216. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  217. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  218. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  219. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  220. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  221. data/lib/jets/commands/delete/delete_command.rb +155 -0
  222. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
  223. data/lib/jets/commands/dev/dev_command.rb +19 -0
  224. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  225. data/lib/jets/commands/encrypted/USAGE +46 -0
  226. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  227. data/lib/jets/commands/gems/gems_command.rb +14 -0
  228. data/lib/jets/commands/generate/generate_command.rb +95 -0
  229. data/lib/jets/commands/help/USAGE +20 -0
  230. data/lib/jets/commands/help/help_command.rb +15 -0
  231. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  232. data/lib/jets/commands/logs/logs_command.rb +45 -0
  233. data/lib/jets/commands/new/new_command.rb +19 -0
  234. data/lib/jets/commands/notes/notes_command.rb +30 -0
  235. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  236. data/lib/jets/commands/projects/projects_command.rb +30 -0
  237. data/lib/jets/commands/rake/rake_command.rb +59 -0
  238. data/lib/jets/commands/releases/releases_command.rb +72 -0
  239. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  240. data/lib/jets/commands/routes/routes_command.rb +19 -0
  241. data/lib/jets/commands/runner/runner_command.rb +60 -0
  242. data/lib/jets/commands/server/server_command.rb +291 -0
  243. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  244. data/lib/jets/commands/status/status_command.rb +9 -0
  245. data/lib/jets/commands/url/url_command.rb +92 -0
  246. data/lib/jets/commands/version/version_command.rb +11 -0
  247. data/lib/jets/commands.rb +17 -0
  248. data/lib/jets/configuration.rb +166 -0
  249. data/lib/jets/controller/base.rb +105 -183
  250. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  251. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  252. data/lib/jets/controller/compat/caching.rb +13 -0
  253. data/lib/jets/controller/compat/future.rb +13 -0
  254. data/lib/jets/controller/compat/route_set.rb +47 -0
  255. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  256. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  257. data/lib/jets/controller/decorate/logging.rb +90 -0
  258. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  259. data/lib/jets/controller/decorate/url_for.rb +10 -0
  260. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  261. data/lib/jets/controller/handler.rb +41 -0
  262. data/lib/jets/controller/middleware/main.rb +16 -8
  263. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  264. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  265. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  266. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  267. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  268. data/lib/jets/controller/request/compat/params.rb +144 -0
  269. data/lib/jets/controller/request/compat/request.rb +125 -0
  270. data/lib/jets/controller/request.rb +35 -18
  271. data/lib/jets/controller/response/compat/response.rb +67 -0
  272. data/lib/jets/controller/response.rb +91 -8
  273. data/lib/jets/core.rb +153 -50
  274. data/lib/jets/core_ext/file.rb +9 -0
  275. data/lib/jets/core_ext/kernel.rb +2 -2
  276. data/lib/jets/core_ext/symbol.rb +5 -0
  277. data/lib/jets/core_ext.rb +4 -0
  278. data/lib/jets/dev_caching.rb +44 -0
  279. data/lib/jets/dotenv/ssm.rb +5 -2
  280. data/lib/jets/dotenv.rb +4 -3
  281. data/lib/jets/engine/configuration.rb +96 -0
  282. data/lib/jets/engine/turbines.rb +23 -0
  283. data/lib/jets/engine.rb +380 -0
  284. data/lib/jets/erb.rb +1 -1
  285. data/lib/jets/exception_reporting.rb +43 -0
  286. data/lib/jets/generators/job/job_generator.rb +41 -0
  287. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  288. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  289. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  290. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  291. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  292. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  293. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  294. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  295. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  296. data/lib/jets/generators/overrides/app/USAGE +38 -0
  297. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  298. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  299. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  300. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  301. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  302. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  303. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  304. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  305. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  306. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  307. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  308. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  309. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  311. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  312. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  313. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  314. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  315. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  316. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  317. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  318. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  319. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  320. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  322. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  323. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  324. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  325. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  326. data/lib/jets/generators.rb +112 -0
  327. data/lib/jets/inflections.rb +1 -1
  328. data/lib/jets/info.rb +116 -0
  329. data/lib/jets/initializable.rb +95 -0
  330. data/lib/jets/job/base.rb +5 -2
  331. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  332. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  333. data/lib/jets/job/dsl/iot_event.rb +6 -6
  334. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  335. data/lib/jets/job/dsl/log_event.rb +2 -2
  336. data/lib/jets/job/dsl/rule_event.rb +7 -4
  337. data/lib/jets/job/dsl/s3_event.rb +1 -1
  338. data/lib/jets/job/dsl/sns_event.rb +6 -6
  339. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  340. data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
  341. data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
  342. data/lib/jets/klass.rb +5 -6
  343. data/lib/jets/lambda/definition.rb +118 -0
  344. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  345. data/lib/jets/lambda/dsl.rb +73 -54
  346. data/lib/jets/lambda/function.rb +3 -3
  347. data/lib/jets/lambda/function_constructor.rb +6 -6
  348. data/lib/jets/lambda/functions.rb +36 -1
  349. data/lib/jets/mega/hash_converter.rb +2 -2
  350. data/lib/jets/mega/request/source.rb +1 -2
  351. data/lib/jets/mega/request.rb +4 -4
  352. data/lib/jets/names.rb +79 -0
  353. data/lib/jets/overrides/dummy/rails.rb +11 -0
  354. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  355. data/lib/jets/overrides/puma.rb +10 -0
  356. data/lib/jets/paths.rb +243 -0
  357. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  358. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  359. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  360. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  361. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  362. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  363. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  364. data/lib/jets/preheat.rb +26 -33
  365. data/lib/jets/processors/deducer.rb +2 -2
  366. data/lib/jets/processors/main_processor.rb +6 -13
  367. data/lib/jets/rack/logger.rb +77 -0
  368. data/lib/jets/router/compat/route_set.rb +177 -0
  369. data/lib/jets/router/dsl/mount.rb +40 -6
  370. data/lib/jets/router/dsl.rb +125 -105
  371. data/lib/jets/router/engine_mount.rb +36 -0
  372. data/lib/jets/router/help.rb +130 -0
  373. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  374. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  375. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  376. data/lib/jets/router/matcher.rb +140 -17
  377. data/lib/jets/router/resources/options.rb +6 -4
  378. data/lib/jets/router/route/after_initialize.rb +64 -0
  379. data/lib/jets/router/route/as.rb +93 -0
  380. data/lib/jets/router/route/authorizer.rb +1 -0
  381. data/lib/jets/router/route/compat.rb +45 -0
  382. data/lib/jets/router/route/info.rb +74 -0
  383. data/lib/jets/router/route/node.rb +137 -0
  384. data/lib/jets/router/route/path.rb +93 -0
  385. data/lib/jets/router/route.rb +109 -90
  386. data/lib/jets/router/route_set.rb +214 -0
  387. data/lib/jets/router/scope.rb +204 -69
  388. data/lib/jets/router/state.rb +67 -0
  389. data/lib/jets/router/util.rb +1 -31
  390. data/lib/jets/router.rb +64 -150
  391. data/lib/jets/ruby_version_check.rb +15 -0
  392. data/lib/jets/rule/base.rb +1 -0
  393. data/lib/jets/rule/dsl.rb +7 -7
  394. data/lib/jets/secrets.rb +110 -0
  395. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  396. data/lib/jets/spec_helpers/controllers.rb +32 -24
  397. data/lib/jets/spec_helpers.rb +0 -6
  398. data/lib/jets/stack/builder.rb +3 -2
  399. data/lib/jets/stack/definition.rb +1 -4
  400. data/lib/jets/stack/function.rb +2 -2
  401. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  402. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  403. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  404. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  405. data/lib/jets/stack/output/lookup.rb +1 -1
  406. data/lib/jets/stack/output.rb +2 -2
  407. data/lib/jets/stack/parameter.rb +2 -2
  408. data/lib/jets/stack/resource.rb +3 -3
  409. data/lib/jets/stack/s3_event.rb +51 -37
  410. data/lib/jets/stack.rb +1 -1
  411. data/lib/jets/tasks/engine.rake +85 -0
  412. data/lib/jets/tasks/framework.rake +66 -0
  413. data/lib/jets/tasks/log.rake +41 -0
  414. data/lib/jets/tasks/middleware.rake +9 -0
  415. data/lib/jets/tasks/misc.rake +81 -0
  416. data/lib/jets/tasks/statistics.rake +37 -0
  417. data/lib/jets/tasks/tmp.rake +51 -0
  418. data/lib/jets/tasks/yarn.rake +29 -0
  419. data/lib/jets/tasks/zeitwerk.rake +61 -0
  420. data/lib/jets/tasks.rb +18 -0
  421. data/lib/jets/tmp_loader.rb +1 -1
  422. data/lib/jets/turbine/configurable.rb +36 -0
  423. data/lib/jets/turbine/configuration.rb +101 -0
  424. data/lib/jets/turbine.rb +164 -20
  425. data/lib/jets/util/camelize.rb +24 -0
  426. data/lib/jets/util/yamler.rb +16 -0
  427. data/lib/jets/version.rb +1 -1
  428. data/lib/jets.rb +8 -14
  429. metadata +444 -347
  430. data/.python-version +0 -1
  431. data/.ruby-version +0 -1
  432. data/bin/release +0 -9
  433. data/lib/jets/application/defaults.rb +0 -200
  434. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  435. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  436. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  437. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  438. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  439. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  440. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  441. data/lib/jets/cfn/builders/interface.rb +0 -133
  442. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  443. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  444. data/lib/jets/cfn/built_template.rb +0 -15
  445. data/lib/jets/cfn/template_source.rb +0 -61
  446. data/lib/jets/commands/base.rb +0 -145
  447. data/lib/jets/commands/call.rb +0 -182
  448. data/lib/jets/commands/clean.rb +0 -19
  449. data/lib/jets/commands/configure.rb +0 -51
  450. data/lib/jets/commands/console.rb +0 -12
  451. data/lib/jets/commands/db/environment-task.rake +0 -3
  452. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  453. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  454. data/lib/jets/commands/db/tasks.rb +0 -34
  455. data/lib/jets/commands/db.rb +0 -13
  456. data/lib/jets/commands/dbconsole.rb +0 -134
  457. data/lib/jets/commands/delete.rb +0 -136
  458. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  459. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  460. data/lib/jets/commands/dynamodb.rb +0 -19
  461. data/lib/jets/commands/gems.rb +0 -13
  462. data/lib/jets/commands/help/call.md +0 -69
  463. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  464. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  465. data/lib/jets/commands/help/routes.md +0 -16
  466. data/lib/jets/commands/help/runner.md +0 -17
  467. data/lib/jets/commands/help.rb +0 -9
  468. data/lib/jets/commands/import/base.rb +0 -49
  469. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  470. data/lib/jets/commands/import/rack.rb +0 -16
  471. data/lib/jets/commands/import/rails.rb +0 -74
  472. data/lib/jets/commands/import/sequence.rb +0 -90
  473. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  474. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  475. data/lib/jets/commands/import.rb +0 -12
  476. data/lib/jets/commands/main.rb +0 -166
  477. data/lib/jets/commands/markdown/creator.rb +0 -58
  478. data/lib/jets/commands/markdown/index.rb +0 -27
  479. data/lib/jets/commands/markdown/page.rb +0 -125
  480. data/lib/jets/commands/markdown/shell.rb +0 -11
  481. data/lib/jets/commands/new.rb +0 -173
  482. data/lib/jets/commands/rake_command.rb +0 -61
  483. data/lib/jets/commands/rake_tasks.rb +0 -50
  484. data/lib/jets/commands/runner.rb +0 -16
  485. data/lib/jets/commands/sequence.rb +0 -105
  486. data/lib/jets/commands/stack_info.rb +0 -30
  487. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  488. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  489. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  490. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  491. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  492. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  493. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  494. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  495. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  496. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  497. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  498. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  499. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  500. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  501. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  502. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  503. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  504. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  505. data/lib/jets/commands/upgrade/version1.rb +0 -136
  506. data/lib/jets/commands/upgrade.rb +0 -105
  507. data/lib/jets/commands/url.rb +0 -69
  508. data/lib/jets/commands/webpacker_template.rb +0 -18
  509. data/lib/jets/controller/callbacks.rb +0 -73
  510. data/lib/jets/controller/cookies/jar.rb +0 -269
  511. data/lib/jets/controller/cookies.rb +0 -38
  512. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  513. data/lib/jets/controller/error.rb +0 -4
  514. data/lib/jets/controller/forgery_protection.rb +0 -43
  515. data/lib/jets/controller/layout.rb +0 -17
  516. data/lib/jets/controller/middleware/cors.rb +0 -60
  517. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  518. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  519. data/lib/jets/controller/middleware/reloader.rb +0 -15
  520. data/lib/jets/controller/parameters_filter.rb +0 -29
  521. data/lib/jets/controller/params.rb +0 -117
  522. data/lib/jets/controller/redirection.rb +0 -61
  523. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  524. data/lib/jets/controller/rendering.rb +0 -96
  525. data/lib/jets/controller/stage.rb +0 -34
  526. data/lib/jets/controller.rb +0 -3
  527. data/lib/jets/db.rb +0 -15
  528. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  529. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  530. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  531. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  532. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  533. data/lib/jets/generator.rb +0 -112
  534. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  535. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  536. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  537. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  538. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  539. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  540. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  541. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  542. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  543. data/lib/jets/lambda/task.rb +0 -111
  544. data/lib/jets/logger.rb +0 -21
  545. data/lib/jets/middleware/configurator.rb +0 -84
  546. data/lib/jets/middleware/default_stack.rb +0 -53
  547. data/lib/jets/middleware/layer.rb +0 -34
  548. data/lib/jets/middleware/stack.rb +0 -77
  549. data/lib/jets/middleware.rb +0 -33
  550. data/lib/jets/naming.rb +0 -63
  551. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  552. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  553. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  554. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  555. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  556. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  557. data/lib/jets/overrides/rails.rb +0 -6
  558. data/lib/jets/rack_server.rb +0 -86
  559. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  560. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  561. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  562. data/lib/jets/resource/api_gateway/method.rb +0 -102
  563. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  564. data/lib/jets/resource/base.rb +0 -28
  565. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  566. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  567. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  568. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  569. data/lib/jets/resource/child_stack/base.rb +0 -24
  570. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  571. data/lib/jets/resource/lambda/function.rb +0 -221
  572. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  573. data/lib/jets/resource/permission.rb +0 -45
  574. data/lib/jets/resource.rb +0 -71
  575. data/lib/jets/router/error.rb +0 -4
  576. data/lib/jets/router/finder.rb +0 -47
  577. data/lib/jets/router/helpers/core_helper.rb +0 -27
  578. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  579. data/lib/jets/router/helpers.rb +0 -4
  580. data/lib/jets/router/method_creator/code.rb +0 -99
  581. data/lib/jets/router/method_creator/edit.rb +0 -12
  582. data/lib/jets/router/method_creator/generic.rb +0 -11
  583. data/lib/jets/router/method_creator/index.rb +0 -48
  584. data/lib/jets/router/method_creator/new.rb +0 -12
  585. data/lib/jets/router/method_creator/root.rb +0 -15
  586. data/lib/jets/router/method_creator/show.rb +0 -12
  587. data/lib/jets/router/method_creator.rb +0 -50
  588. data/lib/jets/turbo/database_yaml.rb +0 -41
  589. data/lib/jets/turbo/project/.gitignore +0 -12
  590. data/lib/jets/turbo/project/.jetskeep +0 -1
  591. data/lib/jets/turbo/project/Gemfile +0 -16
  592. data/lib/jets/turbo/project/Rakefile +0 -2
  593. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  594. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  595. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  596. data/lib/jets/turbo/project/config/application.rb +0 -5
  597. data/lib/jets/turbo/project/config/routes.rb +0 -4
  598. data/lib/jets/turbo/project/config.ru +0 -5
  599. data/lib/jets/turbo/rails.rb +0 -127
  600. data/lib/jets/turbo/templates/config/database.yml +0 -30
  601. data/lib/jets/turbo.rb +0 -56
  602. data/readme/prerelease.md +0 -6
  603. data/readme/testing.md +0 -60
  604. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  605. /data/lib/jets/{commands → command}/help/build.md +0 -0
  606. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  607. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  608. /data/lib/jets/{commands → command}/help/console.md +0 -0
  609. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  610. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  611. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  612. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  613. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  614. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  615. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  616. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  617. /data/lib/jets/{commands → command}/help/server.md +0 -0
  618. /data/lib/jets/{commands → command}/help/status.md +0 -0
  619. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  620. /data/lib/jets/{commands → command}/help/url.md +0 -0
  621. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  622. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  623. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  624. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  625. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  626. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  627. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  628. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  629. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  630. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  633. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  634. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  635. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  636. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  637. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  638. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  639. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  640. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  641. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -0,0 +1,197 @@
1
+ require 'active_support/core_ext/module/remove_method'
2
+
3
+ module Jets::Router::Helpers::NamedRoutes
4
+ module Generated
5
+ def create_helper_module(route_set)
6
+ module_name = helper_module_name(route_set)
7
+ module_name.constantize rescue create_helper_module!(module_name, route_set)
8
+ end
9
+
10
+ def helper_module_name(route_set)
11
+ engine_class = route_set.engine.class
12
+ name = engine_class == Jets.app_class ? "main_app" : engine_class.engine_name
13
+ name = name.gsub('::','')
14
+ name = "#{name.camelize}Helpers" # MainAppHelpers or BlorghHelpers
15
+ "Jets::Router::Helpers::NamedRoutes::Generated::#{name}"
16
+ end
17
+
18
+ def create_helper_module!(module_name, route_set)
19
+ mod = Module.new do
20
+ extend ActiveSupport::Concern # Needed for _url_for_modules to work since or UrlHelper ClassMethods not included
21
+ mattr_accessor :path_helpers, default: Set.new
22
+ mattr_accessor :url_helpers, default: Set.new
23
+
24
+ include AddFullUrl
25
+
26
+ # For compatibility with Rails url_helpers
27
+ include ActionDispatch::Routing::UrlFor
28
+ define_singleton_method(:_routes) { route_set } # needed for controller class context
29
+ define_method(:_routes) { route_set } # needed for view context
30
+ # Jets convenience method
31
+ define_singleton_method(:route_set) { route_set }
32
+
33
+ define_singleton_method(:_url_for_modules) { ActionView::RoutingUrlFor }
34
+ define_method(:_url_for_modules) { ActionView::RoutingUrlFor }
35
+
36
+ # Mimic Rails behavior
37
+ # Precdence:
38
+ # 1. config.action_mailer.default_url_options
39
+ # 2. Jets.application.default_url_options
40
+ def default_url_options
41
+ self.class.default_url_options.empty? ? Jets.application.default_url_options : self.class.default_url_options
42
+ end
43
+
44
+ def add_methods!
45
+ route_set.routes.each do |route|
46
+ next unless route.as
47
+ next if route.engine?
48
+
49
+ name = route.as
50
+ path_name = "#{name}_path"
51
+ url_name = "#{name}_url"
52
+ engine_class = route_set.engine.class
53
+
54
+ # Normally, self is <PostsController> or View context instance
55
+ define_method(path_name) do |*args|
56
+ NamedRouteMethod.new(route, args, self, engine_class).path
57
+ end
58
+ self.path_helpers.add(path_name)
59
+
60
+ define_method(url_name) do |*args|
61
+ path = send(path_name, *args)
62
+ options = args.extract_options!
63
+ add_full_url(options.merge(path: path))
64
+ end
65
+ self.url_helpers.add(url_name)
66
+ end
67
+ end
68
+
69
+ def remove_methods!
70
+ remove = Proc.new { |method| remove_method(method) }
71
+ path_helpers.each(&:remove)
72
+ url_helpers.each(&:remove)
73
+ self.path_helpers.clear
74
+ self.url_helpers.clear
75
+ end
76
+
77
+ # Wonder if extend self is may idea since it can allow context to be module itself
78
+ # instead of the controller or view instance. However, it allows
79
+ # Jets.application.routes.url_helpers.posts_path style calls in jets console
80
+ extend self
81
+
82
+ add_methods!
83
+ end
84
+
85
+ # Name it instead of using anonymous module to help debugging
86
+ # IE: Jets::Router::Helpers::NamedRoutes::Generated::MainAppHelpers
87
+ basename = module_name.split('::').last.to_sym
88
+ Jets::Router::Helpers::NamedRoutes::Generated.const_set(basename, mod)
89
+
90
+ define_mounted_helper(mod, route_set)
91
+
92
+ mod
93
+ end
94
+
95
+ def define_mounted_helper(mod, route_set)
96
+ name = mod.name.split('::').last.sub('Helpers','').underscore.to_sym
97
+ return if MountedHelpers.method_defined?(name)
98
+
99
+ helpers_module = route_set.url_helpers
100
+
101
+ MountedHelpers.class_eval do
102
+ define_method "_#{name}" do
103
+ Jets::Router::Helpers::NamedRoutes::Proxy.new(self, helpers_module)
104
+ end
105
+ end
106
+
107
+ MountedHelpers.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
108
+ def #{name}
109
+ @_#{name} ||= _#{name}
110
+ end
111
+ RUBY
112
+ end
113
+
114
+ module MountedHelpers
115
+ extend ActiveSupport::Concern
116
+ end
117
+
118
+ # Contains all the mounted helpers across different
119
+ # engines and the `main_app` helper for the application.
120
+ # You can include this in your classes if you want to
121
+ # access routes for other engines.
122
+ def mounted_helpers
123
+ MountedHelpers
124
+ end
125
+
126
+ extend self
127
+ end
128
+
129
+ class NamedRouteMethod
130
+ include Jets::Controller::Decorate::ApigwStage
131
+
132
+ attr_reader :options
133
+ def initialize(route, args, context, engine_class)
134
+ @route, @args, @context, @engine_class = route, args, context, engine_class
135
+ @path = route.path # With placeholders still IE: /posts/:id
136
+ @options = normalize_options(@path, args)
137
+ end
138
+
139
+ # Normalized with format in options
140
+ # Helps to mimic Rails behavior.
141
+ # Processes extra arguments to support format and query string.
142
+ #
143
+ # post_path(post, "json", {foo: 'bar'}) => "/posts/1.json?foo=bar"
144
+ # post_path(post, {foo: 'bar'}) => "/posts/1?foo=bar"
145
+ #
146
+ def normalize_options(path, args)
147
+ args = args.dup
148
+ options = args.extract_options!
149
+ # If there is still an argument in rest, it's the format. Rails behavior.
150
+ rest = args[placeholders.size..-1]
151
+ format = rest.last
152
+ options[:format] = format if format
153
+ options
154
+ end
155
+
156
+ def path
157
+ query_string = @options.dup # make copy to modify
158
+ format = query_string.delete(:format)
159
+ query_string.delete(:action)
160
+ query_string.delete(:controller)
161
+ query_string.delete(:only_path)
162
+
163
+ path = path_with_replaced_placeholders
164
+ path = prepend_engine_mounted_at(path)
165
+ path = "#{path}.#{format}" if format
166
+ path = "#{path}?#{query_string.to_query}" unless query_string.empty?
167
+ path = add_apigw_stage(path)
168
+ path
169
+ end
170
+
171
+ # Needed for add_apigw_stage
172
+ delegate :event, :request, to: :@context
173
+
174
+ # IE: /posts/1
175
+ def path_with_replaced_placeholders
176
+ path = @path
177
+ placeholders.each_with_index do |placeholder, index|
178
+ path = path.gsub(placeholder, @args[index].to_param)
179
+ end
180
+ path
181
+ end
182
+
183
+ def placeholders
184
+ @path.scan(/:\w+/)
185
+ end
186
+
187
+ def prepend_engine_mounted_at(path)
188
+ mount = Jets::Router::EngineMount.find_by(engine: @engine_class)
189
+ if mount
190
+ path = path.delete_prefix('/')
191
+ [mount.at, path].compact.join('/')
192
+ else
193
+ path
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,66 @@
1
+ module Jets::Router::Helpers::NamedRoutes
2
+ class Proxy
3
+ include AddFullUrl
4
+
5
+ def initialize(view_context, helpers_module)
6
+ @helpers = helpers_class(helpers_module).new(view_context)
7
+ end
8
+
9
+ # * The helpers_module is passed as a argument to give the anonymous class
10
+ # access via closure at include time.
11
+ # * view_context is passed at initialize to provide access at instantiation time.
12
+ def helpers_class(helpers_module)
13
+ Class.new do
14
+ include helpers_module # IE: Generated::MainAppHelpers
15
+ def initialize(view_context)
16
+ @view_context = view_context
17
+ end
18
+
19
+ # Important:
20
+ #
21
+ # * The add_full_url method needs url_options.
22
+ # Without url_options the proxy methods are unavailable and creates
23
+ # an infinite loop with method_missing.
24
+ # * request is needed for add_apigw_stage? to check request correctly
25
+ # Otherwise, gems like kingsman, that use the named routes proxy methods,
26
+ # won't get able to get the correct url with the stage name prepended.
27
+ #
28
+ # The request is the main reason an anonymous class is used since the
29
+ # view_context has included modules like ApigwStage that assume a
30
+ # request method is available.
31
+ delegate :url_options, :request, :event, to: :@view_context
32
+ end
33
+ end
34
+
35
+ # No need to check respond_to? and call raise NoMethodError again because anonymous
36
+ # class will already return a undefined method error.
37
+ #
38
+ # It's annoying that we need to add_full_url here because
39
+ # the proxy calls the url methods with a module view_context instead
40
+ # of the controller or view_context instance. So we don't have access to
41
+ # the request and url_options. The url_options are only available in the controller
42
+ # or view_context instance.
43
+ #
44
+ # So we call the path method instead and then add_full_url here.
45
+ # Not calling the url method directly because could add the full url twice,
46
+ # when the user is setting the default_url_options.
47
+ # Also calling the url method would cause an error because request and url_options
48
+ # is not available.
49
+ #
50
+ # The logic is a bit convoluted but it works. Rails does something similar
51
+ # with their RoutesProxy class and view_context.url_options.
52
+ def method_missing(method_name, *args)
53
+ path_name = method_name.to_s.sub(/_url$/, '_path').to_sym
54
+ path = @helpers.send(path_name, *args)
55
+ if method_name.to_s.end_with?('_url')
56
+ options = args.extract_options!
57
+ options.merge!(path: path)
58
+ options = url_options.merge(options)
59
+ add_full_url(options)
60
+ else
61
+ path
62
+ end
63
+ end
64
+ end
65
+ end
66
+
@@ -1,19 +1,105 @@
1
- class Jets::Router
1
+ module Jets::Router
2
2
  class Matcher
3
- def initialize(path, method)
4
- @path = path.sub(/^\//,'')
5
- @method = method.to_s.upcase
3
+ extend Memoist
4
+
5
+ attr_reader :routes
6
+ def initialize(route_set=Jets.application.routes)
7
+ @route_set = route_set
8
+ @routes = route_set.ordered_routes
9
+ end
10
+
11
+ def request_path
12
+ # Ensure leading slash
13
+ # Be more forgiving and allow the request_path to be passed in without a leading slash.
14
+ # Note: request PATH_INFO will always have a leading slash, but just in case.
15
+ # This is also covered in specs.
16
+ return unless @request_path
17
+ @request_path.starts_with?('/') ? @request_path : "/#{@request_path}"
18
+ end
19
+
20
+ def request_method
21
+ @request_method.to_s.upcase if @request_method
22
+ end
23
+
24
+ # Precedence:
25
+ # 1. Routes with no captures get highest precedence: posts/new
26
+ # 2. Then we consider the routes with captures: post/:id
27
+ #
28
+ # Within these 2 groups we consider the routes with the longest path first
29
+ # since posts/:id and posts/:id/edit can both match.
30
+ def find_by_request(request, request_method=nil)
31
+ @request = request # @request is used to check constraints
32
+ # Checking the request_method_from_hidden_method_field so that handler can find the right route
33
+ # super early in the process. Otherwise lambda routes to the wrong controller action.
34
+ @request_method = request_method || @request.request_method_from_hidden_method_field || @request.request_method.to_s.upcase
35
+ @request_path = strip_format(@request.path)
36
+ route = find_route
37
+ match_constraints(route) if route
38
+ end
39
+
40
+ # Simpler version of find_by_request that does not check constraints.
41
+ # Used by Jets::Controller::Middleware::Mimic and called super-early on.
42
+ # Does not have access to @request object and path_params
43
+ def find_by_env(env)
44
+ @env = env
45
+ @request_method = env["REQUEST_METHOD"] || "GET"
46
+ @request_path = strip_format(env["PATH_INFO"])
47
+ find_route
48
+ end
49
+
50
+ def find_by_controller_action(controller, action)
51
+ controller = "#{controller.camelize}Controller"
52
+ routes.find do |r|
53
+ r.controller_name == controller.to_s &&
54
+ r.action_name == action.to_s
55
+ end
56
+ end
57
+
58
+ def find_route
59
+ routes.each do |r|
60
+ if r.engine
61
+ route = find_engine_route(r)
62
+ return route if route
63
+ else
64
+ found = match?(r)
65
+ return r if found
66
+ end
67
+ end
68
+ nil
69
+ end
70
+
71
+ def find_engine_route(route)
72
+ return unless mount
73
+
74
+ engine_matcher = self.class.new(route.engine.route_set)
75
+ engine_route = if @request
76
+ engine_matcher.find_by_request(@request, @request_method)
77
+ else
78
+ engine_matcher.find_by_env(@env)
79
+ end
80
+ # save original engine for route.extract_parameters later
81
+ engine_route.original_engine = route.engine if engine_route
82
+ engine_route
83
+ end
84
+
85
+ def mount
86
+ EngineMount.find_by(request_path: request_path)
87
+ end
88
+ memoize :mount
89
+
90
+ def strip_format(path)
91
+ path.sub(/\..+$/, '') # Remove format from the end of the path
6
92
  end
7
93
 
8
94
  def match?(route)
9
- # Immediately stop checking when the request method: GET, POST, ANY, etc
95
+ # Immediately stop checking when the request http_method: GET, POST, ANY, etc
10
96
  # doesnt match.
97
+ return false if request_method != route.http_method && route.http_method != "ANY"
11
98
 
12
- return false if method != route.method && route.method != "ANY"
99
+ route_path = strip_format(route.path)
100
+ route_path = "#{mount.at}#{route_path}" if mount
13
101
 
14
- route_path = route.path
15
-
16
- if path == route_path
102
+ if request_path == route_path
17
103
  # regular string match detection
18
104
  return true # exact route matches are highest precedence
19
105
  end
@@ -21,18 +107,54 @@ class Jets::Router
21
107
  # Check path for route capture and wildcard matches:
22
108
  # A colon (:) means the variable has a variable
23
109
  if route_path.include?(':') # 2nd highest precedence
24
- capture_detection(route_path, path) # early return true or false
110
+ capture_detection(route_path, request_path) # early return true or false
25
111
  # A star (*) means the variable has a glob
26
112
  elsif route_path.include?('*') # lowest precedence
27
- proxy_detection(route_path, path) # early return true or false
113
+ proxy_detection(route_path, request_path) # early return true or false
28
114
  else
29
115
  false # reach here, means no route matched
30
116
  end
31
117
  end
32
118
 
33
- private
119
+ def match_constraints(route)
120
+ return unless route
121
+ constraints_matches?(route) ? route : nil
122
+ end
123
+
124
+ # Matcher called in mimic.rb before mimic event is available
125
+ # We need to extract the parameters from the possible matching route directly
126
+ # since event is unavailable.
127
+ def constraints_matches?(route)
128
+ # Matcher is used super-early when request not yet available.
129
+ # Cannot check constraints because we dont have the request object.
130
+ # To build a request object, would need to build a mimic event and it's not yet available.
131
+ return true if @request.nil?
132
+
133
+ constraints = route.constraints
134
+ return true if constraints.blank?
135
+
136
+ if constraints.is_a?(Hash)
137
+ parameters = route.extract_parameters(request_path) # extract directly
138
+ constraints.any? do |key, value|
139
+ key = key.to_s
140
+ if value.is_a?(Regexp)
141
+ value.match(parameters[key])
142
+ else # String
143
+ if parameters[key]
144
+ value == parameters[key]
145
+ elsif @request.respond_to?(key)
146
+ value == @request.send(key)
147
+ end
148
+ end
149
+ end
150
+ elsif constraints.respond_to?(:call)
151
+ constraints.call(@request)
152
+ elsif constraints.respond_to?(:matches?)
153
+ constraints.matches?(@request)
154
+ end
155
+ end
34
156
 
35
- attr_reader :path, :method
157
+ private
36
158
 
37
159
  # catchall/globbing/wildcard/proxy routes. Examples:
38
160
  #
@@ -40,7 +162,7 @@ class Jets::Router
40
162
  # get "others/*rest", to: "others#show"
41
163
  # get "*catchall", to: "public_files#show" # last catchall route for Jets
42
164
  #
43
- def proxy_detection(route_path, actual_path)
165
+ def proxy_detection(route_path, request_path)
44
166
  # drop the proxy_segment
45
167
  leading_path = route_path.split('/')[0..-2].join('/')
46
168
 
@@ -61,10 +183,11 @@ class Jets::Router
61
183
 
62
184
  pattern = "^#{leading_path}"
63
185
  regexp = Regexp.new(pattern)
64
- !!regexp.match(actual_path) # could be true or false
186
+
187
+ !!regexp.match(request_path) # could be true or false
65
188
  end
66
189
 
67
- def capture_detection(route_path, actual_path)
190
+ def capture_detection(route_path, request_path)
68
191
  # changes path to a string used for a regexp
69
192
  # posts/:id/edit => posts\/(.*)\/edit
70
193
  regexp_string = route_path.split('/').map do |s|
@@ -75,7 +198,7 @@ class Jets::Router
75
198
 
76
199
  regexp = Regexp.new(regexp_string)
77
200
 
78
- !!regexp.match(actual_path) # could be true or false
201
+ !!regexp.match(request_path) # could be true or false
79
202
  end
80
203
  end
81
204
  end
@@ -1,12 +1,14 @@
1
1
  module Jets::Router::Resources
2
2
  class Options < Base
3
3
  def build(action)
4
- controller = @options[:singular_resource] ? @name.to_s.pluralize : @name
5
- options = @options.merge(to: "#{controller}##{action}") # important to create a copy of the options
6
- # remove special options from getting to create_route. For some reason .slice! doesnt work
4
+ # Important to create a copy of the options since we are mutating it
5
+ # The original options are used for resources and resource scope
6
+ options = @options.dup
7
+ # Remove special options from getting to create_route. For some reason .slice! doesnt work
7
8
  options.delete(:only)
8
9
  options.delete(:except)
9
- options[:from_scope] = true # flag to drop the prefix later in Route#compute_path
10
+ controller = options[:singular_resource] ? @name.to_s.pluralize : @name
11
+ options[:to] = "#{controller}##{action}"
10
12
  options
11
13
  end
12
14
  end
@@ -0,0 +1,64 @@
1
+ class Jets::Router::Route
2
+ module AfterInitialize
3
+ def after_initialize
4
+ normalize_to_option!
5
+ normalize_path_option!
6
+ normalize_id_constraint!
7
+ check_on_option!
8
+ end
9
+
10
+ # Possibly infer to option from the path. Example:
11
+ #
12
+ # get 'posts/index'
13
+ # get 'posts', to: 'posts#index'
14
+ #
15
+ # get 'posts/show'
16
+ # get 'posts', to: 'posts#show'
17
+ #
18
+ def normalize_to_option!
19
+ return if @options[:to]
20
+
21
+ path = @options[:path].to_s
22
+ return unless path.include?('/')
23
+
24
+ path = path.delete_prefix('/') # remove leading slash
25
+ items = path.split('/')
26
+ if items.size == 2
27
+ @options[:to] = items.join('#')
28
+ end
29
+ end
30
+
31
+ def normalize_path_option!
32
+ path = @options[:path]
33
+ resource_name = @scope.resource_name
34
+ if path.is_a?(Symbol) and resource_name # Treat as controller action
35
+ # Only supported with used within scope, resource, resources block
36
+ action = path # IE: get :list => action = :list
37
+ controller = @scope.virtual_controller
38
+ # infer and set to option if not set
39
+ @options[:to] ||= "#{controller}##{action}"
40
+ end
41
+
42
+ # override
43
+ @options.merge!(path: escape_path(path)) if path
44
+ end
45
+
46
+ def normalize_id_constraint!
47
+ if @options[:id] && !@options[:constraints]
48
+ @options[:constraints] = { id: @options[:id] }
49
+ end
50
+ end
51
+
52
+ def check_on_option!
53
+ if @options[:on] && !%w[resources resource].include?(@scope.from.to_s)
54
+ raise Jets::Router::Error.new("ERROR: The `on:` option can only be used within a resource or resources block")
55
+ end
56
+ end
57
+
58
+ def escape_path(path)
59
+ path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
60
+ path = "/#{path}" unless path.starts_with?('/')
61
+ path
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,93 @@
1
+ class Jets::Router::Route
2
+ module As
3
+ def as
4
+ return nil if @options[:as] == :disabled
5
+ return @options[:engine].engine_name if @options[:engine]
6
+ return unless @options[:root] || [:get, :post, :patch, :put, :delete].include?(@options[:http_method])
7
+
8
+ as = scoped_as
9
+ as = add_underscore_path(as)
10
+ as = add_action(as)
11
+ as = add_root(as)
12
+ as
13
+ end
14
+
15
+ def scoped_as
16
+ list = []
17
+ @scope.from_top.each do |scope|
18
+ node = Node.new(self, scope)
19
+
20
+ as = node.resolved_as
21
+ as = as.to_s.singularize if node.has_param?
22
+ list << as if as && node.append_as?
23
+ end
24
+ list.reject!(&:blank?) # IE: list [:posts, :comments]
25
+ list.unshift(@options[:as]) if @options[:as]
26
+ list.join('_').gsub('/','_') unless list.empty?
27
+ end
28
+
29
+ # IE: posts/:id/edit => posts
30
+ # Using this convention so that regular routes under namespace and path
31
+ # can be reassemble as if they were under resources
32
+ def add_underscore_path(as)
33
+ if as.nil? && @scope.needs_controller_path? # only consider leaf scope
34
+ @options[:as] || underscore_path_before_param
35
+ else
36
+ as
37
+ end
38
+ end
39
+
40
+ # IE: posts/:id/edit => posts
41
+ # Using this convention so that regular routes under namespace and path
42
+ # can be reassemble as if they were under resources
43
+ def underscore_path_before_param
44
+ action_suffixes = %w[new edit] # edit in case of singular resource
45
+ parts = []
46
+ path = @options[:path].to_s
47
+ return nil if path.include?('*') || !path.ascii_only? # IE: get '*catchall', to: 'public_files#show'
48
+
49
+ path = path.delete_prefix('/')
50
+ path.split('/').each do |part|
51
+ if part.starts_with?(':') || part.starts_with?('*') || action_suffixes.include?(part)
52
+ break
53
+ end
54
+ parts << part
55
+ end
56
+ parts.map! { |p| p.gsub(/[^a-zA-Z0-9]/,'_') }
57
+ path = parts.join('_').squeeze('_')
58
+ if action_suffixes.include?(@info.action)
59
+ path.singularize
60
+ else
61
+ path
62
+ end
63
+ end
64
+
65
+ def add_action(resource)
66
+ resource = resource.to_s
67
+ return resource if resource.blank?
68
+
69
+ as_name = @options[:as] || @info.action
70
+ as_name = as_name.to_s.delete_prefix('/') if as_name
71
+
72
+ if %w[new edit].include?(@info.action) && @options[:as].nil?
73
+ "#{as_name}_#{resource.singularize}" # IE: new_post
74
+ elsif %[index create].include?(@info.action)
75
+ resource # IE: posts
76
+ elsif %w[show edit update destroy].include?(as_name)
77
+ "#{resource.singularize}" # IE: post
78
+ elsif is_collection?(@scope) && @options[:as].nil?
79
+ "#{as_name}_#{resource}" # IE: list_post
80
+ elsif (is_member?(@scope) || @scope.from == :resource) && @options[:as].nil?
81
+ "#{as_name}_#{resource.singularize}" # IE: rate_post
82
+ elsif @scope.resource_name && @options[:as].nil?
83
+ "#{resource.singularize}_#{as_name}" # IE: post_list
84
+ else
85
+ resource # IE: post
86
+ end
87
+ end
88
+
89
+ def add_root(as)
90
+ @options[:root] ? 'root' : as
91
+ end
92
+ end
93
+ end
@@ -31,6 +31,7 @@ class Jets::Router::Route
31
31
  module ModuleMethods
32
32
  def logical_id(authorizer, prefix_class: true)
33
33
  klass, meth = authorizer.split("#")
34
+ klass += "_authorizer"
34
35
  words = [meth, "authorizer"]
35
36
  words.unshift(klass) if prefix_class
36
37
  words.join('_').camelize # logical_id