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,85 @@
1
+ # Implements:
2
+ #
3
+ # definition
4
+ # template_filename
5
+ #
6
+ module Jets::Resource::ChildStack
7
+ class Shared < AppClass
8
+ include CommonParameters
9
+
10
+ def initialize(s3_bucket, options={})
11
+ super
12
+ @path = options[:path]
13
+ end
14
+
15
+ def definition
16
+ logical_id = shared_logical_id
17
+ definition = {
18
+ logical_id => {
19
+ type: "AWS::CloudFormation::Stack",
20
+ properties: child_properties
21
+ }
22
+ }
23
+ definition[logical_id][:depends_on] = depends_on if depends_on
24
+ definition
25
+ end
26
+
27
+ def child_properties
28
+ props = {
29
+ template_url: template_url,
30
+ }
31
+
32
+ props[:parameters] = common_parameters # common child parameters
33
+ # add depends on parameters
34
+ depends_on.each do |dependency|
35
+ dependency_outputs(dependency).each do |output|
36
+ dependency_class = dependency.to_s.camelize
37
+ props[:parameters][output] = "!GetAtt #{dependency_class}.Outputs.#{output}"
38
+ end
39
+ end if depends_on
40
+
41
+ props
42
+ end
43
+
44
+ # Returns output keys associated with the stack. They are the resource logical ids.
45
+ def dependency_outputs(dependency)
46
+ dependency.to_s.camelize.constantize.output_keys
47
+ end
48
+
49
+ def depends_on
50
+ return unless current_shared_class.depends_on
51
+ current_shared_class.depends_on.map { |x| x.to_s.camelize }
52
+ end
53
+
54
+ # map the path to a camelized logical_id. Example:
55
+ # /tmp/jets/demo/templates/demo-dev-2-shared-resources.yml to
56
+ # PostsController
57
+ def shared_logical_id
58
+ regexp = Regexp.new(".*#{Jets.config.project_namespace}-shared-") # remove the shared
59
+ shared_name = @path.sub(regexp, '').sub('.yml', '')
60
+ shared_name.underscore.camelize
61
+ end
62
+
63
+ # IE: app/resource.rb => Resource
64
+ # Returns Resource class object in the example
65
+ def current_shared_class
66
+ templates_prefix = "#{Jets::Naming.template_path_prefix}-shared-"
67
+ @path.sub(templates_prefix, '')
68
+ .sub(/\.yml$/,'')
69
+ .gsub('-','/')
70
+ .camelize
71
+ .constantize # returns actual class
72
+ end
73
+
74
+ # Tells us if there are any resources defined in the shared class.
75
+ #
76
+ # Returns: Boolean
77
+ def resources?
78
+ current_shared_class.build?
79
+ end
80
+
81
+ def template_filename
82
+ "#{Jets.config.project_namespace}-shared-#{current_shared_class.to_s.underscore}.yml"
83
+ end
84
+ end
85
+ 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,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,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
@@ -0,0 +1,22 @@
1
+ module Jets::Resource::Iam
2
+ class ManagedPolicy
3
+ extend Memoist
4
+
5
+ attr_reader :definitions
6
+ def initialize(*definitions)
7
+ @definitions = definitions.flatten.compact
8
+ end
9
+
10
+ def arns
11
+ definitions.map { |definition| standardize(definition) }
12
+ end
13
+ memoize :arns # only process arns once
14
+
15
+ # AmazonEC2ReadOnlyAccess => arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
16
+ def standardize(definition)
17
+ return definition if definition.include?('iam::aws:policy')
18
+
19
+ "arn:aws:iam::aws:policy/#{definition}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,41 @@
1
+ module Jets::Resource::Iam
2
+ class PolicyDocument
3
+ extend Memoist
4
+
5
+ attr_reader :definitions
6
+ def initialize(*definitions)
7
+ @definitions = definitions.flatten
8
+ # empty starting policy that will be altered
9
+ @policy = {
10
+ version: "2012-10-17",
11
+ statement: []
12
+ }
13
+ end
14
+
15
+ def policy_document
16
+ definitions.map { |definition| standardize(definition) }
17
+ Jets::Camelizer.transform(@policy)
18
+ end
19
+ memoize :policy_document # only process policy_document once
20
+
21
+ def standardize(definition)
22
+ case definition
23
+ when String
24
+ # Expands simple string from: logs => logs:*
25
+ definition = "#{definition}:*" unless definition.include?(':')
26
+ @policy[:statement] << {
27
+ action: [definition],
28
+ effect: "Allow",
29
+ resource: "*",
30
+ }
31
+ when Hash
32
+ definition = definition.stringify_keys
33
+ if definition.key?("Version") # special case where we replace the policy entirely
34
+ @policy = definition
35
+ else
36
+ @policy[:statement] << definition
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,34 @@
1
+ # CloudFormation AWS::IoT::TopicRule docs: https://amzn.to/2SMBOVm
2
+ module Jets::Resource::Iot
3
+ class TopicRule < Jets::Resource::Base
4
+ def initialize(props={})
5
+ @props = props # associated_properties from dsl.rb
6
+ end
7
+
8
+ def definition
9
+ {
10
+ topic_logical_id => {
11
+ type: "AWS::IoT::TopicRule",
12
+ properties: merged_properties,
13
+ }
14
+ }
15
+ end
16
+
17
+ # Do not name this method properties, that is a computed method of `Jets::Resource::Base`
18
+ def merged_properties
19
+ {
20
+ # required properties
21
+ topic_rule_payload: {
22
+ actions: [{
23
+ lambda: { function_arn: "!GetAtt {namespace}LambdaFunction.Arn" }
24
+ }],
25
+ rule_disabled: 'true',
26
+ }
27
+ }.deep_merge(@props)
28
+ end
29
+
30
+ def topic_logical_id
31
+ "{namespace}_iot_topic_rule"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,31 @@
1
+ # Note the Lambda function timeout must be less than or equal to the sqs queue default timeout.
2
+ module Jets::Resource::Lambda
3
+ class EventSourceMapping < Jets::Resource::Base
4
+ def initialize(props={})
5
+ @props = props # associated_properties from dsl.rb
6
+ end
7
+
8
+ def definition
9
+ # CloudFormation Docs: https://amzn.to/2WM6165
10
+ properties = {
11
+ # batch_size: 10, # Defaults: Kinesis 100, DynamoDB Streams: 100, SQS: 10
12
+ # enabled: boolean,
13
+ # event_source_arn: string, # required
14
+ function_name: "!Ref {namespace}LambdaFunction",
15
+ # starting_position: string # reqiured for Required for Amazon Kinesis and Amazon DynamoDB Streams sources
16
+ }
17
+ properties.merge!(@props)
18
+
19
+ {
20
+ event_source_mapping_logical_id => {
21
+ type: "AWS::Lambda::EventSourceMapping",
22
+ properties: properties
23
+ }
24
+ }
25
+ end
26
+
27
+ def event_source_mapping_logical_id
28
+ "{namespace}EventSourceMapping"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,62 @@
1
+ class Jets::Resource::Lambda::Function
2
+ module Environment
3
+ def env_properties
4
+ env_vars = Jets::Dotenv.load!(true)
5
+ variables = environment.merge(env_vars)
6
+ check_reserved_variables!(variables)
7
+ {environment: { variables: variables }}
8
+ end
9
+
10
+ def environment
11
+ env = Jets.config.environment ? Jets.config.environment.to_h : {}
12
+ env.deep_merge(jets_env)
13
+ end
14
+
15
+ # These jets env variables are special variables that get included to keeps some state
16
+ def jets_env
17
+ env = {}
18
+ env[:JETS_ENV] = Jets.env.to_s
19
+ env[:JETS_ENV_EXTRA] = Jets.config.env_extra if Jets.config.env_extra
20
+ env[:JETS_PROJECT_NAME] = ENV['JETS_PROJECT_NAME'] if ENV['JETS_PROJECT_NAME']
21
+ env[:JETS_STAGE] = Jets::Resource::ApiGateway::Deployment.stage_name
22
+ env[:JETS_AWS_ACCOUNT] = Jets.aws.account
23
+ env
24
+ end
25
+
26
+ private
27
+ def check_reserved_variables!(variables)
28
+ found_reserved_vars = variables.keys & reserved_variables
29
+ return if found_reserved_vars.empty?
30
+
31
+ puts "You have configured some environment variables that are reserved by AWS Lambda.".color(:red)
32
+ puts found_reserved_vars
33
+ puts "The deployment to AWS Lambda will failed when using reserved variables."
34
+ puts "Please remove these reserved variables. "
35
+ puts "More info: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables"
36
+ exit 1
37
+ end
38
+
39
+ # https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html#lambda-environment-variables
40
+ def reserved_variables
41
+ %w[
42
+ _HANDLER
43
+ AWS_REGION
44
+ AWS_EXECUTION_ENV
45
+ AWS_LAMBDA_FUNCTION_NAME
46
+ AWS_LAMBDA_FUNCTION_MEMORY_SIZE
47
+ AWS_LAMBDA_FUNCTION_VERSION
48
+ AWS_LAMBDA_LOG_GROUP_NAME
49
+ AWS_LAMBDA_LOG_STREAM_NAME
50
+ AWS_ACCESS_KEY_ID
51
+ AWS_SECRET_ACCESS_KEY
52
+ AWS_SESSION_TOKEN
53
+ TZ
54
+ LAMBDA_TASK_ROOT
55
+ LAMBDA_RUNTIME_DIR
56
+ AWS_LAMBDA_RUNTIME_API
57
+ ]
58
+ end
59
+
60
+
61
+ end
62
+ end