jets 4.0.17 → 5.0.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -1
  3. data/CHANGELOG.md +52 -23
  4. data/Gemfile +1 -5
  5. data/LICENSE.txt +1 -1
  6. data/Rakefile +3 -3
  7. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  8. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  9. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  10. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  11. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  12. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  13. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  14. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  15. data/{lib/jets → engines}/internal/app/functions/jets/base_path.rb +2 -1
  16. data/{lib/jets → engines}/internal/app/functions/jets/base_path_mapping.rb +26 -6
  17. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  18. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  19. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  20. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  21. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  22. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  23. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  24. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  25. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  26. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  27. data/engines/internal/lib/internal/actionview.rb +152 -0
  28. data/engines/internal/lib/internal/activerecord.rb +37 -0
  29. data/engines/internal/lib/internal/activesupport.rb +47 -0
  30. data/engines/internal/lib/internal/engine.rb +13 -0
  31. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  32. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  33. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  34. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  35. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  36. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  37. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  38. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  39. data/exe/jets +1 -10
  40. data/jets.gemspec +29 -27
  41. data/lib/jets/app_loader.rb +77 -0
  42. data/lib/jets/application/bootstrap.rb +100 -0
  43. data/lib/jets/application/configuration/defaults.rb +256 -0
  44. data/lib/jets/application/configuration.rb +494 -0
  45. data/lib/jets/application/default_middleware_stack.rb +140 -0
  46. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  47. data/lib/jets/application/finisher.rb +266 -0
  48. data/lib/jets/application/routes_reloader.rb +80 -0
  49. data/lib/jets/application.rb +515 -198
  50. data/lib/jets/authorizer/base.rb +1 -0
  51. data/lib/jets/authorizer/dsl.rb +15 -11
  52. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  53. data/lib/jets/autoloaders/gem.rb +70 -0
  54. data/lib/jets/autoloaders/inflector.rb +21 -0
  55. data/lib/jets/autoloaders.rb +38 -101
  56. data/lib/jets/aws_services/stack_status.rb +1 -1
  57. data/lib/jets/backtrace_cleaner.rb +27 -0
  58. data/lib/jets/booter.rb +29 -176
  59. data/lib/jets/builders/code_builder.rb +45 -117
  60. data/lib/jets/builders/code_size.rb +1 -0
  61. data/lib/jets/builders/gem_replacer.rb +5 -6
  62. data/lib/jets/builders/handler_generator.rb +34 -14
  63. data/lib/jets/builders/lambda_layer.rb +2 -7
  64. data/lib/jets/builders/purger.rb +1 -1
  65. data/lib/jets/builders/rack_packager.rb +1 -1
  66. data/lib/jets/builders/ruby_packager.rb +32 -21
  67. data/lib/jets/builders/shim_vars/app.rb +10 -6
  68. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  69. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  70. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  71. data/lib/jets/bundle.rb +2 -9
  72. data/lib/jets/cfn/base.rb +82 -0
  73. data/lib/jets/cfn/builder/api/base.rb +12 -0
  74. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +10 -20
  75. data/lib/jets/cfn/{builders/api_gateway_builder.rb → builder/api/gateway.rb} +14 -37
  76. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  77. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  78. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  79. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  80. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  81. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  82. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  83. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  84. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  85. data/lib/jets/cfn/builder/controller.rb +28 -0
  86. data/lib/jets/cfn/builder/function.rb +9 -0
  87. data/lib/jets/cfn/{builders → builder}/interface.rb +45 -51
  88. data/lib/jets/cfn/builder/job.rb +10 -0
  89. data/lib/jets/cfn/builder/nested.rb +130 -0
  90. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  91. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  92. data/lib/jets/cfn/{builders/parent_builder.rb → builder/parent.rb} +54 -54
  93. data/lib/jets/cfn/builder/post_process.rb +25 -0
  94. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  95. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +4 -3
  96. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  97. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  98. data/lib/jets/cfn/deployment.rb +45 -0
  99. data/lib/jets/cfn/download.rb +39 -0
  100. data/lib/jets/cfn/params/api/base.rb +39 -0
  101. data/lib/jets/cfn/params/api/cors.rb +10 -0
  102. data/lib/jets/cfn/params/api/methods.rb +69 -0
  103. data/lib/jets/cfn/params/api/resources.rb +28 -0
  104. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  105. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  106. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  107. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  108. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  109. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  111. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  112. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  113. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  114. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +1 -1
  117. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +1 -1
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +4 -3
  119. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +2 -2
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +5 -5
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  123. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +21 -0
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +12 -12
  128. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  129. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  130. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  131. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  132. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  133. data/lib/jets/{resource → cfn/resource}/iam/base_role_definition.rb +15 -15
  134. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  135. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  136. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  137. data/lib/jets/{resource → cfn/resource}/iam/policy.rb +8 -8
  138. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  139. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  140. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  141. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  142. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +4 -5
  143. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  144. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  145. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  146. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  147. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  148. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  149. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  150. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  151. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  152. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  153. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  154. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  155. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  156. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  157. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  158. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  159. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  160. data/lib/jets/cfn/resource/one/function.rb +66 -0
  161. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  162. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  163. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  164. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  165. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  166. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  167. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  168. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  169. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  170. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  171. data/lib/jets/cfn/resource.rb +8 -0
  172. data/lib/jets/cfn/ship.rb +20 -19
  173. data/lib/jets/cfn/template.rb +89 -0
  174. data/lib/jets/cfn/upload.rb +40 -37
  175. data/lib/jets/cli.rb +28 -210
  176. data/lib/jets/command/actions.rb +49 -0
  177. data/lib/jets/command/api_helpers.rb +41 -0
  178. data/lib/jets/command/aws_helpers.rb +26 -0
  179. data/lib/jets/command/base.rb +204 -0
  180. data/lib/jets/command/behavior.rb +83 -0
  181. data/lib/jets/command/environment_argument.rb +42 -0
  182. data/lib/jets/command/help/call.md +48 -0
  183. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  184. data/lib/jets/command/help/logs.md +21 -0
  185. data/lib/jets/{commands → command}/help/new.md +3 -4
  186. data/lib/jets/command/help/projects.md +6 -0
  187. data/lib/jets/command/help/releases.md +37 -0
  188. data/lib/jets/command/help/rollback.md +5 -0
  189. data/lib/jets/command/help/routes.md +15 -0
  190. data/lib/jets/command/help/stacks.md +6 -0
  191. data/lib/jets/command/help.rb +17 -0
  192. data/lib/jets/command/helpers/editor.rb +35 -0
  193. data/lib/jets/command.rb +133 -0
  194. data/lib/jets/commands/application/application_command.rb +40 -0
  195. data/lib/jets/commands/build/build_command.rb +33 -0
  196. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  197. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  198. data/lib/jets/commands/call/base_guesser.rb +4 -4
  199. data/lib/jets/commands/call/call_command.rb +27 -0
  200. data/lib/jets/commands/call/caller.rb +184 -0
  201. data/lib/jets/commands/call/guesser.rb +1 -1
  202. data/lib/jets/commands/clean/base.rb +1 -1
  203. data/lib/jets/commands/clean/build.rb +1 -1
  204. data/lib/jets/commands/clean/clean_command.rb +15 -0
  205. data/lib/jets/commands/clean/log.rb +1 -1
  206. data/lib/jets/commands/configure/configure_command.rb +9 -0
  207. data/lib/jets/commands/console/console_command.rb +38 -0
  208. data/lib/jets/commands/credentials/USAGE +103 -0
  209. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  210. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  211. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  212. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  213. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  214. data/lib/jets/commands/delete/delete_command.rb +155 -0
  215. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +28 -47
  216. data/lib/jets/commands/dev/dev_command.rb +19 -0
  217. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  218. data/lib/jets/commands/encrypted/USAGE +46 -0
  219. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  220. data/lib/jets/commands/gems/gems_command.rb +14 -0
  221. data/lib/jets/commands/generate/generate_command.rb +95 -0
  222. data/lib/jets/commands/help/USAGE +20 -0
  223. data/lib/jets/commands/help/help_command.rb +15 -0
  224. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  225. data/lib/jets/commands/logs/logs_command.rb +45 -0
  226. data/lib/jets/commands/new/new_command.rb +19 -0
  227. data/lib/jets/commands/notes/notes_command.rb +30 -0
  228. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  229. data/lib/jets/commands/projects/projects_command.rb +30 -0
  230. data/lib/jets/commands/rake/rake_command.rb +59 -0
  231. data/lib/jets/commands/releases/releases_command.rb +72 -0
  232. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  233. data/lib/jets/commands/routes/routes_command.rb +19 -0
  234. data/lib/jets/commands/runner/runner_command.rb +60 -0
  235. data/lib/jets/commands/server/server_command.rb +291 -0
  236. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  237. data/lib/jets/commands/status/status_command.rb +9 -0
  238. data/lib/jets/commands/{url.rb → url/url_command.rb} +37 -14
  239. data/lib/jets/commands/version/version_command.rb +11 -0
  240. data/lib/jets/commands.rb +17 -0
  241. data/lib/jets/configuration.rb +166 -0
  242. data/lib/jets/controller/base.rb +105 -183
  243. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  244. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  245. data/lib/jets/controller/compat/caching.rb +13 -0
  246. data/lib/jets/controller/compat/future.rb +13 -0
  247. data/lib/jets/controller/compat/route_set.rb +47 -0
  248. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  249. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  250. data/lib/jets/controller/decorate/logging.rb +90 -0
  251. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  252. data/lib/jets/controller/decorate/url_for.rb +10 -0
  253. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  254. data/lib/jets/controller/handler.rb +41 -0
  255. data/lib/jets/controller/middleware/main.rb +16 -8
  256. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +40 -15
  257. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  258. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  259. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  260. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -24
  261. data/lib/jets/controller/request/compat/params.rb +144 -0
  262. data/lib/jets/controller/request/compat/request.rb +125 -0
  263. data/lib/jets/controller/request.rb +35 -18
  264. data/lib/jets/controller/response/compat/response.rb +67 -0
  265. data/lib/jets/controller/response.rb +91 -8
  266. data/lib/jets/core.rb +136 -51
  267. data/lib/jets/core_ext/kernel.rb +2 -2
  268. data/lib/jets/core_ext/symbol.rb +5 -0
  269. data/lib/jets/core_ext.rb +4 -0
  270. data/lib/jets/dev_caching.rb +44 -0
  271. data/lib/jets/dotenv/ssm.rb +2 -2
  272. data/lib/jets/dotenv.rb +2 -1
  273. data/lib/jets/engine/configuration.rb +96 -0
  274. data/lib/jets/engine/turbines.rb +23 -0
  275. data/lib/jets/engine.rb +380 -0
  276. data/lib/jets/exception_reporting.rb +43 -0
  277. data/lib/jets/generators/job/job_generator.rb +41 -0
  278. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  279. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  280. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  281. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  282. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  283. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  284. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  285. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  286. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  287. data/lib/jets/generators/overrides/app/USAGE +38 -0
  288. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  289. data/lib/jets/generators/overrides/app/helpers.rb +143 -0
  290. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.gitignore +2 -1
  291. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  292. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  293. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  294. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  295. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  296. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  297. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  298. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  299. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  300. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  301. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  302. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  303. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  304. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  305. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  306. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  307. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  308. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  309. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  311. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  312. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  313. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  314. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  315. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  316. data/lib/jets/generators.rb +112 -0
  317. data/lib/jets/info.rb +116 -0
  318. data/lib/jets/initializable.rb +95 -0
  319. data/lib/jets/job/base.rb +3 -2
  320. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  321. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  322. data/lib/jets/job/dsl/iot_event.rb +6 -6
  323. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  324. data/lib/jets/job/dsl/log_event.rb +2 -2
  325. data/lib/jets/job/dsl/rule_event.rb +7 -4
  326. data/lib/jets/job/dsl/s3_event.rb +1 -1
  327. data/lib/jets/job/dsl/sns_event.rb +6 -6
  328. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  329. data/lib/jets/klass.rb +5 -6
  330. data/lib/jets/lambda/definition.rb +118 -0
  331. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  332. data/lib/jets/lambda/dsl.rb +64 -53
  333. data/lib/jets/lambda/function.rb +3 -3
  334. data/lib/jets/lambda/function_constructor.rb +6 -6
  335. data/lib/jets/lambda/functions.rb +36 -1
  336. data/lib/jets/mega/request/source.rb +1 -2
  337. data/lib/jets/mega/request.rb +4 -4
  338. data/lib/jets/names.rb +31 -15
  339. data/lib/jets/overrides/dummy/rails.rb +11 -0
  340. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  341. data/lib/jets/overrides/puma.rb +10 -0
  342. data/lib/jets/paths.rb +243 -0
  343. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  344. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  345. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  346. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  347. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  348. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  349. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  350. data/lib/jets/preheat.rb +12 -25
  351. data/lib/jets/processors/deducer.rb +2 -2
  352. data/lib/jets/processors/main_processor.rb +6 -13
  353. data/lib/jets/rack/logger.rb +77 -0
  354. data/lib/jets/router/compat/route_set.rb +177 -0
  355. data/lib/jets/router/dsl/mount.rb +40 -6
  356. data/lib/jets/router/dsl.rb +125 -105
  357. data/lib/jets/router/engine_mount.rb +36 -0
  358. data/lib/jets/router/help.rb +130 -0
  359. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  360. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  361. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  362. data/lib/jets/router/matcher.rb +135 -16
  363. data/lib/jets/router/resources/options.rb +6 -4
  364. data/lib/jets/router/route/after_initialize.rb +64 -0
  365. data/lib/jets/router/route/as.rb +93 -0
  366. data/lib/jets/router/route/authorizer.rb +1 -0
  367. data/lib/jets/router/route/compat.rb +45 -0
  368. data/lib/jets/router/route/info.rb +74 -0
  369. data/lib/jets/router/route/node.rb +137 -0
  370. data/lib/jets/router/route/path.rb +93 -0
  371. data/lib/jets/router/route.rb +109 -106
  372. data/lib/jets/router/route_set.rb +214 -0
  373. data/lib/jets/router/scope.rb +204 -69
  374. data/lib/jets/router/state.rb +36 -16
  375. data/lib/jets/router/util.rb +1 -31
  376. data/lib/jets/router.rb +64 -162
  377. data/lib/jets/ruby_version_check.rb +15 -0
  378. data/lib/jets/rule/base.rb +1 -0
  379. data/lib/jets/rule/dsl.rb +7 -7
  380. data/lib/jets/secrets.rb +110 -0
  381. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  382. data/lib/jets/spec_helpers/controllers.rb +32 -24
  383. data/lib/jets/spec_helpers.rb +0 -6
  384. data/lib/jets/stack/builder.rb +3 -2
  385. data/lib/jets/stack/definition.rb +1 -4
  386. data/lib/jets/stack/function.rb +2 -2
  387. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  388. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  389. data/lib/jets/stack/main/dsl/lambda.rb +26 -20
  390. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  391. data/lib/jets/stack/output/lookup.rb +1 -1
  392. data/lib/jets/stack/output.rb +2 -2
  393. data/lib/jets/stack/parameter.rb +2 -2
  394. data/lib/jets/stack/resource.rb +3 -3
  395. data/lib/jets/stack/s3_event.rb +51 -37
  396. data/lib/jets/stack.rb +1 -1
  397. data/lib/jets/tasks/engine.rake +85 -0
  398. data/lib/jets/tasks/framework.rake +66 -0
  399. data/lib/jets/tasks/log.rake +41 -0
  400. data/lib/jets/tasks/middleware.rake +9 -0
  401. data/lib/jets/tasks/misc.rake +81 -0
  402. data/lib/jets/tasks/statistics.rake +37 -0
  403. data/lib/jets/tasks/tmp.rake +51 -0
  404. data/lib/jets/tasks/yarn.rake +29 -0
  405. data/lib/jets/tasks/zeitwerk.rake +61 -0
  406. data/lib/jets/tasks.rb +18 -0
  407. data/lib/jets/turbine/configurable.rb +36 -0
  408. data/lib/jets/turbine/configuration.rb +101 -0
  409. data/lib/jets/turbine.rb +164 -20
  410. data/lib/jets/util/camelize.rb +24 -0
  411. data/lib/jets/version.rb +1 -1
  412. data/lib/jets.rb +7 -16
  413. metadata +410 -362
  414. data/bin/release +0 -9
  415. data/lib/jets/application/defaults.rb +0 -230
  416. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  417. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  418. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  419. data/lib/jets/cfn/builders/base_child_builder.rb +0 -88
  420. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  421. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  422. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  423. data/lib/jets/cfn/builders/page_builder.rb +0 -80
  424. data/lib/jets/cfn/built_template.rb +0 -15
  425. data/lib/jets/cfn/template_source.rb +0 -64
  426. data/lib/jets/commands/base.rb +0 -145
  427. data/lib/jets/commands/call.rb +0 -185
  428. data/lib/jets/commands/clean.rb +0 -19
  429. data/lib/jets/commands/configure.rb +0 -51
  430. data/lib/jets/commands/console.rb +0 -18
  431. data/lib/jets/commands/db/environment-task.rake +0 -3
  432. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  433. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  434. data/lib/jets/commands/db/tasks.rb +0 -34
  435. data/lib/jets/commands/db.rb +0 -13
  436. data/lib/jets/commands/dbconsole.rb +0 -134
  437. data/lib/jets/commands/delete.rb +0 -136
  438. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  439. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  440. data/lib/jets/commands/dynamodb.rb +0 -19
  441. data/lib/jets/commands/gems.rb +0 -13
  442. data/lib/jets/commands/help/call.md +0 -69
  443. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  444. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  445. data/lib/jets/commands/help/routes.md +0 -16
  446. data/lib/jets/commands/help.rb +0 -9
  447. data/lib/jets/commands/import/base.rb +0 -49
  448. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  449. data/lib/jets/commands/import/rack.rb +0 -16
  450. data/lib/jets/commands/import/rails.rb +0 -74
  451. data/lib/jets/commands/import/sequence.rb +0 -90
  452. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  453. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  454. data/lib/jets/commands/import.rb +0 -12
  455. data/lib/jets/commands/main.rb +0 -169
  456. data/lib/jets/commands/markdown/creator.rb +0 -58
  457. data/lib/jets/commands/markdown/index.rb +0 -27
  458. data/lib/jets/commands/markdown/page.rb +0 -125
  459. data/lib/jets/commands/markdown/shell.rb +0 -11
  460. data/lib/jets/commands/new.rb +0 -173
  461. data/lib/jets/commands/rake_command.rb +0 -61
  462. data/lib/jets/commands/rake_tasks.rb +0 -50
  463. data/lib/jets/commands/runner.rb +0 -16
  464. data/lib/jets/commands/sequence.rb +0 -104
  465. data/lib/jets/commands/stack_info.rb +0 -30
  466. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  467. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  468. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  469. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  470. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  471. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  472. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  473. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  474. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  475. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -72
  476. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  477. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  478. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  479. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  480. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  481. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  482. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -20
  483. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  484. data/lib/jets/commands/upgrade/version1.rb +0 -136
  485. data/lib/jets/commands/upgrade.rb +0 -105
  486. data/lib/jets/commands/webpacker_template.rb +0 -18
  487. data/lib/jets/controller/callbacks.rb +0 -73
  488. data/lib/jets/controller/cookies/jar.rb +0 -269
  489. data/lib/jets/controller/cookies.rb +0 -38
  490. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  491. data/lib/jets/controller/error.rb +0 -4
  492. data/lib/jets/controller/forgery_protection.rb +0 -43
  493. data/lib/jets/controller/layout.rb +0 -17
  494. data/lib/jets/controller/middleware/cors.rb +0 -60
  495. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  496. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  497. data/lib/jets/controller/middleware/reloader.rb +0 -15
  498. data/lib/jets/controller/parameters_filter.rb +0 -29
  499. data/lib/jets/controller/params.rb +0 -117
  500. data/lib/jets/controller/redirection.rb +0 -61
  501. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  502. data/lib/jets/controller/rendering.rb +0 -96
  503. data/lib/jets/controller/stage.rb +0 -34
  504. data/lib/jets/controller.rb +0 -3
  505. data/lib/jets/db.rb +0 -15
  506. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  507. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  508. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  509. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  510. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  511. data/lib/jets/generator.rb +0 -112
  512. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  513. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  514. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  515. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -52
  516. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  517. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  518. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  519. data/lib/jets/lambda/task.rb +0 -111
  520. data/lib/jets/logger.rb +0 -21
  521. data/lib/jets/middleware/configurator.rb +0 -84
  522. data/lib/jets/middleware/default_stack.rb +0 -53
  523. data/lib/jets/middleware/layer.rb +0 -34
  524. data/lib/jets/middleware/stack.rb +0 -77
  525. data/lib/jets/middleware.rb +0 -33
  526. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  527. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  528. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  529. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  530. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  531. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  532. data/lib/jets/overrides/rails.rb +0 -6
  533. data/lib/jets/rack_server.rb +0 -86
  534. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  535. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  536. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  537. data/lib/jets/resource/api_gateway/method.rb +0 -102
  538. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  539. data/lib/jets/resource/base.rb +0 -28
  540. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  541. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  542. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  543. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  544. data/lib/jets/resource/child_stack/base.rb +0 -24
  545. data/lib/jets/resource/lambda/function.rb +0 -221
  546. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  547. data/lib/jets/resource/permission.rb +0 -45
  548. data/lib/jets/resource.rb +0 -71
  549. data/lib/jets/router/error.rb +0 -4
  550. data/lib/jets/router/finder.rb +0 -47
  551. data/lib/jets/router/helpers/core_helper.rb +0 -27
  552. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  553. data/lib/jets/router/helpers.rb +0 -4
  554. data/lib/jets/router/method_creator/code.rb +0 -99
  555. data/lib/jets/router/method_creator/edit.rb +0 -12
  556. data/lib/jets/router/method_creator/generic.rb +0 -11
  557. data/lib/jets/router/method_creator/index.rb +0 -48
  558. data/lib/jets/router/method_creator/new.rb +0 -12
  559. data/lib/jets/router/method_creator/root.rb +0 -15
  560. data/lib/jets/router/method_creator/show.rb +0 -12
  561. data/lib/jets/router/method_creator.rb +0 -50
  562. data/lib/jets/turbo/database_yaml.rb +0 -41
  563. data/lib/jets/turbo/project/.gitignore +0 -12
  564. data/lib/jets/turbo/project/.jetskeep +0 -1
  565. data/lib/jets/turbo/project/Gemfile +0 -16
  566. data/lib/jets/turbo/project/Rakefile +0 -2
  567. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  568. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  569. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  570. data/lib/jets/turbo/project/config/application.rb +0 -5
  571. data/lib/jets/turbo/project/config/routes.rb +0 -4
  572. data/lib/jets/turbo/project/config.ru +0 -5
  573. data/lib/jets/turbo/rails.rb +0 -127
  574. data/lib/jets/turbo/templates/config/database.yml +0 -30
  575. data/lib/jets/turbo.rb +0 -56
  576. data/readme/prerelease.md +0 -6
  577. data/readme/testing.md +0 -60
  578. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  579. /data/lib/jets/{commands → command}/help/build.md +0 -0
  580. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  581. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  582. /data/lib/jets/{commands → command}/help/console.md +0 -0
  583. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  584. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  585. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  586. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  587. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  588. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  589. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  590. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  591. /data/lib/jets/{commands → command}/help/runner.md +0 -0
  592. /data/lib/jets/{commands → command}/help/server.md +0 -0
  593. /data/lib/jets/{commands → command}/help/status.md +0 -0
  594. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  595. /data/lib/jets/{commands → command}/help/url.md +0 -0
  596. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  597. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  598. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  599. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  600. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  601. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  602. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  603. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  604. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  605. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  606. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  607. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  608. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  609. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  610. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  611. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  612. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  613. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  614. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  615. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  616. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
