jets-fs 1.6.10

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 (379) 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 +73 -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 +6 -0
  21. data/.python-version +1 -0
  22. data/.rspec +4 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +533 -0
  25. data/Dockerfile +16 -0
  26. data/Dockerfile.base +53 -0
  27. data/Gemfile +14 -0
  28. data/Gemfile.lock +190 -0
  29. data/Guardfile +22 -0
  30. data/LICENSE.txt +22 -0
  31. data/Procfile +2 -0
  32. data/README.md +203 -0
  33. data/Rakefile +21 -0
  34. data/backers.md +16 -0
  35. data/bin/release +9 -0
  36. data/buildspec.yml +18 -0
  37. data/exe/jets +14 -0
  38. data/jets.gemspec +61 -0
  39. data/lib/jets.rb +71 -0
  40. data/lib/jets/application.rb +308 -0
  41. data/lib/jets/aws_info.rb +111 -0
  42. data/lib/jets/aws_services.rb +60 -0
  43. data/lib/jets/aws_services/stack_status.rb +59 -0
  44. data/lib/jets/booter.rb +130 -0
  45. data/lib/jets/builders.rb +16 -0
  46. data/lib/jets/builders/code_builder.rb +379 -0
  47. data/lib/jets/builders/code_size.rb +57 -0
  48. data/lib/jets/builders/gem_replacer.rb +76 -0
  49. data/lib/jets/builders/handler_generator.rb +172 -0
  50. data/lib/jets/builders/lambda_layer.rb +69 -0
  51. data/lib/jets/builders/md5.rb +60 -0
  52. data/lib/jets/builders/md5_zip.rb +61 -0
  53. data/lib/jets/builders/purger.rb +35 -0
  54. data/lib/jets/builders/rack_packager.rb +51 -0
  55. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  56. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  57. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  58. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  59. data/lib/jets/builders/ruby_packager.rb +207 -0
  60. data/lib/jets/builders/shim_vars.rb +5 -0
  61. data/lib/jets/builders/shim_vars/app.rb +78 -0
  62. data/lib/jets/builders/shim_vars/base.rb +25 -0
  63. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  64. data/lib/jets/builders/templates/handler.rb +12 -0
  65. data/lib/jets/builders/tidy.rb +107 -0
  66. data/lib/jets/builders/util.rb +31 -0
  67. data/lib/jets/camelizer.rb +67 -0
  68. data/lib/jets/cfn.rb +6 -0
  69. data/lib/jets/cfn/builders.rb +20 -0
  70. data/lib/jets/cfn/builders/api_deployment_builder.rb +58 -0
  71. data/lib/jets/cfn/builders/api_gateway_builder.rb +80 -0
  72. data/lib/jets/cfn/builders/base_child_builder.rb +82 -0
  73. data/lib/jets/cfn/builders/controller_builder.rb +42 -0
  74. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  75. data/lib/jets/cfn/builders/interface.rb +127 -0
  76. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  77. data/lib/jets/cfn/builders/parent_builder.rb +93 -0
  78. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  79. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  80. data/lib/jets/cfn/ship.rb +189 -0
  81. data/lib/jets/cfn/status.rb +212 -0
  82. data/lib/jets/cfn/upload.rb +139 -0
  83. data/lib/jets/cli.rb +189 -0
  84. data/lib/jets/commands.rb +27 -0
  85. data/lib/jets/commands/base.rb +164 -0
  86. data/lib/jets/commands/build.rb +217 -0
  87. data/lib/jets/commands/call.rb +174 -0
  88. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  89. data/lib/jets/commands/call/autoload_guesser.rb +112 -0
  90. data/lib/jets/commands/call/base_guesser.rb +33 -0
  91. data/lib/jets/commands/call/guesser.rb +48 -0
  92. data/lib/jets/commands/clean.rb +23 -0
  93. data/lib/jets/commands/clean/base.rb +24 -0
  94. data/lib/jets/commands/clean/build.rb +13 -0
  95. data/lib/jets/commands/clean/log.rb +107 -0
  96. data/lib/jets/commands/console.rb +13 -0
  97. data/lib/jets/commands/db.rb +15 -0
  98. data/lib/jets/commands/db/environment-task.rake +3 -0
  99. data/lib/jets/commands/db/tasks.rb +44 -0
  100. data/lib/jets/commands/dbconsole.rb +131 -0
  101. data/lib/jets/commands/delete.rb +143 -0
  102. data/lib/jets/commands/deploy.rb +131 -0
  103. data/lib/jets/commands/dynamodb.rb +22 -0
  104. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  105. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  106. data/lib/jets/commands/gems.rb +21 -0
  107. data/lib/jets/commands/help.rb +9 -0
  108. data/lib/jets/commands/help/build.md +6 -0
  109. data/lib/jets/commands/help/call.md +61 -0
  110. data/lib/jets/commands/help/clean/build.md +5 -0
  111. data/lib/jets/commands/help/clean/log.md +5 -0
  112. data/lib/jets/commands/help/console.md +18 -0
  113. data/lib/jets/commands/help/db/generate.md +8 -0
  114. data/lib/jets/commands/help/dbconsole.md +9 -0
  115. data/lib/jets/commands/help/delete.md +22 -0
  116. data/lib/jets/commands/help/deploy.md +32 -0
  117. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  118. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  119. data/lib/jets/commands/help/gems/check.md +8 -0
  120. data/lib/jets/commands/help/generate.md +22 -0
  121. data/lib/jets/commands/help/import/rack.md +13 -0
  122. data/lib/jets/commands/help/import/rails.md +11 -0
  123. data/lib/jets/commands/help/new.md +42 -0
  124. data/lib/jets/commands/help/routes.md +16 -0
  125. data/lib/jets/commands/help/runner.md +17 -0
  126. data/lib/jets/commands/help/server.md +15 -0
  127. data/lib/jets/commands/help/status.md +14 -0
  128. data/lib/jets/commands/help/upgrade.md +5 -0
  129. data/lib/jets/commands/help/url.md +6 -0
  130. data/lib/jets/commands/import.rb +18 -0
  131. data/lib/jets/commands/import/base.rb +49 -0
  132. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  133. data/lib/jets/commands/import/rack.rb +16 -0
  134. data/lib/jets/commands/import/rail.rb +74 -0
  135. data/lib/jets/commands/import/sequence.rb +90 -0
  136. data/lib/jets/commands/import/templates/config/database.yml +26 -0
  137. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  138. data/lib/jets/commands/main.rb +152 -0
  139. data/lib/jets/commands/markdown.rb +8 -0
  140. data/lib/jets/commands/markdown/creator.rb +58 -0
  141. data/lib/jets/commands/markdown/index.rb +27 -0
  142. data/lib/jets/commands/markdown/page.rb +125 -0
  143. data/lib/jets/commands/markdown/shell.rb +11 -0
  144. data/lib/jets/commands/new.rb +157 -0
  145. data/lib/jets/commands/rake_command.rb +61 -0
  146. data/lib/jets/commands/rake_tasks.rb +45 -0
  147. data/lib/jets/commands/runner.rb +18 -0
  148. data/lib/jets/commands/sequence.rb +99 -0
  149. data/lib/jets/commands/stack_info.rb +30 -0
  150. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  151. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  152. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  153. data/lib/jets/commands/templates/skeleton/Gemfile.tt +35 -0
  154. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  155. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  156. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  157. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  158. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  159. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  160. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  161. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  162. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
  163. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  164. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +66 -0
  165. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
  166. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  167. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +4 -0
  168. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +4 -0
  169. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  170. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  171. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  172. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  173. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  174. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  175. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  176. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  177. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  178. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  179. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  180. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  181. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  182. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  183. data/lib/jets/commands/upgrade.rb +146 -0
  184. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  185. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  186. data/lib/jets/commands/url.rb +68 -0
  187. data/lib/jets/commands/webpacker_template.rb +18 -0
  188. data/lib/jets/controller.rb +16 -0
  189. data/lib/jets/controller/base.rb +103 -0
  190. data/lib/jets/controller/callbacks.rb +62 -0
  191. data/lib/jets/controller/cookies.rb +40 -0
  192. data/lib/jets/controller/cookies/jar.rb +269 -0
  193. data/lib/jets/controller/layout.rb +17 -0
  194. data/lib/jets/controller/middleware.rb +5 -0
  195. data/lib/jets/controller/middleware/cors.rb +60 -0
  196. data/lib/jets/controller/middleware/local.rb +119 -0
  197. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  198. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  199. data/lib/jets/controller/middleware/local/route_matcher.rb +97 -0
  200. data/lib/jets/controller/middleware/main.rb +46 -0
  201. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  202. data/lib/jets/controller/params.rb +87 -0
  203. data/lib/jets/controller/rack.rb +5 -0
  204. data/lib/jets/controller/rack/adapter.rb +63 -0
  205. data/lib/jets/controller/rack/env.rb +105 -0
  206. data/lib/jets/controller/redirection.rb +55 -0
  207. data/lib/jets/controller/rendering.rb +84 -0
  208. data/lib/jets/controller/rendering/rack_renderer.rb +238 -0
  209. data/lib/jets/controller/request.rb +29 -0
  210. data/lib/jets/controller/response.rb +61 -0
  211. data/lib/jets/core.rb +211 -0
  212. data/lib/jets/core_ext/kernel.rb +56 -0
  213. data/lib/jets/db.rb +15 -0
  214. data/lib/jets/dotenv.rb +39 -0
  215. data/lib/jets/erb.rb +51 -0
  216. data/lib/jets/generator.rb +41 -0
  217. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  218. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  219. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  220. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  221. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  222. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  223. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  224. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  225. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  226. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  227. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  228. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  229. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  230. data/lib/jets/inflections.rb +32 -0
  231. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  232. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
  233. data/lib/jets/internal/app/functions/jets/base_path.rb +153 -0
  234. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +62 -0
  235. data/lib/jets/io.rb +14 -0
  236. data/lib/jets/job.rb +4 -0
  237. data/lib/jets/job/base.rb +29 -0
  238. data/lib/jets/job/dsl.rb +108 -0
  239. data/lib/jets/klass.rb +109 -0
  240. data/lib/jets/lambda.rb +18 -0
  241. data/lib/jets/lambda/dsl.rb +384 -0
  242. data/lib/jets/lambda/function.rb +29 -0
  243. data/lib/jets/lambda/function_constructor.rb +55 -0
  244. data/lib/jets/lambda/functions.rb +34 -0
  245. data/lib/jets/lambda/task.rb +111 -0
  246. data/lib/jets/logger.rb +24 -0
  247. data/lib/jets/mega.rb +7 -0
  248. data/lib/jets/mega/hash_converter.rb +25 -0
  249. data/lib/jets/mega/request.rb +140 -0
  250. data/lib/jets/mega/request/source.rb +21 -0
  251. data/lib/jets/middleware.rb +38 -0
  252. data/lib/jets/middleware/configurator.rb +84 -0
  253. data/lib/jets/middleware/default_stack.rb +49 -0
  254. data/lib/jets/middleware/layer.rb +34 -0
  255. data/lib/jets/middleware/stack.rb +77 -0
  256. data/lib/jets/naming.rb +49 -0
  257. data/lib/jets/overrides/lambda.rb +1 -0
  258. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  259. data/lib/jets/overrides/rails.rb +4 -0
  260. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  261. data/lib/jets/overrides/rails/common_methods.rb +20 -0
  262. data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
  263. data/lib/jets/overrides/rails/url_helper.rb +25 -0
  264. data/lib/jets/poly_fun.rb +82 -0
  265. data/lib/jets/poly_fun/base_executor.rb +125 -0
  266. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  267. data/lib/jets/poly_fun/node_error.rb +8 -0
  268. data/lib/jets/poly_fun/node_executor.rb +54 -0
  269. data/lib/jets/poly_fun/python_error.rb +8 -0
  270. data/lib/jets/poly_fun/python_executor.rb +23 -0
  271. data/lib/jets/preheat.rb +117 -0
  272. data/lib/jets/processors.rb +4 -0
  273. data/lib/jets/processors/deducer.rb +65 -0
  274. data/lib/jets/processors/main_processor.rb +59 -0
  275. data/lib/jets/rack_server.rb +80 -0
  276. data/lib/jets/rdoc.rb +30 -0
  277. data/lib/jets/resource.rb +74 -0
  278. data/lib/jets/resource/api_gateway.rb +9 -0
  279. data/lib/jets/resource/api_gateway/base_path.rb +5 -0
  280. data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
  281. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  282. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  283. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  284. data/lib/jets/resource/api_gateway/deployment.rb +78 -0
  285. data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
  286. data/lib/jets/resource/api_gateway/method.rb +98 -0
  287. data/lib/jets/resource/api_gateway/resource.rb +78 -0
  288. data/lib/jets/resource/api_gateway/rest_api.rb +60 -0
  289. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
  290. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
  291. data/lib/jets/resource/api_gateway/rest_api/routes.rb +11 -0
  292. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +12 -0
  293. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
  294. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
  295. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
  296. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +123 -0
  297. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  298. data/lib/jets/resource/associated.rb +26 -0
  299. data/lib/jets/resource/base.rb +28 -0
  300. data/lib/jets/resource/child_stack.rb +7 -0
  301. data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
  302. data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
  303. data/lib/jets/resource/child_stack/app_class.rb +112 -0
  304. data/lib/jets/resource/child_stack/base.rb +24 -0
  305. data/lib/jets/resource/child_stack/shared.rb +90 -0
  306. data/lib/jets/resource/config.rb +4 -0
  307. data/lib/jets/resource/config/config_rule.rb +74 -0
  308. data/lib/jets/resource/config/managed_rule.rb +15 -0
  309. data/lib/jets/resource/events.rb +3 -0
  310. data/lib/jets/resource/events/rule.rb +31 -0
  311. data/lib/jets/resource/iam.rb +8 -0
  312. data/lib/jets/resource/iam/application_role.rb +27 -0
  313. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  314. data/lib/jets/resource/iam/class_role.rb +74 -0
  315. data/lib/jets/resource/iam/function_role.rb +54 -0
  316. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  317. data/lib/jets/resource/iam/policy_document.rb +41 -0
  318. data/lib/jets/resource/lambda.rb +5 -0
  319. data/lib/jets/resource/lambda/function.rb +216 -0
  320. data/lib/jets/resource/lambda/function/environment.rb +61 -0
  321. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  322. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  323. data/lib/jets/resource/permission.rb +45 -0
  324. data/lib/jets/resource/replacer.rb +77 -0
  325. data/lib/jets/resource/route53.rb +3 -0
  326. data/lib/jets/resource/route53/record_set.rb +70 -0
  327. data/lib/jets/resource/s3.rb +17 -0
  328. data/lib/jets/resource/sns.rb +3 -0
  329. data/lib/jets/resource/sqs.rb +3 -0
  330. data/lib/jets/resource/standardizer.rb +42 -0
  331. data/lib/jets/route.rb +166 -0
  332. data/lib/jets/router.rb +175 -0
  333. data/lib/jets/router/scope.rb +30 -0
  334. data/lib/jets/rule.rb +4 -0
  335. data/lib/jets/rule/base.rb +19 -0
  336. data/lib/jets/rule/dsl.rb +110 -0
  337. data/lib/jets/spec_helpers.rb +52 -0
  338. data/lib/jets/spec_helpers/params.rb +10 -0
  339. data/lib/jets/spec_helpers/request.rb +98 -0
  340. data/lib/jets/spec_helpers/response.rb +5 -0
  341. data/lib/jets/stack.rb +103 -0
  342. data/lib/jets/stack/builder.rb +38 -0
  343. data/lib/jets/stack/definition.rb +50 -0
  344. data/lib/jets/stack/function.rb +60 -0
  345. data/lib/jets/stack/main.rb +5 -0
  346. data/lib/jets/stack/main/dsl.rb +33 -0
  347. data/lib/jets/stack/main/extensions/base.rb +45 -0
  348. data/lib/jets/stack/main/extensions/cloudwatch.rb +19 -0
  349. data/lib/jets/stack/main/extensions/lambda.rb +71 -0
  350. data/lib/jets/stack/main/extensions/sns.rb +12 -0
  351. data/lib/jets/stack/main/extensions/sqs.rb +36 -0
  352. data/lib/jets/stack/output.rb +38 -0
  353. data/lib/jets/stack/output/dsl.rb +19 -0
  354. data/lib/jets/stack/output/lookup.rb +36 -0
  355. data/lib/jets/stack/parameter.rb +38 -0
  356. data/lib/jets/stack/parameter/dsl.rb +42 -0
  357. data/lib/jets/stack/resource.rb +32 -0
  358. data/lib/jets/stack/resource/dsl.rb +19 -0
  359. data/lib/jets/tmp_loader.rb +52 -0
  360. data/lib/jets/turbine.rb +30 -0
  361. data/lib/jets/turbo.rb +47 -0
  362. data/lib/jets/turbo/database_yaml.rb +41 -0
  363. data/lib/jets/turbo/project/.gitignore +12 -0
  364. data/lib/jets/turbo/project/.jetskeep +1 -0
  365. data/lib/jets/turbo/project/Gemfile +16 -0
  366. data/lib/jets/turbo/project/Rakefile +2 -0
  367. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  368. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  369. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  370. data/lib/jets/turbo/project/config.ru +5 -0
  371. data/lib/jets/turbo/project/config/application.rb +4 -0
  372. data/lib/jets/turbo/project/config/routes.rb +4 -0
  373. data/lib/jets/turbo/rail.rb +113 -0
  374. data/lib/jets/turbo/templates/config/database.yml +26 -0
  375. data/lib/jets/util.rb +38 -0
  376. data/lib/jets/version.rb +3 -0
  377. data/readme/prerelease.md +6 -0
  378. data/readme/testing.md +60 -0
  379. metadata +859 -0
