jets_bb_fork 0.0.4

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 (398) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +126 -0
  4. data/.codebuild/README.md +68 -0
  5. data/.codebuild/bin/jets +3 -0
  6. data/.codebuild/buildspec-base.yml +14 -0
  7. data/.codebuild/integration.sh +72 -0
  8. data/.codebuild/jets.postman_collection.json +323 -0
  9. data/.codebuild/scripts/install-docker.sh +12 -0
  10. data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
  11. data/.codebuild/scripts/install-java.sh +22 -0
  12. data/.codebuild/scripts/install-node.sh +4 -0
  13. data/.github/ISSUE_TEMPLATE.md +7 -0
  14. data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
  15. data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
  16. data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
  17. data/.github/ISSUE_TEMPLATE/question.md +16 -0
  18. data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
  19. data/.gitignore +24 -0
  20. data/.gitmodules +0 -0
  21. data/.python-version +1 -0
  22. data/.rspec +4 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +734 -0
  25. data/CONDUCT.md +1 -0
  26. data/CONTRIBUTING.md +1 -0
  27. data/Dockerfile +16 -0
  28. data/Dockerfile.base +53 -0
  29. data/Gemfile +14 -0
  30. data/Guardfile +22 -0
  31. data/LICENSE.txt +22 -0
  32. data/Procfile +2 -0
  33. data/README.md +203 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +16 -0
  36. data/bin/release +9 -0
  37. data/buildspec.yml +18 -0
  38. data/exe/jets_bb_fork +14 -0
  39. data/jets.gemspec +68 -0
  40. data/lib/jets.rb +27 -0
  41. data/lib/jets/application.rb +216 -0
  42. data/lib/jets/application/defaults.rb +172 -0
  43. data/lib/jets/autoloaders.rb +97 -0
  44. data/lib/jets/aws_info.rb +113 -0
  45. data/lib/jets/aws_services.rb +65 -0
  46. data/lib/jets/aws_services/global_memoist.rb +57 -0
  47. data/lib/jets/aws_services/s3_bucket.rb +34 -0
  48. data/lib/jets/aws_services/stack_status.rb +59 -0
  49. data/lib/jets/booter.rb +119 -0
  50. data/lib/jets/builders/code_builder.rb +399 -0
  51. data/lib/jets/builders/code_size.rb +57 -0
  52. data/lib/jets/builders/gem_replacer.rb +76 -0
  53. data/lib/jets/builders/handler_generator.rb +186 -0
  54. data/lib/jets/builders/lambda_layer.rb +69 -0
  55. data/lib/jets/builders/md5.rb +60 -0
  56. data/lib/jets/builders/md5_zip.rb +61 -0
  57. data/lib/jets/builders/purger.rb +35 -0
  58. data/lib/jets/builders/rack_packager.rb +51 -0
  59. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  61. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/ruby_packager.rb +207 -0
  64. data/lib/jets/builders/shim_vars/app.rb +78 -0
  65. data/lib/jets/builders/shim_vars/base.rb +25 -0
  66. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  67. data/lib/jets/builders/templates/handler.rb +12 -0
  68. data/lib/jets/builders/tidy.rb +107 -0
  69. data/lib/jets/builders/util.rb +31 -0
  70. data/lib/jets/bundle.rb +82 -0
  71. data/lib/jets/camelizer.rb +71 -0
  72. data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
  73. data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
  74. data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
  75. data/lib/jets/cfn/builders/controller_builder.rb +42 -0
  76. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  77. data/lib/jets/cfn/builders/interface.rb +137 -0
  78. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  79. data/lib/jets/cfn/builders/paged.rb +37 -0
  80. data/lib/jets/cfn/builders/parent_builder.rb +100 -0
  81. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  82. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  83. data/lib/jets/cfn/ship.rb +185 -0
  84. data/lib/jets/cfn/status.rb +212 -0
  85. data/lib/jets/cfn/upload.rb +139 -0
  86. data/lib/jets/cli.rb +194 -0
  87. data/lib/jets/commands/base.rb +146 -0
  88. data/lib/jets/commands/build.rb +234 -0
  89. data/lib/jets/commands/call.rb +169 -0
  90. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  91. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  92. data/lib/jets/commands/call/base_guesser.rb +60 -0
  93. data/lib/jets/commands/call/guesser.rb +48 -0
  94. data/lib/jets/commands/clean.rb +19 -0
  95. data/lib/jets/commands/clean/base.rb +24 -0
  96. data/lib/jets/commands/clean/build.rb +13 -0
  97. data/lib/jets/commands/clean/log.rb +107 -0
  98. data/lib/jets/commands/console.rb +12 -0
  99. data/lib/jets/commands/db.rb +13 -0
  100. data/lib/jets/commands/db/environment-task.rake +3 -0
  101. data/lib/jets/commands/db/tasks.rb +44 -0
  102. data/lib/jets/commands/dbconsole.rb +131 -0
  103. data/lib/jets/commands/delete.rb +143 -0
  104. data/lib/jets/commands/deploy.rb +141 -0
  105. data/lib/jets/commands/dynamodb.rb +19 -0
  106. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  107. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  108. data/lib/jets/commands/gems.rb +21 -0
  109. data/lib/jets/commands/help.rb +9 -0
  110. data/lib/jets/commands/help/build.md +6 -0
  111. data/lib/jets/commands/help/call.md +61 -0
  112. data/lib/jets/commands/help/clean/build.md +5 -0
  113. data/lib/jets/commands/help/clean/log.md +5 -0
  114. data/lib/jets/commands/help/console.md +18 -0
  115. data/lib/jets/commands/help/db/generate.md +8 -0
  116. data/lib/jets/commands/help/dbconsole.md +9 -0
  117. data/lib/jets/commands/help/delete.md +22 -0
  118. data/lib/jets/commands/help/deploy.md +32 -0
  119. data/lib/jets/commands/help/destroy.md +16 -0
  120. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  121. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  122. data/lib/jets/commands/help/gems/check.md +8 -0
  123. data/lib/jets/commands/help/generate.md +22 -0
  124. data/lib/jets/commands/help/import/rack.md +13 -0
  125. data/lib/jets/commands/help/import/rails.md +11 -0
  126. data/lib/jets/commands/help/new.md +42 -0
  127. data/lib/jets/commands/help/routes.md +16 -0
  128. data/lib/jets/commands/help/runner.md +17 -0
  129. data/lib/jets/commands/help/server.md +15 -0
  130. data/lib/jets/commands/help/status.md +14 -0
  131. data/lib/jets/commands/help/upgrade.md +5 -0
  132. data/lib/jets/commands/help/url.md +6 -0
  133. data/lib/jets/commands/import.rb +12 -0
  134. data/lib/jets/commands/import/base.rb +49 -0
  135. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  136. data/lib/jets/commands/import/rack.rb +16 -0
  137. data/lib/jets/commands/import/rails.rb +74 -0
  138. data/lib/jets/commands/import/sequence.rb +90 -0
  139. data/lib/jets/commands/import/templates/config/database.yml +26 -0
  140. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  141. data/lib/jets/commands/main.rb +157 -0
  142. data/lib/jets/commands/markdown/creator.rb +58 -0
  143. data/lib/jets/commands/markdown/index.rb +27 -0
  144. data/lib/jets/commands/markdown/page.rb +125 -0
  145. data/lib/jets/commands/markdown/shell.rb +11 -0
  146. data/lib/jets/commands/new.rb +157 -0
  147. data/lib/jets/commands/rake_command.rb +61 -0
  148. data/lib/jets/commands/rake_tasks.rb +46 -0
  149. data/lib/jets/commands/runner.rb +16 -0
  150. data/lib/jets/commands/sequence.rb +99 -0
  151. data/lib/jets/commands/stack_info.rb +30 -0
  152. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  153. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  154. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  155. data/lib/jets/commands/templates/skeleton/Gemfile.tt +38 -0
  156. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  157. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  158. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  159. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  160. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  161. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  162. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  163. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  164. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
  165. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  166. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
  167. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
  168. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  169. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  170. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  171. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  172. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  173. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  174. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  175. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  176. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  177. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  178. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  179. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  180. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  181. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  182. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  183. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  184. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  185. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  186. data/lib/jets/commands/upgrade.rb +145 -0
  187. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  188. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  189. data/lib/jets/commands/url.rb +68 -0
  190. data/lib/jets/commands/webpacker_template.rb +18 -0
  191. data/lib/jets/controller.rb +3 -0
  192. data/lib/jets/controller/base.rb +108 -0
  193. data/lib/jets/controller/callbacks.rb +68 -0
  194. data/lib/jets/controller/cookies.rb +38 -0
  195. data/lib/jets/controller/cookies/jar.rb +269 -0
  196. data/lib/jets/controller/layout.rb +17 -0
  197. data/lib/jets/controller/middleware/cors.rb +60 -0
  198. data/lib/jets/controller/middleware/local.rb +116 -0
  199. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  200. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  201. data/lib/jets/controller/middleware/local/route_matcher.rb +106 -0
  202. data/lib/jets/controller/middleware/main.rb +46 -0
  203. data/lib/jets/controller/middleware/reloader.rb +15 -0
  204. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  205. data/lib/jets/controller/params.rb +87 -0
  206. data/lib/jets/controller/rack/adapter.rb +88 -0
  207. data/lib/jets/controller/rack/env.rb +105 -0
  208. data/lib/jets/controller/redirection.rb +55 -0
  209. data/lib/jets/controller/rendering.rb +79 -0
  210. data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
  211. data/lib/jets/controller/request.rb +29 -0
  212. data/lib/jets/controller/response.rb +61 -0
  213. data/lib/jets/controller/stage.rb +33 -0
  214. data/lib/jets/core.rb +149 -0
  215. data/lib/jets/core_ext/kernel.rb +13 -0
  216. data/lib/jets/db.rb +15 -0
  217. data/lib/jets/dotenv.rb +48 -0
  218. data/lib/jets/dotenv/ssm.rb +48 -0
  219. data/lib/jets/erb.rb +51 -0
  220. data/lib/jets/generator.rb +48 -0
  221. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  222. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  223. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  224. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  225. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  226. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  227. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  228. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  229. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  230. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  231. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  232. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  233. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  234. data/lib/jets/inflections.rb +32 -0
  235. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  236. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  237. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
  238. data/lib/jets/internal/app/functions/jets/base_path.rb +157 -0
  239. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  240. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  241. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
  242. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  243. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  244. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  245. data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
  246. data/lib/jets/job/base.rb +39 -0
  247. data/lib/jets/job/dsl.rb +40 -0
  248. data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
  249. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  250. data/lib/jets/job/dsl/iot_event.rb +24 -0
  251. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  252. data/lib/jets/job/dsl/log_event.rb +15 -0
  253. data/lib/jets/job/dsl/rule_event.rb +75 -0
  254. data/lib/jets/job/dsl/s3_event.rb +36 -0
  255. data/lib/jets/job/dsl/sns_event.rb +54 -0
  256. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  257. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  258. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  259. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  260. data/lib/jets/klass.rb +109 -0
  261. data/lib/jets/lambda/dsl.rb +419 -0
  262. data/lib/jets/lambda/function.rb +29 -0
  263. data/lib/jets/lambda/function_constructor.rb +55 -0
  264. data/lib/jets/lambda/functions.rb +34 -0
  265. data/lib/jets/lambda/task.rb +111 -0
  266. data/lib/jets/logger.rb +21 -0
  267. data/lib/jets/mega/hash_converter.rb +25 -0
  268. data/lib/jets/mega/request.rb +139 -0
  269. data/lib/jets/mega/request/source.rb +21 -0
  270. data/lib/jets/middleware.rb +33 -0
  271. data/lib/jets/middleware/configurator.rb +84 -0
  272. data/lib/jets/middleware/default_stack.rb +51 -0
  273. data/lib/jets/middleware/layer.rb +34 -0
  274. data/lib/jets/middleware/stack.rb +77 -0
  275. data/lib/jets/naming.rb +49 -0
  276. data/lib/jets/overrides/lambda.rb +1 -0
  277. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  278. data/lib/jets/overrides/rails.rb +4 -0
  279. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  280. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  281. data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
  282. data/lib/jets/overrides/rails/url_helper.rb +25 -0
  283. data/lib/jets/poly_fun.rb +73 -0
  284. data/lib/jets/poly_fun/base_executor.rb +125 -0
  285. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  286. data/lib/jets/poly_fun/node_error.rb +8 -0
  287. data/lib/jets/poly_fun/node_executor.rb +54 -0
  288. data/lib/jets/poly_fun/python_error.rb +8 -0
  289. data/lib/jets/poly_fun/python_executor.rb +23 -0
  290. data/lib/jets/preheat.rb +117 -0
  291. data/lib/jets/processors/deducer.rb +65 -0
  292. data/lib/jets/processors/main_processor.rb +61 -0
  293. data/lib/jets/rack_server.rb +86 -0
  294. data/lib/jets/rdoc.rb +30 -0
  295. data/lib/jets/resource.rb +71 -0
  296. data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
  297. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  298. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  299. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  300. data/lib/jets/resource/api_gateway/deployment.rb +78 -0
  301. data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
  302. data/lib/jets/resource/api_gateway/method.rb +98 -0
  303. data/lib/jets/resource/api_gateway/resource.rb +101 -0
  304. data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
  305. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
  306. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
  307. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  308. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
  309. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
  310. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
  311. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
  312. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  313. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  314. data/lib/jets/resource/associated.rb +37 -0
  315. data/lib/jets/resource/base.rb +28 -0
  316. data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
  317. data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
  318. data/lib/jets/resource/child_stack/app_class.rb +107 -0
  319. data/lib/jets/resource/child_stack/base.rb +24 -0
  320. data/lib/jets/resource/child_stack/shared.rb +92 -0
  321. data/lib/jets/resource/config/config_rule.rb +74 -0
  322. data/lib/jets/resource/config/managed_rule.rb +15 -0
  323. data/lib/jets/resource/events/rule.rb +31 -0
  324. data/lib/jets/resource/iam/application_role.rb +27 -0
  325. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  326. data/lib/jets/resource/iam/class_role.rb +74 -0
  327. data/lib/jets/resource/iam/function_role.rb +54 -0
  328. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  329. data/lib/jets/resource/iam/policy_document.rb +41 -0
  330. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  331. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  332. data/lib/jets/resource/lambda/function.rb +214 -0
  333. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  334. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  335. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  336. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  337. data/lib/jets/resource/permission.rb +45 -0
  338. data/lib/jets/resource/replacer.rb +85 -0
  339. data/lib/jets/resource/route53/record_set.rb +70 -0
  340. data/lib/jets/resource/s3/bucket.rb +24 -0
  341. data/lib/jets/resource/sns/subscription.rb +29 -0
  342. data/lib/jets/resource/sns/topic.rb +35 -0
  343. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  344. data/lib/jets/resource/sqs/queue.rb +21 -0
  345. data/lib/jets/resource/standardizer.rb +42 -0
  346. data/lib/jets/route.rb +166 -0
  347. data/lib/jets/router.rb +177 -0
  348. data/lib/jets/router/scope.rb +30 -0
  349. data/lib/jets/rule/base.rb +19 -0
  350. data/lib/jets/rule/dsl.rb +110 -0
  351. data/lib/jets/spec_helpers.rb +54 -0
  352. data/lib/jets/spec_helpers/params.rb +10 -0
  353. data/lib/jets/spec_helpers/request.rb +78 -0
  354. data/lib/jets/spec_helpers/response.rb +5 -0
  355. data/lib/jets/stack.rb +88 -0
  356. data/lib/jets/stack/builder.rb +43 -0
  357. data/lib/jets/stack/definition.rb +50 -0
  358. data/lib/jets/stack/depends.rb +34 -0
  359. data/lib/jets/stack/depends/item.rb +9 -0
  360. data/lib/jets/stack/function.rb +69 -0
  361. data/lib/jets/stack/main.rb +4 -0
  362. data/lib/jets/stack/main/dsl.rb +28 -0
  363. data/lib/jets/stack/main/dsl/base.rb +49 -0
  364. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  365. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  366. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  367. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  368. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  369. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  370. data/lib/jets/stack/output.rb +35 -0
  371. data/lib/jets/stack/output/dsl.rb +19 -0
  372. data/lib/jets/stack/output/lookup.rb +36 -0
  373. data/lib/jets/stack/parameter.rb +37 -0
  374. data/lib/jets/stack/parameter/dsl.rb +42 -0
  375. data/lib/jets/stack/resource.rb +31 -0
  376. data/lib/jets/stack/resource/dsl.rb +19 -0
  377. data/lib/jets/stack/s3_event.rb +87 -0
  378. data/lib/jets/tmp_loader.rb +52 -0
  379. data/lib/jets/turbine.rb +41 -0
  380. data/lib/jets/turbo.rb +55 -0
  381. data/lib/jets/turbo/database_yaml.rb +41 -0
  382. data/lib/jets/turbo/project/.gitignore +12 -0
  383. data/lib/jets/turbo/project/.jetskeep +1 -0
  384. data/lib/jets/turbo/project/Gemfile +16 -0
  385. data/lib/jets/turbo/project/Rakefile +2 -0
  386. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  387. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  388. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  389. data/lib/jets/turbo/project/config.ru +5 -0
  390. data/lib/jets/turbo/project/config/application.rb +4 -0
  391. data/lib/jets/turbo/project/config/routes.rb +4 -0
  392. data/lib/jets/turbo/rails.rb +127 -0
  393. data/lib/jets/turbo/templates/config/database.yml +26 -0
  394. data/lib/jets/util.rb +38 -0
  395. data/lib/jets/version.rb +3 -0
  396. data/readme/prerelease.md +6 -0
  397. data/readme/testing.md +60 -0
  398. metadata +1004 -0