data/lib/jets/router.rb CHANGED
@@ -1,192 +1,94 @@
1
- require 'text-table'
2
-
3
1
  module Jets
4
- class Router
5
- include Dsl
2
+ module Router
3
+ class Error < RuntimeError ; end
6
4
 
7
- attr_reader :routes
8
- def initialize
9
- @routes = []
10
- @scope = Scope.new
11
- end
5
+ NAMED_ROUTES_METHODS = %w[index new create show edit update destroy].freeze
12
6
 
13
- def draw(&block)
14
- instance_eval(&block)
15
- check_collision!
7
+ def has_controller?(name)
8
+ routes.detect { |r| r.controller_name == name }
16
9
  end
17
10
 
18
- # Validate routes that deployable
19
- def check_collision!
20
- paths = self.routes.map(&:path)
21
- collision = Jets::Resource::ApiGateway::RestApi::Routes::Collision.new
22
- collide = collision.collision?(paths)
23
- raise collision.exception if collide
11
+ def draw
12
+ drawn_route_set
24
13
  end
25
14
 
26
- def create_route(options)
27
- # TODO: Can use it to add additional things like authorization_type
28
- # Would be good to add authorization_type at the controller level also
29
- infer_to_option!(options)
30
- handle_on!(options)
31
- MethodCreator.new(options, @scope).define_url_helper!
32
- @routes << Route.new(options, @scope)
33
- end
15
+ @@drawn_route_set = nil
16
+ def drawn_route_set
17
+ return @@drawn_route_set if @@drawn_route_set
34
18
 
