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,5 @@
1
+ module Jets::Builders::ShimVars
2
+ autoload :App, "jets/builders/shim_vars/app"
3
+ autoload :Base, "jets/builders/shim_vars/base"
4
+ autoload :Shared, "jets/builders/shim_vars/shared"
5
+ end
@@ -0,0 +1,78 @@
1
+ # Jets::Builders::ShimVars::Shared.new(path)
2
+ #
3
+ # @vars.functions.each do |function_name|
4
+ # @vars.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class App < Base
15
+ # Allow user to specify relative or full path. The right path gets used
16
+ # internally. Example paths:
17
+ # app/controllers/posts_controller.rb
18
+ # app/jobs/hard_job.rb
19
+ # /tmp/jets/build/app_root/app/jobs/hard_job.rb
20
+ # /tmp/jets/build/app_root/app/functions/hello.rb
21
+ def initialize(path)
22
+ @full_path = full(path)
23
+ @relative_path = relative(path)
24
+ end
25
+
26
+ def full(path)
27
+ path = "#{Jets.root}/#{path}" unless path.starts_with?("/")
28
+ path
29
+ end
30
+
31
+ def relative(path)
32
+ full_path = full(path)
33
+ full_path.sub("#{Jets.root}/", "")
34
+ .sub(/.*internal\/app/, "app")
35
+
36
+ end
37
+
38
+ # process_type is key, it will either "controller" or "job".
39
+ # It is used to deduce klass, etc.
40
+ # We get the process_type from the path.
41
+ # Example paths:
42
+ # app/controllers/posts_controller.rb
43
+ # app/jobs/hard_job.rb
44
+ def process_type
45
+ @relative_path.split('/')[1].singularize # controller or job
46
+ end
47
+
48
+ # Returns the public methods of the child_class.
49
+ # Example: [:create, :update]
50
+ def functions
51
+ klass.lambda_functions
52
+ end
53
+
54
+ # Examples: PostsController, HardJob, Hello, HelloFunction
55
+ def klass
56
+ @klass ||= Jets::Klass.from_path(@relative_path)
57
+ end
58
+
59
+ def lang(meth)
60
+ klass.tasks.find
61
+ end
62
+
63
+ # This gets called in the node shim js template
64
+ # IE handlers/controllers/posts_controller.index
65
+ def handler_for(meth)
66
+ # possibly not include _function
67
+ underscored_name = @relative_path.sub(%r{app/(\w+)/},'').sub('.rb','')
68
+ "handlers/#{process_type.pluralize}/#{underscored_name}.#{meth}"
69
+ end
70
+
71
+ # Example return: "handlers/controllers/posts.js"
72
+ # TODO: rename this to dest_path or something better now since using native ruby
73
+ def dest_path
74
+ @relative_path
75
+ .sub("app", "handlers")
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,25 @@
1
+ module Jets::Builders::ShimVars
2
+ class Base
3
+ include Jets::AwsServices
4
+ extend Memoist
5
+
6
+ def s3_bucket
7
+ Jets.aws.s3_bucket
8
+ end
9
+
10
+ def rack_zip
11
+ checksum_zip(:rack)
12
+ end
13
+
14
+ def bundled_zip
15
+ checksum_zip(:bundled)
16
+ end
17
+
18
+ private
19
+ def checksum_zip(name)
20
+ checksum = Jets::Builders::Md5.checksums["stage/#{name}"]
21
+ return unless checksum
22
+ "#{name}-#{checksum}.zip"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ # Jets::Builders::ShimVars::Shared.new(fun)
2
+ #
3
+ # @deducer.functions.each do |function_name|
4
+ # @deducer.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class Shared < Base
15
+ # fun is a Jets::Stack::Function
16
+ def initialize(fun)
17
+ @fun = fun
18
+ end
19
+
20
+ # Always only one element for shared functions
21
+ # functions: IE [:handle]
22
+ def functions
23
+ [@fun.meth] # function_names
24
+ end
25
+
26
+ # Dont need function_name arg but keeping the same interface as parent class
27
+ # IE handlers/shared/functions/bob.handle
28
+ def handler_for(function_name)
29
+ @fun.handler_dest
30
+ end
31
+
32
+ # IE handlers/shared/functions/bob.js
33
+ def dest_path
34
+ @fun.handler_dest
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ require "bundler/setup"
2
+ require "jets"
3
+ Jets.once # runs once in lambda execution context
4
+
5
+ <% @vars.functions.each do |function_name|
6
+ handler = @vars.handler_for(function_name)
7
+ meth = handler.split('.').last
8
+ -%>
9
+ def <%= meth -%>(event:, context:)
10
+ Jets.process(event, context, "<%= handler -%>")
11
+ end
12
+ <% end %>
@@ -0,0 +1,107 @@
1
+ class Jets::Builders
2
+ class Tidy
3
+ include Util
4
+
5
+ def initialize(project_root, noop: false)
6
+ @project_root = project_root
7
+ @noop = noop
8
+ end
9
+
10
+ def cleanup!
11
+ removals.each do |removal|
12
+ removal = removal.sub(%r{^/},'') # remove leading slash
13
+ path = "#{@project_root}/#{removal}"
14
+ rm_rf(path)
15
+ end
16
+
17
+ clean_vendor_gems
18
+ clean_webpack_assets
19
+ end
20
+
21
+ # Clean out unnecessary src and compiled packs because Jets serves them out of s3.
22
+ # This keeps the code size down to help keep it in size limit so we can use the
23
+ # live Lambda console editor.
24
+ def clean_webpack_assets
25
+ FileUtils.rm_rf("#{@project_root}/app/javascript/src")
26
+
27
+ return unless File.exist?("#{@project_root}/public/packs") # this class works for rack subfolder too
28
+ FileUtils.mv("#{@project_root}/public/packs/manifest.json", "#{stage_area}/manifest.json")
29
+ FileUtils.rm_rf("#{@project_root}/public/packs")
30
+ FileUtils.mkdir_p("#{@project_root}/public/packs")
31
+ FileUtils.mv("#{stage_area}/manifest.json", "#{@project_root}/public/packs/manifest.json")
32
+ end
33
+
34
+ def removals
35
+ removals = always_removals
36
+ removals += get_removals("#{@project_root}/.gitignore")
37
+ removals += get_removals("#{@project_root}/.dockerignore")
38
+ removals = removals.reject do |p|
39
+ jetskeep.find do |keep|
40
+ p.include?(keep)
41
+ end
42
+ end
43
+ removals.uniq
44
+ end
45
+
46
+ def get_removals(file)
47
+ path = file
48
+ return [] unless File.exist?(path)
49
+
50
+ removal = File.read(path).split("\n")
51
+ removal.map {|i| i.strip}.reject {|i| i =~ /^#/ || i.empty?}
52
+ # IE: ["/handlers", "/bundled*", "/vendor/jets]
53
+ end
54
+
55
+ # We clean out ignored files pretty aggressively. So provide
56
+ # a way for users to keep files from being cleaned out.
57
+ def jetskeep
58
+ always = %w[.bundle packs]
59
+ path = "#{@project_root}/.jetskeep"
60
+ return always unless File.exist?(path)
61
+
62
+ keep = IO.readlines(path)
63
+ keep = keep.map {|i| i.strip}.reject { |i| i =~ /^#/ || i.empty? }
64
+ (always + keep).uniq
65
+ end
66
+
67
+ # folders to remove in the vendor/gems folder regardless of the level of the folder
68
+ def clean_vendor_gems
69
+ # Thanks: https://stackoverflow.com/questions/11385795/ruby-list-directory-with-dir-including-dotfiles-but-not-and
70
+ Dir.glob("#{@project_root}/vendor/gems/**/*", File::FNM_DOTMATCH).each do |path|
71
+ next unless File.directory?(path)
72
+ dir = File.basename(path)
73
+ next unless always_removals.include?(dir)
74
+
75
+ rm_rf(path)
76
+ end
77
+
78
+ remove_gem_cache
79
+ end
80
+
81
+ # Reason do not remove the cache folder generally is because some gems have
82
+ # actual cache folders that they used.
83
+ def remove_gem_cache
84
+ ruby_minor_version = Jets::RUBY_VERSION.split('.')[0..1].join('.') + '.0'
85
+ cache_path = "#{@project_root}/vendor/gems/ruby/#{ruby_minor_version}/cache"
86
+ FileUtils.rm_rf(cache_path)
87
+ end
88
+
89
+ def rm_rf(path)
90
+ exists = File.exist?("#{path}/.gitkeep") || File.exist?("#{path}/.keep")
91
+ return if exists
92
+
93
+ # say " rm -rf #{path}".color(:yellow) # uncomment to debug
94
+ system("rm -rf #{path}") unless @noop
95
+ end
96
+
97
+ # These directories will be removed regardless of dir level
98
+ def always_removals
99
+ %w[.git spec tmp]
100
+ end
101
+
102
+ def say(message)
103
+ message = "NOOP #{message}" if @noop
104
+ puts message
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,31 @@
1
+ class Jets::Builders
2
+ module Util
3
+ private
4
+ def sh(command)
5
+ puts "=> #{command}".color(:green)
6
+ success = system(command)
7
+ unless success
8
+ puts "#{command} failed to run.".color(:red)
9
+ puts caller[0]
10
+ exit 1
11
+ end
12
+ success
13
+ end
14
+
15
+ def headline(message)
16
+ puts "=> #{message}".color(:cyan)
17
+ end
18
+
19
+ def build_area
20
+ Jets.build_root
21
+ end
22
+
23
+ def stage_area
24
+ "#{build_area}/stage"
25
+ end
26
+
27
+ def cache_area
28
+ "#{build_area}/cache" # cleaner to use full path for this setting
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,67 @@
1
+ # Custom Camelizer with CloudFormation specific handling.
2
+ # Based on: https://stackoverflow.com/questions/8706930/converting-nested-hash-keys-from-camelcase-to-snake-case-in-ruby
3
+ module Jets
4
+ class Camelizer
5
+ class << self
6
+ def transform(value, parent_keys=[])
7
+ case value
8
+ when Array
9
+ value.map { |v| transform(v) }
10
+ when Hash
11
+ initializer = value.map do |k, v|
12
+ new_key = camelize_key(k, parent_keys)
13
+ [new_key, transform(v, parent_keys+[new_key])]
14
+ end
15
+ Hash[initializer]
16
+ else
17
+ value # do not transform values
18
+ end
19
+ end
20
+
21
+ def camelize_key(k, parent_keys=[])
22
+ k = k.to_s
23
+
24
+ if passthrough?(k, parent_keys)
25
+ k # pass through untouch
26
+ elsif parent_keys.last == "EventPattern" # top-level
27
+ k.dasherize
28
+ elsif parent_keys.include?("EventPattern")
29
+ # Any keys at 2nd level under EventPattern will be pascalized
30
+ pascalize(k)
31
+ else
32
+ camelize(k)
33
+ end
34
+ end
35
+
36
+ def passthrough?(k, parent_keys)
37
+ parent_keys.include?("Variables") || # do not transform keys anything under Variables
38
+ parent_keys.include?("ResponseParameters") || # do not transform keys anything under Variables
39
+ k.include?('-') || k.include?('/')
40
+ end
41
+
42
+ def camelize(value)
43
+ return value if value.is_a?(Integer)
44
+
45
+ value = value.to_s.camelize
46
+ special_map[value] || value
47
+ end
48
+
49
+ def pascalize(value)
50
+ new_value = value.camelize
51
+ first_char = new_value[0..0].downcase
52
+ new_value[0] = first_char
53
+ new_value
54
+ end
55
+
56
+ # Some keys have special mappings
57
+ def special_map
58
+ {
59
+ "TemplateUrl" => "TemplateURL",
60
+ "Ttl" => "TTL",
61
+ "MaxReceiveCount" => "maxReceiveCount",
62
+ "DeadLetterTargetArn" => "deadLetterTargetArn",
63
+ }
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,6 @@
1
+ class Jets::Cfn
2
+ autoload :Builders, "jets/cfn/builders"
3
+ autoload :Ship, "jets/cfn/ship"
4
+ autoload :Status, "jets/cfn/status"
5
+ autoload :Upload, "jets/cfn/upload"
6
+ end
@@ -0,0 +1,20 @@
1
+ require 'yaml'
2
+
3
+ class Jets::Cfn
4
+ class Builders
5
+ autoload :Interface, "jets/cfn/builders/interface"
6
+ autoload :ParentBuilder, "jets/cfn/builders/parent_builder"
7
+
8
+ # These build the app/controllers, app/jobs, and app/functions
9
+ autoload :BaseChildBuilder, "jets/cfn/builders/base_child_builder"
10
+ autoload :ControllerBuilder, "jets/cfn/builders/controller_builder"
11
+ autoload :FunctionBuilder, "jets/cfn/builders/function_builder"
12
+ autoload :JobBuilder, "jets/cfn/builders/job_builder"
13
+ autoload :RuleBuilder, "jets/cfn/builders/rule_builder"
14
+
15
+ autoload :ApiGatewayBuilder, "jets/cfn/builders/api_gateway_builder"
16
+ autoload :ApiDeploymentBuilder, "jets/cfn/builders/api_deployment_builder"
17
+
18
+ autoload :SharedBuilder, "jets/cfn/builders/shared_builder"
19
+ end
20
+ end
@@ -0,0 +1,58 @@
1
+ class Jets::Cfn::Builders
2
+ class ApiDeploymentBuilder
3
+ include Interface
4
+ include Jets::AwsServices
5
+
6
+ def initialize(options={})
7
+ @options = options
8
+ @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
+ end
10
+
11
+ # compose is an interface method
12
+ def compose
13
+ return unless @options[:templates] || @options[:stack_type] != :minimal
14
+
15
+ deployment = Jets::Resource::ApiGateway::Deployment.new
16
+ add_resource(deployment)
17
+ add_parameters(deployment.parameters)
18
+ add_outputs(deployment.outputs)
19
+
20
+ add_base_path_mapping
21
+ end
22
+
23
+ # Because Jets generates a new timestamped logical id for the API Deployment
24
+ # resource it also creates a new root base path mapping and fails. Additionally,
25
+ # the base path mapping depends on the API Deploy for the stage name.
26
+ #
27
+ # We resolve this by using a custom resource that does an in-place update.
28
+ #
29
+ # Note, also tried to change the domain name of to something like demo-dev-[random].mydomain.com
30
+ # but that does not work because the domain name has to match the route53 record exactly.
31
+ #
32
+ def add_base_path_mapping
33
+ return unless Jets.custom_domain?
34
+
35
+ function = Jets::Resource::ApiGateway::BasePath::Function.new
36
+ add_resource(function)
37
+ add_outputs(function.outputs)
38
+
39
+ mapping = Jets::Resource::ApiGateway::BasePath::Mapping.new
40
+ add_resource(mapping)
41
+ add_outputs(mapping.outputs)
42
+
43
+ iam_role = Jets::Resource::ApiGateway::BasePath::Role.new
44
+ add_resource(iam_role)
45
+ add_outputs(iam_role.outputs)
46
+ end
47
+
48
+ # template_path is an interface method
49
+ def template_path
50
+ Jets::Naming.api_deployment_template_path
51
+ end
52
+
53
+ # do not bother writing a template if routes are empty
54
+ def write
55
+ super unless Jets::Router.routes.empty?
56
+ end
57
+ end
58
+ end