@@ -0,0 +1,29 @@
1
+ require 'rack/request'
2
+
3
+ class Jets::Controller
4
+ class Request < ::Rack::Request
5
+ def initialize(event, context)
6
+ @event, @context = event, context
7
+ super(env)
8
+ end
9
+
10
+ def env
11
+ @env ||= Jets::Controller::Rack::Env.new(@event, @context).convert # convert to Rack env
12
+ end
13
+
14
+ # When request hits the middleware Controller::Rack::Middleware::Main endpoint
15
+ # We set the it with the updated env since it could had been mutated down the
16
+ # middleware stack.
17
+ def set_env!(env)
18
+ @env = env
19
+ end
20
+
21
+ # API Gateway is inconsistent about how it cases it keys.
22
+ # Sometimes it is "x-requested-with" vs "X-Requested-With"
23
+ # Normalize it with downcase.
24
+ def headers
25
+ headers = @event["headers"] || {}
26
+ headers.transform_keys { |key| key.downcase }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,61 @@
1
+ require 'rack/response'
2
+
3
+ class Jets::Controller
4
+ # The response object. See Rack::Response and Rack::Response::Helpers for
5
+ # more info:
6
+ # http://rubydoc.info/github/rack/rack/master/Rack/Response
7
+ # http://rubydoc.info/github/rack/rack/master/Rack/Response/Helpers
8
+ class Response < ::Rack::Response
9
+ DROP_BODY_RESPONSES = [204, 304]
10
+ def initialize(*)
11
+ super
12
+ # headers['Content-Type'] ||= 'text/html'
13
+ end
14
+
15
+ # TODO: unsure if we should even have these methods. We dont really use them.
16
+ def body=(value)
17
+ value = value.body while Rack::Response === value
18
+ @body = String === value ? [value.to_str] : value
19
+ end
20
+
21
+ def each
22
+ block_given? ? super : enum_for(:each)
23
+ end
24
+
25
+ def finish
26
+ result = body
27
+
28
+ if drop_content_info?
29
+ headers.delete "Content-Length"
30
+ headers.delete "Content-Type"
31
+ end
32
+
33
+ if drop_body?
34
+ close
35
+ result = []
36
+ end
37
+
38
+ if calculate_content_length?
39
+ # if some other code has already set Content-Length, don't muck with it
40
+ # currently, this would be the static file-handler
41
+ headers["Content-Length"] = body.inject(0) { |l, p| l + p.bytesize }.to_s
42
+ end
43
+
44
+ [status.to_i, headers, result]
45
+ end
46
+
47
+ private
48
+
49
+ def calculate_content_length?
50
+ headers["Content-Type"] and not headers["Content-Length"] and Array === body
51
+ end
52
+
53
+ def drop_content_info?
54
+ status.to_i / 100 == 1 or drop_body?
55
+ end
56
+
57
+ def drop_body?
58
+ DROP_BODY_RESPONSES.include?(status.to_i)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,211 @@
1
+ module Jets::Core
2
+ extend Memoist
3
+
4
+ def application
5
+ Jets::Application.instance
6
+ end
7
+
8
+ def config
9
+ application.config
10
+ end
11
+
12
+ def aws
13
+ application.aws
14
+ end
15
+
16
+ # Load all application base classes and project classes
17
+ def boot(options={})
18
+ Jets::Booter.boot!(options)
19
+ end
20
+
21
+ def root
22
+ # Do not memoize this method. Turbo mode can change it
23
+ root = ENV['JETS_ROOT'].to_s
24
+ root = Dir.pwd if root == ''
25
+ Pathname.new(root)
26
+ end
27
+
28
+ def env
29
+ env = ENV['JETS_ENV'] || 'development'
30
+ ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env
31
+ ActiveSupport::StringInquirer.new(env)
32
+ end
33
+ memoize :env
34
+
35
+ def build_root
36
+ "/tmp/jets/#{config.project_name}".freeze
37
+ end
38
+ memoize :build_root
39
+
40
+ def logger
41
+ Jets.application.config.logger
42
+ end
43
+ memoize :logger
44
+
45
+ def webpacker?
46
+ Gem.loaded_specs.keys.include?("webpacker")
47
+ end
48
+ memoize :webpacker?
49
+
50
+ def load_tasks
51
+ Jets::Commands::RakeTasks.load!
52
+ end
53
+
54
+ def version
55
+ Jets::VERSION
56
+ end
57
+
58
+ def eager_load!
59
+ eager_load_jets
60
+ eager_load_app
61
+ end
62
+
63
+ # Eager load jet's lib and classes
64
+ def eager_load_jets
65
+ lib_jets = File.expand_path(".", File.dirname(__FILE__))
66
+ Dir.glob("#{lib_jets}/**/*.rb").select do |path|
67
+ next if !File.file?(path)
68
+ next if skip_eager_load_paths?(path)
69
+
70
+ path = path.sub("#{lib_jets}/","jets/")
71
+ class_name = path
72
+ .sub(/\.rb$/,'') # remove .rb
73
+ .sub(/^\.\//,'') # remove ./
74
+ .sub(/app\/\w+\//,'') # remove app/controllers or app/jobs etc
75
+ .camelize
76
+ # special class mappings
77
+ class_name = class_mappings(class_name)
78
+ class_name.constantize # use constantize instead of require so dont have to worry about order.
79
+ end
80
+ end
81
+
82
+ # Skip these paths because eager loading doesnt work for them.
83
+ def skip_eager_load_paths?(path)
84
+ path =~ %r{/cli} ||
85
+ path =~ %r{/core_ext} ||
86
+ path =~ %r{/default/application} ||
87
+ path =~ %r{/functions} ||
88
+ path =~ %r{/internal/app} ||
89
+ path =~ %r{/jets/stack} ||
90
+ path =~ %r{/overrides} ||
91
+ path =~ %r{/rackup_wrappers} ||
92
+ path =~ %r{/reconfigure_rails} ||
93
+ path =~ %r{/templates/} ||
94
+ path =~ %r{/turbo/project/} ||
95
+ path =~ %r{/version} ||
96
+ path =~ %r{/webpacker} ||
97
+ path =~ %r{/jets/spec}
98
+ end
99
+
100
+ def class_mappings(class_name)
101
+ map = {
102
+ "Jets::Io" => "Jets::IO",
103
+ }
104
+ map[class_name] || class_name
105
+ end
106
+
107
+ # Eager load user's application
108
+ def eager_load_app
109
+ Dir.glob("#{Jets.root}/app/**/*.rb").select do |path|
110
+ next if !File.file?(path) or path =~ %r{/javascript/} or path =~ %r{/views/}
111
+ next if path.include?('app/functions') || path.include?('app/shared/functions') || path.include?('app/internal/functions')
112
+
113
+ class_name = path
114
+ .sub(/\.rb$/,'') # remove .rb
115
+ .sub(%{^\./},'') # remove ./
116
+ .sub("#{Jets.root}/",'')
117
+ .sub(%r{app/shared/\w+/},'') # remove shared/resources or shared/extensions
118
+ .sub(%r{app/\w+/},'') # remove app/controllers or app/jobs etc
119
+ class_name = class_name.classify
120
+ class_name.constantize # use constantize instead of require so dont have to worry about order.
121
+ end
122
+ end
123
+
124
+ # NOTE: In development this will always be 1 because the app gets reloaded.
125
+ # On AWS Lambda, this will be ever increasing until the container gets replaced.
126
+ @@call_count = 0
127
+ def increase_call_count
128
+ @@call_count += 1
129
+ end
130
+
131
+ def call_count
132
+ @@call_count
133
+ end
134
+
135
+ @@prewarm_count = 0
136
+ def increase_prewarm_count
137
+ @@prewarm_count += 1
138
+ end
139
+
140
+ def prewarm_count
141
+ @@prewarm_count
142
+ end
143
+
144
+ def project_namespace
145
+ [config.project_name, config.short_env, config.env_extra].compact.join('-').gsub('_','-')
146
+ end
147
+
148
+ def rack?
149
+ path = "#{Jets.root}/rack"
150
+ File.exist?(path) || File.symlink?(path)
151
+ end
152
+
153
+ def poly_only?
154
+ return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers
155
+ Jets::Commands::Build.poly_only?
156
+ end
157
+
158
+ def report_exception(exception)
159
+ puts "DEPRECATED: report_exception. Use on_exception instead.".color(:yellow)
160
+ on_exception(exception)
161
+ end
162
+
163
+ def on_exception(exception)
164
+ Jets::Turbine.subclasses.each do |subclass|
165
+ reporters = subclass.on_exceptions || []
166
+ reporters.each do |label, block|
167
+ block.call(exception)
168
+ end
169
+ end
170
+ end
171
+
172
+ def custom_domain?
173
+ Jets.config.domain.hosted_zone_name
174
+ end
175
+
176
+ def process(event, context, handler)
177
+ if event['_prewarm']
178
+ Jets.increase_prewarm_count
179
+ Jets.logger.info("Prewarm request")
180
+ {prewarmed_at: Time.now.to_s}
181
+ else
182
+ Jets::Processors::MainProcessor.new(event, context, handler).run
183
+ end
184
+ end
185
+
186
+ def once
187
+ boot
188
+ override_lambda_ruby_runtime
189
+ tmp_load!
190
+ start_rack_server
191
+ end
192
+
193
+ def tmp_load!
194
+ Jets::TmpLoader.load!
195
+ end
196
+
197
+ # Megamode support
198
+ def start_rack_server(options={})
199
+ rack = Jets::RackServer.new(options)
200
+ rack.start
201
+ rack.wait_for_socket
202
+ end
203
+
204
+ def default_gems_source
205
+ "https://gems2.lambdagems.com"
206
+ end
207
+
208
+ def override_lambda_ruby_runtime
209
+ require "jets/overrides/lambda"
210
+ end
211
+ end
@@ -0,0 +1,56 @@
1
+ # Works with io.rb
2
+ # IO.flush # flush output and write to disk for node shim
3
+ module Kernel
4
+ JETS_OUTPUT = "/tmp/jets-output.log"
5
+ @@io_buffer = []
6
+
7
+ # List from https://ruby-doc.org/core-2.5.1/Kernel.html
8
+ # Note, will lose pp format in the @io_buffer but looks like a lot of work to keep the pp format.
9
+ # Must override stdout which can be messy quick: https://www.ruby-forum.com/topic/43725
10
+ OVERRIDE_METHODS = %w[
11
+ p
12
+ pp
13
+ print
14
+ printf
15
+ putc
16
+ puts
17
+ ]
18
+ # NOTE adding sprintf produces #<%s: %s:%s/%s> with puma? So not including sprintf
19
+ OVERRIDE_METHODS.each do |meth|
20
+ # Example of generated code:
21
+ #
22
+ # alias_method :original_puts, :puts
23
+ # def puts(*args, &block)
24
+ # @@io_buffer << args.first # message
25
+ # original_puts(*args, &block)
26
+ # end
27
+ #
28
+ class_eval <<~CODE
29
+ alias_method :original_#{meth}, :#{meth}
30
+ def #{meth}(*args, &block)
31
+ @@io_buffer << args.first # message
32
+ original_#{meth}(*args, &block)
33
+ end
34
+ CODE
35
+ end
36
+
37
+ def io_buffer
38
+ @@io_buffer
39
+ end
40
+
41
+ # Note: Writing binary data to the log will crash the process with an error like this:
42
+ # jets/lib/jets/core_ext/kernel.rb:20:in `write': "\x89" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
43
+ # Rescue and discard it to keep the process alive.
44
+ def io_flush
45
+ chunk = @@io_buffer.join("\n")
46
+ chunk += "\n" unless chunk == ''
47
+ begin
48
+ # since we always append to the file, the node shim is responsible for truncating the file
49
+ IO.write(JETS_OUTPUT, chunk, mode: 'a') if chunk
50
+ # Writing to log with binary content will crash the process so rescuing it and writing an info message.
51
+ rescue Encoding::UndefinedConversionError
52
+ IO.write(JETS_OUTPUT, "[BINARY DATA]\n", mode: 'a')
53
+ end
54
+ @@io_buffer = []
55
+ end
56
+ end
@@ -0,0 +1,15 @@
1
+ module Jets::Db ; end
2
+
3
+ # Thanks: https://makandracards.com/makandra/42521-detecting-if-a-ruby-gem-is-loaded
4
+ if File.exist?("#{Jets.root}/config/database.yml")
5
+ require "active_record"
6
+ specs = Gem.loaded_specs
7
+ require "mysql2" if specs.key?('mysql2')
8
+ require "pg" if specs.key?('pg')
9
+ end
10
+
11
+ if File.exist?("#{Jets.root}/config/dynamodb.yml")
12
+ specs = Gem.loaded_specs
13
+ specs.key?('dynomite')
14
+ require "dynomite" if specs.key?('dynomite')
15
+ end
@@ -0,0 +1,39 @@
1
+ require 'dotenv'
2
+
3
+ class Jets::Dotenv
4
+ def self.load!(remote=false)
5
+ new(remote).load!
6
+ end
7
+
8
+ def initialize(remote=false)
9
+ @remote = remote
10
+ @remote = ENV['JETS_ENV_REMOTE'] if ENV['JETS_ENV_REMOTE']
11
+ end
12
+
13
+ def load!
14
+ ::Dotenv.load(*dotenv_files)
15
+ end
16
+
17
+ # dotenv files with the following precedence:
18
+ #
19
+ # - .env.development.remote (highest)
20
+ # - .env.development.local
21
+ # - .env.development
22
+ # - .env.local - This file is loaded for all environments _except_ `test`.
23
+ # - .env` - The original (lowest)
24
+ #
25
+ def dotenv_files
26
+ files = [
27
+ root.join(".env"),
28
+ (root.join(".env.local") unless Jets.env.test?),
29
+ root.join(".env.#{Jets.env}"),
30
+ root.join(".env.#{Jets.env}.local"),
31
+ ]
32
+ files << root.join(".env.#{Jets.env}.remote") if @remote
33
+ files.reverse.compact # reverse so the precedence is right
34
+ end
35
+
36
+ def root
37
+ Jets.root || Pathname.new(ENV["JETS_ROOT"] || Dir.pwd)
38
+ end
39
+ end
@@ -0,0 +1,51 @@
1
+ require 'erb'
2
+
3
+ # Renders Erb and provide better backtrace where there's an error
4
+ #
5
+ # Usage:
6
+ #
7
+ # result = Jets::Erb.result(path, key1: "val1", key2: "val2")
8
+ #
9
+ class Jets::Erb
10
+ class << self
11
+ def result(path, variables={})
12
+ set_template_variables(variables)
13
+ template = IO.read(path)
14
+ begin
15
+ ERB.new(template, nil, "-").result(binding)
16
+ rescue Exception => e
17
+ puts e
18
+ puts e.backtrace if ENV['JETS_DEBUG']
19
+
20
+ # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
21
+ # syntax errors have the (erb):xxx info in e.message
22
+ # undefined variables have (erb):xxx info in e.backtrac
23
+ error_info = e.message.split("\n").grep(/\(erb\)/)[0]
24
+ error_info ||= e.backtrace.grep(/\(erb\)/)[0]
25
+ raise unless error_info # unable to find the (erb):xxx: error line
26
+ line = error_info.split(':')[1].to_i
27
+ puts "Error evaluating ERB template on line #{line.to_s.color(:red)} of: #{path.sub(/^\.\//, '').color(:green)}"
28
+
29
+ template_lines = template.split("\n")
30
+ context = 5 # lines of context
31
+ top, bottom = [line-context-1, 0].max, line+context-1
32
+ spacing = template_lines.size.to_s.size
33
+ template_lines[top..bottom].each_with_index do |line_content, index|
34
+ line_number = top+index+1
35
+ if line_number == line
36
+ printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
37
+ else
38
+ printf("%#{spacing}d %s\n", line_number, line_content)
39
+ end
40
+ end
41
+ exit 1 unless ENV['TEST']
42
+ end
43
+ end
44
+
45
+ def set_template_variables(variables)
46
+ variables.each do |key, value|
47
+ instance_variable_set(:"@#{key}", value)
48
+ end
49
+ end
50
+ end
51
+ end