35
- # Can possibly infer to option from the path. Example:
36
- #
37
- # get 'posts/index'
38
- # get 'posts', to: 'posts#index'
39
- #
40
- # get 'posts/show'
41
- # get 'posts', to: 'posts#show'
42
- #
43
- def infer_to_option!(options)
44
- return if options[:to]
45
-
46
- path = options[:path].to_s
47
- return unless path.include?('/')
48
-
49
- items = path.split('/')
50
- if items.size == 2
51
- options[:to] = items.join('#')
52
- end
19
+ route_set = Jets.application.routes
20
+ @@drawn_route_set = route_set
53
21
  end
54
22
 
55
- def handle_on!(options)
56
- if options[:on] && !%w[resources resource].include?(@scope.from.to_s)
57
- raise Error.new("ERROR: The `on:` option can only be used within a resource or resources block")
58
- end
59
- options[:on] ||= @on_option if @on_option
23
+ def clear!
24
+ @@drawn_route_set = nil
60
25
  end
61
26
 
62
- def api_mode?
63
- if Jets.config.key?(:api_mode) || Jets.config.key?(:api_generator)
64
- puts <<~EOL.color(:yellow)
65
- DEPRECATED: Jets.config.api_generator
66
- Instead, please update your config/application.rb to use:
67
- Jets.config.mode = 'api'
68
- You can also run:
69
- jets upgrade
70
- EOL
71
- end
72
- api_mode = Jets.config.mode == 'api' || Jets.config.api_mode || Jets.config.api_generator
73
- api_mode
27
+ def routes
28
+ drawn_route_set.routes
74
29
  end
