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,29 @@
1
+ require 'rack/request'
2
+
3
+ class Jets::Controller
4
+ class Request < ::Rack::Request
5
+ def initialize(event, context)
6
+ @event, @context = event, context
7
+ super(env)
8
+ end
9
+
10
+ def env
11
+ @env ||= Jets::Controller::Rack::Env.new(@event, @context).convert # convert to Rack env
12
+ end
13
+
14
+ # When request hits the middleware Controller::Rack::Middleware::Main endpoint
15
+ # We set the it with the updated env since it could had been mutated down the
16
+ # middleware stack.
17
+ def set_env!(env)
18
+ @env = env
19
+ end
20
+
21
+ # API Gateway is inconsistent about how it cases it keys.
22
+ # Sometimes it is "x-requested-with" vs "X-Requested-With"
23
+ # Normalize it with downcase.
24
+ def headers
25
+ headers = @event["headers"] || {}
26
+ headers.transform_keys { |key| key.downcase }
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,61 @@
1
+ require 'rack/response'
2
+
3
+ class Jets::Controller
4
+ # The response object. See Rack::Response and Rack::Response::Helpers for
5
+ # more info:
6
+ # http://rubydoc.info/github/rack/rack/master/Rack/Response
7
+ # http://rubydoc.info/github/rack/rack/master/Rack/Response/Helpers
8
+ class Response < ::Rack::Response
9
+ DROP_BODY_RESPONSES = [204, 304]
10
+ def initialize(*)
11
+ super
12
+ # headers['Content-Type'] ||= 'text/html'
13
+ end
14
+
15
+ # TODO: unsure if we should even have these methods. We dont really use them.
16
+ def body=(value)
17
+ value = value.body while Rack::Response === value
18
+ @body = String === value ? [value.to_str] : value
19
+ end
20
+
21
+ def each
22
+ block_given? ? super : enum_for(:each)
23
+ end
24
+
25
+ def finish
26
+ result = body
27
+
28
+ if drop_content_info?
29
+ headers.delete "Content-Length"
30
+ headers.delete "Content-Type"
31
+ end
32
+
33
+ if drop_body?
34
+ close
35
+ result = []
36
+ end
37
+
38
+ if calculate_content_length?
39
+ # if some other code has already set Content-Length, don't muck with it
40
+ # currently, this would be the static file-handler
41
+ headers["Content-Length"] = body.inject(0) { |l, p| l + p.bytesize }.to_s
42
+ end
43
+
44
+ [status.to_i, headers, result]
45
+ end
46
+
47
+ private
48
+
49
+ def calculate_content_length?
50
+ headers["Content-Type"] and not headers["Content-Length"] and Array === body
51
+ end
52
+
53
+ def drop_content_info?
54
+ status.to_i / 100 == 1 or drop_body?
55
+ end
56
+
57
+ def drop_body?
58
+ DROP_BODY_RESPONSES.include?(status.to_i)
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,33 @@
1
+ class Jets::Controller
2
+ class Stage
3
+ def initialize(host, url)
4
+ @host, @url = host, url
5
+ end
6
+
7
+ def add
8
+ return @url unless add_stage?
9
+
10
+ stage_name = Jets::Resource::ApiGateway::Deployment.stage_name
11
+ "/#{stage_name}#{@url}"
12
+ end
13
+
14
+ def add_stage?
15
+ return false if on_cloud9?
16
+ @host.include?("amazonaws.com") && @url.starts_with?('/')
17
+ end
18
+
19
+ def on_cloud9?
20
+ self.class.on_cloud9?(@host)
21
+ end
22
+
23
+ class << self
24
+ def add(host, url)
25
+ new(host, url).add
26
+ end
27
+
28
+ def on_cloud9?(host)
29
+ !!(host =~ /cloud9\..*\.amazonaws\.com/)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,149 @@
1
+ module Jets::Core
2
+ extend Memoist
3
+
4
+ def application
5
+ Jets::Application.instance
6
+ end
7
+
8
+ def config
9
+ application.config
10
+ end
11
+
12
+ def aws
13
+ application.aws
14
+ end
15
+
16
+ # Load all application base classes and project classes
17
+ def boot
18
+ Jets::Booter.boot!
19
+ end
20
+
21
+ def root
22
+ # Do not memoize this method. Turbo mode can change it
23
+ root = ENV['JETS_ROOT'].to_s
24
+ root = Dir.pwd if root == ''
25
+ Pathname.new(root)
26
+ end
27
+
28
+ def env
29
+ env = ENV['JETS_ENV'] || 'development'
30
+ ENV['RAILS_ENV'] = ENV['RACK_ENV'] = env
31
+ ActiveSupport::StringInquirer.new(env)
32
+ end
33
+ memoize :env
34
+
35
+ def build_root
36
+ "/tmp/jets/#{config.project_name}".freeze
37
+ end
38
+ memoize :build_root
39
+
40
+ def logger
41
+ Jets.application.config.logger
42
+ end
43
+ memoize :logger
44
+
45
+ def webpacker?
46
+ Gem.loaded_specs.keys.include?("webpacker")
47
+ end
48
+ memoize :webpacker?
49
+
50
+ def load_tasks
51
+ Jets::Commands::RakeTasks.load!
52
+ end
53
+
54
+ def version
55
+ Jets::VERSION
56
+ end
57
+
58
+ # NOTE: In development this will always be 1 because the app gets reloaded.
59
+ # On AWS Lambda, this will be ever increasing until the container gets replaced.
60
+ @@call_count = 0
61
+ def increase_call_count
62
+ @@call_count += 1
63
+ end
64
+
65
+ def call_count
66
+ @@call_count
67
+ end
68
+
69
+ @@prewarm_count = 0
70
+ def increase_prewarm_count
71
+ @@prewarm_count += 1
72
+ end
73
+
74
+ def prewarm_count
75
+ @@prewarm_count
76
+ end
77
+
78
+ def project_namespace
79
+ [config.project_name, config.short_env, config.env_extra].compact.join('-').gsub('_','-')
80
+ end
81
+
82
+ def rack?
83
+ path = "#{Jets.root}/rack"
84
+ File.exist?(path) || File.symlink?(path)
85
+ end
86
+
87
+ def poly_only?
88
+ return true if ENV['JETS_POLY_ONLY'] # bypass to allow rapid development of handlers
89
+ Jets::Commands::Build.poly_only?
90
+ end
91
+
92
+ def report_exception(exception)
93
+ puts "DEPRECATED: report_exception. Use on_exception instead.".color(:yellow)
94
+ on_exception(exception)
95
+ end
96
+
97
+ def on_exception(exception)
98
+ Jets::Turbine.subclasses.each do |subclass|
99
+ reporters = subclass.on_exceptions || []
100
+ reporters.each do |label, block|
101
+ block.call(exception)
102
+ end
103
+ end
104
+ end
105
+
106
+ def custom_domain?
107
+ Jets.config.domain.hosted_zone_name
108
+ end
109
+
110
+ def s3_event?
111
+ !Jets::Job::Base.s3_events.empty?
112
+ end
113
+
114
+ def process(event, context, handler)
115
+ if event['_prewarm']
116
+ Jets.increase_prewarm_count
117
+ Jets.logger.info("Prewarm request")
118
+ {prewarmed_at: Time.now.to_s}
119
+ else
120
+ Jets::Processors::MainProcessor.new(event, context, handler).run
121
+ end
122
+ end
123
+
124
+ def once
125
+ boot
126
+ override_lambda_ruby_runtime
127
+ tmp_load!
128
+ start_rack_server
129
+ end
130
+
131
+ def tmp_load!
132
+ Jets::TmpLoader.load!
133
+ end
134
+
135
+ # Megamode support
136
+ def start_rack_server(options={})
137
+ rack = Jets::RackServer.new(options)
138
+ rack.start
139
+ rack.wait_for_socket
140
+ end
141
+
142
+ def default_gems_source
143
+ "https://gems2.lambdagems.com"
144
+ end
145
+
146
+ def override_lambda_ruby_runtime
147
+ require "jets/overrides/lambda"
148
+ end
149
+ end
@@ -0,0 +1,13 @@
1
+ module Kernel
2
+ module_function
3
+
4
+ alias_method :jets_original_require, :require
5
+ # @param path [String]
6
+ # @return [Boolean]
7
+ def require(path)
8
+ # Hack to prevent Rails const from being defined
9
+ # Actionview requires "rails-html-sanitizer" and that creates a Rails module
10
+ path = "jets-html-sanitizer" if path == "rails-html-sanitizer"
11
+ jets_original_require(path)
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module Jets::Db ; end
2
+
3
+ # Thanks: https://makandracards.com/makandra/42521-detecting-if-a-ruby-gem-is-loaded
4
+ if File.exist?("#{Jets.root}/config/database.yml")
5
+ require "active_record"
6
+ specs = Gem.loaded_specs
7
+ require "mysql2" if specs.key?('mysql2')
8
+ require "pg" if specs.key?('pg')
9
+ end
10
+
11
+ if File.exist?("#{Jets.root}/config/dynamodb.yml")
12
+ specs = Gem.loaded_specs
13
+ specs.key?('dynomite')
14
+ require "dynomite" if specs.key?('dynomite')
15
+ end
@@ -0,0 +1,48 @@
1
+ require 'dotenv'
2
+
3
+ class Jets::Dotenv
4
+ def self.load!(remote=false)
5
+ new(remote).load!
6
+ end
7
+
8
+ def initialize(remote=false)
9
+ @remote = ENV['JETS_ENV_REMOTE'] || remote
10
+ end
11
+
12
+ def load!
13
+ return if on_aws? # this prevents ssm calls if used in dotenv files
14
+ vars = ::Dotenv.load(*dotenv_files)
15
+ Ssm.new(vars).interpolate!
16
+ end
17
+
18
+ def on_aws?
19
+ !!ENV['_HANDLER'] # https://docs.aws.amazon.com/lambda/latest/dg/lambda-environment-variables.html
20
+ end
21
+
22
+ # dotenv files with the following precedence:
23
+ #
24
+ # - .env.development.jets_env_extra (highest)
25
+ # - .env.development.remote (2nd highest)
26
+ # - .env.development.local
27
+ # - .env.development
28
+ # - .env.local - This file is loaded for all environments _except_ `test`.
29
+ # - .env - The original (lowest)
30
+ #
31
+ def dotenv_files
32
+ files = [
33
+ root.join(".env"),
34
+ (root.join(".env.local") unless Jets.env.test?),
35
+ root.join(".env.#{Jets.env}"),
36
+ root.join(".env.#{Jets.env}.local"),
37
+ ]
38
+ files << root.join(".env.#{Jets.env}.remote") if @remote
39
+ if ENV["JETS_ENV_EXTRA"]
40
+ files << root.join(".env.#{Jets.env}.#{ENV["JETS_ENV_EXTRA"]}")
41
+ end
42
+ files.compact
43
+ end
44
+
45
+ def root
46
+ Jets.root || Pathname.new(ENV["JETS_ROOT"] || Dir.pwd)
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'aws-sdk-ssm'
2
+
3
+ class Jets::Dotenv
4
+ class Ssm
5
+ SSM_VARIABLE_REGEXP = /^ssm:(.*)/
6
+
7
+ def initialize(variables={})
8
+ @variables = variables
9
+ @missing = []
10
+ end
11
+
12
+ def interpolate!
13
+ interpolated_variables = @variables.map do |key, value|
14
+ if value[SSM_VARIABLE_REGEXP]
15
+ value = fetch_ssm_value(key, $1)
16
+ end
17
+
18
+ [key, value]
19
+ end
20
+
21
+ interpolated_variables.each do |key, value|
22
+ ENV[key] = value
23
+ end
24
+
25
+ if @missing.empty?
26
+ interpolated_variables.to_h # success
27
+ else
28
+ message = "Error loading .env variables. No matching SSM parameters found for:\n".color(:red)
29
+ message += @missing.map { |k,v,n| " #{k}=ssm:#{v} # ssm name: #{n}"}.join("\n")
30
+ abort message
31
+ end
32
+ end
33
+
34
+ def fetch_ssm_value(key, value)
35
+ name = value.start_with?("/") ? value :
36
+ "/#{Jets.config.project_name}/#{Jets.env}/#{value}"
37
+ response = ssm.get_parameter(name: name, with_decryption: true)
38
+ response.parameter.value
39
+ rescue Aws::SSM::Errors::ParameterNotFound
40
+ @missing << [key, value, name]
41
+ ''
42
+ end
43
+
44
+ def ssm
45
+ @ssm ||= Aws::SSM::Client.new
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ require 'erb'
2
+
3
+ # Renders Erb and provide better backtrace where there's an error
4
+ #
5
+ # Usage:
6
+ #
7
+ # result = Jets::Erb.result(path, key1: "val1", key2: "val2")
8
+ #
9
+ class Jets::Erb
10
+ class << self
11
+ def result(path, variables={})
12
+ set_template_variables(variables)
13
+ template = IO.read(path)
14
+ begin
15
+ ERB.new(template, nil, "-").result(binding)
16
+ rescue Exception => e
17
+ puts e
18
+ puts e.backtrace if ENV['JETS_DEBUG']
19
+
20
+ # how to know where ERB stopped? - https://www.ruby-forum.com/topic/182051
21
+ # syntax errors have the (erb):xxx info in e.message
22
+ # undefined variables have (erb):xxx info in e.backtrac
23
+ error_info = e.message.split("\n").grep(/\(erb\)/)[0]
24
+ error_info ||= e.backtrace.grep(/\(erb\)/)[0]
25
+ raise unless error_info # unable to find the (erb):xxx: error line
26
+ line = error_info.split(':')[1].to_i
27
+ puts "Error evaluating ERB template on line #{line.to_s.color(:red)} of: #{path.sub(/^\.\//, '').color(:green)}"
28
+
29
+ template_lines = template.split("\n")
30
+ context = 5 # lines of context
31
+ top, bottom = [line-context-1, 0].max, line+context-1
32
+ spacing = template_lines.size.to_s.size
33
+ template_lines[top..bottom].each_with_index do |line_content, index|
34
+ line_number = top+index+1
35
+ if line_number == line
36
+ printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
37
+ else
38
+ printf("%#{spacing}d %s\n", line_number, line_content)
39
+ end
40
+ end
41
+ exit 1 unless ENV['TEST']
42
+ end
43
+ end
44
+
45
+ def set_template_variables(variables)
46
+ variables.each do |key, value|
47
+ instance_variable_set(:"@#{key}", value)
48
+ end
49
+ end
50
+ end
51
+ end