jets_bb_fork 0.0.4

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 (398) 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 +84 -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 +0 -0
  21. data/.python-version +1 -0
  22. data/.rspec +4 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +734 -0
  25. data/CONDUCT.md +1 -0
  26. data/CONTRIBUTING.md +1 -0
  27. data/Dockerfile +16 -0
  28. data/Dockerfile.base +53 -0
  29. data/Gemfile +14 -0
  30. data/Guardfile +22 -0
  31. data/LICENSE.txt +22 -0
  32. data/Procfile +2 -0
  33. data/README.md +203 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +16 -0
  36. data/bin/release +9 -0
  37. data/buildspec.yml +18 -0
  38. data/exe/jets_bb_fork +14 -0
  39. data/jets.gemspec +68 -0
  40. data/lib/jets.rb +27 -0
  41. data/lib/jets/application.rb +216 -0
  42. data/lib/jets/application/defaults.rb +172 -0
  43. data/lib/jets/autoloaders.rb +97 -0
  44. data/lib/jets/aws_info.rb +113 -0
  45. data/lib/jets/aws_services.rb +65 -0
  46. data/lib/jets/aws_services/global_memoist.rb +57 -0
  47. data/lib/jets/aws_services/s3_bucket.rb +34 -0
  48. data/lib/jets/aws_services/stack_status.rb +59 -0
  49. data/lib/jets/booter.rb +119 -0
  50. data/lib/jets/builders/code_builder.rb +399 -0
  51. data/lib/jets/builders/code_size.rb +57 -0
  52. data/lib/jets/builders/gem_replacer.rb +76 -0
  53. data/lib/jets/builders/handler_generator.rb +186 -0
  54. data/lib/jets/builders/lambda_layer.rb +69 -0
  55. data/lib/jets/builders/md5.rb +60 -0
  56. data/lib/jets/builders/md5_zip.rb +61 -0
  57. data/lib/jets/builders/purger.rb +35 -0
  58. data/lib/jets/builders/rack_packager.rb +51 -0
  59. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  61. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/ruby_packager.rb +207 -0
  64. data/lib/jets/builders/shim_vars/app.rb +78 -0
  65. data/lib/jets/builders/shim_vars/base.rb +25 -0
  66. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  67. data/lib/jets/builders/templates/handler.rb +12 -0
  68. data/lib/jets/builders/tidy.rb +107 -0
  69. data/lib/jets/builders/util.rb +31 -0
  70. data/lib/jets/bundle.rb +82 -0
  71. data/lib/jets/camelizer.rb +71 -0
  72. data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
  73. data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
  74. data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
  75. data/lib/jets/cfn/builders/controller_builder.rb +42 -0
  76. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  77. data/lib/jets/cfn/builders/interface.rb +137 -0
  78. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  79. data/lib/jets/cfn/builders/paged.rb +37 -0
  80. data/lib/jets/cfn/builders/parent_builder.rb +100 -0
  81. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  82. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  83. data/lib/jets/cfn/ship.rb +185 -0
  84. data/lib/jets/cfn/status.rb +212 -0
  85. data/lib/jets/cfn/upload.rb +139 -0
  86. data/lib/jets/cli.rb +194 -0
  87. data/lib/jets/commands/base.rb +146 -0
  88. data/lib/jets/commands/build.rb +234 -0
  89. data/lib/jets/commands/call.rb +169 -0
  90. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  91. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  92. data/lib/jets/commands/call/base_guesser.rb +60 -0
  93. data/lib/jets/commands/call/guesser.rb +48 -0
  94. data/lib/jets/commands/clean.rb +19 -0
  95. data/lib/jets/commands/clean/base.rb +24 -0
  96. data/lib/jets/commands/clean/build.rb +13 -0
  97. data/lib/jets/commands/clean/log.rb +107 -0
  98. data/lib/jets/commands/console.rb +12 -0
  99. data/lib/jets/commands/db.rb +13 -0
  100. data/lib/jets/commands/db/environment-task.rake +3 -0
  101. data/lib/jets/commands/db/tasks.rb +44 -0
  102. data/lib/jets/commands/dbconsole.rb +131 -0
  103. data/lib/jets/commands/delete.rb +143 -0
  104. data/lib/jets/commands/deploy.rb +141 -0
  105. data/lib/jets/commands/dynamodb.rb +19 -0
  106. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  107. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  108. data/lib/jets/commands/gems.rb +21 -0
  109. data/lib/jets/commands/help.rb +9 -0
  110. data/lib/jets/commands/help/build.md +6 -0
  111. data/lib/jets/commands/help/call.md +61 -0
  112. data/lib/jets/commands/help/clean/build.md +5 -0
  113. data/lib/jets/commands/help/clean/log.md +5 -0
  114. data/lib/jets/commands/help/console.md +18 -0
  115. data/lib/jets/commands/help/db/generate.md +8 -0
  116. data/lib/jets/commands/help/dbconsole.md +9 -0
  117. data/lib/jets/commands/help/delete.md +22 -0
  118. data/lib/jets/commands/help/deploy.md +32 -0
  119. data/lib/jets/commands/help/destroy.md +16 -0
  120. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  121. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  122. data/lib/jets/commands/help/gems/check.md +8 -0
  123. data/lib/jets/commands/help/generate.md +22 -0
  124. data/lib/jets/commands/help/import/rack.md +13 -0
  125. data/lib/jets/commands/help/import/rails.md +11 -0
  126. data/lib/jets/commands/help/new.md +42 -0
  127. data/lib/jets/commands/help/routes.md +16 -0
  128. data/lib/jets/commands/help/runner.md +17 -0
  129. data/lib/jets/commands/help/server.md +15 -0
  130. data/lib/jets/commands/help/status.md +14 -0
  131. data/lib/jets/commands/help/upgrade.md +5 -0
  132. data/lib/jets/commands/help/url.md +6 -0
  133. data/lib/jets/commands/import.rb +12 -0
  134. data/lib/jets/commands/import/base.rb +49 -0
  135. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  136. data/lib/jets/commands/import/rack.rb +16 -0
  137. data/lib/jets/commands/import/rails.rb +74 -0
  138. data/lib/jets/commands/import/sequence.rb +90 -0
  139. data/lib/jets/commands/import/templates/config/database.yml +26 -0
  140. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  141. data/lib/jets/commands/main.rb +157 -0
  142. data/lib/jets/commands/markdown/creator.rb +58 -0
  143. data/lib/jets/commands/markdown/index.rb +27 -0
  144. data/lib/jets/commands/markdown/page.rb +125 -0
  145. data/lib/jets/commands/markdown/shell.rb +11 -0
  146. data/lib/jets/commands/new.rb +157 -0
  147. data/lib/jets/commands/rake_command.rb +61 -0
  148. data/lib/jets/commands/rake_tasks.rb +46 -0
  149. data/lib/jets/commands/runner.rb +16 -0
  150. data/lib/jets/commands/sequence.rb +99 -0
  151. data/lib/jets/commands/stack_info.rb +30 -0
  152. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  153. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  154. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  155. data/lib/jets/commands/templates/skeleton/Gemfile.tt +38 -0
  156. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  157. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  158. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  159. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  160. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  161. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  162. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  163. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  164. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
  165. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  166. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
  167. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
  168. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  169. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  170. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  171. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  172. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  173. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  174. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  175. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  176. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  177. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  178. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  179. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  180. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  181. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  182. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  183. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  184. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  185. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  186. data/lib/jets/commands/upgrade.rb +145 -0
  187. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  188. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  189. data/lib/jets/commands/url.rb +68 -0
  190. data/lib/jets/commands/webpacker_template.rb +18 -0
  191. data/lib/jets/controller.rb +3 -0
  192. data/lib/jets/controller/base.rb +108 -0
  193. data/lib/jets/controller/callbacks.rb +68 -0
  194. data/lib/jets/controller/cookies.rb +38 -0
  195. data/lib/jets/controller/cookies/jar.rb +269 -0
  196. data/lib/jets/controller/layout.rb +17 -0
  197. data/lib/jets/controller/middleware/cors.rb +60 -0
  198. data/lib/jets/controller/middleware/local.rb +116 -0
  199. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  200. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  201. data/lib/jets/controller/middleware/local/route_matcher.rb +106 -0
  202. data/lib/jets/controller/middleware/main.rb +46 -0
  203. data/lib/jets/controller/middleware/reloader.rb +15 -0
  204. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  205. data/lib/jets/controller/params.rb +87 -0
  206. data/lib/jets/controller/rack/adapter.rb +88 -0
  207. data/lib/jets/controller/rack/env.rb +105 -0
  208. data/lib/jets/controller/redirection.rb +55 -0
  209. data/lib/jets/controller/rendering.rb +79 -0
  210. data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
  211. data/lib/jets/controller/request.rb +29 -0
  212. data/lib/jets/controller/response.rb +61 -0
  213. data/lib/jets/controller/stage.rb +33 -0
  214. data/lib/jets/core.rb +149 -0
  215. data/lib/jets/core_ext/kernel.rb +13 -0
  216. data/lib/jets/db.rb +15 -0
  217. data/lib/jets/dotenv.rb +48 -0
  218. data/lib/jets/dotenv/ssm.rb +48 -0
  219. data/lib/jets/erb.rb +51 -0
  220. data/lib/jets/generator.rb +48 -0
  221. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  222. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  223. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  224. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  225. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  226. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  227. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  228. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  229. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  230. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  231. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  232. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  233. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  234. data/lib/jets/inflections.rb +32 -0
  235. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  236. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  237. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
  238. data/lib/jets/internal/app/functions/jets/base_path.rb +157 -0
  239. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  240. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  241. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
  242. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  243. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  244. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  245. data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
  246. data/lib/jets/job/base.rb +39 -0
  247. data/lib/jets/job/dsl.rb +40 -0
  248. data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
  249. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  250. data/lib/jets/job/dsl/iot_event.rb +24 -0
  251. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  252. data/lib/jets/job/dsl/log_event.rb +15 -0
  253. data/lib/jets/job/dsl/rule_event.rb +75 -0
  254. data/lib/jets/job/dsl/s3_event.rb +36 -0
  255. data/lib/jets/job/dsl/sns_event.rb +54 -0
  256. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  257. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  258. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  259. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  260. data/lib/jets/klass.rb +109 -0
  261. data/lib/jets/lambda/dsl.rb +419 -0
  262. data/lib/jets/lambda/function.rb +29 -0
  263. data/lib/jets/lambda/function_constructor.rb +55 -0
  264. data/lib/jets/lambda/functions.rb +34 -0
  265. data/lib/jets/lambda/task.rb +111 -0
  266. data/lib/jets/logger.rb +21 -0
  267. data/lib/jets/mega/hash_converter.rb +25 -0
  268. data/lib/jets/mega/request.rb +139 -0
  269. data/lib/jets/mega/request/source.rb +21 -0
  270. data/lib/jets/middleware.rb +33 -0
  271. data/lib/jets/middleware/configurator.rb +84 -0
  272. data/lib/jets/middleware/default_stack.rb +51 -0
  273. data/lib/jets/middleware/layer.rb +34 -0
  274. data/lib/jets/middleware/stack.rb +77 -0
  275. data/lib/jets/naming.rb +49 -0
  276. data/lib/jets/overrides/lambda.rb +1 -0
  277. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  278. data/lib/jets/overrides/rails.rb +4 -0
  279. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  280. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  281. data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
  282. data/lib/jets/overrides/rails/url_helper.rb +25 -0
  283. data/lib/jets/poly_fun.rb +73 -0
  284. data/lib/jets/poly_fun/base_executor.rb +125 -0
  285. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  286. data/lib/jets/poly_fun/node_error.rb +8 -0
  287. data/lib/jets/poly_fun/node_executor.rb +54 -0
  288. data/lib/jets/poly_fun/python_error.rb +8 -0
  289. data/lib/jets/poly_fun/python_executor.rb +23 -0
  290. data/lib/jets/preheat.rb +117 -0
  291. data/lib/jets/processors/deducer.rb +65 -0
  292. data/lib/jets/processors/main_processor.rb +61 -0
  293. data/lib/jets/rack_server.rb +86 -0
  294. data/lib/jets/rdoc.rb +30 -0
  295. data/lib/jets/resource.rb +71 -0
  296. data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
  297. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  298. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  299. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  300. data/lib/jets/resource/api_gateway/deployment.rb +78 -0
  301. data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
  302. data/lib/jets/resource/api_gateway/method.rb +98 -0
  303. data/lib/jets/resource/api_gateway/resource.rb +101 -0
  304. data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
  305. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
  306. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
  307. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  308. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
  309. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
  310. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
  311. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
  312. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  313. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  314. data/lib/jets/resource/associated.rb +37 -0
  315. data/lib/jets/resource/base.rb +28 -0
  316. data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
  317. data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
  318. data/lib/jets/resource/child_stack/app_class.rb +107 -0
  319. data/lib/jets/resource/child_stack/base.rb +24 -0
  320. data/lib/jets/resource/child_stack/shared.rb +92 -0
  321. data/lib/jets/resource/config/config_rule.rb +74 -0
  322. data/lib/jets/resource/config/managed_rule.rb +15 -0
  323. data/lib/jets/resource/events/rule.rb +31 -0
  324. data/lib/jets/resource/iam/application_role.rb +27 -0
  325. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  326. data/lib/jets/resource/iam/class_role.rb +74 -0
  327. data/lib/jets/resource/iam/function_role.rb +54 -0
  328. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  329. data/lib/jets/resource/iam/policy_document.rb +41 -0
  330. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  331. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  332. data/lib/jets/resource/lambda/function.rb +214 -0
  333. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  334. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  335. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  336. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  337. data/lib/jets/resource/permission.rb +45 -0
  338. data/lib/jets/resource/replacer.rb +85 -0
  339. data/lib/jets/resource/route53/record_set.rb +70 -0
  340. data/lib/jets/resource/s3/bucket.rb +24 -0
  341. data/lib/jets/resource/sns/subscription.rb +29 -0
  342. data/lib/jets/resource/sns/topic.rb +35 -0
  343. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  344. data/lib/jets/resource/sqs/queue.rb +21 -0
  345. data/lib/jets/resource/standardizer.rb +42 -0
  346. data/lib/jets/route.rb +166 -0
  347. data/lib/jets/router.rb +177 -0
  348. data/lib/jets/router/scope.rb +30 -0
  349. data/lib/jets/rule/base.rb +19 -0
  350. data/lib/jets/rule/dsl.rb +110 -0
  351. data/lib/jets/spec_helpers.rb +54 -0
  352. data/lib/jets/spec_helpers/params.rb +10 -0
  353. data/lib/jets/spec_helpers/request.rb +78 -0
  354. data/lib/jets/spec_helpers/response.rb +5 -0
  355. data/lib/jets/stack.rb +88 -0
  356. data/lib/jets/stack/builder.rb +43 -0
  357. data/lib/jets/stack/definition.rb +50 -0
  358. data/lib/jets/stack/depends.rb +34 -0
  359. data/lib/jets/stack/depends/item.rb +9 -0
  360. data/lib/jets/stack/function.rb +69 -0
  361. data/lib/jets/stack/main.rb +4 -0
  362. data/lib/jets/stack/main/dsl.rb +28 -0
  363. data/lib/jets/stack/main/dsl/base.rb +49 -0
  364. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  365. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  366. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  367. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  368. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  369. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  370. data/lib/jets/stack/output.rb +35 -0
  371. data/lib/jets/stack/output/dsl.rb +19 -0
  372. data/lib/jets/stack/output/lookup.rb +36 -0
  373. data/lib/jets/stack/parameter.rb +37 -0
  374. data/lib/jets/stack/parameter/dsl.rb +42 -0
  375. data/lib/jets/stack/resource.rb +31 -0
  376. data/lib/jets/stack/resource/dsl.rb +19 -0
  377. data/lib/jets/stack/s3_event.rb +87 -0
  378. data/lib/jets/tmp_loader.rb +52 -0
  379. data/lib/jets/turbine.rb +41 -0
  380. data/lib/jets/turbo.rb +55 -0
  381. data/lib/jets/turbo/database_yaml.rb +41 -0
  382. data/lib/jets/turbo/project/.gitignore +12 -0
  383. data/lib/jets/turbo/project/.jetskeep +1 -0
  384. data/lib/jets/turbo/project/Gemfile +16 -0
  385. data/lib/jets/turbo/project/Rakefile +2 -0
  386. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  387. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  388. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  389. data/lib/jets/turbo/project/config.ru +5 -0
  390. data/lib/jets/turbo/project/config/application.rb +4 -0
  391. data/lib/jets/turbo/project/config/routes.rb +4 -0
  392. data/lib/jets/turbo/rails.rb +127 -0
  393. data/lib/jets/turbo/templates/config/database.yml +26 -0
  394. data/lib/jets/util.rb +38 -0
  395. data/lib/jets/version.rb +3 -0
  396. data/readme/prerelease.md +6 -0
  397. data/readme/testing.md +60 -0
  398. metadata +1004 -0
