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,45 @@
1
+ class Jets::Router::Route
2
+ # Work in progress. Considering making Jets Route more compatiable with Rails Route.
3
+ # Then will be able to leverage Rails RouteWrapper for presenting the routes for /jets/info/routes.
4
+ # Ran into Route#path method that is a bit of work to make compatiable.
5
+ # Leaving this here for the future.
6
+ module Compat
7
+ extend Memoist
8
+
9
+ # Interface based on Rails ActionDispatch::Routing::Endpoint
10
+ class App # :nodoc:
11
+ def initialize(route)
12
+ @route = route
13
+ end
14
+
15
+ def dispatcher?; false; end
16
+ def redirect?; false; end
17
+ def matches?(req); true; end
18
+ def app; self; end
19
+ def rack_app; app; end
20
+
21
+ def engine?
22
+ @route.engine?
23
+ end
24
+ end
25
+
26
+ def app
27
+ App.new(self)
28
+ end
29
+ memoize :app
30
+
31
+ # Rails interface method for ActionDispatch::Routing::RouteWrapper
32
+ def name
33
+ as || ''
34
+ end
35
+
36
+ # Rails interface method for ActionDispatch::Routing::RouteWrapper
37
+ def verb
38
+ http_method
39
+ end
40
+
41
+ def internal
42
+ !!@options[:internal]
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,74 @@
1
+ class Jets::Router::Route
2
+ # Organize to.controller and to.action into a class
3
+ # so don't have to keep repeating the logic.
4
+ class Info
5
+ def initialize(options, scope)
6
+ @options, @scope = options, scope
7
+ end
8
+
9
+ # IE: posts
10
+ def controller
11
+ return if @options[:engine] # IE: { engine: Blorgh::Engine, path: "/blog" }
12
+
13
+ controller = if @options[:controller]
14
+ @options[:controller]
15
+ elsif @options[:to]
16
+ @options[:to].split('#').first # IE: posts#index => posts
17
+ elsif @scope.virtual_controller
18
+ @scope.virtual_controller
19
+ else # {"/jets/info/properties"=>"jets/info#properties"}
20
+ map = @options.find { |k,v| k.is_a?(String) }
21
+ path, to = map[0], map[1]
22
+ to.split('#').first
23
+ end
24
+
25
+ if controller.starts_with?('/')
26
+ # absolute controller path specified. use without scope adjustments
27
+ return controller.delete_prefix('/') # remove leading slash
28
+ end
29
+
30
+ # no controller found yet, imply from the scope
31
+ segments = scoped_module_segments
32
+ segments << controller if controller
33
+ segments.compact.join('/') # add module
34
+ end
35
+
36
+ # IE: index
37
+ def action
38
+ if @options.key?(:action)
39
+ @options[:action].to_s
40
+ elsif is_collection?(@scope) || is_member?(@scope)
41
+ @options[:path].to_s.delete_prefix('/') # action
42
+ elsif @options[:on] && @options[:on] != :member && @options[:on] != :collection
43
+ @options[:on].to_s
44
+ elsif @options[:to]
45
+ @options[:to].split('#').last
46
+ else # {"/"=>"jets/welcome#index", :internal=>true}
47
+ map = @options.find { |k,v| k.is_a?(String) }
48
+ path, to = map[0], map[1]
49
+ to.split('#').last
50
+ end
51
+ end
52
+
53
+ def scoped_module_segments
54
+ segments = []
55
+ @scope.from_top.each do |scope|
56
+ segments << scope.module if scope.module
57
+ if @scope == scope # last scope node
58
+ last_segment = @options[:module]
59
+ segments << last_segment if last_segment
60
+ end
61
+ end
62
+ segments
63
+ end
64
+
65
+ def is_collection?(scope)
66
+ scope.from == :collection || @options[:on] == :collection
67
+ end
68
+
69
+ def is_member?(scope)
70
+ scope.from == :member || @options[:on] == :member
71
+ end
72
+ end
73
+ end
74
+
@@ -0,0 +1,137 @@
1
+ class Jets::Router::Route
2
+ # The Node class groups logic that requires both of route and scope info.
3
+ # It does not really belong in either the Route or Scope class and
4
+ # requires both to do its job. So it gets its own class.
5
+ # This seems to help keep the Route and Scope classes simpler.
6
+ #
7
+ # An instance of this class is made available with each
8
+ # iteration of loop that processes the DSL scopes.
9
+ class Node
10
+ attr_reader :route, :scope, :leaf_scope
11
+ def initialize(route, scope)
12
+ @route, @scope = route, scope # scope is current scope of iteration
13
+ @info = route.info
14
+ @options = route.options
15
+ @leaf_scope = @route.scope # the route scope is the leaf scope
16
+ end
17
+
18
+ def append_path?
19
+ has_path? && add_path_segment?
20
+ end
21
+
22
+ def append_param?
23
+ has_param? && add_path_segment?
24
+ end
25
+
26
+ def append_as?
27
+ has_path? && add_path_segment? ||
28
+ scope.from.nil? && scope.as
29
+ end
30
+
31
+ # Accounts for shallow scope. Example:
32
+ #
33
+ # resources :posts, shallow: true do
34
+ # resources :comments do
35
+ # resources :likes
36
+ # end
37
+ # end
38
+ #
39
+ # add_path_segment? = add_path_segment_considering_shallow?
40
+ #
41
+ def add_path_segment?
42
+ if param_action? && shallow_param_action?
43
+ leaf? # only add path segments for leaf
44
+ elsif paramless_action? && shallow_paramless_action?
45
+ leaf? || leaf_scope.real_parent?(scope)
46
+ else
47
+ true # default is to always path preceding path segments
48
+ end
49
+ end
50
+
51
+ def shallow_param_action?
52
+ lookahead_shallow? || leaf_scope.any_parent_shallow?
53
+ end
54
+
55
+ def shallow_paramless_action?
56
+ lookahead_shallow?(parent: true) || scope.any_parent_shallow?
57
+ end
58
+
59
+ def lookahead_shallow?(parent: false)
60
+ next_scope = scope
61
+ while next_scope
62
+ check_scope = parent ? next_scope.parent : next_scope
63
+ # Important to check next_scope == leaf_scope
64
+ # Otherwise it'll collapse path segments for higher scopes also.
65
+ return true if check_scope.shallow? && next_scope == leaf_scope
66
+ next_scope = next_scope.next
67
+ end
68
+ false
69
+ end
70
+
71
+ def has_path?
72
+ scope.resolved_path && !scope.virtual?
73
+ end
74
+
75
+ def has_param?
76
+ return false if scope.root?
77
+
78
+ resolved_param && param_action? ||
79
+ scope.resource_descendent? && !leaf? ||
80
+ scope.resource_sibling? && !leaf?
81
+ end
82
+
83
+ def resolved_as
84
+ as = scope.as || scope.resource_name
85
+ # as = scope.as || scope.resource_name
86
+ if scope.resource_name
87
+ controller = nil # dont need controller. can infer from resources, namespace, etc
88
+ else # direct route method without scope or module only etc
89
+ controller = @info.controller.split('/').last if leaf? #&& as.nil?
90
+ end
91
+ [as, controller].compact.join('_')
92
+ end
93
+
94
+ def param_action?
95
+ @options[:on] == :member || scope.from == :member ||
96
+ %w[edit show update destroy].include?(@info.action)
97
+ end
98
+
99
+ def paramless_action?
100
+ @options[:on] == :collection || scope.from == :collection ||
101
+ %w[index new create].include?(@info.action)
102
+ end
103
+
104
+ def leaf?
105
+ scope == leaf_scope
106
+ end
107
+
108
+ def resolved_path
109
+ scope.resolved_path
110
+ end
111
+
112
+ def resolved_param
113
+ case scope.from
114
+ when :resources, :member
115
+ ":#{param}"
116
+ else # :resource, :namespace, :path, :collection
117
+ nil
118
+ end
119
+ end
120
+
121
+ # If a block has pass then we assume the resources will be nested and then prefix
122
+ # the param name with the resource. IE: post_id instead of id
123
+ # This avoids an API Gateway parent sibling variable collision.
124
+ def param
125
+ return scope.options[:param] if scope.options[:param]
126
+
127
+ if leaf? && Jets.config.routes.allow_sibling_conflicts
128
+ "id"
129
+ elsif scope.resource_descendent? ||
130
+ scope.resource_sibling? && scope.colliding_resource_sibling?
131
+ "#{scope.resource_name.to_s.singularize}_id"
132
+ else
133
+ "id"
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,93 @@
1
+ class Jets::Router::Route
2
+ module Path
3
+ # Note: The @options[:path] is missing prefix and is not support via direct create_route.
4
+ # This is because it can be added directly to the path. IE:
5
+ #
6
+ # get "myprefix/posts", to: "posts#index"
7
+ #
8
+ # Also, this helps to keep the method creator logic simpler.
9
+ #
10
+ def path(format=:jets)
11
+ segments = path_prefixes + [path_option]
12
+ segments = add_path_suffix(segments)
13
+ path = segments.reject(&:blank?).join('/')
14
+ format_path(format, path)
15
+ end
16
+
17
+ # When scope used directly. IE: not coming from namespace or resources
18
+ # When coming from namespace or resources, the path is already accounted for.
19
+ def path_prefixes
20
+ list = []
21
+ @scope.from_top.each do |scope|
22
+ node = Node.new(self, scope)
23
+ # Update @path_names as we walk down
24
+ @path_names.merge!(scope.options[:path_names] || {})
25
+
26
+ list << scope.resolved_path if node.append_path?
27
+ list << node.resolved_param if node.append_param?
28
+ end
29
+ list.reject!(&:blank?) # allows for path: '' to remove resource name from path
30
+ list
31
+ end
32
+
33
+ def path_option
34
+ node = Node.new(self, @scope)
35
+ path = @options[:path].to_s.delete_prefix('/') # IE: new or edit
36
+ path.sub!(@scope.param_placeholder, ":#{node.resolved_param}")
37
+ path
38
+ end
39
+
40
+ # Accounts for path names options map. Example:
41
+ #
42
+ # {path_names: {new: "sign_up", edit: "edit"}}
43
+ #
44
+ # new posts/new => posts/sign_up
45
+ # edit posts/:id/edit => posts/:id/edit
46
+ #
47
+ def add_path_suffix(all_segments)
48
+ # rip apart last path as segments
49
+ # work with and modify segments to be returned
50
+ segments = all_segments.last.to_s.split('/')
51
+ current_suffix = segments.last
52
+
53
+ new_or_edit = %w[new edit].include?(current_suffix)
54
+ additional_action = @options[:on].is_a?(Symbol) && @options[:on] != :member && @options[:on] != :collection
55
+ will_replace = new_or_edit || additional_action
56
+
57
+ if will_replace
58
+ segments_without_last = all_segments[0..-2]
59
+ # reassemble path with additional on action
60
+ segments_without_last << @options[:on].to_s if additional_action
61
+ # reassemble with new suffix from path_names map
62
+ new_suffix = @path_names[current_suffix.to_sym] || current_suffix
63
+ segments_without_last << new_suffix
64
+ new_last = segments_without_last.join('/')
65
+ segments[-1] = new_last # replace
66
+ segments
67
+ else
68
+ all_segments # original
69
+ end
70
+ end
71
+
72
+ def path_suffixes
73
+ list = []
74
+ list << action_suffix if action_suffix
75
+ list
76
+ end
77
+
78
+ # IE: standard: posts/:id/edit
79
+ # api_gateway: posts/{id}/edit
80
+ def format_path(format, path)
81
+ path = case format
82
+ when :api_gateway
83
+ api_gateway_format(path)
84
+ when :raw
85
+ path
86
+ else # jets format
87
+ ensure_jets_format(path)
88
+ end
89
+ path = "/#{path}" unless path.starts_with?('/') # ensure starts with / be forgiving if / accidentally not included
90
+ path
91
+ end
92
+ end
93
+ end
@@ -1,98 +1,58 @@
1
1
  # route = Jets::Router::Route.new(
