jets-fs 1.6.10

Sign up to get free protection for your applications and to get access to all the features.
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,131 @@
1
+ module Jets::Commands
2
+ class Deploy
3
+ extend Memoist
4
+ include StackInfo
5
+ def initialize(options)
6
+ @options = options
7
+ end
8
+
9
+ def run
10
+ deployment_env = Jets.config.project_namespace.color(:green)
11
+ puts "Deploying to Lambda #{deployment_env} environment..."
12
+ return if @options[:noop]
13
+
14
+ check_dev_mode
15
+ validate_routes!
16
+
17
+ # deploy full nested stack when stack already exists
18
+ # Delete existing rollback stack from previous bad minimal deploy
19
+ delete_minimal_stack if minimal_rollback_complete?
20
+ exit_unless_updateable! # Stack could be in a weird rollback state or in progress state
21
+
22
+ if first_run?
23
+ ship(stack_type: :minimal)
24
+ Jets.application.reload_configs!
25
+ end
26
+
27
+ # Build code after the minimal stack because need s3 bucket for assets
28
+ # on_aws? and s3_base_url logic
29
+ build_code
30
+
31
+ ship(stack_type: :full, s3_bucket: s3_bucket)
32
+ end
33
+
34
+ def delete_minimal_stack
35
+ puts "Existing stack is in ROLLBACK_COMPLETE state from a previous failed minimal deploy. Deleting stack and continuing."
36
+ cfn.delete_stack(stack_name: stack_name)
37
+ status.wait
38
+ status.reset
39
+ end
40
+
41
+ def check_dev_mode
42
+ if File.exist?("#{Jets.root}/dev.mode")
43
+ puts "The dev.mode file exists. Please removed it and run bundle update before you deploy.".color(:red)
44
+ exit 1
45
+ end
46
+ end
47
+
48
+ def build_code
49
+ Jets::Commands::Build.new(@options).build_code
50
+ end
51
+
52
+ def validate_routes!
53
+ check_route_connected_functions
54
+ end
55
+
56
+ # Checks that all routes are validate and have corresponding lambda functions
57
+ def check_route_connected_functions
58
+ return if Jets::Router.all_routes_valid
59
+
60
+ puts "Deploy fail: The jets application contain invalid routes.".color(:red)
61
+ puts "Please double check the routes below map to valid controllers:"
62
+ Jets::Router.invalid_routes.each do |route|
63
+ puts " /#{route.path} => #{route.controller_name}##{route.action_name}"
64
+ end
65
+ exit 1
66
+ end
67
+
68
+ def ship(stack_options)
69
+ options = @options.merge(stack_options) # includes stack_type and s3_bucket
70
+ Jets::Commands::Build.new(options).build_templates
71
+ Jets::Cfn::Ship.new(options).run
72
+ end
73
+
74
+ def status
75
+ Jets::Cfn::Status.new(stack_name)
76
+ end
77
+ memoize :status
78
+
79
+ def stack_name
80
+ Jets::Naming.parent_stack_name
81
+ end
82
+
83
+ # Checks for a few things before deciding to delete the parent stack
84
+ #
85
+ # * Parent stack status status is ROLLBACK_COMPLETE
86
+ # * Parent resources are in the DELETE_COMPLETE state
87
+ #
88
+ def minimal_rollback_complete?
89
+ stack = find_stack(stack_name)
90
+ return false unless stack
91
+
92
+ return false unless stack.stack_status == 'ROLLBACK_COMPLETE'
93
+
94
+ # Finally check if all the minimal resources in the parent template have been deleted
95
+ resp = cfn.describe_stack_resources(stack_name: stack_name)
96
+ resource_statuses = resp.stack_resources.map(&:resource_status).uniq
97
+ resource_statuses == ['DELETE_COMPLETE']
98
+ end
99
+
100
+ def find_stack(stack_name)
101
+ resp = cfn.describe_stacks(stack_name: stack_name)
102
+ resp.stacks.first
103
+ rescue Aws::CloudFormation::Errors::ValidationError => e
104
+ # example: Stack with id demo-dev does not exist
105
+ if e.message =~ /Stack with/ && e.message =~ /does not exist/
106
+ nil
107
+ else
108
+ raise
109
+ end
110
+ end
111
+
112
+ # All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
113
+ def exit_unless_updateable!
114
+ stack_name = Jets::Naming.parent_stack_name
115
+ exists = stack_exists?(stack_name)
116
+ return unless exists # continue because stack could be updating
117
+
118
+ stack = cfn.describe_stacks(stack_name: stack_name).stacks.first
119
+ status = stack["stack_status"]
120
+ if status =~ /^ROLLBACK_/ ||
121
+ status =~ /_IN_PROGRESS$/
122
+ region = `aws configure get region`.strip rescue "us-east-1"
123
+ url = "https://console.aws.amazon.com/cloudformation/home?region=#{region}#/stacks"
124
+ puts "The parent stack of the #{Jets.config.project_name.color(:green)} project is not in an updateable state."
125
+ puts "Stack name #{stack_name.color(:yellow)} status #{stack["stack_status"].color(:yellow)}"
126
+ puts "Here's the CloudFormation url to check for more details #{url}"
127
+ exit 1
128
+ end
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,22 @@
1
+ module Jets::Commands
2
+ class Dynamodb < Jets::Commands::Base
3
+ autoload :Migrator, 'jets/commands/dynamodb/migrator'
4
+ autoload :Migrate, 'jets/commands/dynamodb/migrate'
5
+
6
+ desc "migrate [path]", "Runs migrations"
7
+ long_desc Help.text('dynamodb:migrate')
8
+ def migrate(path)
9
+ Migrator.new(path, options).run
10
+ end
11
+
12
+ desc "generate [name]", "Creates a migration for a DynamoDB table"
13
+ long_desc Help.text('dynamodb:generate')
14
+ option :partition_key, default: "id:string:hash", desc: "table's partition key"
15
+ option :sort_key, default: nil, desc: "table's sort key"
16
+ option :table_name, desc: "override the the conventional table name"
17
+ option :table_action, desc: "create_table or update_table. Defaults to convention based on the name of the migration."
18
+ def generate(name)
19
+ Dynomite::Migration::Generator.new(name, options).generate
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ class Jets::Commands::Dynamodb::Migrate < Jets::Commands::Base
2
+ desc "down", "Runs migrations down"
3
+ # desc "migrate:down [path]", "Runs migrations down"
4
+ # long_desc Help.migrate
5
+ def down#(path)
6
+ # Migrate.new(path, options).run
7
+ puts "Jets::Commands::Dynamodb::Down ran"
8
+ end
9
+ end
@@ -0,0 +1,36 @@
1
+ begin
2
+ require "dynomite"
3
+ rescue LoadError # Commands::Base.eager_load
4
+ nil
5
+ end
6
+
7
+ class Jets::Commands::Dynamodb::Migrator
8
+ def initialize(path, options)
9
+ @path = path
10
+ @options = options
11
+ end
12
+
13
+ def run
14
+ puts "Running database migrations"
15
+ return if @options[:noop]
16
+ migrate
17
+ end
18
+
19
+ def migrate
20
+ path = "#{Jets.root}/#{@path}"
21
+ unless File.exist?(path)
22
+ puts "Unable to find the migration file: #{path}"
23
+ exit 1 unless ENV['TEST']
24
+ end
25
+
26
+ require path
27
+ migration_class = get_migration_class
28
+ migration_class.new.up
29
+ end
30
+
31
+ def get_migration_class
32
+ filename = File.basename(@path, '.rb')
33
+ filename = filename.sub(/\d+[-_]/, '') # strip leading timestsamp
34
+ filename.classify.constantize
35
+ end
36
+ end
@@ -0,0 +1,21 @@
1
+ module Jets::Commands
2
+ class Gems < Jets::Commands::Base
3
+ desc "check", "Check if pre-built Lambda gems are available from the sources"
4
+ long_desc Help.text("gems:check")
5
+ def check
6
+ check = Jets::Gems::Check.new(cli: true)
7
+ check.run! # exits early if missing gems found
8
+ # If reach here, means all gems are ok.
9
+ puts "Congrats! All gems are available in as pre-built Lambda gems 👍"
10
+ end
11
+
12
+ desc "sources", "List pre-built Lambda gem sources"
13
+ long_desc Help.text("gems:sources")
14
+ def sources
15
+ puts "Your pre-built Lambda gem sources are:"
16
+ Jets.config.gems.sources.each do |source|
17
+ puts " #{source}"
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,9 @@
1
+ module Jets::Commands::Help
2
+ class << self
3
+ def text(namespaced_command)
4
+ path = namespaced_command.to_s.gsub(':','/')
5
+ path = File.expand_path("../help/#{path}.md", __FILE__)
6
+ IO.read(path) if File.exist?(path)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ Builds a zip file package to be uploaded to AWS Lambda. This allows you to build the project without deploying and inspect the zip file that gets deployed to AWS Lambda. The package contains:
2
+
3
+ * your application code
4
+ * generated shims
5
+
6
+ If the application has no Ruby code and only uses Polymorphic functions, then gems are not bundled up.
@@ -0,0 +1,61 @@
1
+ ## Remote mode
2
+
3
+ Invoke the lambda function on AWS. The `jets call` command does a few extra things for your convenience:
4
+
5
+ It adds the function namespace to the function name. So, you pass in `posts_controller-index` and the Lambda function is `demo-dev-posts_controller-index`.
6
+
7
+ CLI Name | Lambda Function
8
+ --- | ---
9
+ posts_controller-index | demo-dev-posts_controller-index
10
+
11
+ The `jets call` command can also print out the last 4KB of the lambda logs with the `--show-logs` option. The logging output is directed to stderr and the response output from the lambda function itself is directed to stdout so you can safely pipe the results of the call command to other tools like `jq`.
12
+
13
+ For [controllers](http://rubyonjets.com/docs/controllers/), the event you pass at the CLI is automatically transformed into [Lambda Proxy](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) payload that contains the params as the `queryStringParameters`. For example:
14
+
15
+ {"test":1}
16
+
17
+ Gets changed to:
18
+
19
+ {"queryStringParameters":{"test":1}}
20
+
21
+ This spares you from assembling the event payload manually to the payload that Jets controllers normally receive. If you would like to disable this Lambda Proxy transformation then use the `--no-lambda-proxy` flag.
22
+
23
+ For [jobs](http://rubyonjets.com/docs/jobs/), the event is passed through untouched.
24
+
25
+ ## Examples
26
+
27
+ jets call hard_job-drive '{"test":1}'
28
+ jets call hard_job-drive '{"test":1}' | jq .
29
+ jets call hard_job-drive file://event.json | jq . # load event with a file
30
+ jets call posts_controller-index # event payload is optional
31
+ jets call posts_controller-index '{"test":1}' --show-log | jq .
32
+ jets call posts_controller-index 'file://event.json' --show-log | jq .
33
+
34
+ The equivalent AWS Lambda CLI command:
35
+
36
+ aws lambda invoke --function-name demo-dev-hard_job-dig --payload '{"test":1}' outfile.txt
37
+ cat outfile.txt | jq '.'
38
+
39
+ aws lambda invoke --function-name demo-dev-posts_controller-index --payload '{"queryStringParameters":{"test":1}}' outfile.txt
40
+ cat outfile.txt | jq '.'
41
+
42
+ For convenience, you can also provide the function name with only dashes and `jets call` figures out what function you intend to call. Examples:
43
+
44
+ jets call posts-controller-index
45
+ jets call admin-related-pages-controller-index
46
+
47
+ Are the same as:
48
+
49
+ aws lambda invoke --function-name demo-dev-posts_controller-index
50
+ aws lambda invoke --function-name demo-dev-admin/related_pages_controller-index
51
+
52
+ Jets figures out what functions to call by evaluating the app code and finds if the controller and method exists. If you want to turn guess mode off and want to always explicitly provide the method name use the `--no-guess` option. The function name will then have to match the lambda function without the namespace. Example:
53
+
54
+ jets call admin-related_pages_controller-index --no-guess
55
+
56
+ ## Local mode
57
+
58
+ Instead of calling AWS lambda remote, you can also have `jets call` use the code directly on your machine. To enable this, use the `--local` flag. Example:
59
+
60
+ jets call hard_job-drive --local
61
+
@@ -0,0 +1,5 @@
1
+ Removes the build files that jets creates. Essentially, deletes `/tmp/jets`. This will remove all build files for all jets projects. This is safe as jets uses `/tmp/jets` merely as a cache to speed up incrementally builds. Cleaning this out can clean up cruft in the `/tmp/jets` directory that builds over time.
2
+
3
+ ## Example
4
+
5
+ jets clean:build
@@ -0,0 +1,5 @@
1
+ Essentially removes the CloudWatch groups assocated with the app. Lambda requests re-create the log groups so this is pretty safe to do.
2
+
3
+ ## Example
4
+
5
+ jets log:clean
@@ -0,0 +1,18 @@
1
+ ## Example
2
+
3
+ $ jets console
4
+ >> Post.table_name
5
+ => "posts"
6
+ >> ActiveRecord::Base.connection.tables
7
+ => ["schema_migrations", "ar_internal_metadata", "posts"]
8
+ >> Jets.env
9
+ => "development"
10
+ >>
11
+
12
+ ## Use .env.development.remote
13
+
14
+ To use the remote values also in the `jets console` you can use the `JETS_ENV_REMOTE=1` env variable. Example:
15
+
16
+ JETS_ENV_REMOTE=1 jets console
17
+
18
+ More info at [Env Files](http://rubyonjets.com/docs/env-files/)
@@ -0,0 +1,8 @@
1
+ Generates migration in `db/migrate`
2
+
3
+ ## Examples
4
+
5
+ jets db:generate create_articles title:string user_id:integer
6
+ jets db:generate AddTitleBodyToPost title:string body:text published:boolean
7
+
8
+ This task delegates to Rails `rails generate migration`. For more examples, refer to the [Active Record Migrations Rails Guide](https://edgeguides.rubyonrails.org/active_record_migrations.html).
@@ -0,0 +1,9 @@
1
+ This is like running the psql command with the `config/database.yml` values and set for you.
2
+
3
+ ## Example
4
+
5
+ $ jets dbconsole
6
+ psql (9.2.24)
7
+ Type "help" for help.
8
+
9
+ demo_dev=>
@@ -0,0 +1,22 @@
1
+ This deletes the all the contents in the internal s3 bucket that jets uses and the associated CloudFormation stacks.
2
+
3
+ ## Examples
4
+
5
+ $ jets delete
6
+ Deleting project...
7
+ Are you sure you want to want to delete the 'demo-dev' project? (y/N)
8
+ y
9
+ First, deleting objects in s3 bucket demo-dev-s3bucket-89jrrj60c7bj
10
+ Deleting demo-dev...
11
+ 05:14:09AM DELETE_IN_PROGRESS AWS::CloudFormation::Stack demo-dev User Initiated
12
+ ...
13
+ 05:14:23AM DELETE_IN_PROGRESS AWS::CloudFormation::Stack PostsController
14
+ 05:15:31AM DELETE_COMPLETE AWS::S3::Bucket S3Bucket
15
+ Stack demo-dev deleted.
16
+ Time took for deletion: 1m 27s.
17
+ Project demo-dev deleted!
18
+ $
19
+
20
+ You can bypass the are you sure prompt with the `--sure` flag.
21
+
22
+ $ jets delete --sure
@@ -0,0 +1,32 @@
1
+ This builds the project and deploys it AWS Lambda. The deployment is mainly handled by CloudFormation. To check on the status of the deploy you can also check the CloudFormation console.
2
+
3
+ ![](http://rubyonjets.com/img/cli/deploy-cloudformation-status.png)
4
+
5
+ ## Example
6
+
7
+ $ jets deploy
8
+ Deploying to Lambda demo-dev environment...
9
+ => Compling assets in current project directory
10
+ => Copying current project directory to temporary build area: /tmp/jets/demo/app_root
11
+ => Tidying project: removing ignored files to reduce package size.
12
+ => Generating node shims in the handlers folder.
13
+ => Bundling: running bundle install in cache area: /tmp/jets/demo/cache.
14
+ => Setting up a vendored copy of ruby.
15
+ => Replacing compiled gems with AWS Lambda Linux compiled versions.
16
+ Creating zip file.
17
+ => cd /tmp/jets/demo/app_root && zip --symlinks -rq /tmp/jets/demo/code/code-temp.zip .
18
+ Building CloudFormation templates.
19
+ Deploying CloudFormation stack with jets app!
20
+ Uploading /tmp/jets/demo/code/code-7169d0ac.zip (88.8 MB) to S3
21
+ Time to upload code to s3: 1s
22
+ Deploying CloudFormation stack with jets app!
23
+ 02:08:20AM UPDATE_IN_PROGRESS AWS::CloudFormation::Stack demo-dev User Initiated
24
+ 02:08:23AM CREATE_IN_PROGRESS AWS::CloudFormation::Stack ApiGateway
25
+ ...
26
+ 02:08:48AM CREATE_IN_PROGRESS AWS::CloudFormation::Stack PostsController
27
+ 02:10:03AM UPDATE_COMPLETE AWS::CloudFormation::Stack demo-dev
28
+ Stack success status: UPDATE_COMPLETE
29
+ Time took for stack deployment: 1m 46s.
30
+ Prewarming application.
31
+ API Gateway Endpoint: https://ewwnealfk0.execute-api.us-west-2.amazonaws.com/dev/
32
+ $
@@ -0,0 +1,52 @@
1
+ Generates a migration file which can be used to create a DynamoDB table. To run the migration file use `jets dynamodb:migrate`.
2
+
3
+ The table name will have a namespace. For example, if your project is called `demo`, the environment is `development`, and you create a table called `posts`. The DynamoDB full table name will be `demo-dev-posts`. You can change this behavior by editing your `config/dynamodb.yml` and adjusting the `table_namespace` value.
4
+
5
+ DynamoDB tables support certain types of attribute types. The CLI will parse the `--partition-key` option and use the second part of the option to map it to the underlying DynamoDB type using this mapping.
6
+
7
+ ```ruby
8
+ ATTRIBUTE_TYPE_MAP = {
9
+ 'string' => 'S',
10
+ 'number' => 'N',
11
+ 'binary' => 'B',
12
+ 's' => 'S',
13
+ 'n' => 'N',
14
+ 'b' => 'B',
15
+ }
16
+ ```
17
+
18
+ For example, `--partition-key id:string` maps 'string' to 's'. More info on DynamoDB types is available at the ruby aws-sdk docs: [Aws::DynamoDB::Types::AttributeDefinition](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Types/AttributeDefinition.html)
19
+
20
+ ## Examples
21
+
22
+ $ jets dynamodb:generate create_posts --partition-key id # default attribute type is string
23
+ $ jets dynamodb:generate create_posts --partition-key id:number # attribute type will be number
24
+ $ jets dynamodb:generate create_comments --partition-key post_id:string --sort-key created_at:string
25
+
26
+ ## Running migrations
27
+
28
+ $ jets dynamodb:migrate path/to/migration
29
+ $ jets dynamodb:migrate dynamodb/migrate/20171112162404-create_articles_migration.rb
30
+
31
+ To add global secondary indexes:
32
+
33
+ $ jets dynamodb:generate update_comments --partition-key user_id:string --sort-key created_at:string
34
+
35
+ To run:
36
+
37
+ $ jets dynamodb:migrate dynamodb/migrate/20171112161530-create_posts_migration.rb
38
+
39
+ ## Conventions
40
+
41
+ A create_table or update_table migration file is generated based name you provide. If `update` is included in the name then an update_table migration table is generated. If `create` is included in the name then a create_table migration table is generated.
42
+
43
+ The table_name is also inferred from the migration name you provide. Examples:
44
+
45
+ $ jets dynamodb:generate create_posts # table_name: posts
46
+ $ jets dynamodb:generate update_comments # table_name: comments
47
+
48
+ You can override both of these conventions:
49
+
50
+ $ jets dynamodb:generate create_my_posts --table-name posts
51
+ $ jets dynamodb:generate my_posts --table-action create_table --table-name posts
52
+ $ jets dynamodb:generate my_posts --table-action update_table --table-name posts