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
+ module Jets::Lambda
2
+ class Function < Functions
3
+ # Override and change the signature so we do not have to provide info at
4
+ # initialization. So:
5
+ #
6
+ # hello_function = HelloFunction.new
7
+ # hello_function.lambda_handler(event, context)
8
+ #
9
+ # Normally controller and job functions initialize like this:
10
+ #
11
+ # controller = PostController.new(event, context, "handler_handler")
12
+ def initialize
13
+ end
14
+
15
+ def self.handler
16
+ handler_task.meth
17
+ end
18
+
19
+ def self.handler_task
20
+ tasks.first
21
+ end
22
+
23
+ # Used by main_processor.rb. Same interface as controllers and jobs.
24
+ def self.process(event, context, meth)
25
+ function = new
26
+ function.send(handler, event, context)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,55 @@
1
+ # Builds an anonymous class that represents a single Lambda function from code
2
+ # in app/functions.
3
+ #
4
+ # The build method returns an anonymous class using Class.new that contains
5
+ # the methods defined in the app/functions/hello.rb code.
6
+ #
7
+ # Ruby Class.new docs:
8
+ #
9
+ # Creates a new anonymous (unnamed) class with the given superclass (or
10
+ # Object if no parameter is given). You can give a class a name by
11
+ # assigning the class object to a constant.
12
+ # http://ruby-doc.org/core-2.1.1/Class.html#method-c-new
13
+ #
14
+ # So assigning the result of build to a constant makes for a prettier
15
+ # class name. Example:
16
+ #
17
+ # constructor = FunctionConstructor.new(code_path)
18
+ # HelloFunction = constructor.build
19
+ #
20
+ # The class name will be HelloFunction instead of (anonymous). Then usage would
21
+ # be:
22
+ #
23
+ # hello_function = HelloFunction.new
24
+ # hello_function(hello_function.handler, event, context)
25
+ #
26
+ # Or call with the process class method:
27
+ #
28
+ # HelloFunction.process(event, context, "world")
29
+ module Jets::Lambda
30
+ class FunctionConstructor
31
+ def initialize(code_path)
32
+ @code_path = "#{Jets.root}/#{code_path}"
33
+ end
34
+
35
+ def build
36
+ code = IO.read(@code_path)
37
+ function_klass = Class.new(Jets::Lambda::Function)
38
+ function_klass.module_eval(code)
39
+ adjust_tasks(function_klass)
40
+ function_klass # assign this to a Constant for a pretty class name
41
+ end
42
+
43
+ # For anonymous classes method_added during task registration contains ""
44
+ # for the class name. We adjust it here.
45
+ def adjust_tasks(klass)
46
+ class_name = @code_path.to_s.sub(/.*\/functions\//,'').sub(/\.rb$/, '')
47
+ class_name = class_name.camelize
48
+ klass.tasks.each do |task|
49
+ task.class_name = class_name
50
+ task.type = "function"
51
+ end
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,34 @@
1
+ require 'json'
2
+
3
+ # Jets::Lambda::Functions represents a collection of Lambda functions.
4
+ #
5
+ # Jets::Lambda::Functions is the superclass of:
6
+ # Jets::Controller::Base
7
+ # Jets::Job::Base
8
+ module Jets::Lambda
9
+ class Functions
10
+ attr_reader :event, :context, :meth
11
+ def initialize(event, context, meth)
12
+ @event = event # Hash, JSON.parse(event) ran BaseProcessor
13
+ @context = context # Hash. JSON.parse(context) ran in BaseProcessor
14
+ @meth = meth
15
+ # store meth because it is useful to for identifying the which template
16
+ # to use later.
17
+ end
18
+
19
+ include Dsl # At the end so methods like event, context and method
20
+ # do not trigger method_added
21
+
22
+ class << self
23
+ # Tracking subclasses because it helps with Lambda::Dsl#find_all_tasks
24
+ def subclasses
25
+ @subclasses ||= []
26
+ end
27
+
28
+ def inherited(base)
29
+ super
30
+ self.subclasses << base if base.name
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,111 @@
1
+ class Jets::Lambda::Task
2
+ attr_accessor :class_name, :type
3
+ attr_reader :meth, :properties, :iam_policy, :managed_iam_policy, :lang, :associated_resources
4
+ def initialize(class_name, meth, options={})
5
+ @class_name = class_name.to_s
6
+ @meth = meth
7
+ @options = options
8
+ @type = options[:type] || get_type # controller, job, or function
9
+ @properties = options[:properties] || {}
10
+ @iam_policy = options[:iam_policy]
11
+ @managed_iam_policy = options[:managed_iam_policy]
12
+ @lang = options[:lang] || :ruby
13
+ @associated_resources = options[:associated_resources] || {}
14
+ @replacements = options[:replacements] || {} # added to baseline replacements
15
+ end
16
+
17
+ def name
18
+ @meth
19
+ end
20
+
21
+ def public_meth?
22
+ # For anonymous classes (app/functions/hello.rb) the class name will be blank.
23
+ # These types of classes are treated specially and has only one handler method
24
+ # that is registered. So we know it is public.
25
+ return true if @class_name.nil? || @class_name == ''
26
+
27
+ # Consider all polymorphic methods public for now
28
+ return true if @lang != :ruby
29
+
30
+ klass = @class_name.constantize
31
+ public_methods = klass.public_instance_methods
32
+ public_methods.include?(meth.to_sym)
33
+ end
34
+
35
+ def build_function_iam?
36
+ !!(@iam_policy || @managed_iam_policy)
37
+ end
38
+
39
+ @@lang_exts = {
40
+ ruby: '.rb',
41
+ python: '.py',
42
+ node: '.js',
43
+ }
44
+ def lang_ext
45
+ @@lang_exts[@lang]
46
+ end
47
+
48
+ # The get_type method works for controller and job classes.
49
+ #
50
+ # Usually able to get the type from the class name. Examples:
51
+ #
52
+ # PostsController => controller
53
+ # HardJob => job
54
+ #
55
+ # However, for function types, we are not able to get the type for multiple of
56
+ # reasons. First, function types are allowed to be named with or without
57
+ # _function. Examples:
58
+ #
59
+ # path => class => type
60
+ # app/functions/hello.rb => Hello => function
61
+ # app/functions/hello_function.rb => HelloFunction => function
62
+ #
63
+ # The second reason is that functions are not regular ruby classes. Instead they
64
+ # are anonymous classes created with Class.new. When classes are created with
65
+ # Class.new the method_added hook has "" (blank string) as the self class name.
66
+ # We add the class_type to the task later on as we are constructing the class
67
+ # as part of the Class.new logic.
68
+ #
69
+ # For controller and job standard ruby classes though it can easily be
70
+ # determinated as part of initialization. So we get the type for convenience then.
71
+ #
72
+ # For anonymous function classes, we just set to nil and will later fix in
73
+ # FunctionConstructor.
74
+ #
75
+ # Returns: "controller", "job" or nil
76
+ def get_type
77
+ unless @class_name.empty? # when anonymous class is created with Class.new
78
+ @class_name.underscore.split('_').last # controller, job or rule
79
+ end
80
+ end
81
+
82
+ def full_handler(handler_function)
83
+ "#{handler_base}.#{handler_function}"
84
+ end
85
+
86
+ def handler_path
87
+ "#{handler_base}#{lang_ext}"
88
+ end
89
+
90
+ def handler_base
91
+ base = "handlers/#{@type.pluralize}/#{@class_name.underscore}"
92
+ base += "/#{@lang}" if @lang != :ruby
93
+ base += "/#{@meth}"
94
+ end
95
+
96
+ def poly_src_path
97
+ handler_path.sub("handlers/", "app/")
98
+ end
99
+
100
+ def replacements
101
+ # Merge in the custom replacements specific to each app class: ConfigRule, Job, etc.
102
+ baseline_replacements.merge(@replacements)
103
+ end
104
+
105
+ def baseline_replacements
106
+ {
107
+ # camelized because used in not just keys but common used in values
108
+ namespace: @meth.to_s.camelize,
109
+ }
110
+ end
111
+ end
@@ -0,0 +1,21 @@
1
+ require 'logger'
2
+
3
+ module Jets
4
+ class Logger < ::Logger
5
+ # Only need to override the add method as the other calls all lead to it.
6
+ def add(severity, message = nil, progname = nil)
7
+ # Taken from Logger#add source
8
+ # https://ruby-doc.org/stdlib-2.5.1/libdoc/logger/rdoc/Logger.html#method-i-add
9
+ if message.nil?
10
+ if block_given?
11
+ message = yield
12
+ else
13
+ message = progname
14
+ progname = @progname
15
+ end
16
+ end
17
+
18
+ super # original logical
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ # Thanks https://mensfeld.pl/2012/01/converting-nested-hash-into-http-url-params-hash-version-in-ruby/
2
+ module Jets::Mega
3
+ module HashConverter
4
+ def self.encode(value, key = nil, out_hash = {})
5
+ case value
6
+ when Hash then
7
+ value.each { |k,v| encode(v, append_key(key,k), out_hash) }
8
+ out_hash
9
+ when Array then
10
+ value.each { |v| encode(v, "#{key}[]", out_hash) }
11
+ out_hash
12
+ when nil then ''
13
+ else
14
+ out_hash[key] = value
15
+ out_hash
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def self.append_key(root_key, key)
22
+ root_key.nil? ? :"#{key}" : :"#{root_key}[#{key.to_s}]"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,139 @@
1
+ require 'net/http'
2
+ require 'rack'
3
+
4
+ module Jets::Mega
5
+ class Request
6
+ JETS_OUTPUT = "/tmp/jets-output.log"
7
+
8
+ extend Memoist
9
+
10
+ def initialize(event, controller)
11
+ @event = event
12
+ @controller = controller # Jets::Controller instance
13
+ end
14
+
15
+ def proxy
16
+ http_method = @event['httpMethod'] # GET, POST, PUT, DELETE, etc
17
+ params = @controller.params(raw: true, path_parameters: false)
18
+
19
+ uri = get_uri
20
+
21
+ http = Net::HTTP.new(uri.host, uri.port)
22
+ http.open_timeout = http.read_timeout = 60
23
+
24
+ # Rails sets _method=patch or _method=put as workaround
25
+ # Falls back to GET when testing in lambda console
26
+ http_class = params['_method'] || http_method || 'GET'
27
+ http_class.capitalize!
28
+
29
+ request_class = "Net::HTTP::#{http_class}".constantize # IE: Net::HTTP::Get
30
+ request = request_class.new(uri)
31
+
32
+ # Set form data
33
+ if %w[Post Patch Put].include?(http_class)
34
+ params = HashConverter.encode(params)
35
+ request.set_form_data(params)
36
+ end
37
+
38
+ # Set body info
39
+ request.body = source.body
40
+ request.content_length = source.content_length
41
+
42
+ # Need to set headers after body and form_data for some reason
43
+ request = set_headers!(request)
44
+
45
+ # Make request
46
+ response = http.request(request)
47
+
48
+ puts_rack_output
49
+
50
+ status = response.code.to_i
51
+ headers = response.each_header.to_h
52
+ encoding = get_encoding(headers['content-type'])
53
+ body = response.body&.force_encoding(encoding)
54
+ {
55
+ status: status,
56
+ headers: headers,
57
+ body: body,
58
+ }
59
+ end
60
+
61
+ def get_encoding(content_type)
62
+ default = Jets.config.encoding.default
63
+ return default unless content_type
64
+
65
+ md = content_type.match(/charset=(.+)/)
66
+ return default unless md
67
+
68
+ md[1]
69
+ end
70
+
71
+ # Grab the rack output from the /tmp/jets-output.log and puts it back in the
72
+ # main process' stdout
73
+ def puts_rack_output
74
+ return unless File.exist?(JETS_OUTPUT)
75
+ puts IO.readlines(JETS_OUTPUT)
76
+ File.truncate(JETS_OUTPUT, 0)
77
+ end
78
+
79
+ def get_uri
80
+ url = "http://localhost:9292#{@controller.request.path}" # local rack server
81
+ unless @controller.query_parameters.empty?
82
+ # Thanks: https://stackoverflow.com/questions/798710/ruby-how-to-turn-a-hash-into-http-parameters
83
+ query_string = Rack::Utils.build_nested_query(@controller.query_parameters)
84
+ url += "?#{query_string}"
85
+ end
86
+ URI(url)
87
+ end
88
+
89
+ def source
90
+ Source.new(@event)
91
+ end
92
+ memoize :source
93
+
94
+ # Rails sets _method=patch or _method=put as workaround
95
+ # Falls back to GET when testing in lambda console
96
+ # @event['httpMethod'] is GET, POST, PUT, DELETE, etc
97
+ def http_class
98
+ http_class = params['_method'] || @event['httpMethod'] || 'GET'
99
+ http_class.capitalize!
100
+ http_class
101
+ end
102
+
103
+ def params
104
+ @controller.params(raw: true, path_parameters: false, body_parameters: true)
105
+ end
106
+ memoize :params
107
+
108
+ # Set request headers. Forwards original request info from remote API gateway.
109
+ # By this time, the server/api_gateway.rb middleware.
110
+ def set_headers!(request)
111
+ headers = @event['headers'] # from api gateway
112
+ if headers # remote API Gateway
113
+ # Forward headers from API Gateway over to the sub http request.
114
+ # It's important to forward the headers. Here are some examples:
115
+ #
116
+ # "Turbolinks-Referrer"=>"http://localhost:8888/posts/122",
117
+ # "Referer"=>"http://localhost:8888/posts/122",
118
+ # "Accept-Encoding"=>"gzip, deflate",
119
+ # "Accept-Language"=>"en-US,en;q=0.9,pt;q=0.8",
120
+ # "Cookie"=>"_demo_session=...",
121
+ # "If-None-Match"=>"W/\"9fa479205fc6d24ca826d46f1f6cf461\"",
122
+ headers.each do |k,v|
123
+ request[k] = v
124
+ end
125
+
126
+ # Note by the time headers get to rack later in the they get changed to:
127
+ #
128
+ # request['X-Forwarded-Host'] vs env['HTTP_X_FORWARDED_HOST']
129
+ #
130
+ request['X-Forwarded-For'] = headers['X-Forwarded-For'] # "1.1.1.1, 2.2.2.2" # can be comma separated list
131
+ request['X-Forwarded-Host'] = headers['Host'] # uhghn8z6t1.execute-api.us-east-1.amazonaws.com
132
+ request['X-Forwarded-Port'] = headers['X-Forwarded-Port'] # 443
133
+ request['X-Forwarded-Proto'] = headers['X-Forwarded-Proto'] # https # scheme
134
+ end
135
+
136
+ request
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,21 @@
1
+ class Jets::Mega::Request
2
+ class Source
3
+ def initialize(event)
4
+ @event = event
5
+ env = Jets::Controller::Rack::Env.new(@event, {}).convert # convert to Rack env
6
+ @source_request = Rack::Request.new(env)
7
+ end
8
+
9
+ def body
10
+ if @source_request.body.respond_to?(:read)
11
+ body = @source_request.body.read
12
+ @source_request.body.rewind
13
+ end
14
+ body
15
+ end
16
+
17
+ def content_length
18
+ @source_request.content_length.to_i
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,33 @@
1
+ module Jets
2
+ module Middleware
3
+ extend Memoist
4
+
5
+ def call(env)
6
+ stack = middlewares.build(endpoint)
7
+ stack.call(env)
8
+ end
9
+
10
+ # Final middleware in the stack
11
+ def endpoint
12
+ Jets::Controller::Middleware::Main
13
+ end
14
+
15
+ # Called in Jets::Booter to build middleware stack only once during bootup
16
+ def build_stack
17
+ middlewares
18
+ end
19
+
20
+ def middlewares
21
+ config_middleware.merge_into(default_stack) # returns Jets::Middleware::Stack
22
+ end
23
+ memoize :middlewares
24
+
25
+ def default_stack
26
+ Jets::Middleware::DefaultStack.new(Jets.config, Jets.application).build_stack # returns Jets::Middleware::Stack
27
+ end
28
+
29
+ def config_middleware
30
+ Jets.config.middleware # returns Jets::Middleware::Configurator
31
+ end
32
+ end
33
+ end