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,136 @@
1
+ class Jets::Commands::Call
2
+ class AutoloadGuesser < BaseGuesser
3
+ def detect_class_name
4
+ # First guess the class name assuming simple
5
+ class_name = simple_detect_class_name
6
+ return class_name if class_name
7
+
8
+ guess_classes.each do |class_name_guess|
9
+ begin
10
+ class_name_guess.constantize
11
+ return class_name_guess # if there's no error then the class is found
12
+ rescue NameError
13
+ if out_of_guesses(class_name_guess)
14
+ # puts "Unable to find the class to call. Tried guessing: #{guess_classes[0..-2].join(', ')}."
15
+ # raise # re-raise NameError for now but maybe better to provide
16
+ # a custom error class, so we can rescue it and provide a
17
+ # friendly message to the user
18
+ else
19
+ next
20
+ end
21
+ end
22
+ end
23
+
24
+ nil
25
+ end
26
+
27
+ # Can guess name by looking at underscore and dashes.
28
+ #
29
+ # Example:
30
+ #
31
+ # @provided_function_name: first_module-lost_controller-index
32
+ # return: FirstModule::LostController
33
+ #
34
+ def simple_detect_class_name
35
+ parts = @provided_function_name.split('-')
36
+ namespace = parts[0..-3].join('/')
37
+ controller = parts[-2..-2] # dont include the action
38
+ class_name = [namespace, controller].reject {|s| s.empty?}.compact.join('/').camelize
39
+ begin
40
+ class_name.constantize
41
+ return class_name
42
+ rescue NameError
43
+ nil
44
+ end
45
+ end
46
+
47
+ def method_name
48
+ return @method_name if defined?(@method_name)
49
+ return nil unless class_name
50
+
51
+ underscored_class_name = class_name.underscore.gsub('/','_')
52
+ underscored_function_name = @provided_function_name.underscore.gsub('/','_')
53
+ meth = underscored_function_name.sub(underscored_class_name, '')
54
+ meth = meth.sub(/^[-_]/,'') # remove leading _ or -
55
+
56
+ if class_name.constantize.tasks.map(&:meth).include?(meth.to_sym)
57
+ @method_name = meth
58
+ else
59
+ @method_name_error ="#{class_name} class found but #{meth} method not found"
60
+ @method_name = nil
61
+ end
62
+ end
63
+
64
+ # Useful to printing out what was attempted to look up
65
+ def error_message
66
+ guesses = guess_classes
67
+ puts "Unable to find the function to call."
68
+ if class_name and !method_name
69
+ puts @method_name_error
70
+ else
71
+ puts "Tried: #{guesses.join(', ')}"
72
+ end
73
+ end
74
+
75
+ def process_type
76
+ if @provided_function_name =~ /[-_]controller/
77
+ "controller"
78
+ elsif @provided_function_name =~ /[-_]job/
79
+ "job"
80
+ elsif @provided_function_name =~ /[-_]rule/
81
+ "rule"
82
+ else
83
+ "function"
84
+ end
85
+ end
86
+
87
+ def process_type_pattern
88
+ Regexp.new("[-_]#{process_type}[-_](.*)")
89
+ end
90
+
91
+ # Strips the action because we dont want it to guess the class name
92
+ # So:
93
+ # admin-related-pages => admin_related_pages_controller
94
+ def underscored_name
95
+ # strip action and concidentally the _controller_ string
96
+ name = @provided_function_name.sub(process_type_pattern,'')
97
+ # Ensure _controller or _job at the end except for simple functions
98
+ unless process_type == "function"
99
+ name = name.gsub('-','_') + "_#{process_type}"
100
+ end
101
+ name
102
+ end
103
+
104
+ # Guesses autoload paths.
105
+ #
106
+ # underscored_name: admin_related_pages_controller
107
+ # Returns:
108
+ # [
109
+ # "admin_related_pages_controller",
110
+ # "admin/related_pages_controller",
111
+ # "admin_related/pages_controller",
112
+ # "admin_related_pages/controller",
113
+ # ]
114
+ def autoload_paths
115
+ guesses = []
116
+
117
+ parts = underscored_name.split('_')
118
+ parts.size.times do |i|
119
+ namespace = i == 0 ? nil : parts[0..i-1].join('/')
120
+ class_path = parts[i..-1].join('_')
121
+ guesses << [namespace, class_path].compact.join('/')
122
+ end
123
+
124
+ guesses
125
+ end
126
+
127
+ def guess_classes
128
+ autoload_paths.map(&:classify)
129
+ end
130
+
131
+ def out_of_guesses(guess)
132
+ guess.include?("::Controller")
133
+ end
134
+
135
+ end
136
+ end
@@ -0,0 +1,60 @@
1
+ # Subclasses of BaseGuessor must implement interface:
2
+ # detect_class_name
3
+ # method_name
4
+ # error_message
5
+ #
6
+ class Jets::Commands::Call
7
+ class BaseGuesser
8
+ include Jets::AwsServices
9
+
10
+ # provided_function_name:
11
+ # admin/related_pages_controller-list_all
12
+ # admin-related-pages-controller-list-all
13
+ def initialize(provided_function_name)
14
+ @provided_function_name = provided_function_name
15
+ end
16
+
17
+ def class_name
18
+ return @class_name if @detection_ran
19
+
20
+ @class_name = detect_class_name
21
+ @detection_ran = true
22
+ @class_name
23
+ end
24
+
25
+ def function_name
26
+ # Strip the project namespace if the user has accidentally added it
27
+ # Since we're going to automatically add it no matter what at the end
28
+ # and dont want the namespace to be included twice
29
+ @provided_function_name = @provided_function_name.sub("#{Jets.config.project_namespace}-", "")
30
+
31
+ code_path = class_name.underscore.gsub('/','-')
32
+ function_name = [Jets.config.project_namespace, code_path, method_name].join('-')
33
+ generated_function_name(function_name)
34
+ end
35
+
36
+ def generated_function_name(function_name)
37
+ if function_name.size > Jets::MAX_FUNCTION_NAME_SIZE # name generated by CloudFormation
38
+ logical_id = @class_name.gsub('::','')
39
+ app_stack_arn = lookup(parent_stack[:outputs], logical_id)
40
+
41
+ resources = stack_resources(app_stack_arn)
42
+ resource = resources.find { |r| r.logical_resource_id == method_name.camelize + "LambdaFunction" } # method_name only contains the method
43
+ resource.physical_resource_id # actual function name
44
+ else
45
+ function_name
46
+ end
47
+ end
48
+
49
+ # Class variable caches
50
+ @@stack_resources = {}
51
+ def stack_resources(stack_name)
52
+ @@stack_resources[stack_name] ||= cfn.describe_stack_resources(stack_name: stack_name).stack_resources
53
+ end
54
+
55
+ @@parent_stack = nil
56
+ def parent_stack
57
+ @@parent_stack ||= cfn.describe_stacks(stack_name: Jets::Naming.parent_stack_name).stacks.first
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,48 @@
1
+ # Guesser transforms the user provided function name to the actual lambda
2
+ # function name.
3
+ #
4
+ # Allow for variety of different inputs to work:
5
+ # Simple:
6
+ # admin/pages_controller-index => admin-pages_controller-index
7
+ # admin-pages_controller-index => admin-pages_controller-index
8
+ #
9
+ # Complex, requires detecting the right class name:
10
+ # admin/related_pages_controller-list_all
11
+ # admin-related-pages-controller-list-all
12
+ #
13
+ # All still result in: admin-related_pages_controller-index
14
+ #
15
+ # The detection process follows. Given worse case:
16
+ # admin-related-pages-controller-list-all
17
+ #
18
+ # Know that the action comes after controller, try:
19
+ # AdminRelatedPagesController
20
+ # Admin::RelatedPagesController <= found stop guessing
21
+ #
22
+ # admin/related_pages_controller <= underscored
23
+ # admin/related_pages_controller-list_all <= add action back on
24
+ # admin-related_pages_controller-list_all <= gsub / - DONE
25
+ #
26
+ # Now we're at a point where we can start guessing
27
+ # function_name = detect_function_name(function_name)
28
+ class Jets::Commands::Call
29
+ class Guesser
30
+ delegate :class_name, :method_name, :error_message, :function_name,
31
+ to: :delegate_guesser
32
+
33
+ # Example of provided_function_name:
34
+ # admin/related_pages_controller-list_all
35
+ # admin-related-pages-controller-list-all
36
+ def initialize(provided_function_name)
37
+ @provided_function_name = provided_function_name
38
+ end
39
+
40
+ def delegate_guesser
41
+ @delegate_guesser ||= if @provided_function_name =~ /[-_](controller|job|rule)/
42
+ AutoloadGuesser.new(@provided_function_name)
43
+ else
44
+ AnonymousGuesser.new(@provided_function_name)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,19 @@
1
+ module Jets::Commands
2
+ class Clean < Jets::Commands::Base
3
+ class_option :noop, type: :boolean, desc: "noop or dry-run mode"
4
+ class_option :mute, type: :boolean, desc: "mute output"
5
+ class_option :sure, type: :boolean, desc: "bypass are you sure prompt"
6
+
7
+ desc "log", "Cleans CloudWatch log groups assocated with app"
8
+ long_desc Help.text('clean:log')
9
+ def log
10
+ Log.new(options).clean
11
+ end
12
+
13
+ desc "build", "Cleans jets build"
14
+ long_desc Help.text('clean:build')
15
+ def build
16
+ Build.new(options).clean
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ class Jets::Commands::Clean
2
+ class Base
3
+ def initialize(options={})
4
+ @options = options
5
+ end
6
+
7
+ private
8
+ def say(message)
9
+ prefix = 'NOOP ' if @options[:noop]
10
+ puts "#{prefix}#{message}" unless @options[:mute]
11
+ end
12
+
13
+ def are_you_sure?(message)
14
+ return true if @options[:sure]
15
+
16
+ puts "Are you sure that you want to #{message}? (y/N)"
17
+ yes = $stdin.gets.strip
18
+ unless yes =~ /^y/
19
+ puts "Phew that was close!"
20
+ exit 0
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ require 'fileutils'
2
+
3
+ class Jets::Commands::Clean
4
+ class Build < Base
5
+ def clean
6
+ are_you_sure?("delete /tmp/jets")
7
+
8
+ say "Removing /tmp/jets..."
9
+ FileUtils.rm_rf("/tmp/jets") unless @options[:noop]
10
+ say "Removed /tmp/jets"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,107 @@
1
+ # The thing that limits this implementation is that there needs to be at least
2
+ # one lambda function created from an internal jets function. Example:
3
+ #
4
+ # /aws/lambda/demo-dev-2-jets-preheat_job-warm
5
+ # /aws/lambda/demo-dev-2-jets-public_controller-show
6
+ #
7
+ # We're doing this because JETS_ENV_EXTRA environments can create additional matching
8
+ # log groups and we don't want to overly-aggressively delete them.
9
+ #
10
+ # The `keep_prefixes(log_group_names)` method calcuates the log groups to keep.
11
+ class Jets::Commands::Clean
12
+ class Log < Base
13
+ extend Memoist
14
+ include Jets::AwsServices
15
+
16
+ def clean
17
+ are_you_sure?("delete CloudWatch logs")
18
+
19
+ say "Removing CloudWatch logs for #{prefix_guess}..."
20
+ log_groups.each do |g|
21
+ next if keep_log_group?(g.log_group_name)
22
+ logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
23
+ say "Removed log group: #{g.log_group_name}"
24
+ end
25
+ say "Removed CloudWatch logs for #{prefix_guess}"
26
+ end
27
+
28
+ def clean_deploys
29
+ groups = deploy_log_groups.sort_by do |g|
30
+ g.log_group_name
31
+ end
32
+ # Keep the last 2 recent log groups so we can see the deleted logic
33
+ groups = groups[0..-3]
34
+ groups.each do |g|
35
+ logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
36
+ end
37
+ end
38
+
39
+ def deploy_log_groups
40
+ log_groups.select do |g|
41
+ !keep_log_group?(g.log_group_name) &&
42
+ g.log_group_name.include?('jets-base-path')
43
+ end
44
+ end
45
+
46
+ private
47
+ def prefix_guess
48
+ Jets::Naming.parent_stack_name
49
+ end
50
+
51
+ def log_groups
52
+ groups, next_token = [], true
53
+ while next_token
54
+ next_token = nil if next_token == true # just at start the loop
55
+ resp = logs.describe_log_groups(
56
+ log_group_name_prefix: "/aws/lambda/#{prefix_guess}-",
57
+ next_token: next_token,
58
+ )
59
+ groups += resp.log_groups
60
+ next_token = resp.next_token
61
+ end
62
+ groups
63
+ end
64
+ memoize :log_groups
65
+
66
+ def log_group_names
67
+ log_groups.map(&:log_group_name)
68
+ end
69
+
70
+ def all_prefixes(log_group_names)
71
+ log_prefixes(log_group_names)
72
+ end
73
+ memoize :all_prefixes
74
+
75
+ # Check for the prefixes to keep. The slightly tricky thing to watch for is
76
+ # for the prefix matching addiitonal log groups that belong to other
77
+ # JETS_ENV_EXTRA=xxx created environments.
78
+ #
79
+ # We find and store the prefixes to keep so we don't over aggressively delete
80
+ # log groups.
81
+ def keep_prefixes(log_group_names)
82
+ names = log_group_names.reject do |name|
83
+ name =~ %r{/aws/lambda/#{prefix_guess}-jets}
84
+ end
85
+ log_prefixes(names)
86
+ end
87
+ memoize :keep_prefixes
88
+
89
+ # Strips -jets.* from the full log group name to leave only the prefix behind
90
+ def log_prefixes(names)
91
+ names = names.select do |name|
92
+ name.match(Regexp.new("#{prefix_guess}-.*jets"))
93
+ end
94
+ names.map do |name|
95
+ name.sub(/-jets.*/,'')
96
+ end.uniq.sort
97
+ end
98
+
99
+ # Check if it is safe to delete the log group
100
+ def keep_log_group?(log_group_name)
101
+ keep_prefixes = keep_prefixes(log_group_names)
102
+ !!keep_prefixes.detect do |keep_prefix|
103
+ log_group_name =~ Regexp.new(keep_prefix)
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,12 @@
1
+ class Jets::Commands::Console
2
+ def self.run
3
+ puts Jets::Booter.message
4
+
5
+ # Thanks: https://mutelight.org/bin-console
6
+ require "irb"
7
+ require "irb/completion"
8
+
9
+ ARGV.clear # https://stackoverflow.com/questions/33070092/irb-start-not-starting/33136762
10
+ IRB.start
11
+ end
12
+ end
@@ -0,0 +1,13 @@
1
+ module Jets::Commands
2
+ class Db < Jets::Commands::Base
3
+ desc "generate", "Creates a migration to change a db table"
4
+ long_desc Help.text('db:generate')
5
+ def generate(*args)
6
+ require "rails/generators"
7
+ require "rails/generators/active_record/migration/migration_generator"
8
+
9
+ generator = ActiveRecord::Generators::MigrationGenerator.new(args)
10
+ generator.create_migration_file
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ task :environment do
2
+ Jets.boot
3
+ end