jets.benforeva 3.0.17.pre.mount.pre.fix

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 (459) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +92 -0
  3. data/.cody/README.md +13 -0
  4. data/.cody/docs/bin/build.sh +7 -0
  5. data/.cody/docs/bin/bundler_setup.sh +8 -0
  6. data/.cody/docs/bin/cli_docs.sh +6 -0
  7. data/.cody/docs/bin/git_commit.sh +27 -0
  8. data/.cody/docs/bin/git_setup.sh +12 -0
  9. data/.cody/docs/bin/subnav.sh +14 -0
  10. data/.cody/docs/buildspec.yml +10 -0
  11. data/.cody/docs/project.rb +10 -0
  12. data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
  13. data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
  14. data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
  15. data/.github/ISSUE_TEMPLATE/question.md +14 -0
  16. data/.github/ISSUE_TEMPLATE.md +7 -0
  17. data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
  18. data/.gitignore +24 -0
  19. data/.gitmodules +0 -0
  20. data/.python-version +1 -0
  21. data/.rspec +4 -0
  22. data/.ruby-gemset +1 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +1035 -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 +212 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +20 -0
  36. data/bin/release +9 -0
  37. data/exe/jets.benforeva +14 -0
  38. data/jets.benforeva.gemspec +71 -0
  39. data/lib/jets/application/defaults.rb +200 -0
  40. data/lib/jets/application.rb +240 -0
  41. data/lib/jets/authorizer/base.rb +36 -0
  42. data/lib/jets/authorizer/dsl.rb +69 -0
  43. data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
  44. data/lib/jets/autoloaders.rb +112 -0
  45. data/lib/jets/aws_info.rb +111 -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 +64 -0
  49. data/lib/jets/aws_services.rb +95 -0
  50. data/lib/jets/booter.rb +167 -0
  51. data/lib/jets/builders/code_builder.rb +410 -0
  52. data/lib/jets/builders/code_size.rb +57 -0
  53. data/lib/jets/builders/gem_replacer.rb +89 -0
  54. data/lib/jets/builders/handler_generator.rb +186 -0
  55. data/lib/jets/builders/lambda_layer.rb +68 -0
  56. data/lib/jets/builders/md5.rb +60 -0
  57. data/lib/jets/builders/md5_zip.rb +61 -0
  58. data/lib/jets/builders/purger.rb +35 -0
  59. data/lib/jets/builders/rack_packager.rb +51 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  61. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  64. data/lib/jets/builders/ruby_packager.rb +235 -0
  65. data/lib/jets/builders/shim_vars/app.rb +78 -0
  66. data/lib/jets/builders/shim_vars/base.rb +25 -0
  67. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  68. data/lib/jets/builders/templates/handler.rb +12 -0
  69. data/lib/jets/builders/tidy.rb +107 -0
  70. data/lib/jets/builders/util.rb +31 -0
  71. data/lib/jets/bundle.rb +88 -0
  72. data/lib/jets/camelizer.rb +4 -0
  73. data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
  74. data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
  75. data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
  76. data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
  77. data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
  78. data/lib/jets/cfn/builders/controller_builder.rb +50 -0
  79. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  80. data/lib/jets/cfn/builders/interface.rb +133 -0
  81. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  82. data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
  83. data/lib/jets/cfn/builders/parent_builder.rb +130 -0
  84. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  85. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  86. data/lib/jets/cfn/builders/util/source.rb +21 -0
  87. data/lib/jets/cfn/built_template.rb +15 -0
  88. data/lib/jets/cfn/ship.rb +188 -0
  89. data/lib/jets/cfn/status.rb +10 -0
  90. data/lib/jets/cfn/template_source.rb +61 -0
  91. data/lib/jets/cfn/upload.rb +157 -0
  92. data/lib/jets/cli.rb +208 -0
  93. data/lib/jets/commands/base.rb +145 -0
  94. data/lib/jets/commands/build.rb +252 -0
  95. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  96. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  97. data/lib/jets/commands/call/base_guesser.rb +62 -0
  98. data/lib/jets/commands/call/guesser.rb +48 -0
  99. data/lib/jets/commands/call.rb +182 -0
  100. data/lib/jets/commands/clean/base.rb +24 -0
  101. data/lib/jets/commands/clean/build.rb +13 -0
  102. data/lib/jets/commands/clean/log.rb +111 -0
  103. data/lib/jets/commands/clean.rb +19 -0
  104. data/lib/jets/commands/configure.rb +51 -0
  105. data/lib/jets/commands/console.rb +12 -0
  106. data/lib/jets/commands/db/environment-task.rake +3 -0
  107. data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
  108. data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
  109. data/lib/jets/commands/db/tasks.rb +34 -0
  110. data/lib/jets/commands/db.rb +13 -0
  111. data/lib/jets/commands/dbconsole.rb +134 -0
  112. data/lib/jets/commands/delete.rb +136 -0
  113. data/lib/jets/commands/deploy.rb +137 -0
  114. data/lib/jets/commands/dotenv.rb +9 -0
  115. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  116. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  117. data/lib/jets/commands/dynamodb.rb +19 -0
  118. data/lib/jets/commands/gems.rb +13 -0
  119. data/lib/jets/commands/help/build.md +6 -0
  120. data/lib/jets/commands/help/call.md +69 -0
  121. data/lib/jets/commands/help/clean/build.md +5 -0
  122. data/lib/jets/commands/help/clean/log.md +5 -0
  123. data/lib/jets/commands/help/console.md +18 -0
  124. data/lib/jets/commands/help/db/generate.md +8 -0
  125. data/lib/jets/commands/help/dbconsole.md +9 -0
  126. data/lib/jets/commands/help/degenerate.md +16 -0
  127. data/lib/jets/commands/help/delete.md +22 -0
  128. data/lib/jets/commands/help/deploy.md +32 -0
  129. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  130. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  131. data/lib/jets/commands/help/gems/check.md +6 -0
  132. data/lib/jets/commands/help/generate.md +28 -0
  133. data/lib/jets/commands/help/import/rack.md +13 -0
  134. data/lib/jets/commands/help/import/rails.md +11 -0
  135. data/lib/jets/commands/help/new.md +42 -0
  136. data/lib/jets/commands/help/routes.md +16 -0
  137. data/lib/jets/commands/help/runner.md +17 -0
  138. data/lib/jets/commands/help/server.md +15 -0
  139. data/lib/jets/commands/help/status.md +14 -0
  140. data/lib/jets/commands/help/upgrade.md +7 -0
  141. data/lib/jets/commands/help/url.md +6 -0
  142. data/lib/jets/commands/help.rb +9 -0
  143. data/lib/jets/commands/import/base.rb +49 -0
  144. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  145. data/lib/jets/commands/import/rack.rb +16 -0
  146. data/lib/jets/commands/import/rails.rb +74 -0
  147. data/lib/jets/commands/import/sequence.rb +90 -0
  148. data/lib/jets/commands/import/templates/config/database.yml +30 -0
  149. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  150. data/lib/jets/commands/import.rb +12 -0
  151. data/lib/jets/commands/main.rb +166 -0
  152. data/lib/jets/commands/markdown/creator.rb +58 -0
  153. data/lib/jets/commands/markdown/index.rb +27 -0
  154. data/lib/jets/commands/markdown/page.rb +125 -0
  155. data/lib/jets/commands/markdown/shell.rb +11 -0
  156. data/lib/jets/commands/new.rb +173 -0
  157. data/lib/jets/commands/rake_command.rb +61 -0
  158. data/lib/jets/commands/rake_tasks.rb +50 -0
  159. data/lib/jets/commands/runner.rb +16 -0
  160. data/lib/jets/commands/sequence.rb +105 -0
  161. data/lib/jets/commands/stack_info.rb +30 -0
  162. data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
  163. data/lib/jets/commands/templates/skeleton/.env.test +3 -0
  164. data/lib/jets/commands/templates/skeleton/.env.tt +3 -0
  165. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  166. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  167. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  168. data/lib/jets/commands/templates/skeleton/Gemfile.tt +39 -0
  169. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  170. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  171. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  172. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  173. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  174. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  175. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  176. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  177. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +26 -0
  178. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
  179. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
  180. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  181. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  182. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  183. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  184. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  185. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  186. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  187. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  188. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  189. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  190. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  191. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  192. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  193. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  194. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  195. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  196. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +23 -0
  197. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  198. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  199. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  200. data/lib/jets/commands/upgrade/version1.rb +136 -0
  201. data/lib/jets/commands/upgrade.rb +105 -0
  202. data/lib/jets/commands/url.rb +69 -0
  203. data/lib/jets/commands/webpacker_template.rb +18 -0
  204. data/lib/jets/controller/authorization.rb +91 -0
  205. data/lib/jets/controller/base.rb +175 -0
  206. data/lib/jets/controller/callbacks.rb +73 -0
  207. data/lib/jets/controller/cookies/jar.rb +269 -0
  208. data/lib/jets/controller/cookies.rb +38 -0
  209. data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
  210. data/lib/jets/controller/error.rb +4 -0
  211. data/lib/jets/controller/forgery_protection.rb +43 -0
  212. data/lib/jets/controller/layout.rb +17 -0
  213. data/lib/jets/controller/middleware/cors.rb +60 -0
  214. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  215. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  216. data/lib/jets/controller/middleware/local/route_matcher.rb +22 -0
  217. data/lib/jets/controller/middleware/local.rb +120 -0
  218. data/lib/jets/controller/middleware/main.rb +53 -0
  219. data/lib/jets/controller/middleware/reloader.rb +15 -0
  220. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  221. data/lib/jets/controller/parameters_filter.rb +29 -0
  222. data/lib/jets/controller/params.rb +117 -0
  223. data/lib/jets/controller/rack/adapter.rb +94 -0
  224. data/lib/jets/controller/rack/env.rb +122 -0
  225. data/lib/jets/controller/redirection.rb +51 -0
  226. data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
  227. data/lib/jets/controller/rendering.rb +96 -0
  228. data/lib/jets/controller/request.rb +29 -0
  229. data/lib/jets/controller/response.rb +61 -0
  230. data/lib/jets/controller/stage.rb +34 -0
  231. data/lib/jets/controller.rb +3 -0
  232. data/lib/jets/core.rb +157 -0
  233. data/lib/jets/core_ext/bundler.rb +7 -0
  234. data/lib/jets/core_ext/kernel.rb +13 -0
  235. data/lib/jets/db.rb +15 -0
  236. data/lib/jets/dotenv/show.rb +11 -0
  237. data/lib/jets/dotenv/ssm.rb +64 -0
  238. data/lib/jets/dotenv.rb +48 -0
  239. data/lib/jets/erb.rb +51 -0
  240. data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
  241. data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
  242. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  243. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -0
  244. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  245. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  246. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  247. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  248. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  249. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  250. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  251. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  252. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  253. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  254. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  255. data/lib/jets/generator.rb +112 -0
  256. data/lib/jets/inflections.rb +32 -0
  257. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
  258. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  259. data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
  260. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  261. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
  262. data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
  263. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -0
  264. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  265. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  266. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +33 -0
  267. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  268. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  269. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  270. data/lib/jets/internal/turbines/jets/mailer.rb +52 -0
  271. data/lib/jets/job/base.rb +49 -0
  272. data/lib/jets/job/dsl/dynamodb_event.rb +67 -0
  273. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  274. data/lib/jets/job/dsl/iot_event.rb +24 -0
  275. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  276. data/lib/jets/job/dsl/log_event.rb +15 -0
  277. data/lib/jets/job/dsl/rule_event.rb +75 -0
  278. data/lib/jets/job/dsl/s3_event.rb +36 -0
  279. data/lib/jets/job/dsl/sns_event.rb +54 -0
  280. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  281. data/lib/jets/job/dsl.rb +40 -0
  282. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  283. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  284. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  285. data/lib/jets/klass.rb +109 -0
  286. data/lib/jets/lambda/dsl.rb +404 -0
  287. data/lib/jets/lambda/function.rb +29 -0
  288. data/lib/jets/lambda/function_constructor.rb +55 -0
  289. data/lib/jets/lambda/functions.rb +39 -0
  290. data/lib/jets/lambda/task.rb +111 -0
  291. data/lib/jets/logger.rb +21 -0
  292. data/lib/jets/mega/hash_converter.rb +25 -0
  293. data/lib/jets/mega/request/source.rb +21 -0
  294. data/lib/jets/mega/request.rb +163 -0
  295. data/lib/jets/middleware/configurator.rb +84 -0
  296. data/lib/jets/middleware/default_stack.rb +53 -0
  297. data/lib/jets/middleware/layer.rb +34 -0
  298. data/lib/jets/middleware/stack.rb +77 -0
  299. data/lib/jets/middleware.rb +33 -0
  300. data/lib/jets/naming.rb +63 -0
  301. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  302. data/lib/jets/overrides/lambda.rb +1 -0
  303. data/lib/jets/overrides/rails/action_controller.rb +13 -0
  304. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  305. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  306. data/lib/jets/overrides/rails/migration_checker.rb +34 -0
  307. data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
  308. data/lib/jets/overrides/rails/url_helper.rb +88 -0
  309. data/lib/jets/overrides/rails.rb +6 -0
  310. data/lib/jets/poly_fun/base_executor.rb +125 -0
  311. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  312. data/lib/jets/poly_fun/node_error.rb +8 -0
  313. data/lib/jets/poly_fun/node_executor.rb +54 -0
  314. data/lib/jets/poly_fun/python_error.rb +8 -0
  315. data/lib/jets/poly_fun/python_executor.rb +23 -0
  316. data/lib/jets/poly_fun.rb +73 -0
  317. data/lib/jets/preheat.rb +117 -0
  318. data/lib/jets/processors/deducer.rb +65 -0
  319. data/lib/jets/processors/main_processor.rb +61 -0
  320. data/lib/jets/rack_server.rb +86 -0
  321. data/lib/jets/rdoc.rb +30 -0
  322. data/lib/jets/resource/api_gateway/authorizer.rb +82 -0
  323. data/lib/jets/resource/api_gateway/base_path/function.rb +49 -0
  324. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  325. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  326. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  327. data/lib/jets/resource/api_gateway/deployment.rb +80 -0
  328. data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
  329. data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
  330. data/lib/jets/resource/api_gateway/method.rb +102 -0
  331. data/lib/jets/resource/api_gateway/resource.rb +82 -0
  332. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
  333. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  334. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
  335. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
  336. data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
  337. data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
  338. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
  339. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
  340. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
  341. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  342. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  343. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  344. data/lib/jets/resource/api_gateway/rest_api.rb +64 -0
  345. data/lib/jets/resource/associated.rb +37 -0
  346. data/lib/jets/resource/base.rb +28 -0
  347. data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
  348. data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
  349. data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
  350. data/lib/jets/resource/child_stack/api_resource.rb +54 -0
  351. data/lib/jets/resource/child_stack/app_class.rb +149 -0
  352. data/lib/jets/resource/child_stack/authorizer.rb +40 -0
  353. data/lib/jets/resource/child_stack/base.rb +24 -0
  354. data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
  355. data/lib/jets/resource/child_stack/shared.rb +85 -0
  356. data/lib/jets/resource/config/config_rule.rb +74 -0
  357. data/lib/jets/resource/config/managed_rule.rb +15 -0
  358. data/lib/jets/resource/events/rule.rb +31 -0
  359. data/lib/jets/resource/iam/application_role.rb +27 -0
  360. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  361. data/lib/jets/resource/iam/class_role.rb +74 -0
  362. data/lib/jets/resource/iam/function_role.rb +54 -0
  363. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  364. data/lib/jets/resource/iam/policy_document.rb +41 -0
  365. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  366. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  367. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  368. data/lib/jets/resource/lambda/function.rb +221 -0
  369. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  370. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  371. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  372. data/lib/jets/resource/permission.rb +45 -0
  373. data/lib/jets/resource/replacer.rb +85 -0
  374. data/lib/jets/resource/route53/record_set.rb +98 -0
  375. data/lib/jets/resource/s3/bucket.rb +24 -0
  376. data/lib/jets/resource/sns/subscription.rb +29 -0
  377. data/lib/jets/resource/sns/topic.rb +35 -0
  378. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  379. data/lib/jets/resource/sqs/queue.rb +21 -0
  380. data/lib/jets/resource/standardizer.rb +42 -0
  381. data/lib/jets/resource.rb +71 -0
  382. data/lib/jets/router/dsl/mount.rb +13 -0
  383. data/lib/jets/router/dsl.rb +144 -0
  384. data/lib/jets/router/error.rb +4 -0
  385. data/lib/jets/router/finder.rb +47 -0
  386. data/lib/jets/router/helpers/core_helper.rb +27 -0
  387. data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
  388. data/lib/jets/router/helpers.rb +4 -0
  389. data/lib/jets/router/matcher.rb +81 -0
  390. data/lib/jets/router/method_creator/code.rb +99 -0
  391. data/lib/jets/router/method_creator/edit.rb +12 -0
  392. data/lib/jets/router/method_creator/generic.rb +11 -0
  393. data/lib/jets/router/method_creator/index.rb +48 -0
  394. data/lib/jets/router/method_creator/new.rb +12 -0
  395. data/lib/jets/router/method_creator/root.rb +15 -0
  396. data/lib/jets/router/method_creator/show.rb +12 -0
  397. data/lib/jets/router/method_creator.rb +50 -0
  398. data/lib/jets/router/resources/base.rb +7 -0
  399. data/lib/jets/router/resources/filter.rb +15 -0
  400. data/lib/jets/router/resources/options.rb +13 -0
  401. data/lib/jets/router/route/authorizer.rb +57 -0
  402. data/lib/jets/router/route.rb +230 -0
  403. data/lib/jets/router/scope.rb +95 -0
  404. data/lib/jets/router/util.rb +38 -0
  405. data/lib/jets/router.rb +180 -0
  406. data/lib/jets/rule/base.rb +19 -0
  407. data/lib/jets/rule/dsl.rb +109 -0
  408. data/lib/jets/spec_helpers/controllers/params.rb +8 -0
  409. data/lib/jets/spec_helpers/controllers/request.rb +101 -0
  410. data/lib/jets/spec_helpers/controllers/response.rb +10 -0
  411. data/lib/jets/spec_helpers/controllers.rb +47 -0
  412. data/lib/jets/spec_helpers/fixtures.rb +11 -0
  413. data/lib/jets/spec_helpers.rb +21 -0
  414. data/lib/jets/stack/builder.rb +43 -0
  415. data/lib/jets/stack/definition.rb +50 -0
  416. data/lib/jets/stack/depends/item.rb +26 -0
  417. data/lib/jets/stack/depends.rb +34 -0
  418. data/lib/jets/stack/function.rb +69 -0
  419. data/lib/jets/stack/main/dsl/base.rb +63 -0
  420. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  421. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  422. data/lib/jets/stack/main/dsl/kinesis.rb +15 -0
  423. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  424. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  425. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  426. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  427. data/lib/jets/stack/main/dsl.rb +17 -0
  428. data/lib/jets/stack/main.rb +4 -0
  429. data/lib/jets/stack/output/dsl.rb +19 -0
  430. data/lib/jets/stack/output/lookup.rb +36 -0
  431. data/lib/jets/stack/output.rb +35 -0
  432. data/lib/jets/stack/parameter/dsl.rb +42 -0
  433. data/lib/jets/stack/parameter.rb +37 -0
  434. data/lib/jets/stack/resource/dsl.rb +19 -0
  435. data/lib/jets/stack/resource.rb +31 -0
  436. data/lib/jets/stack/s3_event.rb +87 -0
  437. data/lib/jets/stack.rb +88 -0
  438. data/lib/jets/tmp_loader.rb +53 -0
  439. data/lib/jets/turbine.rb +41 -0
  440. data/lib/jets/turbo/database_yaml.rb +41 -0
  441. data/lib/jets/turbo/project/.gitignore +12 -0
  442. data/lib/jets/turbo/project/.jetskeep +1 -0
  443. data/lib/jets/turbo/project/Gemfile +16 -0
  444. data/lib/jets/turbo/project/Rakefile +2 -0
  445. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  446. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  447. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  448. data/lib/jets/turbo/project/config/application.rb +5 -0
  449. data/lib/jets/turbo/project/config/routes.rb +4 -0
  450. data/lib/jets/turbo/project/config.ru +5 -0
  451. data/lib/jets/turbo/rails.rb +127 -0
  452. data/lib/jets/turbo/templates/config/database.yml +30 -0
  453. data/lib/jets/turbo.rb +56 -0
  454. data/lib/jets/util.rb +40 -0
  455. data/lib/jets/version.rb +3 -0
  456. data/lib/jets.rb +31 -0
  457. data/readme/prerelease.md +6 -0
  458. data/readme/testing.md +60 -0
  459. metadata +1105 -0