75
30
 
76
- # Useful for creating API Gateway Resources
77
- def all_paths
78
- results = []
79
- paths = routes.map(&:path)
80
- paths.each do |p|
81
- sub_paths = []
82
- parts = p.split('/')
83
- until parts.empty?
84
- parts.pop
85
- sub_path = parts.join('/')
86
- sub_paths << sub_path unless sub_path == ''
87
- end
88
- results += sub_paths
89
- end
90
- @all_paths = (results + paths).sort.uniq
91
- end
92
-
93
- # Useful for RouterMatcher
94
- #
95
- # Precedence:
96
- # Routes with wildcards are considered after routes without wildcards
31
+ # So we can save state in s3 post deploy. Example of structure.
97
32
  #
98
- # Routes with fewer captures are ordered first since both
99
- # /posts/:post_id/comments/new and /posts/:post_id/comments/:id are equally
100
- # long
33
+ # [
34
+ # {"scope"=>{"options"=>{"as"=>"posts", "path"=>"posts", "param"=>nil, "from"=>"resources"}, "parent"=>{"options"=>{}, "parent"=>nil, "level"=>1}, "level"=>2}, "options"=>{"to"=>"posts#index", "path"=>"posts", "method"=>"get"}, "path"=>"posts", "to"=>"posts#index", "as"=>"posts"},
35
+ # {"scope"=>{"options"=>{"as"=>"posts", "path"=>"posts", "param"=>nil, "from"=>"resources"}, "parent"=>{"options"=>{}, "parent"=>nil, "level"=>1}, "level"=>2}, "options"=>{"to"=>"posts#new", "path"=>"posts/new", "method"=>"get"}, "path"=>"posts/new", "to"=>"posts#new", "as"=>"new_post"},
36
+ # ...
37
+ # ]
101
38
  #
