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,24 @@
1
+ # Inheriting classes should implement:
2
+ #
3
+ # definition
4
+ # template_filename
5
+ #
6
+ module Jets::Resource::ChildStack
7
+ class Base < Jets::Resource::Base
8
+ def initialize(s3_bucket, options={})
9
+ @s3_bucket = s3_bucket
10
+ @options = options
11
+ end
12
+
13
+ def outputs
14
+ {
15
+ logical_id => "!Ref #{logical_id}",
16
+ }
17
+ end
18
+
19
+ def template_url
20
+ basename = File.basename(template_filename)
21
+ "https://s3.amazonaws.com/#{@s3_bucket}/jets/cfn-templates/#{basename}"
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,90 @@
1
+ # Implements:
2
+ #
3
+ # definition
4
+ # template_filename
5
+ #
6
+ module Jets::Resource::ChildStack
7
+ class Shared < AppClass
8
+ def initialize(s3_bucket, options={})
9
+ super
10
+ @path = options[:path]
11
+ end
12
+
13
+ def definition
14
+ logical_id = shared_logical_id
15
+ definition = {
16
+ logical_id => {
17
+ type: "AWS::CloudFormation::Stack",
18
+ properties: child_properties
19
+ }
20
+ }
21
+ definition[logical_id][:depends_on] = depends_on if depends_on
22
+ definition
23
+ end
24
+
25
+ def child_properties
26
+ props = {
27
+ template_url: template_url,
28
+ }
29
+
30
+ props[:parameters] = common_parameters # common child parameters
31
+ # add depends on parameters
32
+ depends_on.each do |dependency|
33
+ dependency_outputs(dependency).each do |output|
34
+ dependency_class = dependency.to_s.classify
35
+ props[:parameters][output] = "!GetAtt #{dependency_class}.Outputs.#{output}"
36
+ end
37
+ end if depends_on
38
+
39
+ props
40
+ end
41
+
42
+ def common_parameters
43
+ {
44
+ IamRole: "!GetAtt IamRole.Arn",
45
+ S3Bucket: "!Ref S3Bucket",
46
+ }
47
+ end
48
+
49
+ # Returns output keys associated with the stack. They are the resource logical ids.
50
+ def dependency_outputs(dependency)
51
+ dependency.to_s.classify.constantize.output_keys
52
+ end
53
+
54
+ def depends_on
55
+ return unless current_shared_class.depends_on
56
+ current_shared_class.depends_on.map { |x| x.to_s.singularize.camelize }
57
+ end
58
+
59
+ # map the path to a camelized logical_id. Example:
60
+ # /tmp/jets/demo/templates/demo-dev-2-shared-resources.yml to
61
+ # PostsController
62
+ def shared_logical_id
63
+ regexp = Regexp.new(".*#{Jets.config.project_namespace}-shared-") # remove the shared
64
+ shared_name = @path.sub(regexp, '').sub('.yml', '')
65
+ shared_name.underscore.camelize
66
+ end
67
+
68
+ # IE: app/resource.rb => Resource
69
+ # Returns Resource class object in the example
70
+ def current_shared_class
71
+ templates_prefix = "#{Jets::Naming.template_path_prefix}-shared-"
72
+ @path.sub(templates_prefix, '')
73
+ .sub(/\.yml$/,'')
74
+ .gsub('-','/')
75
+ .classify
76
+ .constantize # returns actual class
77
+ end
78
+
79
+ # Tells us if there are any resources defined in the shared class.
80
+ #
81
+ # Returns: Boolean
82
+ def resources?
83
+ current_shared_class.build?
84
+ end
85
+
86
+ def template_filename
87
+ "#{Jets.config.project_namespace}-shared-#{current_shared_class.to_s.underscore}.yml"
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,4 @@
1
+ module Jets::Resource::Config
2
+ autoload :ConfigRule, 'jets/resource/config/config_rule'
3
+ autoload :ManagedRule, 'jets/resource/config/managed_rule'
4
+ end
@@ -0,0 +1,74 @@
1
+ module Jets::Resource::Config
2
+ class ConfigRule < Jets::Resource::Base
3
+ def initialize(app_class, meth, props={})
4
+ @app_class = app_class.to_s
5
+ @meth = meth
6
+ @props = props # associated_properties from dsl.rb
7
+ end
8
+
9
+ def definition
10
+ base = {
11
+ config_rule_logical_id => {
12
+ type: "AWS::Config::ConfigRule",
13
+ properties: definition_properties
14
+ }
15
+ }
16
+
17
+ # Explicitly set depends_on to help with CloudFormation random race condition.
18
+ # Seems to be a new CloudFormation and AWS Config resource issue.
19
+ if definition_properties[:source][:owner] == 'CUSTOM_LAMBDA'
20
+ base[config_rule_logical_id][:depends_on] = "{namespace}Permission"
21
+ end
22
+
23
+ base
24
+ end
25
+
26
+ # Do not name this method properties, that is a computed method of `Jets::Resource::Base`
27
+ def definition_properties
28
+ {
29
+ config_rule_name: config_rule_name,
30
+ source: {
31
+ owner: "CUSTOM_LAMBDA",
32
+ source_identifier: "!GetAtt {namespace}LambdaFunction.Arn",
33
+ source_details: [
34
+ {
35
+ event_source: "aws.config",
36
+ message_type: "ConfigurationItemChangeNotification"
37
+ },
38
+ {
39
+ event_source: "aws.config",
40
+ message_type: "OversizedConfigurationItemChangeNotification"
41
+ }
42
+ ]
43
+ },
44
+ }.deep_merge(@props)
45
+ end
46
+
47
+ def config_rule_logical_id
48
+ "{namespace}_config_rule"
49
+ end
50
+
51
+ def config_rule_name
52
+ app_class = @app_class.underscore.gsub(/_rule$/,'')
53
+ ns = namespace
54
+ ns = nil if ns == false # for compact
55
+ [ns, "#{app_class}_#{@meth}"].compact.join('_').dasherize
56
+ end
57
+
58
+ def namespace
59
+ namespace = nil
60
+ klass = @app_class.constantize
61
+ while klass != Jets::Lambda::Functions
62
+ namespace = klass.rule_namespace
63
+ break if namespace or namespace == false
64
+ klass = klass.superclass
65
+ end
66
+
67
+ if namespace.nil?
68
+ Jets.config.project_namespace
69
+ else
70
+ namespace
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,15 @@
1
+ # ManagedRule is just different enough to be a separate class vs being part of the
2
+ # ConfigRule class itself.
3
+ module Jets::Resource::Config
4
+ class ManagedRule < ConfigRule
5
+ def definition_properties
6
+ {
7
+ config_rule_name: config_rule_name,
8
+ source: {
9
+ owner: "AWS",
10
+ source_identifier: @meth.upcase,
11
+ },
12
+ }.deep_merge(@props)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,3 @@
1
+ module Jets::Resource::Events
2
+ autoload :Rule, 'jets/resource/events/rule'
3
+ end
@@ -0,0 +1,31 @@
1
+ module Jets::Resource::Events
2
+ class Rule < Jets::Resource::Base
3
+ def initialize(props)
4
+ @props = props # associated_properties from dsl.rb
5
+ end
6
+
7
+ def definition
8
+ {
9
+ rule_logical_id => {
10
+ type: "AWS::Events::Rule",
11
+ properties: merged_properties
12
+ }
13
+ }
14
+ end
15
+
16
+ # Do not name this method properties, that is a computed method of `Jets::Resource::Base`
17
+ def merged_properties
18
+ {
19
+ state: "ENABLED",
20
+ targets: [{
21
+ arn: "!GetAtt {namespace}LambdaFunction.Arn",
22
+ id: "{namespace}RuleTarget"
23
+ }]
24
+ }.deep_merge(@props)
25
+ end
26
+
27
+ def rule_logical_id
28
+ "{namespace}_events_rule"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,8 @@
1
+ module Jets::Resource::Iam
2
+ autoload :BaseRoleDefinition, 'jets/resource/iam/base_role_definition'
3
+ autoload :ApplicationRole, 'jets/resource/iam/application_role'
4
+ autoload :ClassRole, 'jets/resource/iam/class_role'
5
+ autoload :FunctionRole, 'jets/resource/iam/function_role'
6
+ autoload :PolicyDocument, 'jets/resource/iam/policy_document'
7
+ autoload :ManagedPolicy, 'jets/resource/iam/managed_policy'
8
+ end
@@ -0,0 +1,27 @@
1
+ module Jets::Resource::Iam
2
+ class ApplicationRole < Jets::Resource::Base
3
+ include BaseRoleDefinition
4
+
5
+ def initialize
6
+ @policy_definitions = Jets.config.iam_policy # config.iam_policy contains definitions
7
+ @policy_definitions = @policy_definitions ? [@policy_definitions].flatten : []
8
+
9
+ @managed_policy_definitions = Jets.config.managed_iam_policy # config.managed_iam_policy contains definitions
10
+ @managed_policy_definitions = @managed_policy_definitions ? [@managed_policy_definitions].flatten : []
11
+ end
12
+
13
+ def role_logical_id
14
+ "iam_role"
15
+ end
16
+
17
+ def policy_name
18
+ "#{Jets.config.project_namespace}-application-policy"
19
+ end
20
+
21
+ def outputs
22
+ {
23
+ logical_id => "!Ref #{logical_id}",
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,47 @@
1
+ module Jets::Resource::Iam
2
+ module BaseRoleDefinition
3
+ attr_reader :policy_definitions, :managed_policy_definitions
4
+
5
+ def definition
6
+ logical_id = role_logical_id
7
+
8
+ # Do not assign pretty role_name because long controller names might hit the 64-char
9
+ # limit. Also, IAM roles are global, so assigning role names prevents cross region deploys.
10
+ definition = {
11
+ logical_id => {
12
+ type: "AWS::IAM::Role",
13
+ properties: {
14
+ path: "/",
15
+ assume_role_policy_document: {
16
+ version: "2012-10-17",
17
+ statement: [{
18
+ effect: "Allow",
19
+ principal: {service: ["lambda.amazonaws.com"]},
20
+ action: ["sts:AssumeRole"]}
21
+ ]
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ definition[logical_id][:properties][:policies] = [
28
+ policy_name: "#{policy_name[0..127]}", # required, limited to 128-chars
29
+ policy_document: policy_document,
30
+ ] unless policy_document['Statement'].empty?
31
+
32
+ unless managed_policy_arns.empty?
33
+ definition[logical_id][:properties][:managed_policy_arns] = managed_policy_arns
34
+ end
35
+
36
+ definition
37
+ end
38
+
39
+ def policy_document
40
+ PolicyDocument.new(@policy_definitions.flatten.uniq).policy_document
41
+ end
42
+
43
+ def managed_policy_arns
44
+ ManagedPolicy.new(@managed_policy_definitions.flatten.uniq).arns
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,74 @@
1
+ module Jets::Resource::Iam
2
+ class ClassRole < Jets::Resource::Base
3
+ include BaseRoleDefinition
4
+
5
+ def initialize(app_class)
6
+ @app_class = app_class.to_s # IE: PostsController, HardJob, Hello, HelloFunction
7
+ @policy_definitions = lookup_iam_policies
8
+ @managed_policy_definitions = lookup_managed_iam_policies
9
+ end
10
+
11
+ def role_logical_id
12
+ "{namespace}_iam_role".underscore
13
+ end
14
+
15
+ def policy_name
16
+ class_namespace = replacements[:namespace].underscore.dasherize
17
+ "#{Jets.config.project_namespace}-#{class_namespace}-policy" # camelized because used as template value
18
+ end
19
+
20
+ def replacements
21
+ {
22
+ namespace: @app_class.gsub('::','').camelize, # camelized because can be used as value
23
+ }
24
+ end
25
+
26
+ def policy_document
27
+ # Handles precedence inheritance from the ApplicationRole to the ClassRole
28
+ @policy_definitions += application_role.policy_definitions if inherit?
29
+ super
30
+ end
31
+
32
+ def managed_policy_arns
33
+ @managed_policy_definitions += application_role.managed_policy_definitions if inherit?
34
+ super
35
+ end
36
+
37
+ # There are 2 types of inheritance: from superclasses and from higher precedence policies.
38
+ # This one manages the inheritance for higher precedence policies.
39
+ def inherit?
40
+ !@policy_definitions.empty? || !@managed_policy_definitions.empty?
41
+ end
42
+
43
+ def application_role
44
+ Jets::Resource::Iam::ApplicationRole.new
45
+ end
46
+ memoize :application_role
47
+
48
+ # Accounts for inherited class_managed_iam_policy from superclasses
49
+ def lookup_managed_iam_policies
50
+ all_classes.map do |k|
51
+ k.class_managed_iam_policy # class_managed_iam_policy contains definitions
52
+ end.uniq
53
+ end
54
+
55
+ # Accounts for inherited class_iam_policies from superclasses
56
+ def lookup_iam_policies
57
+ all_classes.map do |k|
58
+ k.class_iam_policy # class_iam_policy contains definitions
59
+ end.uniq
60
+ end
61
+
62
+ # Class heirachry in top to down order
63
+ def all_classes
64
+ klass = @app_class.constantize
65
+ all_classes = []
66
+ while klass != Object
67
+ all_classes << klass
68
+ klass = klass.superclass
69
+ end
70
+ all_classes.reverse
71
+ end
72
+ memoize :all_classes
73
+ end
74
+ end
@@ -0,0 +1,54 @@
1
+ module Jets::Resource::Iam
2
+ class FunctionRole < Jets::Resource::Base
3
+ include BaseRoleDefinition
4
+
5
+ def initialize(task)
6
+ @task = task
7
+ @policy_definitions = task.iam_policy || [] # iam_policy contains policy definitions
8
+ @managed_policy_definitions = task.managed_iam_policy || [] # managed_iam_policy contains policy definitions
9
+ end
10
+
11
+ def role_logical_id
12
+ "{namespace}_iam_role".underscore
13
+ end
14
+
15
+ def policy_name
16
+ funcion_namespace = replacements[:namespace].underscore.dasherize
17
+ "#{Jets.config.project_namespace}-#{funcion_namespace}-policy" # camelized because used as template value
18
+ end
19
+
20
+ def replacements
21
+ {
22
+ namespace: "#{@task.class_name.gsub('::','')}#{@task.meth.to_s.camelize}", # camelized because can be used as value
23
+ }
24
+ end
25
+
26
+ def policy_document
27
+ if inherit?
28
+ @policy_definitions += class_role.policy_definitions + application_role.policy_definitions
29
+ end
30
+ super
31
+ end
32
+
33
+ def managed_policy_arns
34
+ if inherit?
35
+ @managed_policy_definitions += class_role.managed_policy_definitions + application_role.managed_policy_definitions
36
+ end
37
+ super
38
+ end
39
+
40
+ def inherit?
41
+ !@policy_definitions.empty? || !@managed_policy_definitions.empty?
42
+ end
43
+
44
+ def class_role
45
+ Jets::Resource::Iam::ClassRole.new(@task.class_name.constantize)
46
+ end
47
+ memoize :class_role
48
+
49
+ def application_role
50
+ Jets::Resource::Iam::ApplicationRole.new
51
+ end
52
+ memoize :application_role
53
+ end
54
+ end