@@ -0,0 +1,83 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Lambda
3
+ # Example:
4
+ #
5
+ # function(:hello,
6
+ # handler: handler("hello.lambda_hander"),
7
+ # runtime: "python3.6"
8
+ # )
9
+ #
10
+ # Defaults to ruby. So:
11
+ #
12
+ # function(:hello)
13
+ #
14
+ # is the same as:
15
+ #
16
+ # function(:hello,
17
+ # handler: handler("hello.hande"),
18
+ # runtime: :ruby
19
+ # )
20
+ #
21
+ def function(id, props={})
22
+ # Required: code, handler, role, runtime Docs: https://amzn.to/2pdot7S
23
+ meth = sanitize_method_name(id)
24
+ class_namespace = self.to_s.underscore.gsub('/','-') # IE: Jets::Domain => jets-domain
25
+ description = "#{self.to_s} #{meth}" # not bother adding extension
26
+ defaults = {
27
+ code: {
28
+ s3_bucket: "!Ref S3Bucket",
29
+ s3_key: code_s3_key
30
+ },
31
+ role: "!Ref IamRole",
32
+ handler: "#{id}.lambda_handler", # default ruby convention
33
+ runtime: :ruby,
34
+ timeout: Jets.config.function.timeout,
35
+ memory_size: Jets.config.function.memory_size,
36
+ description: description,
37
+ }
38
+
39
+ function_name = "#{Jets.config.project_namespace}-#{class_namespace}-#{meth}"
40
+ function_name = function_name.size > Jets::MAX_FUNCTION_NAME_SIZE ? nil : function_name
41
+ defaults[:function_name] = function_name if function_name
42
+
43
+ props = defaults.merge(props)
44
+ props[:runtime] = Jets.ruby_runtime if props[:runtime].to_s == "ruby"
45
+ props[:handler] = handler(props[:handler])
46
+
47
+ logical_id = id.to_s.gsub('/','_')
48
+ resource(logical_id, "AWS::Lambda::Function", props)
49
+ end
50
+ alias_method :ruby_function, :function
51
+ alias_method :lambda_function, :function
52
+
53
+ def python_function(id, props={})
54
+ meth = sanitize_method_name(id)
55
+ props[:handler] ||= "#{meth}.lambda_handler" # default python convention
56
+ props[:runtime] = "python3.6"
57
+ function(id, props)
58
+ end
59
+
60
+ def node_function(id, props={})
61
+ meth = sanitize_method_name(id)
62
+ props[:handler] ||= "#{meth}.handler" # default python convention
63
+ props[:runtime] = "nodejs8.10"
64
+ function(id, props)
65
+ end
66
+
67
+ # Usage:
68
+ #
69
+ # permission(:my_permission, principal: "events.amazonaws.com")
70
+ #
71
+ def permission(id, props={})
72
+ defaults = { action: "lambda:InvokeFunction" }
73
+ props = defaults.merge(props)
74
+ resource(id, "AWS::Lambda::Permission", props)
75
+ end
76
+
77
+ private
78
+ # demo-dev-hard_job-dig_me
79
+ def sanitize_method_name(id)
80
+ id.to_s.gsub('/','-')
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,12 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module S3
3
+ def s3_bucket(id, props={})
4
+ resource(id, "AWS::S3::Bucket", props)
5
+ output(id) # Bucket name
6
+ end
7
+
8
+ def s3_bucket_configuration(id, props={})
9
+ resource(id, "Custom::S3BucketConfiguration", props)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Sns
3
+ def sns_topic(id, props={})
4
+ resource(id, "AWS::SNS::Topic", props)
5
+ output(id) # Topic Arn
6
+ end
7
+
8
+ def sns_topic_policy(id, props={})
9
+ resource(id, "AWS::SNS::TopicPolicy", props)
10
+ end
11
+
12
+ def sns_subscription(id, props={})
13
+ resource(id, "AWS::SNS::Subscription", props)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,10 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Sqs
3
+ def sqs_queue(id, props={})
4
+ # props[:queue_name] ||= id.to_s # comment out to allow CloudFormation to generate name
5
+ resource(id, "AWS::SQS::Queue", props)
6
+ output(id, value: get_att("#{id}.Arn")) # normal !Ref returns the sqs url the ARN is useful for nested stacks depends_on
7
+ output("#{id}_url", ref(id)) # useful for Stack.lookup method. IE: List.lookup(:waitlist_url)
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ class Jets::Stack
2
+ class Main
3
+ module Dsl
4
+ extend ActiveSupport::Concern
5
+
6
+ class_methods do
7
+ include Base
8
+ include Cloudwatch
9
+ include Iam
10
+ include Lambda
11
+ include S3
12
+ include Sns
13
+ include Sqs
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,4 @@
1
+ class Jets::Stack
2
+ class Main
3
+ end
4
+ end
@@ -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,35 @@
1
+ # Implements:
2
+ #
3
+ # template - uses @definition to build a CloudFormation template section
4
+ #
5
+ class Jets::Stack
6
+ class Output
7
+ include Definition
8
+
9
+ def template
10
+ camelize(standarize(@definition))
11
+ end
12
+
13
+ # Value is the only required property: https://amzn.to/2xbhmk3
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
+ logical_id = first
23
+ properties = second.is_a?(String) ? { value: second } : {}
24
+ { logical_id => properties }
25
+ elsif definition.size == 1
26
+ logical_id = first.to_s
27
+ properties = {value: "!Ref #{logical_id.camelize}"}
28
+ { logical_id => properties }
29
+ else # I dont know what form
30
+ raise "Invalid form provided. definition #{definition.inspect}"
31
+ end
32
+ end
33
+ end
34
+ end
35
+
@@ -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,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,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,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,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
data/lib/jets/stack.rb ADDED
@@ -0,0 +1,88 @@
1
+ module Jets
2
+ class Stack
3
+ include Main::Dsl
4
+ include Parameter::Dsl
5
+ include Output::Dsl
6
+ include Resource::Dsl
7
+
8
+ class << self
9
+ extend Memoist
10
+
11
+ # Track all command subclasses.
12
+ def subclasses
13
+ @subclasses ||= []
14
+ end
15
+
16
+ def inherited(base)
17
+ super
18
+ self.subclasses << base if base.name
19
+ end
20
+
21
+ # klass = Jets::Stack.new_class("Bucket3")
22
+ def new_class(class_name, &block)
23
+ # https://stackoverflow.com/questions/4113479/dynamic-class-definition-with-a-class-name
24
+ # Defining the constant this way gets around: SyntaxError: dynamic constant assignment error
25
+ klass = Class.new(Jets::Stack) # First klass is an anonymous class. IE: class.name is nil
26
+ klass = Object.const_set(class_name, klass) # now klass is a named class
27
+ Jets::Stack.subclasses << klass # mimic inherited hook because
28
+
29
+ # Must run class_eval after adding to subclasses in order for the resource declarations in the
30
+ # so that the resources get registered to the right subclass.
31
+ klass.class_eval(&block)
32
+ klass # return klass
33
+ end
34
+
35
+ # Build it to figure out if we need to build the stack for the SharedBuilder
36
+ def build?
37
+ empty = template == {"Parameters"=>{"IamRole"=>{"Type"=>"String"}, "S3Bucket"=>{"Type"=>"String"}}}
38
+ !empty
39
+ end
40
+
41
+ def functions
42
+ stack = new
43
+ # All the & because resources might be nil
44
+ templates = stack.resources&.map(&:template)&.select do |t|
45
+ attributes = t.values.first
46
+ attributes['Type'] == 'AWS::Lambda::Function'
47
+ end
48
+ templates ||= []
49
+ templates.map { |t| Function.new(t) }
50
+ end
51
+
52
+ def template
53
+ # Pretty funny looking, creating an instance of stack to be passed to the Builder.
54
+ # Another way of looking at it:
55
+ #
56
+ # stack = new # MyStack.new
57
+ # builder = Jets::Stack::Builder.new(stack)
58
+ #
59
+ builder = Jets::Stack::Builder.new(new)
60
+ builder.template
61
+ end
62
+ memoize :template
63
+
64
+ # Eager loading the app/shared resources to ensure shared resources have been registered.
65
+ # Not being used anymore but keeping around just in case for now.
66
+ def eager_load_shared_resources!
67
+ Dir.glob("#{Jets.root}/app/shared/**").each do |path|
68
+ next if path.include?("app/shared/functions")
69
+ Jets::Autoloaders.main.preload(path)
70
+ end
71
+ end
72
+
73
+ def lookup(logical_id)
74
+ looker.output(logical_id)
75
+ end
76
+
77
+ def looker
78
+ Jets::Stack::Output::Lookup.new(self)
79
+ end
80
+ memoize :looker
81
+
82
+ def output_keys
83
+ outputs = new.outputs || []
84
+ outputs.map(&:template).map {|o| o.keys.first}
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,53 @@
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
+ return unless File.exist?(yaml_path)
12
+ @data = YAML.load_file(yaml_path)
13
+ @s3_bucket = @data['s3_bucket']
14
+ @rack_zip = @data['rack_zip']
15
+ end
16
+
17
+ def load
18
+ rack
19
+ end
20
+
21
+ def rack
22
+ return unless @rack_zip
23
+ download_and_extract(@rack_zip, '/tmp/rack')
24
+ end
25
+
26
+ def download_and_extract(zip_file, folder_dest)
27
+ s3_key = "jets/code/#{zip_file}" # jets/code/rack-checksum.zip
28
+ download_path = "/tmp/#{zip_file}" # /tmp/rack-checksum.zip
29
+
30
+ download(s3_key, download_path)
31
+ unzip(download_path, folder_dest)
32
+ end
33
+
34
+ def download(key, dest)
35
+ # https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Client.html#get_object-instance_method
36
+ # stream object directly to disk
37
+ s3.get_object(response_target: dest,
38
+ bucket: @s3_bucket,
39
+ key: key)
40
+ end
41
+
42
+ def unzip(zipfile, folder_dest)
43
+ sh "unzip -qo #{zipfile} -d #{folder_dest}"
44
+ end
45
+
46
+ def sh(command)
47
+ puts "=> #{command}"
48
+ success = system(command)
49
+ raise "Command #{command} failed" unless success
50
+ success
51
+ end
52
+ end
53
+ 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,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