@@ -0,0 +1,19 @@
1
+ class Jets::Stack
2
+ class Output
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+
6
+ def outputs
7
+ Output.definitions(self.class)
8
+ end
9
+
10
+ class_methods do
11
+ def output(*definition)
12
+ # self is subclass is the stack that inherits from Jets::Stack
13
+ # IE: ExampleStack < Jets::Stack
14
+ Output.new(self, *definition).register
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,36 @@
1
+ class Jets::Stack::Output
2
+ class Lookup
3
+ include Jets::AwsServices
4
+
5
+ def initialize(stack_subclass)
6
+ @stack_subclass = stack_subclass
7
+ end
8
+
9
+ def output(logical_id)
10
+ child_stack_id = @stack_subclass.to_s.camelize
11
+
12
+ stack_arn = shared_stack_arn(child_stack_id)
13
+ resp = cfn.describe_stacks(stack_name: stack_arn)
14
+ child = resp.stacks.first
15
+ return unless child
16
+
17
+ output_value(child, logical_id)
18
+ end
19
+
20
+ # Shared child stack arn
21
+ def shared_stack_arn(logical_id)
22
+ parent_stack = Jets.config.project_namespace
23
+ resp = cfn.describe_stacks(stack_name: parent_stack)
24
+ parent = resp.stacks.first
25
+ output_value(parent, logical_id)
26
+ end
27
+
28
+ def output_value(stack, key)
29
+ key = key.to_s.camelize
30
+ output = stack.outputs.find do |o|
31
+ o.output_key == key
32
+ end
33
+ output&.output_value
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,37 @@
1
+ # Implements:
2
+ #
3
+ # template - uses @definition to build a CloudFormation template section
4
+ #
5
+ class Jets::Stack
6
+ class Parameter
7
+ include Definition
8
+
9
+ def template
10
+ camelize(add_required(standarize(@definition)))
11
+ end
12
+
13
+ # Type is the only required property: https://amzn.to/2x8W5aD
14
+ def standarize(definition)
15
+ first, second, _ = definition
16
+ if definition.size == 1 && first.is_a?(Hash) # long form
17
+ first # pass through
18
+ elsif definition.size == 2 && second.is_a?(Hash) # medium form
19
+ logical_id, properties = first, second
20
+ { logical_id => properties }
21
+ elsif (definition.size == 2 && second.is_a?(String)) || # short form
22
+ definition.size == 1
23
+ logical_id = first
24
+ properties = second.is_a?(String) ? { default: second } : {}
25
+ { logical_id => properties }
26
+ else # I dont know what form
27
+ raise "Invalid form provided. definition #{definition.inspect}"
28
+ end
29
+ end
30
+
31
+ def add_required(attributes)
32
+ properties = attributes.values.first
33
+ properties[:type] ||= 'String'
34
+ attributes
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,42 @@
1
+ class Jets::Stack
2
+ class Parameter
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+ extend Memoist
6
+
7
+ def parameters
8
+ add_common_parameters
9
+ add_depends_on_parameters
10
+ Parameter.definitions(self.class)
11
+ end
12
+
13
+ def add_common_parameters
14
+ self.class.parameter(:iam_role)
15
+ self.class.parameter(:s3_bucket)
16
+ end
17
+
18
+ def add_depends_on_parameters
19
+ depends_on = self.class.depends_on
20
+ depends_on.each do |dependency|
21
+ dependency_outputs(dependency).each do |output|
22
+ self.class.parameter(output)
23
+ end
24
+ end if depends_on
25
+ end
26
+ memoize :add_depends_on_parameters # only run once
27
+
28
+ # Returns output keys associated with the stack. They are the resource logical ids.
29
+ def dependency_outputs(dependency)
30
+ dependency.to_s.camelize.constantize.output_keys
31
+ end
32
+
33
+ class_methods do
34
+ def parameter(*definition)
35
+ # self is subclass is the stack that inherits from Jets::Stack
36
+ # IE: ExampleStack < Jets::Stack
37
+ Parameter.new(self, *definition).register
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,31 @@
1
+ # Implements:
2
+ #
3
+ # template - uses @definition to build a CloudFormation template section
4
+ #
5
+ class Jets::Stack
6
+ class Resource
7
+ include Definition
8
+
9
+ def template
10
+ template = camelize(standarize(@definition))
11
+ template = replace_placeholers(template)
12
+ template
13
+ end
14
+
15
+ # CloudFormation Resources reference: https://amzn.to/2NKg6ip
16
+ def standarize(definition)
17
+ Jets::Resource::Standardizer.new(definition).template
18
+ end
19
+
20
+ def replace_placeholers(template)
21
+ attributes = template.values.first
22
+ s3_key = attributes.dig('Properties','Code','S3Key')
23
+ if s3_key == "code_s3_key_placeholder"
24
+ checksum = Jets::Builders::Md5.checksums["stage/code"]
25
+ code_zip = "code-#{checksum}.zip"
26
+ attributes['Properties']['Code']['S3Key'] = "jets/code/#{code_zip}"
27
+ end
28
+ template
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ class Jets::Stack
2
+ class Resource
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+
6
+ def resources
7
+ Resource.definitions(self.class)
8
+ end
9
+
10
+ class_methods do
11
+ def resource(*definition)
12
+ # self is subclass is the stack that inherits from Jets::Stack
13
+ # IE: ExampleStack < Jets::Stack
14
+ Resource.new(self, *definition).register
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,87 @@
1
+ class Jets::Stack
2
+ class S3Event
3
+ def initialize(bucket_name)
4
+ @bucket_name = bucket_name
5
+ end
6
+
7
+ # Stack names can only contain alpha numeric chars.
8
+ # Bucket names are limit to 64 chars: https://amzn.to/2SIzvme
9
+ # Stack names are limit to 128 chars: https://amzn.to/2SFkrG0
10
+ # This gsub should handle this.
11
+ def stack_name
12
+ @bucket_name.gsub(/[^0-9a-z\-_]/i, '').gsub('-','_').camelize
13
+ end
14
+
15
+ def build_stack
16
+ # assign to local variable so its available in the block
17
+ bucket = @bucket_name
18
+
19
+ Jets::Stack.new_class(stack_name) do
20
+ s3_bucket_configuration(:s3_bucket_configuration,
21
+ service_token: "!GetAtt JetsS3BucketConfig.Arn", # Cannot change this w/o changing the logical id
22
+ # These properties correspond to the ruby aws-sdk s3.put_bucket_notification_configuration
23
+ # in jets/s3_bucket_config.rb, not the CloudFormation Bucket properties. The CloudFormation
24
+ # bucket properties have a similiar structure but is slightly different so it can be confusing.
25
+ #
26
+ # Ruby aws-sdk S3 Docs: https://amzn.to/2N7m5Lr
27
+ bucket: bucket,
28
+ notification_configuration: Jets.config.s3_event.notification_configuration,
29
+ ) if Jets.config.s3_event.configure_bucket
30
+
31
+ # Important note: If we change the name of this function we should also change the
32
+ # logical id of the s3_bucket_configuration custom resource or we'll get this error:
33
+ # Modifying service token is not allowed.
34
+ function("jets/s3_bucket_config",
35
+ role: "!GetAtt BucketConfigIamRole.Arn",
36
+ layers: ["!Ref GemLayer"],
37
+ )
38
+
39
+ sns_topic(:sns_topic)
40
+ sns_topic_policy(:sns_topic_policy,
41
+ policy_document: {
42
+ version: "2012-10-17",
43
+ statement: {
44
+ effect: "Allow",
45
+ principal: { service: "s3.amazonaws.com"},
46
+ action: "sns:Publish",
47
+ resource: "!Ref SnsTopic",
48
+ condition: {
49
+ arn_like: {
50
+ "aws:SourceArn" => "!Sub arn:aws:s3:*:*:#{bucket}"
51
+ }
52
+ }
53
+ }
54
+ },
55
+ topics: ["!Ref SnsTopic"],
56
+ )
57
+
58
+ iam_role(:bucket_config_iam_role,
59
+ assume_role_policy_document: {
60
+ version: '2012-10-17',
61
+ statement: [
62
+ effect: "Allow",
63
+ principal: {service: ["lambda.amazonaws.com"]},
64
+ action: ['sts:AssumeRole'],
65
+ ]
66
+ },
67
+ path: "/",
68
+ managed_policy_arns: ["arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"],
69
+ policies: [
70
+ policy_name: "S3Policy",
71
+ policy_document: {
72
+ version: '2012-10-17',
73
+ statement: [
74
+ effect: "Allow",
75
+ action: [
76
+ 's3:GetBucketNotification',
77
+ 's3:PutBucketNotification',
78
+ ],
79
+ resource: "*"
80
+ ]
81
+ }
82
+ ]
83
+ )
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,52 @@
1
+ module Jets
2
+ class TmpLoader
3
+ include AwsServices
4
+
5
+ def self.load!
6
+ new.load
7
+ end
8
+
9
+ def initialize(yaml_path=nil)
10
+ yaml_path ||= "#{Jets.root}/handlers/data.yml"
11
+ @data = YAML.load_file(yaml_path)
12
+ @s3_bucket = @data['s3_bucket']
13
+ @rack_zip = @data['rack_zip']
14
+ end
15
+
16
+ def load
17
+ rack
18
+ end
19
+
20
+ def rack
21
+ return unless @rack_zip
22
+ download_and_extract(@rack_zip, '/tmp/rack')
23
+ end
24
+
25
+ def download_and_extract(zip_file, folder_dest)
26
+ s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
27
+ download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
28
+
29
+ download(s3_key, download_path)
30
+ unzip(download_path, folder_dest)
31
+ end
32
+
33
+ def download(key, dest)
34
+ # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
35
+ # stream object directly to disk
36
+ s3.get_object(response_target: dest,
37
+ bucket: @s3_bucket,
38
+ key: key)
39
+ end
40
+
41
+ def unzip(zipfile, folder_dest)
42
+ sh "unzip -qo #{zipfile} -d #{folder_dest}"
43
+ end
44
+
45
+ def sh(command)
46
+ puts "=> #{command}"
47
+ success = system(command)
48
+ raise "Command #{command} failed" unless success
49
+ success
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,41 @@
1
+ module Jets
2
+ class Turbine
3
+ class_attribute :after_initializers
4
+ class_attribute :initializers
5
+ class_attribute :on_exceptions
6
+
7
+ class << self
8
+ def subclasses
9
+ @subclasses ||= []
10
+ end
11
+
12
+ def inherited(base)
13
+ subclasses << base
14
+ end
15
+
16
+ def after_initializer(label, &block)
17
+ self.after_initializers ||= {}
18
+ self.after_initializers[label] = block
19
+ end
20
+
21
+ def initializer(label, &block)
22
+ self.initializers ||= {}
23
+ self.initializers[label] = block
24
+ end
25
+
26
+ def on_exception(label, &block)
27
+ self.on_exceptions ||= {}
28
+ self.on_exceptions[label] = block
29
+ end
30
+
31
+ def exception_reporter(label, &block)
32
+ on_exception(label, &block)
33
+ end
34
+
35
+ # Make config available in Turbine. Note only available outside of hooks like initializers.
36
+ def config
37
+ Jets.application.config
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,55 @@
1
+ require 'fileutils'
2
+
3
+ module Jets
4
+ class Turbo
5
+ class << self
6
+ extend Memoist
7
+
8
+ # Relies on the cached side-effect since Jets afterburner will switch Jets.root and the result will be different
9
+ def afterburner?
10
+ new.rails?
11
+ end
12
+ memoize :afterburner?
13
+ end
14
+
15
+ # Turbo charge mode
16
+ def charge
17
+ framework = detect
18
+ case framework
19
+ when :jets
20
+ # do nothing
21
+ when :rails
22
+ Rails.new.setup
23
+ else
24
+ # should never get here
25
+ end
26
+ end
27
+
28
+ def detect
29
+ if rails?
30
+ :rails
31
+ elsif jets?
32
+ :jets
33
+ else
34
+ :unknown_framework
35
+ end
36
+ end
37
+
38
+ def rails?
39
+ config_ru_contains?('run Rails.application')
40
+ end
41
+
42
+ def jets?
43
+ config_ru_contains?('run Jets.application')
44
+ end
45
+
46
+ def config_ru_contains?(value)
47
+ root = ENV["JETS_ROOT"] || Dir.pwd # Jets.root is not yet available
48
+ config_ru = "#{root}/config.ru"
49
+ return false unless File.exist?(config_ru)
50
+
51
+ lines = ::IO.readlines(config_ru)
52
+ !!lines.detect { |l| l.include?(value) }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,41 @@
1
+ class Jets::Turbo
2
+ class DatabaseYaml
3
+ def reconfigure
4
+ current_yaml = "#{Jets.root}/rack/config/database.yml"
5
+ return unless File.exist?(current_yaml)
6
+
7
+ vars = {}
8
+ current_database = YAML.load_file(current_yaml)
9
+ database_names = infer_database_name(current_database)
10
+ vars.merge!(database_names)
11
+ vars['adapter'] = current_database['development']['adapter']
12
+
13
+ path = File.expand_path("templates/config/database.yml", File.dirname(__FILE__))
14
+ content = Jets::Erb.result(path, vars)
15
+ IO.write(current_yaml, content)
16
+ # puts "Reconfigured #{current_yaml}" # uncomment to inspect and debug
17
+ rescue Exception => e
18
+ puts "WARNING: Was not able to generate a database.yml. Leaving your current one in place"
19
+ puts e.message
20
+ # If unable to copy the database.yml settings just slightly fail.
21
+ # Do this because really unsure what is in the current database.yml
22
+ end
23
+
24
+ def infer_database_name(current_database)
25
+ vars = {}
26
+ %w[development test production].each do |env|
27
+ if !current_database[env]['database'].include?('<%') # already has ERB
28
+ vars["database_#{env}"] = current_database[env]['database']
29
+ else
30
+ lines = IO.readlines("#{Jets.root}/rack/config/application.rb")
31
+ module_line = lines.find { |l| l =~ /^module / }
32
+ app_module = module_line.gsub(/^module /,'').strip
33
+ app_name = app_module.underscore
34
+ vars["database_#{env}"] = "#{app_name}_#{env}"
35
+ end
36
+ end
37
+
38
+ vars
39
+ end
40
+ end
41
+ end