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,21 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ task :default => :spec
5
+
6
+ RSpec::Core::RakeTask.new
7
+
8
+ require_relative "lib/jets"
9
+ desc "Generates cli reference docs as markdown"
10
+ task :docs do
11
+ Jets::Commands::Markdown::Creator.create_all
12
+ end
13
+
14
+ # Thanks: https://docs.ruby-lang.org/en/2.1.0/RDoc/Task.html
15
+ require 'rdoc/task'
16
+ require 'jets/rdoc'
17
+
18
+ RDoc::Task.new do |rdoc|
19
+ rdoc.options += Jets::Rdoc.options
20
+ end
21
+
@@ -0,0 +1,16 @@
1
+ <h1 align="center">Backers</h1>
2
+
3
+ [Jets](http://rubyonjets.com/) is an MIT-licensed open source project. It's an independent project with its ongoing development made possible entirely thanks to the support by these awesome [backers](https://github.com/tongueroo/jets/blob/master/backers.md). If you'd like to join them, please consider:
4
+
5
+ - [Become a backer or sponsor on Patreon](https://www.patreon.com/tongueroo).
6
+
7
+ Funds donated via Patreon go directly to support Tung Nguyen's full-time work on Jets.
8
+
9
+ <br><br>
10
+
11
+ <h2 align="center">Backers via Patreon</h2>
12
+
13
+ <!--10 start-->
14
+ - Erlend Finvåg
15
+ - Nate Clark
16
+ <!--10 end-->
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ # Wrapper release script so we don't forget to add submodules.
4
+ # Should still update the CHANGELOG.md and version.rb before running this script.
5
+
6
+ git submodule init
7
+ git submodule update
8
+ bundle update
9
+ rake release
@@ -0,0 +1,18 @@
1
+ version: 0.2
2
+
3
+ phases:
4
+ build:
5
+ commands:
6
+ - echo Build started on `date`
7
+ # sync vendor
8
+ - git submodule sync
9
+ - git submodule update --init
10
+ - /usr/local/bin/dynamodb-local &
11
+ - bundle install
12
+ - bundle exec rspec # unit tests
13
+ # uncomment integration test for now
14
+ # - bash -eux .codebuild/integration.sh # test with newman and postman
15
+
16
+ artifacts:
17
+ files:
18
+ - README.md
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # traps: INT - ^C
4
+ ['INT', 'TERM', 'QUIT'].each do |signal|
5
+ trap(signal) do
6
+ puts "Detected stop signal"
7
+ sleep 0.2
8
+ exit
9
+ end
10
+ end
11
+
12
+ $:.unshift(File.expand_path("../../lib", __FILE__))
13
+ require "jets"
14
+ Jets::CLI.start
@@ -0,0 +1,61 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "jets/version"
5
+ require "jets/rdoc"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "jets-fs"
9
+ spec.version = Jets::VERSION
10
+ spec.authors = ["Tung Nguyen"]
11
+ spec.email = ["tongueroo@gmail.com"]
12
+ spec.summary = "Ruby Serverless Framework on AWS Lambda"
13
+ spec.description = "Jets is a framework that allows you to create serverless applications with a beautiful language: Ruby. It includes everything required to build an application and deploy it to AWS Lambda. Jets makes serverless accessible to everyone."
14
+ spec.homepage = "http://rubyonjets.com"
15
+ spec.license = "MIT"
16
+
17
+ spec.required_ruby_version = '~> 2.5'
18
+ spec.rdoc_options += Jets::Rdoc.options
19
+
20
+ vendor_files = Dir.glob("vendor/**/*")
21
+ gem_files = `git -C "#{File.dirname(__FILE__)}" ls-files -z`.split("\x0").reject do |f|
22
+ f.match(%r{^(test|spec|features|docs)/})
23
+ end
24
+ spec.files = gem_files + vendor_files
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
28
+ spec.require_paths = ["lib"]
29
+
30
+ # spec.add_dependency "actionpack", "~> 5.2.1" # using vendor/rails version
31
+ # spec.add_dependency "actionview", "~> 5.2.1" # using vendor/rails version
32
+ spec.add_dependency "activerecord", "~> 5.2.1"
33
+ spec.add_dependency "activesupport", "~> 5.2.1"
34
+ spec.add_dependency "aws-sdk-apigateway"
35
+ spec.add_dependency "aws-sdk-cloudformation"
36
+ spec.add_dependency "aws-sdk-cloudwatchlogs"
37
+ spec.add_dependency "aws-sdk-dynamodb"
38
+ spec.add_dependency "aws-sdk-lambda"
39
+ spec.add_dependency "aws-sdk-s3"
40
+ spec.add_dependency "aws-sdk-sns"
41
+ spec.add_dependency "aws-sdk-sqs"
42
+ spec.add_dependency "dotenv"
43
+ spec.add_dependency "gems" # jets-gems dependency
44
+ spec.add_dependency "hashie"
45
+ spec.add_dependency "jets-html-sanitizer"
46
+ spec.add_dependency "json"
47
+ spec.add_dependency "kramdown"
48
+ spec.add_dependency "memoist"
49
+ spec.add_dependency "mimemagic"
50
+ spec.add_dependency "rack"
51
+ spec.add_dependency "railties", "~> 5.2.1" # ActiveRecord database_tasks.rb require this
52
+ spec.add_dependency "rainbow"
53
+ spec.add_dependency "recursive-open-struct"
54
+ spec.add_dependency "text-table"
55
+ spec.add_dependency "thor"
56
+
57
+ spec.add_development_dependency "byebug"
58
+ spec.add_development_dependency "bundler"
59
+ spec.add_development_dependency "rake"
60
+ spec.add_development_dependency "rspec"
61
+ end
@@ -0,0 +1,71 @@
1
+ $:.unshift(File.expand_path("../", __FILE__))
2
+ require "active_support"
3
+ require "active_support/concern"
4
+ require "active_support/core_ext"
5
+ require "active_support/dependencies"
6
+ require "active_support/ordered_hash"
7
+ require "active_support/ordered_options"
8
+ require "fileutils"
9
+ require "jets/camelizer"
10
+ require "jets/version"
11
+ require "memoist"
12
+ require "rainbow/ext/string"
13
+
14
+ module Jets
15
+ RUBY_VERSION = "2.5.3"
16
+ class Error < StandardError; end
17
+
18
+ autoload :Application, "jets/application"
19
+ autoload :AwsInfo, "jets/aws_info"
20
+ autoload :AwsServices, "jets/aws_services"
21
+ autoload :Booter, 'jets/booter'
22
+ autoload :Builders, 'jets/builders'
23
+ autoload :Call, "jets/call"
24
+ autoload :Cfn, 'jets/cfn'
25
+ autoload :CLI, "jets/cli"
26
+ autoload :Commands, "jets/commands"
27
+ autoload :Controller, 'jets/controller'
28
+ autoload :Core, "jets/core"
29
+ autoload :Db, 'jets/db'
30
+ autoload :Dotenv, 'jets/dotenv'
31
+ autoload :Erb, "jets/erb"
32
+ autoload :Generator, "jets/generator"
33
+ autoload :Inflections, "jets/inflections"
34
+ autoload :IO, "jets/io"
35
+ autoload :Job, 'jets/job'
36
+ autoload :Klass, 'jets/klass'
37
+ autoload :Lambda, 'jets/lambda'
38
+ autoload :Logger, "jets/logger"
39
+ autoload :Mega, "jets/mega"
40
+ autoload :Middleware, "jets/middleware"
41
+ autoload :Naming, 'jets/naming'
42
+ autoload :PolyFun, 'jets/poly_fun'
43
+ autoload :Preheat, "jets/preheat"
44
+ autoload :Processors, 'jets/processors'
45
+ autoload :RackServer, "jets/rack_server"
46
+ autoload :Rdoc, "jets/rdoc"
47
+ autoload :Resource, "jets/resource"
48
+ autoload :Route, "jets/route"
49
+ autoload :Router, "jets/router"
50
+ autoload :Rule, 'jets/rule'
51
+ autoload :Stack, "jets/stack"
52
+ autoload :TmpLoader, "jets/tmp_loader"
53
+ autoload :Turbine, 'jets/turbine'
54
+ autoload :Turbo, 'jets/turbo'
55
+ autoload :Util, "jets/util"
56
+
57
+ extend Core # root, logger, etc
58
+ end
59
+
60
+ require "jets/core_ext/kernel"
61
+
62
+ root = File.expand_path("..", File.dirname(__FILE__))
63
+
64
+ $:.unshift("#{root}/vendor/jets-gems/lib")
65
+ require "jets-gems"
66
+
67
+ $:.unshift("#{root}/vendor/rails/actionpack/lib")
68
+ $:.unshift("#{root}/vendor/rails/actionview/lib")
69
+ # will require action_controller, action_pack, etc later when needed
70
+
71
+ Jets::Db # trigger autoload
@@ -0,0 +1,308 @@
1
+ require "singleton"
2
+ require "rack"
3
+
4
+ class Jets::Application
5
+ include Singleton
6
+ extend Memoist
7
+ autoload :Middleware, "jets/middleware"
8
+ include Jets::Middleware
9
+
10
+ def configure(&block)
11
+ instance_eval(&block) if block
12
+ end
13
+
14
+ def setup!
15
+ load_configs
16
+ end
17
+
18
+ def finish!
19
+ load_inflections
20
+ setup_auto_load_paths
21
+ load_routes
22
+ end
23
+
24
+ def load_inflections
25
+ Jets::Inflections.load!
26
+ end
27
+
28
+ def config
29
+ @config ||= ActiveSupport::OrderedOptions.new # dont use memoize since we reset @config later
30
+ end
31
+
32
+ def default_config
33
+ config = ActiveSupport::OrderedOptions.new
34
+ config.project_name = parse_project_name # must set early because other configs requires this
35
+ config.cors = false
36
+ config.autoload_paths = default_autoload_paths
37
+ config.extra_autoload_paths = []
38
+ config.logger = Jets::Logger.new($stderr)
39
+
40
+ # function properties defaults
41
+ config.function = ActiveSupport::OrderedOptions.new
42
+ config.function.timeout = 30
43
+ # default memory setting based on:
44
+ # https://medium.com/epsagon/how-to-make-lambda-faster-memory-performance-benchmark-be6ebc41f0fc
45
+ config.function.memory_size = 1536
46
+
47
+ config.prewarm = ActiveSupport::OrderedOptions.new
48
+ config.prewarm.enable = true
49
+ config.prewarm.rate = '30 minutes'
50
+ config.prewarm.concurrency = 2
51
+ config.prewarm.public_ratio = 3
52
+ config.prewarm.rack_ratio = 5
53
+
54
+ config.gems = ActiveSupport::OrderedOptions.new
55
+ config.gems.sources = [
56
+ Jets.default_gems_source
57
+ ]
58
+
59
+ config.inflections = ActiveSupport::OrderedOptions.new
60
+ config.inflections.irregular = {}
61
+
62
+ config.assets = ActiveSupport::OrderedOptions.new
63
+ config.assets.folders = %w[assets images packs]
64
+ config.assets.base_url = nil # IE: https://cloudfront.com/my/base/path
65
+ config.assets.max_age = 3600
66
+ config.assets.cache_control = nil # IE: public, max-age=3600 , max_age is a shorter way to set cache_control.
67
+
68
+ config.ruby = ActiveSupport::OrderedOptions.new
69
+
70
+ config.middleware = Jets::Middleware::Configurator.new
71
+
72
+ config.session = ActiveSupport::OrderedOptions.new
73
+ config.session.store = Rack::Session::Cookie # note when accessing it use session[:store] since .store is an OrderedOptions method
74
+ config.session.options = {}
75
+
76
+ config.api = ActiveSupport::OrderedOptions.new
77
+ config.api.authorization_type = "NONE"
78
+ config.api.cors_authorization_type = nil # nil so ApiGateway::Cors#cors_authorization_type handles
79
+ config.api.binary_media_types = ['multipart/form-data']
80
+ config.api.endpoint_type = 'EDGE' # PRIVATE, EDGE, REGIONAL
81
+
82
+ config.domain = ActiveSupport::OrderedOptions.new
83
+ # config.domain.name = "#{Jets.project_namespace}.coolapp.com" # Default is nil
84
+ # config.domain.cert_arn = "..."
85
+ config.domain.endpoint_type = "REGIONAL" # EDGE or REGIONAL. Default to EDGE because CloudFormation update is faster
86
+ config.domain.route53 = true # controls whether or not to create the managed route53 record.
87
+ # Useful to disable this when user wants to manage the route themself like pointing
88
+ # it to CloudFront for blue-green deployments instead.
89
+
90
+ # Custom user lambda layers
91
+ config.lambda = ActiveSupport::OrderedOptions.new
92
+ config.lambda.layers = []
93
+
94
+ # Only used for Jets Afterburner, Mega Mode currently. This is a fallback default
95
+ # encoding. Usually, the Rails response will return a content-type header and
96
+ # the encoding in there is used when possible. Example Content-Type header:
97
+ # Content-Type text/html; charset=utf-8
98
+ config.encoding = ActiveSupport::OrderedOptions.new
99
+ config.encoding.default = "utf-8"
100
+
101
+ config
102
+ end
103
+
104
+ # Double evaling config/application.rb causes subtle issues:
105
+ # * double loading of shared resources: Jets::Stack.subclasses will have the same
106
+ # class twice when config is called when declaring a function
107
+ # * forces us to rescue all exceptions, which is a big hammer
108
+ #
109
+ # Lets parse for the project name instead for now.
110
+ #
111
+ def parse_project_name
112
+ return ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME'] # override
113
+
114
+ lines = IO.readlines("#{Jets.root}/config/application.rb")
115
+ project_name_line = lines.find { |l| l =~ /config\.project_name.*=/ }
116
+ project_name_line.gsub(/.*=/,'').strip.gsub(/["']/,'') # project_name
117
+ end
118
+
119
+ def load_app_config
120
+ @config = default_config
121
+ set_dependent_configs! # things like project_namespace that need project_name
122
+ eval_app_config # this overwrites Jets.config.project_name
123
+ Jets.config.project_name = parse_project_name # Must set again because JETS_PROJECT_NAME is possible
124
+
125
+ set_iam_policy # relies on dependent values, must be called afterwards
126
+ normalize_env_vars!
127
+ end
128
+
129
+ def eval_app_config
130
+ app_config = "#{Jets.root}/config/application.rb"
131
+ load app_config # use load instead of require so reload_configs! works
132
+ end
133
+
134
+ # After the mimimal template gets build, we need to reload it for the full stack
135
+ # creation. This allows us to reference IAM policies configs that depend on the
136
+ # creation of the s3 bucket.
137
+ def reload_configs!
138
+ load_configs
139
+ end
140
+
141
+ def load_environments_config
142
+ env_file = "#{Jets.root}/config/environments/#{Jets.env}.rb"
143
+ if File.exist?(env_file)
144
+ code = IO.read(env_file)
145
+ instance_eval(code)
146
+ end
147
+ end
148
+
149
+ def load_configs
150
+ load_app_config
151
+ load_db_config
152
+ load_environments_config
153
+ deprecated_configs_message
154
+ end
155
+
156
+ def deprecated_configs_message
157
+ unless config.ruby.lazy_load.nil?
158
+ puts "Detected config.ruby.lazy_load = #{config.ruby.lazy_load.inspect}".color(:yellow)
159
+ puts "Deprecated: config.ruby.lazy_load".color(:yellow)
160
+ puts "Gems are now bundled with with Lambda Layer and there's no need to lazy load them."
161
+ puts "Please remove the config in your config/application.rb or config/environments files."
162
+ puts "You can have Jets automatically do this by running:"
163
+ puts " jets upgrade"
164
+ end
165
+ end
166
+
167
+ def setup_auto_load_paths
168
+ autoload_paths = config.autoload_paths + config.extra_autoload_paths
169
+ # internal_autoload_paths are last
170
+ autoload_paths += internal_autoload_paths
171
+ ActiveSupport::Dependencies.autoload_paths += autoload_paths
172
+ end
173
+
174
+ # Essentially folders under app folder will be the default_autoload_paths. Example:
175
+ # app/controllers
176
+ # app/helpers
177
+ # app/jobs
178
+ # app/models
179
+ # app/rules
180
+ # app/shared/resources
181
+ def default_autoload_paths
182
+ paths = []
183
+ Dir.glob("#{Jets.root}/app/*").each do |p|
184
+ p.sub!('./','')
185
+ paths << p unless exclude_autoload_path?(p)
186
+ end
187
+ paths
188
+ end
189
+
190
+ def exclude_autoload_path?(path)
191
+ path =~ %r{app/javascript} || path =~ %r{app/views}
192
+ end
193
+
194
+ def internal_autoload_paths
195
+ internal = File.expand_path("../internal", __FILE__)
196
+ paths = %w[
197
+ app/controllers
198
+ app/models
199
+ app/jobs
200
+ ]
201
+ paths.map { |path| "#{internal}/#{path}" }
202
+ end
203
+
204
+ # Use the shorter name in stack names, but use the full name when it
205
+ # comes to checking for the env.
206
+ #
207
+ # Example:
208
+ #
209
+ # Jets.env: 'development'
210
+ # Jets.config.project_namespace: 'demo-dev'
211
+ ENV_MAP = {
212
+ development: 'dev',
213
+ production: 'prod',
214
+ staging: 'stag',
215
+ }
216
+ def set_dependent_configs!
217
+ # env_extra can be also be set with JETS_ENV_EXTRA.
218
+ # JETS_ENV_EXTRA higher precedence than config.env_extra
219
+ config.env_extra = ENV['JETS_ENV_EXTRA'] if ENV['JETS_ENV_EXTRA']
220
+ # IE: With env_extra: project-dev-1
221
+ # Without env_extra: project-dev
222
+ config.short_env = ENV_MAP[Jets.env.to_sym] || Jets.env
223
+ # table_namespace does not have the env_extra, more common case desired.
224
+ config.table_namespace = [config.project_name, config.short_env].compact.join('-')
225
+
226
+ config.project_namespace = Jets.project_namespace
227
+ end
228
+
229
+ def set_iam_policy
230
+ config.iam_policy ||= self.class.default_iam_policy
231
+ config.managed_policy_definitions ||= [] # default empty
232
+ end
233
+
234
+ def self.default_iam_policy
235
+ project_namespace = Jets.project_namespace
236
+ logs = {
237
+ action: ["logs:*"],
238
+ effect: "Allow",
239
+ resource: "arn:aws:logs:#{Jets.aws.region}:#{Jets.aws.account}:log-group:/aws/lambda/#{project_namespace}-*",
240
+ }
241
+ s3_bucket = Jets.aws.s3_bucket
242
+ s3_readonly = {
243
+ action: ["s3:Get*", "s3:List*"],
244
+ effect: "Allow",
245
+ resource: "arn:aws:s3:::#{s3_bucket}*",
246
+ }
247
+ s3_bucket = {
248
+ action: ["s3:ListAllMyBuckets", "s3:HeadBucket"],
249
+ effect: "Allow",
250
+ resource: "arn:aws:s3:::*", # scoped to all buckets
251
+ }
252
+ policies = [logs, s3_readonly, s3_bucket]
253
+
254
+ if Jets::Stack.has_resources?
255
+ cloudformation = {
256
+ action: ["cloudformation:DescribeStacks"],
257
+ effect: "Allow",
258
+ resource: "arn:aws:cloudformation:#{Jets.aws.region}:#{Jets.aws.account}:stack/#{project_namespace}*",
259
+ }
260
+ policies << cloudformation
261
+ end
262
+ policies
263
+ end
264
+
265
+ # It is pretty easy to attempt to set environment variables without
266
+ # the correct AWS Environment.Variables path struture.
267
+ # Auto-fix it for convenience.
268
+ def normalize_env_vars!
269
+ environment = config.function.environment
270
+ if environment and !environment.to_h.key?(:variables)
271
+ config.function.environment = {
272
+ variables: environment.to_h
273
+ }
274
+ end
275
+ end
276
+
277
+ def load_db_config
278
+ config.database = {}
279
+
280
+ Jets::Dotenv.load!
281
+ database_yml = "#{Jets.root}/config/database.yml"
282
+ if File.exist?(database_yml)
283
+ text = Jets::Erb.result(database_yml)
284
+ db_config = YAML.load(text)
285
+ config.database = db_config
286
+ end
287
+ end
288
+
289
+ # Naming it routes because config/routes.rb requires
290
+ #
291
+ # Jets.application.routes.draw do
292
+ #
293
+ # for scaffolding to work.
294
+ def routes
295
+ @router ||= Jets::Router.new
296
+ end
297
+
298
+ def load_routes
299
+ routes_file = "#{Jets.root}/config/routes.rb"
300
+ require routes_file if File.exist?(routes_file)
301
+ end
302
+
303
+ def aws
304
+ Jets::AwsInfo.new
305
+ end
306
+ memoize :aws
307
+
308
+ end