102
- # Routes with the same amount of captures and wildcards are orderd so that
103
- # the longest path is considered first since posts/:id and posts/:id/edit
104
- # can both match.
105
- def ordered_routes
106
- length = Proc.new { |r| [r.path.count("*"), r.path.count(":"), r.path.length * -1] }
107
- routes.sort_by(&length)
39
+ def to_json
40
+ JSON.dump(routes.map(&:to_h))
108
41
  end
109
42
 
110
- class << self
111
- def has_controller?(name)
112
- routes.detect { |r| r.controller_name == name }
113
- end
114
-
115
- # Class methods
116
- def draw
117
- drawn_router
118
- end
119
-
120
- @@drawn_router = nil
121
- def drawn_router
122
- return @@drawn_router if @@drawn_router
123
-
124
- router = Jets.application.routes
125
- @@drawn_router = router
126
- end
127
-
128
- def clear!
129
- @@drawn_router = nil
130
- Jets::Router::Helpers::NamedRoutesHelper.clear!
131
- end
132
-
133
- def routes
134
- drawn_router.routes
135
- end
43
+ # Returns all paths including subpaths.
44
+ # Example:
45
+ # Input: ["posts/:id/edit"]
46
+ # Output: ["posts", "posts/:id", "posts/:id/edit"]
47
+ def all_paths
48
+ drawn_route_set.all_paths
49
+ end
136
50
 
137
- # So we can save state in s3 post deploy. Example of structure.
138
- #
139
- # [
140
- # {"scope"=>{"options"=>{"as"=>"posts", "prefix"=>"posts", "param"=>nil, "from"=>"resources"}, "parent"=>{"options"=>{}, "parent"=>nil, "level"=>1}, "level"=>2}, "options"=>{"to"=>"posts#index", "from_scope"=>true, "path"=>"posts", "method"=>"get"}, "path"=>"posts", "to"=>"posts#index", "as"=>"posts"},
141
- # {"scope"=>{"options"=>{"as"=>"posts", "prefix"=>"posts", "param"=>nil, "from"=>"resources"}, "parent"=>{"options"=>{}, "parent"=>nil, "level"=>1}, "level"=>2}, "options"=>{"to"=>"posts#new", "from_scope"=>true, "path"=>"posts/new", "method"=>"get"}, "path"=>"posts/new", "to"=>"posts#new", "as"=>"new_post"},
142
- # ...
143
- # ]
144
- #
145
- def to_json
146
- JSON.dump(routes.map(&:to_h))
147
- end
51
+ def all_routes_valid?
52
+ invalid_routes.empty?
53
+ end
148
54
 