2
2
  # path: "posts",
3
- # method: :get,
3
+ # http_method: :get,
4
4
  # to: "posts#index",
5
5
  # )
6
- class Jets::Router
6
+ module Jets::Router
7
7
  class Route
8
- include Util
8
+ extend Memoist
9
+ include Compat
10
+ include AfterInitialize
11
+ include As
9
12
  include Authorizer
13
+ include Path
14
+ include Util
10
15
 
11
16
  CAPTURE_REGEX = "([^/]*)" # as string
12
17
 
13
- attr_reader :to, :as
18
+ attr_reader :options, :scope, :info, :defaults
19
+ attr_accessor :original_engine
14
20
  def initialize(options, scope=Scope.new)
15
- @options, @scope = options, scope
16
- @path = compute_path
17
- @to = compute_to
18
- @as = compute_as
19
- end
20
-
21
- def compute_path
22
- # Note: The @options[:prefix] is missing prefix and is not support via direct create_route.
23
- # This is because it can be added directly to the path. IE:
24
- #
25
- # get "myprefix/posts", to: "posts#index"
26
- #
27
- # Also, this helps to keep the method creator logic more simple.
28
- #
29
- prefix = @scope.full_prefix
30
- prefix = account_scope(prefix)
31
- prefix = account_on(prefix)
32
-
33
- path = [prefix, @options[:path]].compact.join('/')
34
- path = path[1..-1] if path.starts_with?('/') # be more forgiving if / accidentally included
35
- path
36
- end
37
-
38
- def account_scope(prefix)
39
- return unless prefix
40
- return prefix unless @options[:from_scope]
41
-
42
- if @options[:singular_resource]
43
- prefix.split('/')[0..-2].join('/')
44
- else
45
- prefix.split('/')[0..-3].join('/')
46
- end
21
+ @options = options
22
+ @scope = scope
23
+ @info = Info.new(@options, @scope) # @info.action and @info.controller
24
+ after_initialize
25
+ @path_names = {}
47
26
  end
