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,78 @@
1
+ # Jets::Builders::ShimVars::Shared.new(path)
2
+ #
3
+ # @vars.functions.each do |function_name|
4
+ # @vars.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class App < Base
15
+ # Allow user to specify relative or full path. The right path gets used
16
+ # internally. Example paths:
17
+ # app/controllers/posts_controller.rb
18
+ # app/jobs/hard_job.rb
19
+ # /tmp/jets/build/app_root/app/jobs/hard_job.rb
20
+ # /tmp/jets/build/app_root/app/functions/hello.rb
21
+ def initialize(path)
22
+ @full_path = full(path)
23
+ @relative_path = relative(path)
24
+ end
25
+
26
+ def full(path)
27
+ path = "#{Jets.root}/#{path}" unless path.starts_with?("/")
28
+ path
29
+ end
30
+
31
+ def relative(path)
32
+ full_path = full(path)
33
+ full_path.sub("#{Jets.root}/", "")
34
+ .sub(/.*internal\/app/, "app")
35
+
36
+ end
37
+
38
+ # process_type is key, it will either "controller" or "job".
39
+ # It is used to deduce klass, etc.
40
+ # We get the process_type from the path.
41
+ # Example paths:
42
+ # app/controllers/posts_controller.rb
43
+ # app/jobs/hard_job.rb
44
+ def process_type
45
+ @relative_path.split('/')[1].singularize # controller or job
46
+ end
47
+
48
+ # Returns the public methods of the child_class.
49
+ # Example: [:create, :update]
50
+ def functions
51
+ klass.lambda_functions
52
+ end
53
+
54
+ # Examples: PostsController, HardJob, Hello, HelloFunction
55
+ def klass
56
+ @klass ||= Jets::Klass.from_path(@relative_path)
57
+ end
58
+
59
+ def lang(meth)
60
+ klass.tasks.find
61
+ end
62
+
63
+ # This gets called in the node shim js template
64
+ # IE handlers/controllers/posts_controller.index
65
+ def handler_for(meth)
66
+ # possibly not include _function
67
+ underscored_name = @relative_path.sub(%r{app/(\w+)/},'').sub('.rb','')
68
+ "handlers/#{process_type.pluralize}/#{underscored_name}.#{meth}"
69
+ end
70
+
71
+ # Example return: "handlers/controllers/posts.js"
72
+ # TODO: rename this to dest_path or something better now since using native ruby
73
+ def dest_path
74
+ @relative_path
75
+ .sub("app", "handlers")
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,25 @@
1
+ module Jets::Builders::ShimVars
2
+ class Base
3
+ include Jets::AwsServices
4
+ extend Memoist
5
+
6
+ def s3_bucket
7
+ Jets.aws.s3_bucket
8
+ end
9
+
10
+ def rack_zip
11
+ checksum_zip(:rack)
12
+ end
13
+
14
+ def bundled_zip
15
+ checksum_zip(:bundled)
16
+ end
17
+
18
+ private
19
+ def checksum_zip(name)
20
+ checksum = Jets::Builders::Md5.checksums["stage/#{name}"]
21
+ return unless checksum
22
+ "#{name}-#{checksum}.zip"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ # Jets::Builders::ShimVars::Shared.new(fun)
2
+ #
3
+ # @deducer.functions.each do |function_name|
4
+ # @deducer.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class Shared < Base
15
+ # fun is a Jets::Stack::Function
16
+ def initialize(fun)
17
+ @fun = fun
18
+ end
19
+
20
+ # Always only one element for shared functions
21
+ # functions: IE [:handle]
22
+ def functions
23
+ [@fun.meth] # function_names
24
+ end
25
+
26
+ # Dont need function_name arg but keeping the same interface as parent class
27
+ # IE handlers/shared/functions/bob.handle
28
+ def handler_for(function_name)
29
+ @fun.handler_dest
30
+ end
31
+
32
+ # IE handlers/shared/functions/bob.js
33
+ def dest_path
34
+ @fun.handler_dest
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ require "bundler/setup"
2
+ require "jets"
3
+ Jets.once # runs once in lambda execution context
4
+
5
+ <% @vars.functions.each do |function_name|
6
+ handler = @vars.handler_for(function_name)
7
+ meth = handler.split('.').last
8
+ -%>
9
+ def <%= meth -%>(event:, context:)
10
+ Jets.process(event, context, "<%= handler -%>")
11
+ end
12
+ <% end %>
@@ -0,0 +1,107 @@
1
+ module Jets::Builders
2
+ class Tidy
3
+ include Util
4
+
5
+ def initialize(project_root, noop: false)
6
+ @project_root = project_root
7
+ @noop = noop
8
+ end
9
+
10
+ def cleanup!
11
+ removals.each do |removal|
12
+ removal = removal.sub(%r{^/},'') # remove leading slash
13
+ path = "#{@project_root}/#{removal}"
14
+ rm_rf(path)
15
+ end
16
+
17
+ clean_vendor_gems
18
+ clean_webpack_assets
19
+ end
20
+
21
+ # Clean out unnecessary src and compiled packs because Jets serves them out of s3.
22
+ # This keeps the code size down to help keep it in size limit so we can use the
23
+ # live Lambda console editor.
24
+ def clean_webpack_assets
25
+ FileUtils.rm_rf("#{@project_root}/app/javascript/src")
26
+
27
+ return unless File.exist?("#{@project_root}/public/packs") # this class works for rack subfolder too
28
+ FileUtils.mv("#{@project_root}/public/packs/manifest.json", "#{stage_area}/manifest.json")
29
+ FileUtils.rm_rf("#{@project_root}/public/packs")
30
+ FileUtils.mkdir_p("#{@project_root}/public/packs")
31
+ FileUtils.mv("#{stage_area}/manifest.json", "#{@project_root}/public/packs/manifest.json")
32
+ end
33
+
34
+ def removals
35
+ removals = always_removals
36
+ removals += get_removals("#{@project_root}/.gitignore")
37
+ removals += get_removals("#{@project_root}/.dockerignore")
38
+ removals = removals.reject do |p|
39
+ jetskeep.find do |keep|
40
+ p.include?(keep)
41
+ end
42
+ end
43
+ removals.uniq
44
+ end
45
+
46
+ def get_removals(file)
47
+ path = file
48
+ return [] unless File.exist?(path)
49
+
50
+ removal = File.read(path).split("\n")
51
+ removal.map {|i| i.strip}.reject {|i| i =~ /^#/ || i.empty?}
52
+ # IE: ["/handlers", "/bundled*", "/vendor/jets]
53
+ end
54
+
55
+ # We clean out ignored files pretty aggressively. So provide
56
+ # a way for users to keep files from being cleaned out.
57
+ def jetskeep
58
+ always = %w[.bundle packs]
59
+ path = "#{@project_root}/.jetskeep"
60
+ return always unless File.exist?(path)
61
+
62
+ keep = IO.readlines(path)
63
+ keep = keep.map {|i| i.strip}.reject { |i| i =~ /^#/ || i.empty? }
64
+ (always + keep).uniq
65
+ end
66
+
67
+ # folders to remove in the vendor/gems folder regardless of the level of the folder
68
+ def clean_vendor_gems
69
+ # Thanks: https://stackoverflow.com/questions/11385795/ruby-list-directory-with-dir-including-dotfiles-but-not-and
70
+ Dir.glob("#{@project_root}/vendor/gems/**/*", File::FNM_DOTMATCH).each do |path|
71
+ next unless File.directory?(path)
72
+ dir = File.basename(path)
73
+ next unless always_removals.include?(dir)
74
+
75
+ rm_rf(path)
76
+ end
77
+
78
+ remove_gem_cache
79
+ end
80
+
81
+ # Reason do not remove the cache folder generally is because some gems have
82
+ # actual cache folders that they used.
83
+ def remove_gem_cache
84
+ ruby_minor_version = Jets::RUBY_VERSION.split('.')[0..1].join('.') + '.0'
85
+ cache_path = "#{@project_root}/vendor/gems/ruby/#{ruby_minor_version}/cache"
86
+ FileUtils.rm_rf(cache_path)
87
+ end
88
+
89
+ def rm_rf(path)
90
+ exists = File.exist?("#{path}/.gitkeep") || File.exist?("#{path}/.keep")
91
+ return if exists
92
+
93
+ # say " rm -rf #{path}".color(:yellow) # uncomment to debug
94
+ system("rm -rf #{path}") unless @noop
95
+ end
96
+
97
+ # These directories will be removed regardless of dir level
98
+ def always_removals
99
+ %w[.git spec tmp]
100
+ end
101
+
102
+ def say(message)
103
+ message = "NOOP #{message}" if @noop
104
+ puts message
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,31 @@
1
+ module Jets::Builders
2
+ module Util
3
+ private
4
+ def sh(command)
5
+ puts "=> #{command}".color(:green)
6
+ success = system(command)
7
+ unless success
8
+ puts "#{command} failed to run.".color(:red)
9
+ puts caller[0]
10
+ exit 1
11
+ end
12
+ success
13
+ end
14
+
15
+ def headline(message)
16
+ puts "=> #{message}".color(:cyan)
17
+ end
18
+
19
+ def build_area
20
+ Jets.build_root
21
+ end
22
+
23
+ def stage_area
24
+ "#{build_area}/stage"
25
+ end
26
+
27
+ def cache_area
28
+ "#{build_area}/cache" # cleaner to use full path for this setting
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,82 @@
1
+ require "jets/turbo"
2
+
3
+ module Jets
4
+ # Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
5
+ module Bundle
6
+ # Looks like for zeitwerk module autovivification to work `bundle exec` must be called.
7
+ # This allows zeitwork module autovivification to work even if the user has not called jets with `bundle exec jets`.
8
+ # Bundler.setup is essentially the same as `bundle exec`
9
+ # Reference: https://www.justinweiss.com/articles/what-are-the-differences-between-irb/
10
+ #
11
+ # The Bundler.setup is only necessary because we use Bundler.require after require "zeitwerk" is called.
12
+ #
13
+ # Note, this is called super early right before require "zeitwerk"
14
+ # The initially Bundler.setup does not include the Jets.env group.
15
+ # Later in Jets::Booter, Bundle.require is called and includes the Jets.env group.
16
+ #
17
+ def setup
18
+ return unless bundler_enabled?
19
+ Kernel.require "bundler/setup"
20
+ Bundler.setup # Same as Bundler.setup(:default)
21
+ rescue LoadError => e
22
+ handle_error(e)
23
+ end
24
+
25
+ # Bundler.require called when environment boots up via Jets.boot. This will eagerly require all gems in the
26
+ # Gemfile. This means the user will not have to explictly require dependencies.
27
+ #
28
+ # It also useful for when to loading Rake tasks in Jets::Commands::RakeTasks.load! For example, some gems like
29
+ # webpacker that load rake tasks are specified with a git based source:
30
+ #
31
+ # gem "webpacker", git: "https://github.com/tongueroo/webpacker.git"
32
+ #
33
+ # This results in the user having to specific bundle exec in front of jets for those rake tasks to show up in
34
+ # jets help. Instead, when the user is within the project folder, jets automatically requires bundler for the
35
+ # user. So the rake tasks show up when calling jets help.
36
+ #
37
+ # When the user calls jets help from outside the project folder, bundler is not used and the load errors get
38
+ # rescued gracefully. This is done in Jets::Commands::RakeTasks.load! In the case when user is in another
39
+ # project with another Gemfile, the load errors will also be rescued.
40
+ def require
41
+ return unless bundler_enabled?
42
+ Kernel.require "bundler/setup"
43
+ Bundler.require(*bundler_groups)
44
+ rescue LoadError => e
45
+ handle_error(e)
46
+ end
47
+
48
+ def handle_error(e)
49
+ puts e.message
50
+ puts <<~EOL.color(:yellow)
51
+ WARNING: Unable to require "bundler/setup"
52
+ There may be something funny with your ruby and bundler setup.
53
+ You can try upgrading bundler and rubygems:
54
+
55
+ gem update --system
56
+ gem install bundler
57
+
58
+ Here are some links that may be helpful:
59
+
60
+ * https://bundler.io/blog/2019/01/03/announcing-bundler-2.html
61
+ * https://community.rubyonjets.com/t/jets-1-9-8-install-issue-bundler-setup-missing/185/2
62
+
63
+ Also, running bundle exec in front of your command may remove this message.
64
+ EOL
65
+ end
66
+
67
+ # Also check for Afterburner mode since in that mode jets is a standalone tool.
68
+ def bundler_enabled?
69
+ !Jets::Turbo.afterburner? && gemfile?
70
+ end
71
+
72
+ def gemfile?
73
+ ENV['BUNDLE_GEMFILE'] || File.exist?("Gemfile")
74
+ end
75
+
76
+ def bundler_groups
77
+ [:default, Jets.env.to_sym]
78
+ end
79
+
80
+ extend self
81
+ end
82
+ end
@@ -0,0 +1,71 @@
1
+ # Custom Camelizer with CloudFormation specific handling.
2
+ # Based on: https://stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
3
+ module Jets
4
+ class Camelizer
5
+ class << self
6
+ def transform(value, parent_keys=[])
7
+ case value
8
+ when Array
9
+ value.map { |v| transform(v, parent_keys) }
10
+ when Hash
11
+ initializer = value.map do |k, v|
12
+ new_key = camelize_key(k, parent_keys)
13
+ [new_key, transform(v, parent_keys+[new_key])]
14
+ end
15
+ Hash[initializer]
16
+ else
17
+ value # do not transform values
18
+ end
19
+ end
20
+
21
+ def camelize_key(k, parent_keys=[])
22
+ k = k.to_s
23
+
24
+ if passthrough?(k, parent_keys)
25
+ k # pass through untouch
26
+ elsif parent_keys.last == "EventPattern" # top-level
27
+ k.dasherize
28
+ elsif parent_keys.include?("EventPattern")
29
+ # Any keys at 2nd level under EventPattern will be pascalized
30
+ pascalize(k)
31
+ else
32
+ camelize(k)
33
+ end
34
+ end
35
+
36
+ def passthrough?(k, parent_keys)
37
+ # do not transform keys anything under these special keys
38
+ parent_keys.include?("Variables") ||
39
+ parent_keys.include?("ResponseParameters") ||
40
+ parent_keys.include?("Fn::Sub") ||
41
+ k.include?('-') || k.include?('/')
42
+ end
43
+
44
+ def camelize(value)
45
+ return value if value.is_a?(Integer)
46
+
47
+ value = value.to_s.camelize
48
+ special_map[value] || value
49
+ end
50
+
51
+ def pascalize(value)
52
+ new_value = value.camelize
53
+ first_char = new_value[0..0].downcase
54
+ new_value[0] = first_char
55
+ new_value
56
+ end
57
+
58
+ # Some keys have special mappings
59
+ def special_map
60
+ {
61
+ "TemplateUrl" => "TemplateURL",
62
+ "Ttl" => "TTL",
63
+ "MaxReceiveCount" => "maxReceiveCount",
64
+ "DeadLetterTargetArn" => "deadLetterTargetArn",
65
+ "DbSubnetGroupDescription" => "DBSubnetGroupDescription",
66
+ "DbSubnetGroupName" => "DBSubnetGroupName",
67
+ }
68
+ end
69
+ end
70
+ end
71
+ end