149
- # Returns all paths including subpaths.
150
- # Example:
151
- # Input: ["posts/:id/edit"]
152
- # Output: ["posts", "posts/:id", "posts/:id/edit"]
153
- def all_paths
154
- drawn_router.all_paths
155
- end
55
+ def invalid_routes
56
+ routes.select { |r| !r.valid? }
57
+ end
156
58
 
157
- def help(routes)
158
- return "Your routes table is empty." if routes.empty?
59
+ def validate_routes!
60
+ return true if Jets.config.cfn.build.routes == "one_apigw_method_for_all_routes"
61
+ check_route_connected_functions
62
+ end
159
63
 
160
- table = Text::Table.new
161
- table.head = %w[As Verb Path Controller#action]
162
- routes.each do |route|
163
- table.rows << [route.as, route.method, route.path, route.to]
164
- end
165
- table
166
- end
64
+ # Checks that all routes are validate and have corresponding lambda functions
65
+ def check_route_connected_functions
66
+ return true if all_routes_valid?
167
67
 
168
- def all_routes_valid?
169
- invalid_routes.empty?
68
+ puts "Please double check the routes below map to valid controllers:".color(:red)
69
+ invalid_routes.each do |route|
70
+ puts " /#{route.path} => #{route.controller_name}##{route.action_name}"
170
71
  end
72
+ false
73
+ end
171
74
 
172
- def invalid_routes
173
- routes.select { |r| !r.valid? }
174
- end
75
+ def find_route_by_event(event)
76
+ request = Jets::Controller::Request.new(event: event)
77
+ Jets::Router::Matcher.new.find_by_request(request)
78
+ end
175
79
 
176
- def validate_routes!
177
- check_route_connected_functions
80
+ def find_by_definition(definition)
81
+ routes.find do |route|
82
+ route.controller_name == definition.class_name &&
83
+ route.action_name == definition.meth.to_s
178
84
  end
85
+ end
179
86
 
180
- # Checks that all routes are validate and have corresponding lambda functions
181
- def check_route_connected_functions
182
- return true if all_routes_valid?
183
-
184
- puts "Please double check the routes below map to valid controllers:".color(:red)
185
- invalid_routes.each do |route|
186
- puts " /#{route.path} => #{route.controller_name}##{route.action_name}"
187
- end
188
- false
189
- end
87
+ # Filters out internal routes
88
+ def no_routes?
89
+ routes.reject(&:internal?).empty?
190
90
  end
91
+
92
+ extend self
191
93
  end
192
- end
94
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.7.0") && RUBY_ENGINE == "ruby"
4
+ desc = defined?(RUBY_DESCRIPTION) ? RUBY_DESCRIPTION : "ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE})"
5
+ abort <<-end_message
6
+
7
+ Jets 5 requires Ruby 2.7.0 or newer.
8
+
9
+ You're running
10
+ #{desc}
11
+
12
+ Please upgrade to Ruby 2.7.0 or newer to continue.
13
+
14
+ end_message
15
+ end
@@ -8,6 +8,7 @@ require 'json'
8
8
  module Jets::Rule
9
9
  class Base < Jets::Lambda::Functions
10
10
  include Dsl
11
+ prepend Jets::ExceptionReporting::Process
11
12
 
12
13
  class << self
13
14
  def process(event, context, meth)
data/lib/jets/rule/dsl.rb CHANGED
@@ -27,13 +27,13 @@ module Jets::Rule::Dsl
27
27
  def scope(value)
28
28
  scope = case value
29
29
  when String
30
- {compliance_resource_types: [value]}
30
+ {ComplianceResourceTypes: [value]}
31
31
  when Array
32
- {compliance_resource_types: value}
32
+ {ComplianceResourceTypes: value}
33
33
  else # default to hash
34
34
  value
35
35
  end
36
- associated_properties(scope: scope)
36
+ associated_properties(Scope: scope)
37
37
  end
38
38
 
39
39
  # Convenience method that set properties. List based on https://amzn.to/2oSph1P
@@ -53,13 +53,13 @@ module Jets::Rule::Dsl
53
53
  end
54
54
 
55
55
  def config_rule_definition(meth)
56
- resource = Jets::Resource::Config::ConfigRule.new(self, meth, associated_properties)
56
+ resource = Jets::Cfn::Resource::Config::ConfigRule.new(self, meth, associated_properties)
57
57
  resource.definition # returns a definition to be added by associated_resources
58
58
  end
59
59
 
60
60
  def managed_rule(name)
61
61
  name = name.to_s
62
- managed_rule = Jets::Resource::Config::ManagedRule.new(self, name, associated_properties)
62
+ managed_rule = Jets::Cfn::Resource::Config::ManagedRule.new(self, name, associated_properties)
63
63
  resource(managed_rule.definition) # Sets @associated_resources
64
64
 
65
65
  # The key to not register the task to all_tasks to avoid creating a Lambda function.
@@ -75,7 +75,7 @@ module Jets::Rule::Dsl
75
75
  # Only using the task for base_replacements.
76
76
  resources = [definition]
77
77
  meth = name
78
- task = Jets::Lambda::Task.new(self.name, meth,
78
+ task = Jets::Lambda::Definition.new(self.name, meth,
79
79
  resources: resources,
80
80
  replacements: replacements(meth))
81
81
  all_managed_rules[name] = { definition: definition, replacements: task.replacements }
@@ -102,7 +102,7 @@ module Jets::Rule::Dsl
102
102
 
103
103
  # Override Lambda::Dsl.build? to account for possible managed_rules
104
104
  def build?
105
- !tasks.empty? || !managed_rules.empty?
105
+ !definitions.empty? || !managed_rules.empty?
106
106
  end
107
107
  end
108
108
  end
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+ require "tempfile"
5
+ require "active_support/message_encryptor"
6
+
7
+ module Jets
8
+ # Greatly inspired by Ara T. Howard's magnificent sekrets gem. 😘
9
+ class Secrets # :nodoc:
10
+ class MissingKeyError < RuntimeError
11
+ def initialize
12
+ super(<<-end_of_message.squish)
13
+ Missing encryption key to decrypt secrets with.
14
+ Ask your team for your master key and put it in ENV["JETS_MASTER_KEY"]
15
+ end_of_message
16
+ end
17
+ end
18
+
19
+ @cipher = "aes-128-gcm"
20
+ @root = File # Wonky, but ensures `join` uses the current directory.
21
+
22
+ class << self
23
+ attr_writer :root
24
+
25
+ def parse(paths, env:)
26
+ paths.each_with_object(Hash.new) do |path, all_secrets|
27
+ require "erb"
28
+
29
+ source = ERB.new(preprocess(path)).result
30
+ secrets = YAML.respond_to?(:unsafe_load) ? YAML.unsafe_load(source) : YAML.load(source)
31
+ secrets ||= {}
32
+
33
+ all_secrets.merge!(secrets["shared"].deep_symbolize_keys) if secrets["shared"]
34
+ all_secrets.merge!(secrets[env].deep_symbolize_keys) if secrets[env]
35
+ end
36
+ end
37
+
38
+ def key
39
+ ENV["JETS_MASTER_KEY"] || read_key_file || handle_missing_key
40
+ end
41
+
42
+ def encrypt(data)
43
+ encryptor.encrypt_and_sign(data)
44
+ end
45
+
46
+ def decrypt(data)
47
+ encryptor.decrypt_and_verify(data)
48
+ end
49
+
50
+ def read
51
+ decrypt(IO.binread(path))
52
+ end
53
+
54
+ def write(contents)
55
+ IO.binwrite("#{path}.tmp", encrypt(contents))
56
+ FileUtils.mv("#{path}.tmp", path)
57
+ end
58
+
59
+ def read_for_editing(&block)
60
+ writing(read, &block)
61
+ end
62
+
63
+ private
64
+ def handle_missing_key
65
+ raise MissingKeyError
66
+ end
67
+
68
+ def read_key_file
69
+ if File.exist?(key_path)
70
+ IO.binread(key_path).strip
71
+ end
72
+ end
73
+
74
+ def key_path
75
+ @root.join("config", "secrets.yml.key")
76
+ end
77
+
78
+ def path
79
+ @root.join("config", "secrets.yml.enc").to_s
80
+ end
81
+
82
+ def preprocess(path)
83
+ if path.end_with?(".enc")
84
+ decrypt(IO.binread(path))
85
+ else
86
+ IO.read(path)
87
+ end
88
+ end
89
+
90
+ def writing(contents)
91
+ file_name = "#{File.basename(path)}.#{Process.pid}"
92
+
93
+ Tempfile.create(["", "-" + file_name]) do |tmp_file|
94
+ tmp_path = Pathname.new(tmp_file)
95
+ tmp_path.binwrite contents
96
+
97
+ yield tmp_path
98
+
99
+ updated_contents = tmp_path.binread
100
+
101
+ write(updated_contents) if updated_contents != contents
102
+ end
103
+ end
104
+
105
+ def encryptor
106
+ @encryptor ||= ActiveSupport::MessageEncryptor.new([ key ].pack("H*"), cipher: @cipher)
107
+ end
108
+ end
109
+ end
110
+ end
@@ -10,7 +10,7 @@ module Jets::SpecHelpers::Controllers
10
10
  def event
11
11
  json = {}
12
12
  id_params = route.path.scan(%r{:([^/]+)}).flatten
13
- expanded_path = escape_path(path)
13
+ expanded_path = route.escape_path(path)
14
14
  path_parameters = {}
15
15
 
16
16
  id_params.each do |id_param|
@@ -20,12 +20,12 @@ module Jets::SpecHelpers::Controllers
20
20
  raise "Path param :#{id_param} value cannot be blank" if path_param_value.blank?
21
21
 
22
22
  escaped_path_param_value = CGI.escape(path_param_value.to_s)
23
- expanded_path.gsub!(":#{id_param}", escaped_path_param_value)
23
+ expanded_path = expanded_path.gsub(":#{id_param}", escaped_path_param_value)
24
24
  path_parameters.deep_merge!(id_param => escaped_path_param_value)
25
25
  end
26
26
 
27
- json['resource'] = escape_path(path)
28
- json['path'] = expanded_path
27
+ json['resource'] = strip_query_string(route.path.gsub(/:(\w+)/, '{\1}'))
28
+ json['path'] = strip_query_string(expanded_path)
29
29
  json['httpMethod'] = method.to_s.upcase
30
30
  json['pathParameters'] = path_parameters
31
31
  json['headers'] = (headers || {}).stringify_keys
@@ -51,10 +51,7 @@ module Jets::SpecHelpers::Controllers
51
51
  json['isBase64Encoded'] = true
52
52
  end
53
53
 
54
- params.query_params.each do |key, value|
55
- json['queryStringParameters'] ||= {}
56
- json['queryStringParameters'][key.to_s] = value.deep_dup
57
- end
54
+ json['queryStringParameters'] = params.query_params if params.query_params.present?
58
55
 
59
56
  json
60
57
  end
@@ -72,17 +69,32 @@ module Jets::SpecHelpers::Controllers
72
69
  path = self.path
73
70
  path = path[0..-2] if path.end_with? '/'
74
71
  path = path[1..-1] if path.start_with? '/'
72
+ path = strip_query_string(path)
75
73
  path
76
74
  end
77
75
 
76
+ def strip_query_string(path)
77
+ path.sub(/\?.*/, '')
78
+ end
79
+
78
80
  def route
79
- Jets::Router::Finder.new(normalized_path, method).run
81
+ Jets::Router::Matcher.new(Jets.application.routes).find_by_env(
82
+ "REQUEST_METHOD" => method.to_s.upcase,
83
+ "PATH_INFO" => path,
84
+ )
80
85
  end
81
86
  memoize :route
82
87
 
88
+ def request
89
+ Jets::Controller::Request.new(event: event)
90
+ end
91
+ memoize :request
92
+
83
93
  def dispatch!
84
94
  klass = Object.const_get(route.controller_name)
85
- controller = klass.new(event, {}, route.action_name)
95
+ context = Jets::Controller::Middleware::Mimic::LambdaContext.new
96
+ rack_env = Jets::Controller::RackAdapter::Env.new(event, context).convert
97
+ controller = klass.new(event, context, route.action_name, rack_env)
86
98
  response = controller.process! # response is API Gateway Hash
87
99
 
88
100
  unless response['statusCode'] && response['body']
@@ -91,11 +103,5 @@ module Jets::SpecHelpers::Controllers
91
103
 
92
104
  Response.new(response) # converts APIGW hash to prettier object
93
105
  end
94
-
95
- private
96
-
97
- def escape_path(path)
98
- path.to_s.split('/').map { |s| s =~ /\A[:\*]/ ? s : CGI.escape(s) }.join('/')
99
- end
100
106
  end
101
107
  end
@@ -2,13 +2,6 @@ module Jets::SpecHelpers
2
2
  module Controllers
3
3
  include Jets::Router::Helpers # must be at the top because response is overridden later
4
4
 
5
- attr_reader :response
6
- # Note: caching it like this instead of within the initialize results in the headers not being cached
7
- # See: https://community.rubyonjets.com/t/is-jets-spechelpers-controllers-request-being-cached/244/2
8
- def request
9
- @request ||= Request.new(:get, '/', {}, Params.new)
10
- end
11
-
12
5
  rest_methods = %w[get post put patch delete]
13
6
  rest_methods.each do |meth|
14
7
  define_method(meth) do |path, **params|
@@ -20,28 +13,43 @@ module Jets::SpecHelpers
20
13
  # end
21
14
  end
22
15
 
23
- def http_call(method:, path:, **params)
24
- request.method = method.to_sym
25
- request.path = path
26
- request.headers.deep_merge!(params.delete(:headers) || {})
27
-
28
- request.params.query_params = params.delete(:query)
29
-
30
- if request.method == :get
31
- request.params.body_params = {}
32
- request.params.query_params ||= params.delete(:params)
33
- request.params.query_params ||= params
16
+ attr_reader :request, :response
17
+ def http_call(method:, path:, **options)
18
+ headers = options.delete(:headers) || {}
19
+ md = path.match(/\?(.*)/)
20
+ query_string = md ? md[1] : ''
21
+ query = Rack::Utils.parse_nested_query(query_string)
22
+
23
+ params = Params.new
24
+ if method.to_sym == :get
25
+ params.body_params = {}
26
+ params.query_params ||= options.delete(:params) || options
34
27
  else
35
- request.params.body_params = params.delete(:body)
36
- request.params.body_params ||= params.delete(:params)
37
- request.params.body_params ||= params
28
+ params.body_params = options.delete(:body) || options.delete(:params) || options
38
29
  end
30
+ params.path_params = params.path_params
31
+ params.query_params = query
39
32
 
40
- request.params.query_params ||= {}
33
+ # Note: Do not cache the request object. Otherwise, it cannot be reused between specs.
34
+ # See: https://community.rubyonjets.com/t/is-jets-spechelpers-controllers-request-being-cached/244/2
35
+ @request = Request.new(method, path, headers, params)
41
36
 
42
- request.params.path_params = params
37
+ @request.method = method.to_sym
38
+ @request.path = path
39
+ @request.headers.deep_merge!(headers)
43
40
 
44
- @response = request.dispatch!
41
+ suppress_logging do
42
+ @response = @request.dispatch!
43
+ end
44
+ end
45
+
46
+ def suppress_logging
47
+ old_logger = Jets.logger
48
+ unless ENV['JETS_TEST_LOGGING']
49
+ Jets.logger = ActionView::Base.logger = Logger.new("/dev/null")
50
+ end
51
+ yield
52
+ Jets.logger = old_logger
45
53
  end
46
54
  end
47
55
  end
@@ -9,12 +9,6 @@ module Jets
9
9
  end
10
10
  end
11
11
 
12
- if File.exist?("#{Jets.root}/config/database.yml") && !ENV["SKIP_MIGRATION_CHECK"]
13
- ActiveRecord::Tasks::DatabaseTasks.db_dir = "#{Jets.root}/db"
14
- ActiveRecord::Migration.extend ActiveRecord::MigrationChecker
15
- ActiveRecord::Migration.prepare_test_db
16
- end
17
-
18
12
  require "rspec"
19
13
  RSpec.configure do |c|
20
14
  c.include Jets::SpecHelpers
@@ -1,6 +1,7 @@
1
1
  class Jets::Stack
2
2
  class Builder
3
3
  extend Memoist
4
+ include Jets::Util::Camelize
4
5
 
5
6
  def initialize(stack)
6
7
  @stack = stack
@@ -11,7 +12,7 @@ class Jets::Stack
11
12
  build_section(:parameters)
12
13
  build_section(:resources)
13
14
  build_section(:outputs)
14
- Jets::Camelizer.transform(@template)
15
+ camelize(@template).deep_stringify_keys
15
16
  end
16
17
  memoize :template
17
18
 
@@ -20,7 +21,7 @@ class Jets::Stack
20
21
  return unless elements
21
22
 
22
23
  if section == :parameters
23
- elements["GemLayer"] = {"Type"=>"String"} unless Jets.poly_only?
24
+ elements[:GemLayer] = {Type: "String"} unless Jets.poly_only?
24
25
  end
25
26
  @template[section] = elements
26
27
  end
@@ -5,6 +5,7 @@
5
5
  class Jets::Stack
6
6
  module Definition
7
7
  extend ActiveSupport::Concern
8
+ include Jets::Util::Camelize
8
9
 
9
10
  # Example of usage that leads here:
10
11
  #
@@ -22,10 +23,6 @@ class Jets::Stack
22
23
  self.class.register(@subclass, *@definition)
23
24
  end
24
25
 
25
- def camelize(attributes)
26
- Jets::Camelizer.transform(attributes)
27
- end
28
-
29
26
  class_methods do
30
27
  def register(subclass, *definition)
31
28
  @definitions ||= {}
@@ -9,7 +9,7 @@ class Jets::Stack
9
9
 
10
10
  def meth
11
11
  attributes = @template.values.first
12
- handler = attributes['Properties']['Handler']
12
+ handler = attributes[:Properties][:Handler]
13
13
  handler.split('.').last
14
14
  end
15
15
 
@@ -49,7 +49,7 @@ class Jets::Stack
49
49
 
50
50
  def base_search_expression
51
51
  attributes = @template.values.first
52
- handler = attributes['Properties']['Handler']
52
+ handler = attributes[:Properties][:Handler]
53
53
  handler.split('.')[0..-2].join('.') + '.*' # search_expression
54
54
  # Example: handlers/shared/functions/jets/s3_bucket_config.*
55
55
  end