48
27
 
49
- def account_on(prefix)
50
- # Tricky @scope.from == :resources since the account_scope already has accounted for it
51
- if @options[:on] == :collection && @scope.from == :resources
52
- prefix = prefix.split('/')[0..-2].join('/')
53
- end
54
- prefix == '' ? nil : prefix
28
+ def to
29
+ engine || "#{@info.controller}##{@info.action}" # IE: posts#index
55
30
  end
56
31
 
57
- def compute_to
58
- controller, action = get_controller_action(@options)
59
- mod = @options[:module] || @scope.full_module
60
- controller = [mod, controller].compact.join('/') # add module
61
- "#{controller}##{action}"
32
+ def engine
33
+ @options[:engine]
62
34
  end
35
+ alias rack_app engine
63
36
 
64
- def compute_as
65
- return nil if @options[:as] == :disabled
66
- return unless @options[:method] == :get || @options[:root]
37
+ def engine?
38
+ !!engine
39
+ end
67
40
 
68
- controller, action = get_controller_action(@options)
69
- klass = if @options[:root]
70
- Jets::Router::MethodCreator::Root
71
- elsif %w[index edit show new].include?(action.to_s)
72
- class_name = "Jets::Router::MethodCreator::#{action.camelize}"
73
- class_name.constantize # Index, Show, Edit, New
74
- else
75
- Jets::Router::MethodCreator::Generic
76
- end
41
+ def endpoint
42
+ engine.to_s if engine
43
+ end
77
44
 
