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,22 @@
1
+ module Jets::Resource::Iam
2
+ class ManagedPolicy
3
+ extend Memoist
4
+
5
+ attr_reader :definitions
6
+ def initialize(*definitions)
7
+ @definitions = definitions.flatten.compact
8
+ end
9
+
10
+ def arns
11
+ definitions.map { |definition| standardize(definition) }
12
+ end
13
+ memoize :arns # only process arns once
14
+
15
+ # AmazonEC2ReadOnlyAccess => arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
16
+ def standardize(definition)
17
+ return definition if definition.include?('iam::aws:policy')
18
+
19
+ "arn:aws:iam::aws:policy/#{definition}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ module Jets::Resource::Iam
2
+ class PolicyDocument
3
+ extend Memoist
4
+
5
+ attr_reader :definitions
6
+ def initialize(*definitions)
7
+ @definitions = definitions.flatten
8
+ # empty starting policy that will be altered
9
+ @policy = {
10
+ version: "2012-10-17",
11
+ statement: []
12
+ }
13
+ end
14
+
15
+ def policy_document
16
+ definitions.map { |definition| standardize(definition) }
17
+ Jets::Camelizer.transform(@policy)
18
+ end
19
+ memoize :policy_document # only process policy_document once
20
+
21
+ def standardize(definition)
22
+ case definition
23
+ when String
24
+ # Expands simple string from: logs => logs:*
25
+ definition = "#{definition}:*" unless definition.include?(':')
26
+ @policy[:statement] << {
27
+ action: [definition],
28
+ effect: "Allow",
29
+ resource: "*",
30
+ }
31
+ when Hash
32
+ definition = definition.stringify_keys
33
+ if definition.key?("Version") # special case where we replace the policy entirely
34
+ @policy = definition
35
+ else
36
+ @policy[:statement] << definition
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,5 @@
1
+ module Jets::Resource::Lambda
2
+ autoload :Function, 'jets/resource/lambda/function'
3
+ autoload :GemLayer, 'jets/resource/lambda/gem_layer'
4
+ autoload :LayerVersion, 'jets/resource/lambda/layer_version'
5
+ end
@@ -0,0 +1,216 @@
1
+ module Jets::Resource::Lambda
2
+ class Function < Jets::Resource::Base
3
+ autoload :Environment, 'jets/resource/lambda/function/environment'
4
+ include Environment
5
+
6
+ def initialize(task)
7
+ @task = task
8
+ @app_class = task.class_name.to_s
9
+ end
10
+
11
+ def definition
12
+ {
13
+ function_logical_id => {
14
+ type: "AWS::Lambda::Function",
15
+ properties: combined_properties
16
+ }
17
+ }
18
+ end
19
+
20
+ def function_logical_id
21
+ "{namespace}_lambda_function".underscore
22
+ end
23
+
24
+ def replacements
25
+ @task.replacements # has namespace replacement
26
+ end
27
+
28
+ def combined_properties
29
+ props = env_properties
30
+ .deep_merge(global_properties)
31
+ .deep_merge(class_properties)
32
+ .deep_merge(function_properties)
33
+ finalize_properties!(props)
34
+ end
35
+
36
+ # Global properties example:
37
+ # jets defaults are in jets/default/application.rb.
38
+ # Your application's default config/application.rb then get used. Example:
39
+ #
40
+ # Jets.application.configure do
41
+ # config.function = ActiveSupport::OrderedOptions.new
42
+ # config.function.timeout = 30
43
+ # config.function.runtime = "nodejs8.10"
44
+ # config.function.memory_size = 1536
45
+ # end
46
+ def global_properties
47
+ baseline = {
48
+ code: {
49
+ s3_bucket: "!Ref S3Bucket",
50
+ s3_key: code_s3_key
51
+ },
52
+ role: "!Ref IamRole",
53
+ environment: { variables: environment },
54
+ }
55
+
56
+ appplication_config = Jets.application.config.function.to_h
57
+ baseline.merge(appplication_config)
58
+ end
59
+
60
+ # Class properties example:
61
+ #
62
+ # class PostsController < ApplicationController
63
+ # class_timeout 22
64
+ # ...
65
+ # end
66
+ #
67
+ # Also handles iam policy override at the class level. Example:
68
+ #
69
+ # class_iam_policy("logs:*")
70
+ #
71
+ def class_properties
72
+ # klass is PostsController, HardJob, GameRule, Hello or HelloFunction
73
+ klass = Jets::Klass.from_task(@task)
74
+
75
+ class_properties = lookup_class_properties(klass)
76
+ if klass.build_class_iam?
77
+ iam_policy = Jets::Resource::Iam::ClassRole.new(klass)
78
+ class_properties[:role] = "!GetAtt #{iam_policy.logical_id}.Arn"
79
+ end
80
+
81
+ class_properties
82
+ end
83
+
84
+ # Accounts for inherited class_properties
85
+ def lookup_class_properties(klass)
86
+ all_classes = []
87
+ while klass != Object
88
+ all_classes << klass
89
+ klass = klass.superclass
90
+ end
91
+ class_properties = {}
92
+ # Go back down class heirachry top to down
93
+ all_classes.reverse.each do |k|
94
+ class_properties.merge!(k.class_properties)
95
+ end
96
+ class_properties
97
+ end
98
+
99
+ # Function properties example:
100
+ #
101
+ # class PostsController < ApplicationController
102
+ # timeout 18
103
+ # def index
104
+ # ...
105
+ # end
106
+ #
107
+ # Also handles iam policy override at the function level. Example:
108
+ #
109
+ # iam_policy("ec2:*")
110
+ # def new
111
+ # render json: params.merge(action: "new")
112
+ # end
113
+ #
114
+ def function_properties
115
+ properties = @task.properties
116
+ if @task.build_function_iam?
117
+ iam_policy = Jets::Resource::Iam::FunctionRole.new(@task)
118
+ properties[:role] = "!GetAtt #{iam_policy.logical_id}.Arn"
119
+ end
120
+ properties
121
+ end
122
+
123
+ # Properties managed by Jets with merged with finality.
124
+ def finalize_properties!(props)
125
+ handler = full_handler(props)
126
+ runtime = get_runtime(props)
127
+ managed = {
128
+ handler: handler,
129
+ runtime: runtime,
130
+ description: description,
131
+ }
132
+ managed[:function_name] = function_name if function_name
133
+ layers = get_layers(runtime)
134
+ managed[:layers] = layers if layers
135
+ props.merge!(managed)
136
+ end
137
+
138
+ def get_layers(runtime)
139
+ return nil unless runtime =~ /^ruby/
140
+ ["!Ref GemLayer"] + Jets.config.lambda.layers
141
+ end
142
+
143
+ def get_runtime(props)
144
+ props[:runtime] || default_runtime
145
+ end
146
+
147
+ def default_runtime
148
+ map = {
149
+ node: "nodejs8.10",
150
+ python: "python3.6",
151
+ ruby: "ruby2.5",
152
+ }
153
+ map[@task.lang]
154
+ end
155
+
156
+ def default_handler
157
+ map = {
158
+ node: @task.full_handler(:handler), # IE: handlers/controllers/posts/show.handler
159
+ python: @task.full_handler(:lambda_handler), # IE: handlers/controllers/posts/show.lambda_handler
160
+ ruby: handler, # IE: handlers/controllers/posts_controllers.index
161
+ }
162
+ map[@task.lang]
163
+ end
164
+
165
+ def handler
166
+ handler_value(@task.meth) # IE: handlers/controllers/posts_controllers.index
167
+ end
168
+
169
+ # Used for node-shim also
170
+ def handler_value(meth)
171
+ "handlers/#{@task.type.pluralize}/#{@app_class.underscore}.#{meth}"
172
+ end
173
+
174
+ # Ensure that the handler path is normalized.
175
+ def full_handler(props)
176
+ if props[:handler]
177
+ handler_value(props[:handler])
178
+ else
179
+ default_handler
180
+ end
181
+ end
182
+
183
+ def code_s3_key
184
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
185
+ "jets/code/code-#{checksum}.zip" # s3_key
186
+ end
187
+
188
+ MAX_FUNCTION_NAME_SIZE = 64
189
+ # Examples:
190
+ # "#{Jets.config.project_namespace}-sleep_job-perform"
191
+ # "demo-dev-sleep_job-perform"
192
+ def function_name
193
+ # Example values:
194
+ # @app_class: admin/pages_controller
195
+ # @task.meth: index
196
+ # method: admin/pages_controller
197
+ # method: admin-pages_controller-index
198
+ method = @app_class.underscore
199
+ method = method.gsub('/','-').gsub(/[^0-9a-z\-_]/i, '') + "-#{@task.meth}"
200
+ function_name = "#{Jets.config.project_namespace}-#{method}"
201
+ # Returns nil if function name is too long.
202
+ # CloudFormation will managed the the function name in this case.
203
+ # A pretty function name won't be generated but the deploy will be successful.
204
+ function_name.size > MAX_FUNCTION_NAME_SIZE ? nil : function_name
205
+ end
206
+
207
+ def description
208
+ # Example values:
209
+ # @app_class: Admin/PagesController
210
+ # @task.meth: index
211
+ # Returns:
212
+ # Admin/PagesController#index
213
+ "#{@app_class}##{@task.meth}"
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,61 @@
1
+ class Jets::Resource::Lambda::Function
2
+ module Environment
3
+ def env_properties
4
+ env_vars = Jets::Dotenv.load!(true)
5
+ variables = environment.merge(env_vars)
6
+ check_reserved_variables!(variables)
7
+ {environment: { variables: variables }}
8
+ end
9
+
10
+ def environment
11
+ env = Jets.config.environment ? Jets.config.environment.to_h : {}
12
+ env.deep_merge(jets_env)
13
+ end
14
+
15
+ # These jets env variables are special variables that get included to keeps some state
16
+ def jets_env
17
+ env = {}
18
+ env[:JETS_ENV] = Jets.env.to_s
19
+ env[:JETS_ENV_EXTRA] = Jets.config.env_extra if Jets.config.env_extra
20
+ env[:JETS_PROJECT_NAME] = ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME']
21
+ env[:JETS_STAGE] = Jets::Resource::ApiGateway::Deployment.stage_name
22
+ env
23
+ end
24
+
25
+ private
26
+ def check_reserved_variables!(variables)
27
+ found_reserved_vars = variables.keys & reserved_variables
28
+ return if found_reserved_vars.empty?
29
+
30
+ puts "You have configured some environment variables that are reserved by AWS Lambda.".color(:red)
31
+ puts found_reserved_vars
32
+ puts "The deployment to AWS Lambda will failed when using reserved variables."
33
+ puts "Please remove these reserved variables. "
34
+ puts "More info: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables"
35
+ exit 1
36
+ end
37
+
38
+ # https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables
39
+ def reserved_variables
40
+ %w[
41
+ _HANDLER
42
+ AWS_REGION
43
+ AWS_EXECUTION_ENV
44
+ AWS_LAMBDA_FUNCTION_NAME
45
+ AWS_LAMBDA_FUNCTION_MEMORY_SIZE
46
+ AWS_LAMBDA_FUNCTION_VERSION
47
+ AWS_LAMBDA_LOG_GROUP_NAME
48
+ AWS_LAMBDA_LOG_STREAM_NAME
49
+ AWS_ACCESS_KEY_ID
50
+ AWS_SECRET_ACCESS_KEY
51
+ AWS_SESSION_TOKEN
52
+ TZ
53
+ LAMBDA_TASK_ROOT
54
+ LAMBDA_RUNTIME_DIR
55
+ AWS_LAMBDA_RUNTIME_API
56
+ ]
57
+ end
58
+
59
+
60
+ end
61
+ end
@@ -0,0 +1,17 @@
1
+ module Jets::Resource::Lambda
2
+ class GemLayer < LayerVersion
3
+ def description
4
+ "Jets Ruby Gems"
5
+ end
6
+
7
+ def layer_name
8
+ # Do not include the Jets.extra_env to group the layers in same app together
9
+ "#{Jets.config.short_env}-#{Jets.config.project_name}-gems"
10
+ end
11
+
12
+ def code_s3_key
13
+ checksum = Jets::Builders::Md5.checksums["stage/opt"]
14
+ "jets/code/opt-#{checksum}.zip" # s3_key
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,44 @@
1
+ # Type: "AWS::Lambda::LayerVersion"
2
+ # Properties:
3
+ # CompatibleRuntimes:
4
+ # - String
5
+ # - ...
6
+ # Content:
7
+ # Content
8
+ # Description: String
9
+ # LayerName: String
10
+ # LicenseInfo: String
11
+ module Jets::Resource::Lambda
12
+ class LayerVersion < Jets::Resource::Base
13
+ def definition
14
+ {
15
+ layer_version_logical_id => {
16
+ type: "AWS::Lambda::LayerVersion",
17
+ properties: {
18
+ content: {
19
+ s3_bucket: s3_bucket,
20
+ s3_key: code_s3_key,
21
+ },
22
+ description: description,
23
+ layer_name: layer_name,
24
+ license_info: "MIT",
25
+ }
26
+ }
27
+ }
28
+ end
29
+
30
+ def s3_bucket
31
+ "!Ref S3Bucket"
32
+ end
33
+
34
+ def layer_version_logical_id
35
+ self.class.name.split('::').last
36
+ end
37
+
38
+ def outputs
39
+ {
40
+ logical_id => "!Ref #{logical_id}",
41
+ }
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,45 @@
1
+ class Jets::Resource
2
+ class Permission < Jets::Resource::Base
3
+ def initialize(replacements, associated_resource)
4
+ @replacements = replacements
5
+ @associated_resource = associated_resource
6
+ end
7
+
8
+ def definition
9
+ logical_id = permission_logical_id
10
+
11
+ definition = {
12
+ logical_id => {
13
+ type: "AWS::Lambda::Permission",
14
+ properties: {
15
+ function_name: "!GetAtt {namespace}LambdaFunction.Arn",
16
+ action: "lambda:InvokeFunction",
17
+ principal: principal
18
+ }
19
+ }
20
+ }
21
+
22
+ # From AWS docs: https://amzn.to/2N0QXQL
23
+ # source_arn is "not supported by all event sources"
24
+ definition[logical_id][:properties][:source_arn] = source_arn if source_arn
25
+
26
+ definition
27
+ end
28
+
29
+ def permission_logical_id
30
+ logical_id = "{namespace}_permission"
31
+ md = @associated_resource.logical_id.match(/(\d+)/)
32
+ counter = md[1] if md
33
+ [logical_id, counter].compact.join('').underscore
34
+ end
35
+
36
+ # Auto-detect principal from the associated resources.
37
+ def principal
38
+ Replacer.principal_map(@associated_resource.type)
39
+ end
40
+
41
+ def source_arn
42
+ Replacer.source_arn_map(@associated_resource.type)
43
+ end
44
+ end
45
+ end