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,8 @@
1
+ <% @previews.each do |preview| %>
2
+ <h3><%= link_to(preview.preview_name.titleize, "/jets/mailers/#{preview.preview_name}") %></h3>
3
+ <ul>
4
+ <% preview.emails.each do |email| %>
5
+ <li><%= link_to(email, "/jets/mailers/#{preview.preview_name}/#{email}") %></li>
6
+ <% end %>
7
+ </ul>
8
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h3><%= @preview.preview_name.titleize %></h3>
2
+ <ul>
3
+ <% @preview.emails.each do |email| %>
4
+ <li><%= link_to(email, "/jets/mailers/#{@preview.preview_name}/#{email}") %></li>
5
+ <% end %>
6
+ </ul>
@@ -0,0 +1,51 @@
1
+ module Jets
2
+ # Reference: https://github.com/rails/rails/blob/master/actionmailer/lib/action_mailer/railtie.rb
3
+ class Mailer < ::Jets::Turbine
4
+ config.action_mailer = ActiveSupport::OrderedOptions.new
5
+
6
+ initializer "action_mailer.logger" do
7
+ ActiveSupport.on_load(:action_mailer) { self.logger ||= Jets.logger }
8
+ end
9
+
10
+ initializer "action_mailer.set_configs" do |app|
11
+ options = app.config.action_mailer
12
+ options.default_url_options ||= {}
13
+ options.default_url_options[:protocol] ||= "https"
14
+ options.show_previews = false if options.show_previews.nil?
15
+ options.preview_path ||= "#{Jets.root}/app/previews" if options.show_previews
16
+ options.view_paths ||= "#{Jets.root}/app/views"
17
+
18
+ # TODO: Dont think Jets sets asset_host the same way
19
+ # make sure readers methods get compiled
20
+ # options.asset_host ||= app.config.asset_host
21
+ # options.relative_url_root ||= app.config.relative_url_root
22
+
23
+ ActiveSupport.on_load(:action_mailer) do
24
+ include AbstractController::UrlFor
25
+ # TODO: figure out rest of the helpers
26
+ # extend ::AbstractController::Railties::RoutesHelpers.with(app.routes, false)
27
+ # include app.routes.mounted_helpers
28
+
29
+ register_interceptors(options.delete(:interceptors))
30
+ register_preview_interceptors(options.delete(:preview_interceptors))
31
+ register_observers(options.delete(:observers))
32
+
33
+ options.each { |k, v| send("#{k}=", v) }
34
+ end
35
+ end
36
+
37
+ after_initializer "action_mailer.routes" do |app|
38
+ if app.config.action_mailer.show_previews
39
+ app.routes.draw do
40
+ get "jets/mailers", to: "jets/mailers#index"
41
+ get "jets/mailers/*path", to: "jets/mailers#preview"
42
+ end
43
+
44
+ ActiveSupport.on_load :action_controller do
45
+ internal_views = File.expand_path("internal/app/views", File.dirname(__FILE__))
46
+ ActionController::Base.append_view_path(internal_views)
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,39 @@
1
+ require 'json'
2
+
3
+ # Job public methods get turned into Lambda functions.
4
+ #
5
+ # Jets::Job::Base < Jets::Lambda::Functions
6
+ # Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
7
+ # So the Jets::Job::Dsl overrides some of the Jets::Lambda::Functions behavior.
8
+ module Jets::Job
9
+ class Base < Jets::Lambda::Functions
10
+ include Dsl
11
+
12
+ # non-DSL methods
13
+ include Helpers::KinesisEventHelper
14
+ include Helpers::LogEventHelper
15
+ include Helpers::S3EventHelper
16
+
17
+ # Tracks bucket each time an s3_event is declared
18
+ # Map of bucket_name => stack_name (nested part)
19
+ cattr_accessor :s3_events # dont want this to be inheritable intentionally
20
+ self.s3_events = {}
21
+
22
+ class << self
23
+ def process(event, context, meth)
24
+ job = new(event, context, meth)
25
+ job.send(meth)
26
+ end
27
+
28
+ def perform_now(meth, event={}, context={})
29
+ new(event, context, meth).send(meth)
30
+ end
31
+
32
+ def perform_later(meth, event={}, context={})
33
+ function_name = "#{self.to_s.underscore}-#{meth}"
34
+ call = Jets::Commands::Call.new(function_name, JSON.dump(event), invocation_type: "Event")
35
+ call.run
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/class'
3
+
4
+ # Jets::Job::Base < Jets::Lambda::Functions
5
+ # Both Jets::Job::Base and Jets::Lambda::Functions have Dsl modules included.
6
+ # So the Jets::Job::Dsl overrides some of the Jets::Lambda::Functions behavior.
7
+ #
8
+ # Implements:
9
+ #
10
+ # default_associated_resource_definition
11
+ #
12
+ module Jets::Job::Dsl
13
+ extend ActiveSupport::Concern
14
+
15
+ included do
16
+ class << self
17
+ include Jets::AwsServices
18
+
19
+ include DynamodbEvent
20
+ include EventSourceMapping
21
+ include IotEvent
22
+ include KinesisEvent
23
+ include LogEvent
24
+ include RuleEvent
25
+ include S3Event
26
+ include SnsEvent
27
+ include SqsEvent
28
+
29
+ # Used to provide a little more identifiable event rule auto-descriptions
30
+ class_attribute :rule_counter
31
+ self.rule_counter = 0
32
+
33
+ # TODO: Get rid of default_associated_resource_definition concept.
34
+ # Also gets rid of the need to keep track of running @associated_properties too.
35
+ def default_associated_resource_definition(meth)
36
+ events_rule_definition
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,65 @@
1
+ module Jets::Job::Dsl
2
+ module DynamodbEvent
3
+ def dynamodb_event(table_name, options={})
4
+ stream_arn = full_dynamodb_stream_arn(table_name)
5
+ default_iam_policy = default_dynamodb_stream_policy(stream_arn)
6
+
7
+ # Create iam policy allows access to queue
8
+ # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
9
+ iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
10
+ iam_policy(iam_policy_props) unless iam_policy_props == :disable
11
+
12
+ props = options # by this time options only has EventSourceMapping properties
13
+ default = {
14
+ event_source_arn: stream_arn,
15
+ starting_position: "TRIM_HORIZON",
16
+ }
17
+ props = default.merge(props)
18
+
19
+ event_source_mapping(props)
20
+ end
21
+
22
+
23
+ # Expands table name to the full stream arn. Example:
24
+ #
25
+ # test-table
26
+ # To:
27
+ # arn:aws:dynamodb:us-west-2:112233445566:table/test-table/stream/2019-02-15T21:41:15.217
28
+ #
29
+ # Note, this does not check if the stream has been disabled.
30
+ def full_dynamodb_stream_arn(table_name)
31
+ return table_name if table_name.include?("arn:aws:dynamodb") # assume full stream arn
32
+
33
+ begin
34
+ resp = dynamodb.describe_table(table_name: table_name)
35
+ rescue Aws::DynamoDB::Errors::ResourceNotFoundException => e
36
+ puts e.message
37
+ puts "ERROR: Was not able to find the DynamoDB table: #{table_name}.".color(:red)
38
+ code_line = caller.grep(%r{/app/jobs}).first
39
+ puts "Please check: #{code_line}"
40
+ puts "Exiting"
41
+ exit 1
42
+ end
43
+ stream_arn = resp.table.latest_stream_arn
44
+ return stream_arn if stream_arn
45
+ end
46
+
47
+ def default_dynamodb_stream_policy(stream_name_arn='*')
48
+ stream = {
49
+ action: ["dynamodb:GetRecords",
50
+ "dynamodb:GetShardIterator",
51
+ "dynamodb:DescribeStream",
52
+ "dynamodb:ListStreams"],
53
+ effect: "Allow",
54
+ resource: stream_name_arn,
55
+ }
56
+ table_name_arn = stream_name_arn.gsub(%r{/stream/20.*},'')
57
+ table = {
58
+ action: ["dynamodb:DescribeTable"],
59
+ effect: "Allow",
60
+ resource: table_name_arn,
61
+ }
62
+ [stream, table]
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,11 @@
1
+ # SqsEvent uses this module
2
+ module Jets::Job::Dsl
3
+ module EventSourceMapping
4
+ def event_source_mapping(props={})
5
+ r = Jets::Resource::Lambda::EventSourceMapping.new(props)
6
+ with_fresh_properties do
7
+ resource(r.definition) # add associated resource immediately
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ module Jets::Job::Dsl
2
+ module IotEvent
3
+ # The user must at least pass in an SQL statement
4
+ def iot_event(props={})
5
+ if props.is_a?(String) # SQL Statement
6
+ props = {sql: props}
7
+ topic_props = {topic_rule_payload: props}
8
+ elsif props.key?(:topic_rule_payload) # full properties structure
9
+ topic_props = props
10
+ else # just the topic_rule_payload
11
+ topic_props = {topic_rule_payload: props}
12
+ end
13
+
14
+ declare_iot_topic(topic_props)
15
+ end
16
+
17
+ def declare_iot_topic(props={})
18
+ r = Jets::Resource::Iot::TopicRule.new(props)
19
+ with_fresh_properties do
20
+ resource(r.definition) # add associated resource immediately
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,46 @@
1
+ module Jets::Job::Dsl
2
+ module KinesisEvent
3
+ def kinesis_event(stream_name, options={})
4
+ stream_arn = full_kinesis_stream_arn(stream_name)
5
+ default_iam_policy = default_kinesis_stream_policy(stream_arn)
6
+
7
+ # Create iam policy allows access to queue
8
+ # Allow disabling in case use wants to add permission application-wide and not have extra IAM policy
9
+ iam_policy_props = options.delete(:iam_policy) || @iam_policy || default_iam_policy
10
+ iam_policy(iam_policy_props) unless iam_policy_props == :disable
11
+
12
+ props = options # by this time options only has EventSourceMapping properties
13
+ default = {
14
+ event_source_arn: stream_arn,
15
+ starting_position: "LATEST",
16
+ }
17
+ props = default.merge(props)
18
+
19
+ event_source_mapping(props)
20
+ end
21
+
22
+ # Expands table name to the full stream arn. Example:
23
+ #
24
+ # test-table
25
+ # To:
26
+ # arn:aws:kinesis:us-west-2:112233445566:table/test-table/stream/2019-02-15T21:41:15.217
27
+ #
28
+ # Note, this does not check if the stream has been disabled.
29
+ def full_kinesis_stream_arn(stream_name)
30
+ return stream_name if stream_name.include?("arn:aws:kinesis") # assume full stream arn
31
+
32
+ "arn:aws:kinesis:#{Jets.aws.region}:#{Jets.aws.account}:stream/#{stream_name}"
33
+ end
34
+
35
+ def default_kinesis_stream_policy(stream_name_arn='*')
36
+ {
37
+ action: ["kinesis:GetRecords",
38
+ "kinesis:GetShardIterator",
39
+ "kinesis:DescribeStream",
40
+ "kinesis:ListStreams"],
41
+ effect: "Allow",
42
+ resource: stream_name_arn,
43
+ }
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ module Jets::Job::Dsl
2
+ module LogEvent
3
+ def log_event(log_group_name, props={})
4
+ props.merge!(log_group_name: log_group_name)
5
+ declare_log_subscription_filter(props)
6
+ end
7
+
8
+ def declare_log_subscription_filter(props={})
9
+ r = Jets::Resource::Logs::SubscriptionFilter.new(props)
10
+ with_fresh_properties do
11
+ resource(r.definition) # add associated resource immediately
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,75 @@
1
+ module Jets::Job::Dsl
2
+ module RuleEvent
3
+ # Public: Creates CloudWatch Event Rule
4
+ #
5
+ # expression - The rate expression.
6
+ #
7
+ # Examples
8
+ #
9
+ # rate("10 minutes")
10
+ # rate("10 minutes", description: "Hard job")
11
+ #
12
+ def rate(expression, props={})
13
+ schedule_job("rate(#{expression})", props)
14
+ end
15
+
16
+ # Public: Creates CloudWatch Event Rule
17
+ #
18
+ # expression - The cron expression.
19
+ #
20
+ # Examples
21
+ #
22
+ # cron("0 */12 * * ? *")
23
+ # cron("0 */12 * * ? *", description: "Hard job")
24
+ #
25
+ def cron(expression, props={})
26
+ schedule_job("cron(#{expression})", props)
27
+ end
28
+
29
+ def schedule_job(expression, props={})
30
+ props = props.merge(schedule_expression: expression)
31
+ rule_event(props)
32
+ end
33
+
34
+ def rule_event(props={})
35
+ if props.key?(:detail)
36
+ description = props.key?(:description) ? props.delete(:description) : rule_description
37
+ rule_props = { event_pattern: props, description: description }
38
+ else # if props.key?(:event_pattern)
39
+ props[:description] ||= rule_description
40
+ rule_props = props
41
+ end
42
+
43
+ with_fresh_properties(multiple_resources: false) do
44
+ associated_properties(rule_props) # TODO: consider getting rid of @associated_properties concept
45
+ resource(events_rule_definition) # add associated resource immediately
46
+ end
47
+ end
48
+
49
+ def rule_description
50
+ self.rule_counter += 1
51
+ "#{self.name} event rule #{rule_counter}"
52
+ end
53
+
54
+ def events_rule_definition
55
+ resource = Jets::Resource::Events::Rule.new(associated_properties)
56
+ resource.definition # returns a definition to be added by associated_resources
57
+ end
58
+
59
+ # Deprecated methods, will be removed in the future
60
+ def events_rule(props)
61
+ puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow)
62
+ puts caller[0]
63
+ sleep 5
64
+ rule_event(props)
65
+ end
66
+ # Deprecated methods, will be removed in the future
67
+
68
+ def event_pattern(props)
69
+ puts "DEPRECATED: events_rule. Instead use rule_event. The events_rule will be removed in the future. Pausing for 5 seconds".color(:yellow)
70
+ puts caller[0]
71
+ sleep 5
72
+ rule_event(props)
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,36 @@
1
+ module Jets::Job::Dsl
2
+ module S3Event
3
+ def s3_event(bucket_name, props={})
4
+ stack_name = declare_s3_bucket_resources(bucket_name) # only set up once per bucket
5
+ declare_sns_subscription(topic_arn: "!Ref #{stack_name}SnsTopic") # set up subscription every time
6
+ end
7
+
8
+ # Returns stack_name
9
+ def declare_s3_bucket_resources(bucket_name)
10
+ # If shared s3 bucket resources have already been declared.
11
+ # We will not generate them again. However, we still need to always
12
+ # add the depends_on declaration to ensure that the shared stack parameters
13
+ # are properly passed to the nested child stack.
14
+ stack_name = s3_events[bucket_name] # already registered
15
+ if stack_name
16
+ depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
17
+ return stack_name
18
+ end
19
+
20
+ # Create shared resources - one time
21
+ stack_name = declare_shared_s3_event_resources(bucket_name)
22
+ depends_on stack_name.underscore.to_sym, class_prefix: true # always add this
23
+ self.s3_events[bucket_name] = stack_name # tracks buckets already set up
24
+ end
25
+
26
+ def declare_shared_s3_event_resources(bucket_name)
27
+ s3_stack = Jets::Stack::S3Event.new(bucket_name)
28
+ s3_stack.build_stack
29
+ s3_stack.stack_name
30
+ end
31
+
32
+ def s3_events
33
+ Jets::Job::Base.s3_events
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,54 @@
1
+ module Jets::Job::Dsl
2
+ module SnsEvent
3
+ def sns_event(topic_name, props={})
4
+ if topic_name.to_s =~ /generate/
5
+ declare_sns_topic(props.delete(:topic_properties))
6
+ topic_arn = "!Ref {namespace}SnsTopic"
7
+ props.merge!(topic_arn: topic_arn)
8
+ declare_sns_subscription(props)
9
+ elsif topic_name.include?('!Ref') # reference shared resource
10
+ topic_arn = topic_name # contains !Ref
11
+ props.merge!(topic_arn: topic_arn)
12
+ declare_sns_subscription(props)
13
+ else # existing topic: short name or full arn
14
+ topic_arn = full_sns_topic_arn(topic_name)
15
+ props.merge!(topic_arn: topic_arn)
16
+ declare_sns_subscription(props)
17
+ end
18
+ end
19
+
20
+ def declare_sns_topic(props={})
21
+ props ||= {} # props.delete(:topic_properties) can be nil
22
+ r = Jets::Resource::Sns::Topic.new(props)
23
+ with_fresh_properties do
24
+ resource(r.definition) # add associated resource immediately
25
+ end
26
+ end
27
+
28
+ def declare_sns_topic_policy(props={})
29
+ props ||= {} # options.delete(:topic_policy_properties) can be nil
30
+ r = Jets::Resource::Sns::TopicPolicy.new(props)
31
+ with_fresh_properties do
32
+ resource(r.definition) # add associated resource immediately
33
+ end
34
+ end
35
+
36
+ def declare_sns_subscription(props={})
37
+ r = Jets::Resource::Sns::Subscription.new(props)
38
+ with_fresh_properties do
39
+ resource(r.definition) # add associated resource immediately
40
+ end
41
+ end
42
+
43
+ # Expands simple topic name to full arn. Example:
44
+ #
45
+ # hello-topic
46
+ # To:
47
+ # arn:aws:sns:us-west-2:112233445566:hello-topic
48
+ def full_sns_topic_arn(topic_name)
49
+ return topic_name if topic_name.include?("arn:aws:sns")
50
+
51
+ "arn:aws:sns:#{Jets.aws.region}:#{Jets.aws.account}:#{topic_name}"
52
+ end
53
+ end
54
+ end