78
- klass.new(@options, @scope, controller).full_meth_name(nil)
45
+ def resolved_defaults
46
+ defaults = @options[:defaults] || {}
47
+ @scope.resolved_defaults.merge(defaults)
79
48
  end
80
49
 
81
- # IE: standard: posts/:id/edit
82
- # api_gateway: posts/{id}/edit
83
- def path(format=:jets)
84
- case format
85
- when :api_gateway
86
- api_gateway_format(@path)
87
- when :raw
88
- @path
89
- else # jets format
90
- ensure_jets_format(@path)
91
- end
50
+ def http_method
51
+ @options[:http_method].to_s.upcase
92
52
  end
93
53
 
94
- def method
95
- @options[:method].to_s.upcase
54
+ def constraints
55
+ @options[:constraints] || @scope.resolved_constraints
96
56
  end
97
57
 
98
58
  def internal?
@@ -100,17 +60,18 @@ class Jets::Router
100
60
  end
101
61
 
102
62
  def homepage?
103
- path == ''
63
+ path == '/'
104
64
  end
105
65
 
106
66
  # IE: PostsController
107
- def controller_name
108
- to.sub(/#.*/,'').camelize + "Controller"
109
- end
110
-
111
67
  # IE: index
112
- def action_name
113
- to.sub(/.*#/,'')
68
+ delegate :action, :controller, :is_collection?, :is_member?, to: :@info
69
+ alias action_name action
70
+
71
+ # IE: PostsController
72
+ # Different from @info.action
73
+ def controller_name
74
+ "#{controller.camelize}Controller" if controller
114
75
  end
115
76
 
116
77
  # Checks to see if the corresponding controller exists. Useful to validate routes
@@ -118,32 +79,55 @@ class Jets::Router
118
79
  def valid?
119
80
  controller_class = begin
120
81
  controller_name.constantize
121
- rescue NameError
82
+ rescue NameError => e
122
83
  return false
123
84
  end
124
85
  controller_class.lambda_functions.include?(action_name.to_sym)
125
86
  end
126
87
 
88
+ # For Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
89
+ # Need to build the pathParameters for the API Gateway event.
90
+ def rebuild_path_parameters(event)
91
+ extracted = extract_parameters(event["path"])
92
+ if extracted
93
+ params = event["pathParameters"] || {}
94
+ params.merge(extracted)
95
+ else
96
+ event["pathParameters"] # pass through
97
+ end
98
+ end
99
+
127
100
  # Extracts the path parameters from the actual path
128
101
  # Only supports extracting 1 parameter. So:
129
102
  #
130
- # actual_path: posts/tung/edit
103
+ # request_path: posts/tung/edit
131
104
  # route.path: posts/:id/edit
132
105
  #
133
106
  # Returns:
134
107
  # { id: "tung" }
135
- def extract_parameters(actual_path)
108
+ def extract_parameters(request_path)
109
+ request_path = "/#{request_path}" unless request_path.starts_with?('/') # be more forgiving if / accidentally not included
110
+ request_path = remove_engine_mount_at_path(request_path)
136
111
  if path.include?(':')
137
- extract_parameters_capture(actual_path)
112
+ extract_parameters_capture(request_path)
138
113
  elsif path.include?('*')
139
- extract_parameters_proxy(actual_path)
114
+ extract_parameters_proxy(request_path)
140
115
  else
141
116
  # Lambda AWS_PROXY sets null to the input request when there are no path parmeters
142
117
  nil
143
118
  end
144
119
  end
145
120
 
146
- def extract_parameters_proxy(actual_path)
121
+ def remove_engine_mount_at_path(request_path)
122
+ return request_path unless original_engine
123
+
124
+ mount = Jets::Router::EngineMount.find_by(engine: original_engine)
125
+ return request_path unless mount
126
+
127
+ request_path.sub(mount.at, '')
128
+ end
129
+
130
+ def extract_parameters_proxy(request_path)
147
131
  # changes path to a string used for a regexp
148
132
  # others/*proxy => others\/(.*)
149
133
  # nested/others/*proxy => nested/others\/(.*)
@@ -152,9 +136,9 @@ class Jets::Router
152
136
  # leading_path: nested/others
153
137
  # capture everything after the leading_path as the value
154
138
  regexp = Regexp.new("#{leading_path}/(.*)")
155
- value = actual_path.match(regexp)[1]
139
+ value = request_path.match(regexp)[1]
156
140
  else
157
- value = actual_path
141
+ value = request_path
158
142
  end
159
143
 
160
144
  # the last segment without the '*' is the key
@@ -165,7 +149,7 @@ class Jets::Router
165
149
  { key => value }
166
150
  end
167
151
 
168
- def extract_parameters_capture(actual_path)
152
+ def extract_parameters_capture(request_path)
169
153
  # changes path to a string used for a regexp
170
154
  # posts/:id/edit => posts\/(.*)\/edit
171
155
  labels = []
@@ -181,16 +165,51 @@ class Jets::Router
181
165
  regexp_string = "^#{regexp_string}$"
182
166
  regexp = Regexp.new(regexp_string)
183
167
 
184
- values = regexp.match(actual_path).captures
168
+ values = regexp.match(request_path).captures
185
169
  labels.map do |next_label|
186
170
  [next_label, values.delete_at(0)]
187
171
  end.to_h
188
172
  end
189
173
 
174
+ # Prevents infinite loop when calling route.to_json for state.save("routes", ...)
175
+ def as_json(options= nil)
176
+ data = {
177
+ path: path,
178
+ http_method: http_method,
179
+ to: to,
180
+ }
181
+ data[:engine] = engine if engine
182
+ data[:internal] = internal if internal
183
+ data
184
+ end
185
+
186
+ # To keep "self #{self}" more concise and helpful
187
+ # Use "self #{self.inspect}" more verbose info
188
+ def to_s
189
+ "#<Jets::Router::Route:#{object_id} @options=#{@options}>"
190
+ end
191
+
192
+ # Old notes:
193
+ # For Grape apps, calling ActiveSupport to_json on a Grape class used to cause an infinite loop.
194
+ # Believe Grape fixed this issue. A GrapeApp.to_json now produces a string.
195
+ # No longer need to coerce to a string and back to a class.
196
+ #
197
+ # This is important because Sprocket::Environment.new cannot be coerced into a string or mounting wont work.
198
+ # This is used in sprockets-jets/lib/sprockets/jets/engine.rb
199
+ #
200
+ # Related PR: smarter apigw routes paging calculation #635
201
+ # https://github.com/boltops-tools/jets/pull/635
202
+ # Debugging notes: https://gist.github.com/tongueroo/c9baa7e98d5ad68bbdd770fde4651963
190
203
  def mount_class
191
204
  @options[:mount_class]
192
205
  end
193
206
 
207
+ # For jets routes help table of routes
208
+ def mount_class_name
209
+ return unless mount_class
210
+ mount_class.class == Class ? mount_class : "#{mount_class.class}.new"
211
+ end
212
+
194
213
  private
195
214
  def ensure_jets_format(path)
196
215
  path.split('/').map do |s|