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
@@ -1,34 +0,0 @@
1
- module ActiveRecord
2
- module MigrationChecker
3
- def prepare_test_db
4
- current_config = ::ActiveRecord::Base.connection_db_config
5
- all_configs = ::ActiveRecord::Base.configurations.configs_for(env_name: Jets.env)
6
-
7
- needs_update = !all_configs.all? do |db_config|
8
- ::ActiveRecord::Tasks::DatabaseTasks.schema_up_to_date?(
9
- db_config.configuration_hash,
10
- ::ActiveRecord::Base.schema_format,
11
- nil
12
- )
13
- end
14
-
15
- if needs_update
16
- # Roundtrip to Rake to allow plugins to hook into database initialization.
17
- FileUtils.cd(Jets.root) do
18
- ::ActiveRecord::Base.clear_all_connections!
19
- system("jets db:test:prepare")
20
- end
21
- end
22
-
23
- # Establish a new connection, the old database may be gone (db:test:prepare uses purge)
24
- ::ActiveRecord::Base.establish_connection(current_config)
25
-
26
- begin
27
- check_pending!
28
- rescue ::ActiveRecord::PendingMigrationError
29
- puts "Migrations are pending. To resolve this issue, run:\n\n jets db:migrate"
30
- exit 1
31
- end
32
- end
33
- end
34
- end
@@ -1,27 +0,0 @@
1
- module Jets::RenderingHelper
2
- # ensure that we always add the controller view name. So when rendering
3
- # a partial:
4
- # <%= render "mypartial" %>
5
- # gets turned into:
6
- # <%= render "articles/mypartial" %>
7
- def render(options = {}, locals = {}, &block)
8
- if options.is_a?(String) && !options.include?('/')
9
- folder = _get_containing_folder(caller)
10
- partial_name = options # happens to be the partial name
11
- partial_name = "#{folder}/#{partial_name}"
12
- options = partial_name
13
- end
14
-
15
- super(options, locals, &block)
16
- end
17
-
18
- # Ugly, going back up the caller stack to find out what view path
19
- # we are in
20
- def _get_containing_folder(caller_lines)
21
- caller_line = caller_lines.find { |l| !l.include?('/gems/') }
22
- text = caller_line.split(':').first
23
- # .../fixtures/apps/demo/app/views/posts/index.html.erb
24
- text.split('/')[-2] # posts
25
- end
26
- end
27
- ActionView::Helpers.send(:include, Jets::RenderingHelper)
@@ -1,88 +0,0 @@
1
- require "action_view"
2
-
3
- # hackety hack
4
- module Jets::UrlHelper
5
- include Jets::CommonMethods
6
-
7
- # Basic implementation of url_for to allow use helpers without routes existence
8
- def url_for(options = nil) # :nodoc:
9
- url = if options.is_a?(String)
10
- options
11
- elsif options == :back
12
- _back_url
13
- elsif options.respond_to?(:to_model)
14
- _handle_model(options)
15
- elsif options.is_a?(Array)
16
- _handle_array(options)
17
- else
18
- raise ArgumentError, "The Jets link_to helper only supports some types of arguments. Please provided a String or an object that supports ActiveModel to link_to as the the second argument."
19
- end
20
-
21
- add_stage_name(url)
22
- end
23
-
24
- def _handle_model(record)
25
- model = record.to_model
26
- if model.persisted?
27
- meth = model.model_name.singular_route_key + "_path"
28
- send(meth, record) # Example: post_path(record)
29
- else
30
- meth = model.model_name.route_key + "_path"
31
- send(meth) # Example: posts_path
32
- end
33
- end
34
-
35
- # Convention is that the model class name is the method name. Doesnt work if user is using as.
36
- def _handle_array(array)
37
- contains_nil = !array.select(&:nil?).empty?
38
- if contains_nil
39
- raise "ERROR: You passed a nil value in the Array. #{array.inspect}."
40
- end
41
-
42
- last_persisted = nil
43
- items = array.map do |x|
44
- if x.is_a?(ActiveRecord::Base)
45
- last_persisted = x.persisted?
46
- x.persisted? ? x.model_name.singular_route_key : x.model_name.route_key
47
- else
48
- x
49
- end
50
- end
51
- meth = items.join('_') + "_path"
52
-
53
- args = array.clone
54
- args.shift if args.first.is_a?(Symbol) # drop the first element if its a symbol
55
- args = last_persisted ? args : args[0..-2]
56
-
57
- # post_comment_path(post_id) - keep all args - for update
58
- # post_comments_path - drop last arg - for create
59
- send(meth, *args)
60
- end
61
-
62
- # for forgery protection
63
- def token_tag(token = nil, form_options: {})
64
- return '' unless protect_against_forgery?
65
-
66
- hidden_field_tag 'authenticity_token', masked_authenticity_token
67
- end
68
-
69
- def masked_authenticity_token
70
- @masked_authenticity_token ||= SecureRandom.hex(32)
71
- session[:authenticity_token] = @masked_authenticity_token
72
- end
73
-
74
- def protect_against_forgery?
75
- @_jets[:controller].class.forgery_protection_enabled?
76
- end
77
-
78
- def csrf_meta_tags
79
- if protect_against_forgery?
80
- html = tag("meta", name: "csrf-token", content: masked_authenticity_token).html_safe
81
- html << "\n"
82
- html << tag("meta", name: "csrf-param", content: "authenticity_token").html_safe
83
- html
84
- end
85
- end
86
- end # UrlHelper
87
-
88
- ActionView::Helpers.send(:include, Jets::UrlHelper)
@@ -1,6 +0,0 @@
1
- require "jets/overrides/rails/common_methods"
2
- require "jets/overrides/rails/url_helper"
3
- require "jets/overrides/rails/rendering_helper"
4
- require "jets/overrides/rails/asset_tag_helper"
5
- require "jets/overrides/rails/action_controller"
6
- require "jets/overrides/rails/migration_checker"
@@ -1,86 +0,0 @@
1
- module Jets
2
- class RackServer
3
- def self.start(options={})
4
- new(options).start
5
- end
6
-
7
- def initialize(options={})
8
- @options = options
9
- end
10
-
11
- def start
12
- return unless File.exist?("#{rack_project}/config.ru")
13
- puts "Starting additional rack server for the project under the rack subfolder..." if ENV['JETS_DEBUG']
14
-
15
- if ENV['FOREGROUND']
16
- serve
17
- return
18
- end
19
-
20
- # Reaching here means we'll run the server in the background.
21
- # Handle daemonzing ourselves because it keeps the stdout of the 2nd
22
- # rack server. The rackup --daemonize option ends up hiding the output.
23
- pid = Process.fork
24
- if pid.nil?
25
- # we're in the child process
26
- serve
27
- else
28
- # we're in the parent process
29
- Process.detach(pid) # dettached but still in the "foreground" since bin/rackup runs in the foreground
30
- end
31
- end
32
-
33
- # Runs in the child process
34
- def serve
35
- # Note, looks like stopping jets server with Ctrl-C sends the TERM signal
36
- # down to the sub bin/rackup command cleans up the child process fine.
37
- Bundler.with_unbundled_env do
38
- args = ''
39
- # only forward the host option, port is always 9292 for simplicity
40
- if @options[:host]
41
- args << " --host #{@options[:host]}"
42
- else
43
- args << " --host 127.0.0.1" # using the default localhost is not starting up https://stackoverflow.com/questions/4356646/address-family-not-supported-by-protocol-family
44
- end
45
-
46
-
47
- command = "cd #{rack_project} && bin/rackup#{args}" # leads to the same wrapper rack scripts
48
- puts "=> #{command}".color(:green)
49
- system(command)
50
- end
51
- end
52
-
53
- # blocks until rack server is up
54
- def wait_for_socket
55
- return unless Jets.rack?
56
-
57
- retries = 0
58
- max_retries = 30 # 15 seconds at a delay of 0.5s
59
- delay = 0.5
60
- if ENV['C9_USER'] # overrides for local testing
61
- max_retries = 3
62
- delay = 3
63
- end
64
- begin
65
- server = TCPSocket.new('localhost', 9292)
66
- server.close
67
- rescue Errno::ECONNREFUSED, Errno::EAFNOSUPPORT
68
- puts "Unable to connect to localhost:9292. Delay for #{delay} and will try to connect again." if ENV['JETS_DEBUG']
69
- sleep(delay)
70
- retries += 1
71
- if retries < max_retries
72
- retry
73
- else
74
- puts "Giving up on trying to connect to localhost:9292"
75
- return false
76
- end
77
- end
78
- puts "Connected to localhost:9292 successfully"
79
- true
80
- end
81
-
82
- def rack_project
83
- "#{Jets.root}/rack"
84
- end
85
- end
86
- end
@@ -1,49 +0,0 @@
1
- module Jets::Resource::ApiGateway::BasePath
2
- class Function < Jets::Resource::Base
3
- include Jets::Resource::Lambda::Function::Environment
4
-
5
- def definition
6
- {
7
- base_path_function: {
8
- type: "AWS::Lambda::Function",
9
- properties: {
10
- function_name: function_name,
11
- code: {
12
- s3_bucket: "!Ref S3Bucket",
13
- s3_key: code_s3_key,
14
- },
15
- role: "!GetAtt BasePathRole.Arn",
16
- handler: handler,
17
- runtime: Jets.ruby_runtime,
18
- timeout: 60,
19
- memory_size: 1536,
20
- environment: env_properties[:environment],
21
- layers: layers,
22
- }
23
- }
24
- }
25
- end
26
-
27
- def layers
28
- return Jets.config.lambda.layers if Jets.config.gems.disable
29
-
30
- ["!Ref GemLayer"] + Jets.config.lambda.layers
31
- end
32
-
33
- def function_name
34
- method = "jets-base-path"
35
- # need to add the deployment timestamp because or else function name collides between deploys
36
- timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
37
- "#{Jets.config.project_namespace}-#{method}-#{timestamp}"
38
- end
39
-
40
- def handler
41
- "handlers/functions/jets/base_path.lambda_handler"
42
- end
43
-
44
- def code_s3_key
45
- checksum = Jets::Builders::Md5.checksums["stage/code"]
46
- "jets/code/code-#{checksum}.zip" # s3_key
47
- end
48
- end
49
- end
@@ -1,76 +0,0 @@
1
- module Jets::Resource::ApiGateway::BasePath
2
- class Role < Jets::Resource::Base
3
- extend Memoist
4
- include Jets::AwsServices
5
-
6
- def definition
7
- {
8
- base_path_role: {
9
- type: "AWS::IAM::Role",
10
- properties: {
11
- role_name: role_name,
12
- path: "/",
13
- assume_role_policy_document: {
14
- version: "2012-10-17",
15
- statement: [{
16
- effect: "Allow",
17
- principal: {service: ["lambda.amazonaws.com"]},
18
- action: ["sts:AssumeRole"]}
19
- ]
20
- },
21
- policies: [
22
- policy_name: "#{role_name}-policy",
23
- policy_document: policy_document,
24
- ]
25
- },
26
- }
27
- }
28
- end
29
-
30
- def policy_document
31
- project_namespace = Jets.config.project_namespace
32
- default_policy_statements = Jets::Application.default_iam_policy # Array of Hashes
33
- apigateway = [{
34
- action: [ "apigateway:*" ],
35
- effect: "Allow",
36
- resource: "arn:aws:apigateway:#{Jets.aws.region}::/restapis/*", # scoped to all restapis because this changes
37
- },{
38
- action: [ "apigateway:*" ],
39
- effect: "Allow",
40
- resource: "arn:aws:apigateway:#{Jets.aws.region}::/domainnames/*", # scoped to all restapis because this changes
41
- }]
42
- cloudformation = [{
43
- action: ["cloudformation:DescribeStacks"],
44
- effect: "Allow",
45
- resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
46
- }]
47
-
48
- # Combine the statements
49
- {
50
- version: '2012-10-17',
51
- statement: default_policy_statements + apigateway + cloudformation
52
- }
53
- end
54
-
55
- # Duplicated in rest_api/change_detection.rb, base_path/role.rb, rest_api/routes.rb
56
- def rest_api_id
57
- stack_name = Jets::Names.parent_stack_name
58
- return "RestApi" unless stack_exists?(stack_name)
59
-
60
- stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
61
-
62
- api_gateway_stack_arn = lookup(stack[:outputs], "ApiGateway")
63
-
64
- # resources = cfn.describe_stack_resources(stack_name: api_gateway_stack_arn).stack_resources
65
- stack = cfn.describe_stacks(stack_name: api_gateway_stack_arn).stacks.first
66
- rest_api_id = lookup(stack[:outputs], "RestApi")
67
- end
68
- memoize :rest_api_id
69
-
70
- def role_name
71
- # TODO: dont think we should change the role name every time but have to right now because the deployment logical id changes
72
- timestamp = Jets::Resource::ApiGateway::Deployment.timestamp
73
- "#{Jets.config.project_namespace}-base-path-mapping-#{timestamp}"
74
- end
75
- end
76
- end
@@ -1,61 +0,0 @@
1
- module Jets::Resource::ApiGateway
2
- # Might be weird inheriting from Method because Method has Method#cors also
3
- # but Cors is essentially a Method class.
4
- class Cors < Method
5
- def definition
6
- {
7
- cors_logical_id => {
8
- type: "AWS::ApiGateway::Method",
9
-
10
- properties: {
11
- resource_id: "!Ref #{resource_id}",
12
- rest_api_id: "!Ref #{RestApi.logical_id}",
13
- authorization_type: cors_authorization_type,
14
- http_method: "OPTIONS",
15
- method_responses: [{
16
- status_code: '200',
17
- response_parameters: response_parameters(true),
18
- response_models: {},
19
- }],
20
- request_parameters: {},
21
- integration: {
22
- type: "MOCK",
23
- request_templates: {
24
- "application/json": "{statusCode:200}",
25
- },
26
- integration_responses: [{
27
- status_code: '200',
28
- response_parameters: response_parameters,
29
- response_templates: {
30
- "application/json": '',
31
- },
32
- }] # closes integration_responses
33
- } # closes integration
34
- } # closes properties
35
- } # closes logical id
36
- } # closes definition
37
- end
38
-
39
- def response_parameters(method_response=false)
40
- cors_headers.map do |k,v|
41
- k = "method.response.header.#{k}"
42
- v = method_response ? true : "'#{v}'" # surround value with single quotes
43
- [k,v]
44
- end.to_h
45
- end
46
-
47
- # Always the pre-flight headers in this case
48
- def cors_headers
49
- rack = Jets::Controller::Middleware::Cors.new(Jets.application)
50
- rack.cors_headers(true)
51
- end
52
-
53
- def cors_authorization_type
54
- Jets.config.api.cors_authorization_type || "NONE"
55
- end
56
-
57
- def cors_logical_id
58
- "#{resource_logical_id}_cors_api_method"
59
- end
60
- end
61
- end
@@ -1,102 +0,0 @@
1
- # Converts a Jets::Route to a CloudFormation Jets::Resource::ApiGateway::Method resource
2
- module Jets::Resource::ApiGateway
3
- class Method < Jets::Resource::Base
4
- include Authorization
5
-
6
- # also delegate permission for a method
7
- delegate :permission, to: :resource
8
-
9
- # route - Jets::Route
10
- def initialize(route)
11
- @route = route
12
- end
13
-
14
- def definition
15
- {
16
- method_logical_id => {
17
- type: "AWS::ApiGateway::Method",
18
- properties: props
19
- }
20
- }
21
- end
22
-
23
- def props
24
- props = {
25
- resource_id: "!Ref #{resource_id}",
26
- rest_api_id: "!Ref #{RestApi.logical_id}",
27
- http_method: @route.method,
28
- request_parameters: {},
29
- authorization_type: authorization_type,
30
- api_key_required: api_key_required?,
31
- integration: {
32
- integration_http_method: "POST",
33
- type: "AWS_PROXY",
34
- uri: "!Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${{namespace}LambdaFunction.Arn}/invocations"
35
- },
36
- method_responses: []
37
- }
38
- props[:authorizer_id] = authorizer_id if authorizer_id
39
- props[:authorization_scopes] = authorization_scopes if authorization_scopes
40
-
41
- props
42
- end
43
-
44
- def method_logical_id
45
- # https://stackoverflow.com/questions/6104240/how-do-i-strip-non-alphanumeric-characters-from-a-string-and-keep-spaces
46
- # Add path to the logical id to allow 2 different paths to be connected to the same controller action.
47
- # Example:
48
- #
49
- # root "jets/public#show"
50
- # any "*catchall", to: "jets/public#show"
51
- #
52
- # Without the path in the logical id, the logical id would be ShowApiMethod for both routes and only the
53
- # last one would be created in the CloudFormation template.
54
- path = @route.path.gsub('*','')
55
- .gsub(/[^0-9a-z]/i, ' ')
56
- .gsub(/\s+/, '_')
57
- path = nil if path == ''
58
- http_verb = @route.method.downcase
59
- [path, "{namespace}_#{http_verb}_api_method"].compact.join('_')
60
- end
61
-
62
- def replacements
63
- # mimic task to grab replacements, we want the namespace to be the lambda function's namespace
64
- resources = [definition]
65
- task = Jets::Lambda::Task.new(@route.controller_name, @route.action_name,
66
- resources: resources)
67
- task.replacements
68
- end
69
-
70
- def cors
71
- Cors.new(@route)
72
- end
73
- memoize :cors
74
-
75
- private
76
-
77
- def controller_klass
78
- @controller_klass ||= "#{controller_name}_controller".camelize.constantize
79
- end
80
-
81
- def controller_name
82
- @controller_name ||= @route.to.split('#').first
83
- end
84
-
85
- def resource_id
86
- @route.path == '' ?
87
- "RootResourceId" :
88
- Jets::Resource.truncate_id(resource_logical_id.camelize, "ApiResource")
89
- end
90
-
91
- # Example: Posts
92
- def resource_logical_id
93
- camelized_path.underscore
94
- end
95
-
96
- def camelized_path
97
- path = @route.path
98
- path = "homepage" if path == ''
99
- path.gsub('/','_').gsub(':','').gsub('*','').gsub('.','').camelize
100
- end
101
- end
102
- end
@@ -1,16 +0,0 @@
1
- # Detects route changes
2
- class Jets::Resource::ApiGateway::RestApi::Routes
3
- class Change
4
- include Jets::AwsServices
5
-
6
- def changed?
7
- return false unless parent_stack_exists?
8
-
9
- MediaTypes.changed? || To.changed? || Variable.changed? || Page.changed? || ENV['JETS_REPLACE_API']
10
- end
11
-
12
- def parent_stack_exists?
13
- stack_exists?(Jets::Names.parent_stack_name)
14
- end
15
- end
16
- end
@@ -1,28 +0,0 @@
1
- # Classes that inherit from this method should NOT define and override:
2
- #
3
- # logical_id
4
- # type
5
- # properties
6
- # attributes
7
- #
8
- # These are computed methods that derive their values from the resource definition itself.
9
- # Overriding these methods will remove the computed logical which handles things
10
- # like camelizing and replacements.
11
- #
12
- # The implementation of these methods are in `Jets::Resource`.
13
- class Jets::Resource
14
- class Base
15
- extend Memoist
16
- delegate :logical_id, :type, :properties, :attributes, :parameters, :outputs,
17
- to: :resource
18
-
19
- def resource
20
- Jets::Resource.new(definition, replacements)
21
- end
22
- memoize :resource
23
-
24
- def replacements
25
- @replacements || {}
26
- end
27
- end
28
- end
@@ -1,58 +0,0 @@
1
- # Implements:
2
- #
3
- # definition
4
- # template_filename
5
- #
6
- module Jets::Resource::ChildStack
7
- class ApiDeployment < Base
8
- def definition
9
- {
10
- deployment_id => {
11
- type: "AWS::CloudFormation::Stack",
12
- properties: {
13
- template_url: template_url,
14
- parameters: parameters,
15
- },
16
- depends_on: depends_on,
17
- }
18
- }
19
- end
20
-
21
- def parameters
22
- p = {
23
- GemLayer: "!Ref GemLayer",
24
- IamRole: "!GetAtt IamRole.Arn",
25
- RestApi: "!GetAtt ApiGateway.Outputs.RestApi",
26
- S3Bucket: "!Ref S3Bucket",
27
- }
28
- p[:DomainName] = "!GetAtt ApiGateway.Outputs.DomainName" if Jets.custom_domain?
29
- p[:BasePath] = Jets.config.domain.base_path unless Jets.config.domain.base_path.nil?
30
- p
31
- end
32
-
33
- def depends_on
34
- expression = "#{Jets::Names.template_path_prefix}-*_controller*"
35
- controller_logical_ids = []
36
- Dir.glob(expression).each do |path|
37
- next unless File.file?(path)
38
-
39
- # map the path to a camelized logical_id. Example:
40
- # /tmp/jets/demo/templates/demo-dev-2-posts_controller.yml to
41
- # PostsController
42
- regexp = Regexp.new(".*#{Jets.config.project_namespace}-app-")
43
- controller_name = path.sub(regexp, '').sub('.yml', '')
44
- controller_logical_id = controller_name.underscore.camelize
45
- controller_logical_ids << controller_logical_id
46
- end
47
- controller_logical_ids
48
- end
49
-
50
- def deployment_id
51
- Jets::Resource::ApiGateway::Deployment.logical_id
52
- end
53
-
54
- def template_filename
55
- "#{Jets.config.project_namespace}-api-deployment.yml"
56
- end
57
- end
58
- end
@@ -1,23 +0,0 @@
1
- # Implements:
2
- #
3
- # definition
4
- # template_filename
5
- #
6
- module Jets::Resource::ChildStack
7
- class ApiGateway < Base
8
- def definition
9
- {
10
- api_gateway: {
11
- type: "AWS::CloudFormation::Stack",
12
- properties: {
13
- template_url: template_url,
14
- }
15
- }
16
- }
17
- end
18
-
19
- def template_filename
20
- "#{Jets.config.project_namespace}-api-gateway.yml"
21
- end
22
- end
23
- end
@@ -1,20 +0,0 @@
1
- class Jets::Resource::ChildStack::ApiResource
2
- # Find the ApiResource Page that contains the AWS::ApiGateway::Resource
3
- # Returns: logical id of ApiResource Page
4
- class Page
5
- def self.logical_id(parameter)
6
- expression = "#{Jets::Names.template_path_prefix}-api-resources-*"
7
- # IE: path: #{Jets.build_root}/templates/demo-dev-2-api-resources-1.yml"
8
- template_paths = Dir.glob(expression).sort.to_a
9
- found_template = template_paths.detect do |path|
10
- next unless File.file?(path)
11
-
12
- template = Jets::Cfn::BuiltTemplate.get(path)
13
- template['Outputs'].keys.include?(parameter)
14
- end
15
- md = found_template.match(/-(api-resources-\d+)/)
16
-
17
- md[1].underscore.camelize # IE: ApiResources1
18
- end
19
- end
20
- end