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,42 @@
1
+ class Jets::Stack
2
+ class Parameter
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+ extend Memoist
6
+
7
+ def parameters
8
+ add_common_parameters
9
+ add_depends_on_parameters
10
+ Parameter.definitions(self.class)
11
+ end
12
+
13
+ def add_common_parameters
14
+ self.class.parameter(:iam_role)
15
+ self.class.parameter(:s3_bucket)
16
+ end
17
+
18
+ def add_depends_on_parameters
19
+ depends_on = self.class.depends_on
20
+ depends_on.each do |dependency|
21
+ dependency_outputs(dependency).each do |output|
22
+ self.class.parameter(output)
23
+ end
24
+ end if depends_on
25
+ end
26
+ memoize :add_depends_on_parameters # only run once
27
+
28
+ # Returns output keys associated with the stack. They are the resource logical ids.
29
+ def dependency_outputs(dependency)
30
+ dependency.to_s.classify.constantize.output_keys
31
+ end
32
+
33
+ class_methods do
34
+ def parameter(*definition)
35
+ # self is subclass is the stack that inherits from Jets::Stack
36
+ # IE: ExampleStack < Jets::Stack
37
+ Parameter.new(self, *definition).register
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,32 @@
1
+ # Implements:
2
+ #
3
+ # template - uses @definition to build a CloudFormation template section
4
+ #
5
+ class Jets::Stack
6
+ class Resource
7
+ autoload :Dsl, "jets/stack/resource/dsl"
8
+ include Definition
9
+
10
+ def template
11
+ template = camelize(standarize(@definition))
12
+ template = replace_placeholers(template)
13
+ template
14
+ end
15
+
16
+ # CloudFormation Resources reference: https://amzn.to/2NKg6ip
17
+ def standarize(definition)
18
+ Jets::Resource::Standardizer.new(definition).template
19
+ end
20
+
21
+ def replace_placeholers(template)
22
+ attributes = template.values.first
23
+ s3_key = attributes.dig('Properties','Code','S3Key')
24
+ if s3_key == "code_s3_key_placeholder"
25
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
26
+ code_zip = "code-#{checksum}.zip"
27
+ attributes['Properties']['Code']['S3Key'] = "jets/code/#{code_zip}"
28
+ end
29
+ template
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ class Jets::Stack
2
+ class Resource
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+
6
+ def resources
7
+ Resource.definitions(self.class)
8
+ end
9
+
10
+ class_methods do
11
+ def resource(*definition)
12
+ # self is subclass is the stack that inherits from Jets::Stack
13
+ # IE: ExampleStack < Jets::Stack
14
+ Resource.new(self, *definition).register
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,52 @@
1
+ module Jets
2
+ class TmpLoader
3
+ include AwsServices
4
+
5
+ def self.load!
6
+ new.load
7
+ end
8
+
9
+ def initialize(yaml_path=nil)
10
+ yaml_path ||= "#{Jets.root}/handlers/data.yml"
11
+ @data = YAML.load_file(yaml_path)
12
+ @s3_bucket = @data['s3_bucket']
13
+ @rack_zip = @data['rack_zip']
14
+ end
15
+
16
+ def load
17
+ rack
18
+ end
19
+
20
+ def rack
21
+ return unless @rack_zip
22
+ download_and_extract(@rack_zip, '/tmp/rack')
23
+ end
24
+
25
+ def download_and_extract(zip_file, folder_dest)
26
+ s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
27
+ download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
28
+
29
+ download(s3_key, download_path)
30
+ unzip(download_path, folder_dest)
31
+ end
32
+
33
+ def download(key, dest)
34
+ # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
35
+ # stream object directly to disk
36
+ s3.get_object(response_target: dest,
37
+ bucket: @s3_bucket,
38
+ key: key)
39
+ end
40
+
41
+ def unzip(zipfile, folder_dest)
42
+ sh "unzip -qo #{zipfile} -d #{folder_dest}"
43
+ end
44
+
45
+ def sh(command)
46
+ puts "=> #{command}"
47
+ success = system(command)
48
+ raise "Command #{command} failed" unless success
49
+ success
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,30 @@
1
+ module Jets
2
+ class Turbine
3
+ class_attribute :initializers
4
+ class_attribute :on_exceptions
5
+
6
+ class << self
7
+ def subclasses
8
+ @subclasses ||= []
9
+ end
10
+
11
+ def inherited(base)
12
+ subclasses << base
13
+ end
14
+
15
+ def initializer(label, &block)
16
+ self.initializers ||= {}
17
+ self.initializers[label] = block
18
+ end
19
+
20
+ def on_exception(label, &block)
21
+ self.on_exceptions ||= {}
22
+ self.on_exceptions[label] = block
23
+ end
24
+
25
+ def exception_reporter(label, &block)
26
+ on_exception(label, &block)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,47 @@
1
+ require 'fileutils'
2
+
3
+ module Jets
4
+ class Turbo
5
+ autoload :DatabaseYaml, 'jets/turbo/database_yaml'
6
+ autoload :Rail, 'jets/turbo/rail'
7
+
8
+ # Turbo charge mode
9
+ def charge
10
+ framework = detect
11
+ case framework
12
+ when :jets
13
+ # do nothing
14
+ when :rails
15
+ Rail.new.setup
16
+ else
17
+ # should never get here
18
+ end
19
+ end
20
+
21
+ def detect
22
+ if rails?
23
+ :rails
24
+ elsif jets?
25
+ :jets
26
+ else
27
+ :unknown_framework
28
+ end
29
+ end
30
+
31
+ def rails?
32
+ config_ru_contains?('run Rails.application')
33
+ end
34
+
35
+ def jets?
36
+ config_ru_contains?('run Jets.application')
37
+ end
38
+
39
+ def config_ru_contains?(value)
40
+ config_ru = "#{Dir.pwd}/config.ru"
41
+ return false unless File.exist?(config_ru)
42
+
43
+ lines = ::IO.readlines(config_ru)
44
+ lines.detect { |l| l.include?(value) }
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,41 @@
1
+ class Jets::Turbo
2
+ class DatabaseYaml
3
+ def reconfigure
4
+ current_yaml = "#{Jets.root}/rack/config/database.yml"
5
+ return unless File.exist?(current_yaml)
6
+
7
+ vars = {}
8
+ current_database = YAML.load_file(current_yaml)
9
+ database_names = infer_database_name(current_database)
10
+ vars.merge!(database_names)
11
+ vars['adapter'] = current_database['development']['adapter']
12
+
13
+ path = File.expand_path("templates/config/database.yml", File.dirname(__FILE__))
14
+ content = Jets::Erb.result(path, vars)
15
+ IO.write(current_yaml, content)
16
+ # puts "Reconfigured #{current_yaml}" # uncomment to inspect and debug
17
+ rescue Exception => e
18
+ puts "WARNING: Was not able to generate a database.yml. Leaving your current one in place"
19
+ puts e.message
20
+ # If unable to copy the database.yml settings just slightly fail.
21
+ # Do this because really unsure what is in the current database.yml
22
+ end
23
+
24
+ def infer_database_name(current_database)
25
+ vars = {}
26
+ %w[development test production].each do |env|
27
+ if !current_database[env]['database'].include?('<%') # already has ERB
28
+ vars["database_#{env}"] = current_database[env]['database']
29
+ else
30
+ lines = IO.readlines("#{Jets.root}/rack/config/application.rb")
31
+ module_line = lines.find { |l| l =~ /^module / }
32
+ app_module = module_line.gsub(/^module /,'').strip
33
+ app_name = app_module.underscore
34
+ vars["database_#{env}"] = "#{app_name}_#{env}"
35
+ end
36
+ end
37
+
38
+ vars
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,12 @@
1
+ *.gem
2
+ .bundle
3
+ .byebug_history
4
+ .DS_Store
5
+ .env.*
6
+ /node_modules
7
+ /public/packs
8
+ /public/packs-test
9
+ bundled
10
+ coverage
11
+ pkg
12
+ tmp
@@ -0,0 +1 @@
1
+ pack
@@ -0,0 +1,16 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "jets"
4
+
5
+ group :development, :test do
6
+ # Call 'byebug' anywhere in the code to stop execution and get a debugger console
7
+ gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
8
+ gem 'shotgun'
9
+ gem 'rack'
10
+ end
11
+
12
+ group :test do
13
+ gem 'rspec' # rspec test group only or we get the "irb: warn: can't alias context from irb_context warning" when starting jets console
14
+ gem 'launchy'
15
+ gem 'capybara'
16
+ end
@@ -0,0 +1,2 @@
1
+ require 'jets'
2
+ Jets.load_tasks
@@ -0,0 +1,2 @@
1
+ class ApplicationController < Jets::Controller::Base
2
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -0,0 +1,4 @@
1
+ class ApplicationJob < Jets::Job::Base
2
+ # Adjust to increase the default timeout for all Job classes
3
+ class_timeout 60
4
+ end
@@ -0,0 +1,5 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require "jets"
4
+ Jets.boot
5
+ run Jets.application
@@ -0,0 +1,4 @@
1
+ Jets.application.configure do
2
+ config.project_name = "project"
3
+ config.mode = "api"
4
+ end
@@ -0,0 +1,4 @@
1
+ Jets.application.routes.draw do
2
+ root "jets/rack#process"
3
+ any "*catchall", to: "jets/rack#process"
4
+ end
@@ -0,0 +1,113 @@
1
+ class Jets::Turbo
2
+ class Rail
3
+ attr_reader :build_area
4
+ def initialize
5
+ @build_area = "/tmp/jets"
6
+ @project_folder = "turbo-wrapper-project"
7
+ end
8
+
9
+ def setup
10
+ afterburners_message
11
+ clean
12
+ override_env_vars
13
+ wrapper_jets_project
14
+ copy_rack_project
15
+ reconfigure_database_yml
16
+ apply_dot_jets_app
17
+ set_project_name
18
+ end
19
+
20
+ def afterburners_message
21
+ command = ARGV.first
22
+ if command == "deploy"
23
+ puts "=> Rails app detected: Enabling Jets Afterburner to deploy to AWS Lambda.".color(:green)
24
+ else
25
+ puts "=> Rails app detected: Enabling Jets Afterburner.".color(:green)
26
+ end
27
+ end
28
+
29
+ # Hack env vars to support Jets Turbo mode
30
+ def override_env_vars
31
+ ENV['BUNDLE_GEMFILE'] = "#{build_area}/#{@project_folder}/Gemfile"
32
+ ENV['JETS_ROOT'] = "#{build_area}/#{@project_folder}"
33
+ # Jets.root /home/ec2-user/environment/jet-pack/lib/turbo-wrapper-project
34
+ end
35
+
36
+ def wrapper_jets_project
37
+ jets_project = File.expand_path("project", File.dirname(__FILE__))
38
+ project_path = "#{build_area}/#{@project_folder}"
39
+
40
+ FileUtils.mkdir_p(build_area)
41
+ FileUtils.rm_rf(project_path)
42
+ Jets::Util.cp_r(jets_project, project_path)
43
+
44
+ IO.write("#{project_path}/date.txt", Time.now) # update date.txt file to ensure Lambda function code changes and updates
45
+ end
46
+
47
+ def set_project_name
48
+ path = "#{build_area}/#{@project_folder}/config/application.rb"
49
+ lines = IO.readlines(path)
50
+ lines.map! do |l|
51
+ if l.include?('config.project_name = "project"')
52
+ %Q| config.project_name = "#{project_name}"\n|
53
+ else
54
+ l
55
+ end
56
+ end
57
+ IO.write(path, lines.join(''))
58
+ end
59
+
60
+ def project_name
61
+ path = "#{build_area}/#{@project_folder}/project_name"
62
+ name = if File.exist?(path)
63
+ IO.read(path).strip # project_name
64
+ else
65
+ File.basename(Dir.pwd)
66
+ end
67
+ name.gsub('_','-') # project_name
68
+ end
69
+
70
+ # Anything in rails_project/.jets/app will override the generic wrapper project.
71
+ #
72
+ # rails_project/.jets/app/.env => jets_project/.env
73
+ # rails_project/.jets/app/config/database.yml => jets_project/config/database.yml
74
+ #
75
+ # This useful for DATABASE_URL and other env vars.
76
+ def apply_dot_jets_app
77
+ # Dir.pwd: /home/ec2-user/environment/demo-rails
78
+ # Jets.root: /tmp/jets/turbo-wrapper-project/
79
+ dot_jets_app = "#{Dir.pwd}/.jets/app"
80
+
81
+ return unless File.exist?(dot_jets_app)
82
+ # Trailing slashes are required for both folders. Jets.root already has the trailing slash
83
+ sh "rsync -a --links #{dot_jets_app}/ #{Jets.root}", quiet: true
84
+ end
85
+
86
+ def reconfigure_database_yml
87
+ DatabaseYaml.new.reconfigure
88
+ end
89
+
90
+ def copy_rack_project
91
+ dest = "#{build_area}/#{@project_folder}/rack"
92
+ # puts "cp -r #{Dir.pwd} #{dest}" # uncomment to see and debug
93
+ Jets::Util.cp_r(Dir.pwd, dest)
94
+ end
95
+
96
+ # TODO: remove duplication, copied from jets/commands/import/base.rb
97
+ # And modified it slightly
98
+ def bundle_install
99
+ Bundler.with_clean_env do
100
+ sh "cd #{build_area}/#{@project_folder}/rack && bundle install"
101
+ end
102
+ end
103
+
104
+ def sh(command, quiet: false)
105
+ puts "=> #{command}" unless quiet
106
+ system command
107
+ end
108
+
109
+ def clean
110
+ FileUtils.rm_rf("#{build_area}/#{@project_folder}/rack")
111
+ end
112
+ end
113
+ end