@@ -0,0 +1,27 @@
1
+ $stdout.sync = true unless ENV["JETS_STDOUT_SYNC"] == "0"
2
+
3
+ $:.unshift(File.expand_path("../", __FILE__))
4
+ require "active_support"
5
+ require "active_support/concern"
6
+ require "active_support/core_ext"
7
+ require "active_support/dependencies"
8
+ require "active_support/ordered_hash"
9
+ require "active_support/ordered_options"
10
+ require "fileutils"
11
+ require "memoist"
12
+ require "rainbow/ext/string"
13
+ require "jets/gems"
14
+
15
+ require "jets/autoloaders"
16
+ Jets::Autoloaders.log! if ENV["JETS_AUTOLOAD_LOG"]
17
+ Jets::Autoloaders.once.setup
18
+
19
+ module Jets
20
+ RUBY_VERSION = "2.5.3"
21
+ MAX_FUNCTION_NAME_SIZE = 64
22
+
23
+ class Error < StandardError; end
24
+ extend Core # root, logger, etc
25
+ end
26
+
27
+ Jets::Autoloaders.once.preload("#{__dir__}/jets/db.rb") # required for booter.rb: setup_db
@@ -0,0 +1,216 @@
1
+ require "singleton"
2
+ require "rack"
3
+
4
+ class Jets::Application
5
+ include Singleton
6
+ extend Memoist
7
+ include Jets::Middleware
8
+ include Defaults
9
+
10
+ def configure(&block)
11
+ instance_eval(&block) if block
12
+ end
13
+
14
+ def setup!
15
+ load_default_config
16
+ autoload_paths = config.autoload_paths + config.extra_autoload_paths
17
+ setup_auto_load_paths(autoload_paths)
18
+ end
19
+
20
+ def configs!
21
+ load_environments_config
22
+ load_db_config
23
+ set_iam_policy # relies on dependent values, must be called afterwards
24
+ normalize_env_vars!
25
+ end
26
+
27
+ # After the mimimal template gets build, we need to reload it for the full stack
28
+ # creation. This allows us to reference IAM policies configs that depend on the
29
+ # creation of the s3 bucket.
30
+ def reload_configs!
31
+ # Tricky: reset only the things that depends on the minimal stack
32
+ @config.iam_policy = nil
33
+ configs!
34
+ end
35
+
36
+ def finish!
37
+ deprecated_configs_message
38
+ load_inflections
39
+ load_routes
40
+
41
+ Jets::Controller::Rendering::RackRenderer.setup! # Sets up ActionView etc
42
+ # Load libraries at the end to trigger onload so we can defined options in any order.
43
+ # Only action_mailer library have been used properly this way so far.
44
+ require 'action_mailer'
45
+ end
46
+
47
+ def load_inflections
48
+ Jets::Inflections.load!
49
+ end
50
+
51
+ def config
52
+ @config ||= ActiveSupport::OrderedOptions.new # dont use memoize since we reset @config later
53
+ end
54
+
55
+ # Double evaling config/application.rb causes subtle issues:
56
+ # * double loading of shared resources: Jets::Stack.subclasses will have the same
57
+ # class twice when config is called when declaring a function
58
+ # * forces us to rescue all exceptions, which is a big hammer
59
+ #
60
+ # Lets parse for the project name instead for now.
61
+ #
62
+ def parse_project_name
63
+ return ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME'] # override
64
+
65
+ lines = IO.readlines("#{Jets.root}/config/application.rb")
66
+ project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ }
67
+ project_name_line.gsub(/.*=/,'').strip.gsub(/["']/,'') # project_name
68
+ end
69
+
70
+ def load_default_config
71
+ @config = default_config # sets Jets.config.project_name by calling parse_project_name
72
+ set_computed_configs! # things like project_namespace that need project_name
73
+ Jets::Dotenv.load! # needs Jets.config.project_name when using ssm in dotenv files
74
+ Jets.config.project_name = parse_project_name # Must set again because JETS_PROJECT_NAME is possible
75
+ load_config_application # this overwrites Jets.config.project_name
76
+ end
77
+
78
+ def load_config_application
79
+ app_config = "#{Jets.root}/config/application.rb"
80
+ load app_config # use load instead of require so reload_configs! works
81
+ end
82
+
83
+ def load_environments_config
84
+ env_file = "#{Jets.root}/config/environments/#{Jets.env}.rb"
85
+ if File.exist?(env_file)
86
+ code = IO.read(env_file)
87
+ instance_eval(code, env_file)
88
+ end
89
+ end
90
+
91
+ def deprecated_configs_message
92
+ unless config.ruby.lazy_load.nil?
93
+ puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".color(:yellow)
94
+ puts "Deprecated: config.ruby.lazy_load".color(:yellow)
95
+ puts "Gems are now bundled with with Lambda Layer and there's no need to lazy load them."
96
+ puts "Please remove the config in your config/application.rb or config/environments files."
97
+ puts "You can have Jets automatically do this by running:"
98
+ puts " jets upgrade"
99
+ end
100
+ end
101
+
102
+ def setup_auto_load_paths(autoload_paths=default_autoload_paths)
103
+ loader = Jets::Autoloaders.main
104
+ autoload_paths.each do |path|
105
+ next unless File.exist?(path)
106
+ loader.push_dir(path)
107
+ end
108
+ loader.enable_reloading if Jets.env.development?
109
+ loader.setup
110
+ end
111
+
112
+ def each_app_autoload_path(expression)
113
+ Dir.glob(expression).each do |p|
114
+ p.sub!('./','')
115
+ yield(p) unless exclude_autoload_path?(p)
116
+ end
117
+ end
118
+
119
+ def exclude_autoload_path?(path)
120
+ path =~ %r{app/javascript} ||
121
+ path =~ %r{app/views} ||
122
+ path =~ %r{/functions} # app and shared
123
+ end
124
+
125
+ def internal_autoload_paths
126
+ internal = File.expand_path("../internal", __FILE__)
127
+ paths = %w[
128
+ app/controllers
129
+ app/helpers
130
+ app/jobs
131
+ app/models
132
+ ]
133
+ paths.map { |path| "#{internal}/#{path}" }
134
+ end
135
+
136
+ # Use the shorter name in stack names, but use the full name when it
137
+ # comes to checking for the env.
138
+ #
139
+ # Example:
140
+ #
141
+ # Jets.env: 'development'
142
+ # Jets.config.project_namespace: 'demo-dev'
143
+ ENV_MAP = {
144
+ development: 'dev',
145
+ production: 'prod',
146
+ staging: 'stag',
147
+ }
148
+ def set_computed_configs!
149
+ # env_extra can be also be set with JETS_ENV_EXTRA.
150
+ # JETS_ENV_EXTRA higher precedence than config.env_extra
151
+ config.env_extra = ENV['JETS_ENV_EXTRA'] if ENV['JETS_ENV_EXTRA']
152
+ # IE: With env_extra: project-dev-1
153
+ # Without env_extra: project-dev
154
+ config.short_env = ENV_MAP[Jets.env.to_sym] || Jets.env
155
+ # table_namespace does not have the env_extra, more common case desired.
156
+ config.table_namespace = [config.project_name, config.short_env].compact.join('-')
157
+
158
+ config.project_namespace = Jets.project_namespace
159
+ end
160
+
161
+ def set_iam_policy
162
+ config.iam_policy ||= self.class.default_iam_policy
163
+ config.managed_policy_definitions ||= [] # default empty
164
+ end
165
+
166
+ # It is pretty easy to attempt to set environment variables without
167
+ # the correct AWS Environment.Variables path struture.
168
+ # Auto-fix it for convenience.
169
+ def normalize_env_vars!
170
+ environment = config.function.environment
171
+ if environment and !environment.to_h.key?(:variables)
172
+ config.function.environment = {
173
+ variables: environment.to_h
174
+ }
175
+ end
176
+ end
177
+
178
+ def load_db_config
179
+ config.database = {}
180
+
181
+ Jets::Dotenv.load!
182
+ database_yml = "#{Jets.root}/config/database.yml"
183
+ if File.exist?(database_yml)
184
+ text = Jets::Erb.result(database_yml)
185
+ db_config = YAML.load(text)
186
+ config.database = db_config
187
+ end
188
+ end
189
+
190
+ # Naming it routes because config/routes.rb requires
191
+ #
192
+ # Jets.application.routes.draw do
193
+ #
194
+ # for scaffolding to work.
195
+ def routes
196
+ @router ||= Jets::Router.new
197
+ end
198
+
199
+ def load_routes(refresh: false)
200
+ @router = nil if refresh # clear_routes
201
+
202
+ routes_file = "#{Jets.root}/config/routes.rb"
203
+ return unless File.exist?(routes_file)
204
+ if refresh
205
+ load routes_file # always evaluate
206
+ else
207
+ require routes_file # evaluate once
208
+ end
209
+ end
210
+
211
+ def aws
212
+ Jets::AwsInfo.new
213
+ end
214
+ memoize :aws
215
+
216
+ end
@@ -0,0 +1,172 @@
1
+ class Jets::Application
2
+ module Defaults
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def self.default_iam_policy
7
+ project_namespace = Jets.project_namespace
8
+ logs = {
9
+ action: ["logs:*"],
10
+ effect: "Allow",
11
+ resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
12
+ }
13
+ s3_bucket = Jets.aws.s3_bucket
14
+ s3_readonly = {
15
+ action: ["s3:Get*", "s3:List*"],
16
+ effect: "Allow",
17
+ resource: "arn:aws:s3:::#{s3_bucket}*",
18
+ }
19
+ s3_bucket = {
20
+ action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
21
+ effect: "Allow",
22
+ resource: "arn:aws:s3:::*", # scoped to all buckets
23
+ }
24
+ policies = [logs, s3_readonly, s3_bucket]
25
+
26
+ cloudformation = {
27
+ action: ["cloudformation:DescribeStacks", "cloudformation:DescribeStackResources"],
28
+ effect: "Allow",
29
+ resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
30
+ }
31
+ policies << cloudformation
32
+
33
+ if Jets.config.function.vpc_config
34
+ vpc = {
35
+ action: %w[
36
+ ec2:CreateNetworkInterface
37
+ ec2:DeleteNetworkInterface
38
+ ec2:DescribeNetworkInterfaces
39
+ ec2:DescribeVpcs
40
+ ec2:DescribeSubnets
41
+ ec2:DescribeSecurityGroups
42
+ ],
43
+ effect: "Allow",
44
+ resource: "*",
45
+ }
46
+ policies << vpc
47
+ end
48
+
49
+ policies
50
+ end
51
+ end
52
+
53
+ def default_config
54
+ config = ActiveSupport::OrderedOptions.new
55
+ config.project_name = parse_project_name # must set early because other configs requires this
56
+ config.cors = false
57
+ config.autoload_paths = default_autoload_paths
58
+ config.extra_autoload_paths = []
59
+ config.logger = Jets::Logger.new($stderr)
60
+
61
+ # function properties defaults
62
+ config.function = ActiveSupport::OrderedOptions.new
63
+ config.function.timeout = 30
64
+ # default memory setting based on:
65
+ # https://medium.com/epsagon/how-to-make-lambda-faster-memory-performance-benchmark-be6ebc41f0fc
66
+ config.function.memory_size = 1536
67
+
68
+ config.prewarm = ActiveSupport::OrderedOptions.new
69
+ config.prewarm.enable = true
70
+ config.prewarm.rate = '30 minutes'
71
+ config.prewarm.concurrency = 2
72
+ config.prewarm.public_ratio = 3
73
+ config.prewarm.rack_ratio = 5
74
+
75
+ config.gems = ActiveSupport::OrderedOptions.new
76
+ config.gems.sources = [
77
+ Jets.default_gems_source
78
+ ]
79
+
80
+ config.inflections = ActiveSupport::OrderedOptions.new
81
+ config.inflections.irregular = {}
82
+
83
+ config.assets = ActiveSupport::OrderedOptions.new
84
+ config.assets.folders = %w[assets images packs]
85
+ config.assets.base_url = nil # IE: https://cloudfront.com/my/base/path
86
+ config.assets.max_age = 3600
87
+ config.assets.cache_control = nil # IE: public, max-age=3600 , max_age is a shorter way to set cache_control.
88
+
89
+ config.ruby = ActiveSupport::OrderedOptions.new
90
+
91
+ config.middleware = Jets::Middleware::Configurator.new
92
+
93
+ config.session = ActiveSupport::OrderedOptions.new
94
+ config.session.store = Rack::Session::Cookie # note when accessing it use session[:store] since .store is an OrderedOptions method
95
+ config.session.options = {}
96
+
97
+ config.api = ActiveSupport::OrderedOptions.new
98
+ config.api.authorization_type = "NONE"
99
+ config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
100
+ config.api.binary_media_types = ['multipart/form-data']
101
+ config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
102
+
103
+ config.domain = ActiveSupport::OrderedOptions.new
104
+ # config.domain.name = "#{Jets.project_namespace}.coolapp.com" # Default is nil
105
+ # config.domain.cert_arn = "..."
106
+ config.domain.endpoint_type = "REGIONAL" # EDGE or REGIONAL. Default to EDGE because CloudFormation update is faster
107
+ config.domain.route53 = true # controls whether or not to create the managed route53 record.
108
+ # Useful to disable this when user wants to manage the route themself like pointing
109
+ # it to CloudFront for blue-green deployments instead.
110
+
111
+ # Custom user lambda layers
112
+ config.lambda = ActiveSupport::OrderedOptions.new
113
+ config.lambda.layers = []
114
+
115
+ # Only used for Jets Afterburner, Mega Mode currently. This is a fallback default
116
+ # encoding. Usually, the Rails response will return a content-type header and
117
+ # the encoding in there is used when possible. Example Content-Type header:
118
+ # Content-Type text/html; charset=utf-8
119
+ config.encoding = ActiveSupport::OrderedOptions.new
120
+ config.encoding.default = "utf-8"
121
+
122
+ config.s3_event = ActiveSupport::OrderedOptions.new
123
+ # These notification_configuration properties correspond to the ruby aws-sdk
124
+ # s3.put_bucket_notification_configuration
125
+ # in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
126
+ # bucket properties have a similiar structure but is slightly different so it can be confusing.
127
+ #
128
+ # Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
129
+ config.s3_event.configure_bucket = true
130
+ config.s3_event.notification_configuration = {
131
+ topic_configurations: [
132
+ {
133
+ events: ["s3:ObjectCreated:*"],
134
+ topic_arn: "!Ref SnsTopic", # must use this logical id
135
+ },
136
+ ],
137
+ }
138
+
139
+ # So tried to defined this in the jets/mailer.rb Turbine only but jets new requires it
140
+ # config.action_mailer = ActiveSupport::OrderedOptions.new
141
+
142
+ config
143
+ end
144
+
145
+ # Essentially folders under app folder will be the default_autoload_paths. Example:
146
+ # app/controllers
147
+ # app/helpers
148
+ # app/jobs
149
+ # app/models
150
+ # app/rules
151
+ # app/shared/resources
152
+ #
153
+ # Also include:
154
+ # app/models/concerns
155
+ # app/controllers/concerns
156
+ def default_autoload_paths
157
+ paths = []
158
+ each_app_autoload_path("#{Jets.root}/app/*") do |path|
159
+ paths << path
160
+ end
161
+ # Handle concerns folders
162
+ each_app_autoload_path("#{Jets.root}/app/**/concerns") do |path|
163
+ paths << path
164
+ end
165
+
166
+ paths << "#{Jets.root}/app/shared/resources"
167
+ paths << "#{Jets.root}/app/shared/extensions"
168
+
169
+ paths
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,97 @@
1
+ require "jets/bundle"
2
+ Jets::Bundle.setup
3
+ require "zeitwerk"
4
+
5
+ module Jets
6
+ module Autoloaders
7
+ class OnceInflector < Zeitwerk::Inflector
8
+ def camelize(basename, _abspath)
9
+ map = {
10
+ cli: "CLI",
11
+ io: "IO",
12
+ version: "VERSION"
13
+ }
14
+ map[basename.to_sym] || super
15
+ end
16
+ end
17
+
18
+ class << self
19
+ extend Memoist
20
+
21
+ def log!
22
+ main.log!
23
+ once.log!
24
+ end
25
+
26
+ def main
27
+ Zeitwerk::Loader.new.tap do |loader|
28
+ loader.tag = "jets.main"
29
+ # loader.inflector = Inflector.new # TODO: allow custom app inflector
30
+ loader.ignore("#{Jets.root}/app/shared/functions")
31
+ end
32
+ end
33
+ memoize :main
34
+
35
+ def once
36
+ Zeitwerk::Loader.new.tap do |loader|
37
+ loader.tag = "jets.once"
38
+ loader.inflector = OnceInflector.new
39
+
40
+ loader.push_dir("#{__dir__}/..")
41
+ internal_app_paths.each do |path|
42
+ loader.push_dir("#{__dir__}/#{path}")
43
+ # Cannot eager load internal app classes because need the app first for classes like ApplicationHelper
44
+ loader.do_not_eager_load("#{__dir__}/#{path}")
45
+ end
46
+
47
+ do_not_eager_load_paths.each do |path|
48
+ loader.do_not_eager_load("#{__dir__}/#{path}")
49
+ end
50
+
51
+ ignore_paths.each do |path|
52
+ loader.ignore("#{__dir__}/#{path}")
53
+ end
54
+ end
55
+ end
56
+ memoize :once
57
+
58
+ private
59
+ def internal_app_paths
60
+ %w[
61
+ internal/app/controllers
62
+ internal/app/helpers
63
+ internal/app/jobs
64
+ internal/turbines
65
+ ]
66
+ end
67
+
68
+ # Do eager load but allow autoloading. Specs related files make sense here.
69
+ def do_not_eager_load_paths
70
+ %w[
71
+ cli
72
+ spec_helpers
73
+ spec_helpers.rb
74
+ generator
75
+ ]
76
+ end
77
+
78
+ # These files will not be eager loaded and also will not follow the autoloading convention.
79
+ # They are generally explictly required.
80
+ def ignore_paths
81
+ # eager loading builders/rackup_wrappers - will cause the program to exit
82
+ %w[
83
+ builders/rackup_wrappers
84
+ builders/reconfigure_rails
85
+ builders/templates
86
+ commands/templates
87
+ controller/middleware/webpacker_setup.rb
88
+ core_ext
89
+ internal
90
+ overrides
91
+ turbo/project
92
+ ]
93
+ end
94
+ end
95
+ end
96
+ end
97
+