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,50 @@
1
+ # Class that include Definition should implement:
2
+ #
3
+ # template - method should use @definition to build a CloudFormation template section
4
+ #
5
+ class Jets::Stack
6
+ module Definition
7
+ extend ActiveSupport::Concern
8
+
9
+ # Example of usage that leads here:
10
+ #
11
+ # Parameter.new(self, *definition).register
12
+ #
13
+ # Which is defined in parameter/dsl.rb
14
+ #
15
+ # Example subclass: ExampleStack < Jets::Stack
16
+ def initialize(subclass, *definition)
17
+ @subclass = subclass.to_s # important to use to_s, dont want the object as keys in @definitions
18
+ @definition = definition.flatten
19
+ end
20
+
21
+ def register
22
+ self.class.register(@subclass, *@definition)
23
+ end
24
+
25
+ def camelize(attributes)
26
+ Jets::Camelizer.transform(attributes)
27
+ end
28
+
29
+ class_methods do
30
+ def register(subclass, *definition)
31
+ @definitions ||= {}
32
+ @definitions[subclass.to_s] ||= []
33
+ # Create instance of the CloudFormation section class and register it. Examples:
34
+ # Stack::Parameter.new(definition)
35
+ # Stack::Resource.new(definition)
36
+ # Stack::Output.new(definition)
37
+ @definitions[subclass.to_s] << new(subclass, definition)
38
+ end
39
+
40
+ def definitions(subclass)
41
+ @definitions ||= {}
42
+ @definitions[subclass.to_s]
43
+ end
44
+
45
+ def all_definitions
46
+ @definitions
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,34 @@
1
+ class Jets::Stack
2
+ class Depends
3
+ def initialize(items)
4
+ @items = items
5
+ end
6
+
7
+ def params
8
+ result = {}
9
+ @items.each do |item|
10
+ logical_id = item.stack.to_s.camelize # logical_id
11
+ dependency_outputs(logical_id).each do |output|
12
+ dependency_class = logical_id.to_s.camelize
13
+ output_key = item.options[:class_prefix] ?
14
+ "#{dependency_class}#{output}" : # already camelized
15
+ output
16
+
17
+ output_value = "!GetAtt #{dependency_class}.Outputs.#{output}"
18
+ result[output_key] = output_value
19
+ end
20
+ end
21
+ result
22
+ end
23
+
24
+ def stack_list
25
+ @items.map do |item|
26
+ item.stack.to_s.camelize # logical_id # logical_id
27
+ end
28
+ end
29
+
30
+ def dependency_outputs(logical_id)
31
+ logical_id.to_s.camelize.constantize.output_keys
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,9 @@
1
+ class Jets::Stack::Depends
2
+ class Item
3
+ attr_reader :stack, :options
4
+ def initialize(stack, options={})
5
+ @stack = stack
6
+ @options = options
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,69 @@
1
+ class Jets::Stack
2
+ class Function
3
+ extend Memoist
4
+
5
+ attr_reader :template
6
+ def initialize(template)
7
+ @template = template
8
+ end
9
+
10
+ def meth
11
+ attributes = @template.values.first
12
+ handler = attributes['Properties']['Handler']
13
+ handler.split('.').last
14
+ end
15
+
16
+ def lang
17
+ return if internal?
18
+
19
+ if source_file
20
+ # Detect language from file extension
21
+ ext = File.extname(source_file).sub(/^\./,'').to_sym
22
+ lang_map[ext]
23
+ else
24
+ puts "WARN: Unable to find a source file for function. Looked at: #{search_expression}".color(:yellow)
25
+ end
26
+ end
27
+
28
+ def lang_map
29
+ {
30
+ rb: :ruby,
31
+ py: :python,
32
+ js: :node,
33
+ }
34
+ end
35
+
36
+ def source_file
37
+ Dir.glob(search_expression).first
38
+ end
39
+ memoize :source_file
40
+
41
+ def search_expression
42
+ base_search_expression.sub('handlers/shared/', "#{Jets.root}/app/shared/")
43
+ end
44
+
45
+ def internal_search_expression
46
+ internal = File.expand_path("../internal", File.dirname(__FILE__))
47
+ base_search_expression.sub('handlers/shared/', "#{internal}/app/shared/")
48
+ end
49
+
50
+ def base_search_expression
51
+ attributes = @template.values.first
52
+ handler = attributes['Properties']['Handler']
53
+ handler.split('.')[0..-2].join('.') + '.*' # search_expression
54
+ # Example: handlers/shared/functions/jets/s3_bucket_config.*
55
+ end
56
+
57
+ # Internal flag is mainly used to disable WARN messages
58
+ def internal?
59
+ !!Dir.glob(internal_search_expression).first
60
+ end
61
+
62
+ # Relative path
63
+ # app/shared/functions/kevin.py => handlers/shared/functions/kevin.py
64
+ def handler_dest
65
+ return unless source_file
66
+ source_file.sub(%r{.*/app/}, "handlers/")
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,4 @@
1
+ class Jets::Stack
2
+ class Main
3
+ end
4
+ end
@@ -0,0 +1,28 @@
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
+
16
+ def self.included(base)
17
+ base_path = "#{Jets.root}/app/shared/extensions"
18
+ Dir.glob("#{base_path}/**/*.rb").each do |path|
19
+ next unless File.file?(path)
20
+
21
+ class_name = path.sub("#{base_path}/", '').sub(/\.rb/,'').camelize
22
+ klass = class_name.constantize # autoload
23
+ base.extend(klass)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,49 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Base
3
+ def ref(value)
4
+ "!Ref #{value.to_s.camelize}"
5
+ end
6
+
7
+ def getatt(value, attribute=:arn)
8
+ "!GetAtt #{value.to_s.camelize}.#{attribute.to_s.camelize}"
9
+ end
10
+
11
+ def logical_id(value)
12
+ value.to_s.camelize
13
+ end
14
+
15
+ def depends_on(*stacks)
16
+ if stacks == []
17
+ @depends_on
18
+ else
19
+ @depends_on ||= []
20
+ @depends_on += stacks
21
+ end
22
+ end
23
+
24
+ # Due to `if Jets::Stack.has_resources?` check early on in the bootstraping process
25
+ # The code has not been built at that point. So we use a placeholder and will replace
26
+ # the placeholder as part of the cfn template build process after the code has been built
27
+ # and the code_s3_key with md5 is available.
28
+ def code_s3_key
29
+ "code_s3_key_placeholder"
30
+ end
31
+
32
+ # resource(:hello,
33
+ # function_name: "hello",
34
+ # code: {
35
+ # s3_bucket: "!Ref S3Bucket",
36
+ # s3_key: code_s3_key
37
+ # },
38
+ # description: "Hello world",
39
+ # handler: handler_function("hello.lambda_handler"),
40
+ # memory_size: 128,
41
+ # role: "!Ref IamRole",
42
+ # runtime: "python3.6",
43
+ # timeout: 20,
44
+ # )
45
+ def handler(name)
46
+ "handlers/shared/functions/#{name}" # generated handler
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,19 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Cloudwatch
3
+ def cloudwatch_alarm(id, hash={})
4
+ if hash.key?(:depends_on)
5
+ attributes = hash # leave structure alone and add type only
6
+ attributes[:type] = "AWS::CloudWatch::Alarm"
7
+ else
8
+ # the attributes are properties
9
+ properties = hash
10
+ attributes = {
11
+ type: "AWS::CloudWatch::Alarm",
12
+ properties: properties,
13
+ }
14
+ end
15
+ resource(id, attributes)
16
+ output(id)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ module Jets::Stack::Main::Dsl
2
+ module Iam
3
+ def iam_role(id, props={})
4
+ resource(id, "AWS::IAM::Role", props)
5
+ output(id) # IAM Arn
6
+ end
7
+ end
8
+ end
@@ -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] = "ruby2.5" 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, getatt(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,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
+