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,35 @@
1
+ # When upgrading jets, automatically rm -rf /tmp/jets/project in case the structure has changed.
2
+ module Jets::Builders
3
+ class Purger
4
+ def initialize
5
+ @project_name = Jets.config.project_name
6
+ @version_file = "/tmp/jets/#{@project_name}/jets_version.txt"
7
+ end
8
+
9
+ def purge
10
+ if version_changed?
11
+ last_version = @last_version || "unknown"
12
+ puts "The jets version has changed enough since the last build to merit refreshing the build cache."
13
+ puts "Current jets version: #{Jets::VERSION} Last built jets version: #{last_version}"
14
+ puts "Removing /tmp/jets/#{@project_name} to start fresh."
15
+ FileUtils.rm_rf("/tmp/jets/#{@project_name}")
16
+ end
17
+ write_version
18
+ end
19
+
20
+ # When jets changes versions major or minor version consider it a big enough can to purge the cache
21
+ def version_changed?
22
+ return true unless File.exist?(@version_file)
23
+
24
+ @last_version = IO.read(@version_file).strip
25
+ last_major, last_minor, _ = @last_version.split('.')
26
+ current_major, current_minor, _ = Jets::VERSION.split('.')
27
+ last_major != current_major || last_minor != current_minor
28
+ end
29
+
30
+ def write_version
31
+ FileUtils.mkdir_p(File.dirname(@version_file))
32
+ IO.write(@version_file, Jets::VERSION)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,51 @@
1
+ module Jets::Builders
2
+ class RackPackager < RubyPackager
3
+ def finish
4
+ return unless gemfile_exist?
5
+
6
+ super
7
+
8
+ symlink_gems
9
+ copy_rackup_wrappers
10
+ rack_symlink
11
+ end
12
+
13
+ def symlink_gems
14
+ ruby_folder = Jets::Gems.ruby_folder
15
+ # IE: @full_app_root: /tmp/jets/demo/stage/code/rack
16
+ dest = "#{@full_app_root}/vendor/gems/ruby/#{ruby_folder}"
17
+ FileUtils.mkdir_p(File.dirname(dest))
18
+ FileUtils.ln_sf("/opt/ruby/gems/#{ruby_folder}", dest)
19
+ end
20
+
21
+ def copy_rackup_wrappers
22
+ # IE: @full_app_root: /tmp/jets/demo/stage/code/rack
23
+ rack_bin = "#{@full_app_root}/bin"
24
+ %w[rackup rackup.rb].each do |file|
25
+ src = File.expand_path("./rackup_wrappers/#{file}", File.dirname(__FILE__))
26
+ dest = "#{rack_bin}/#{file}"
27
+ FileUtils.mkdir_p(rack_bin) unless File.exist?(rack_bin)
28
+ FileUtils.cp(src, dest)
29
+ FileUtils.chmod 0755, dest
30
+ end
31
+ end
32
+
33
+ # Moves folder to a stage folder and create a symlink its place
34
+ # that links from /var/task to /tmp. Example:
35
+ #
36
+ # stage/code/rack => /tmp/rack
37
+ #
38
+ def rack_symlink
39
+ src = @full_app_root
40
+ return unless File.exist?(src)
41
+
42
+ dest = "#{stage_area}/rack"
43
+ dir = File.dirname(dest)
44
+ FileUtils.mkdir_p(dir) unless File.exist?(dir)
45
+ FileUtils.mv(src, dest)
46
+
47
+ # Create symlink
48
+ FileUtils.ln_sf("/tmp/rack", src)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,19 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ export JETS_MEGA=1
6
+
7
+ # Figure out where this script is located.
8
+ PROJECTDIR="`dirname \"$0\"`"
9
+ PROJECTDIR="`cd \"$PROJECTDIR/..\" && pwd`"
10
+
11
+ unset BUNDLE_IGNORE_CONFIG
12
+ # When jets packages the app code it creates .bundle/config in the project root.
13
+ # We want that to be used.
14
+
15
+ # Drop a pidfile
16
+ # echo $$ > /tmp/jets-rackup.pid
17
+
18
+ # Run the actual app using the bundled Ruby interpreter, with Bundler activated.
19
+ exec ruby -rbundler/setup bin/rackup.rb "$@"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Copied from: https://github.com/rack/rack/blob/master/bin/rackup
5
+
6
+ require "rack"
7
+ Rack::Server.start
@@ -0,0 +1,114 @@
1
+ # TODO: Move logic into plugin instead
2
+ module Jets::Builders
3
+ class ReconfigureRails
4
+ def initialize(full_app_root)
5
+ # IE: @app_root: /tmp/jets/demo/stage/code/rack
6
+ @app_root = full_app_root
7
+ end
8
+
9
+ # Only support Rails right now. Maybe move into plugin when adding support
10
+ # to more frameworks. Or maybe better to just abstract but maintain in Jets.
11
+ def run
12
+ return unless rails?
13
+
14
+ puts "Mega Mode: Reconfiguring Rails app."
15
+ copy_initializer
16
+ update_gemfile
17
+ update_development_environment
18
+ set_favicon
19
+ end
20
+
21
+ def copy_initializer
22
+ templates = File.expand_path("./reconfigure_rails", File.dirname(__FILE__))
23
+ relative_path = "config/initializers/jets.rb"
24
+ src = "#{templates}/#{relative_path}"
25
+ result = Jets::Erb.result(src, api_mode: rails_api?)
26
+ dest = "#{@app_root}/#{relative_path}"
27
+ FileUtils.mkdir_p(File.dirname(dest))
28
+ IO.write(dest, result)
29
+ end
30
+
31
+ def api_mode?
32
+ end
33
+
34
+ def update_gemfile
35
+ gemfile = "#{@app_root}/Gemfile"
36
+ lines = IO.readlines(gemfile)
37
+ lines = add_jets_rails_gem(lines)
38
+ lines = comment_out_ruby_declaration(lines)
39
+ write_content(gemfile, lines)
40
+ end
41
+
42
+ def add_jets_rails_gem(lines)
43
+ return lines if lines.detect { |l| l =~ /jets-rails/ }
44
+ lines << "\n"
45
+ lines << %Q|gem "jets-rails"\n|
46
+ lines
47
+ end
48
+
49
+ # Jets packages up and uses only one version of ruby and different declarations
50
+ # of ruby can cause issues.
51
+ def comment_out_ruby_declaration(lines)
52
+ lines.map do |l|
53
+ l =~ /^(ruby[ (].*)/ ? "# #{$1} # commented out by jets" : l
54
+ end
55
+ end
56
+
57
+ def update_development_environment
58
+ env_file = "#{@app_root}/config/environments/development.rb"
59
+ lines = IO.readlines(env_file)
60
+ new_lines = lines.map do |line|
61
+ if line =~ /(config\.file_watcher.*)/
62
+ " # #{$1} # commented out by jets\n"
63
+ else
64
+ line
65
+ end
66
+ end
67
+ write_content(env_file, new_lines)
68
+ end
69
+
70
+ # Evaluate the application layout and see if has a custom favicon defined yet.
71
+ # If not insert one and rewrite the application layout.
72
+ #
73
+ # This avoids serving binary assets from API gateway, instead serve it from s3 directly.
74
+ def set_favicon
75
+ app_layout = "#{@app_root}/app/views/layouts/application.html.erb"
76
+ return unless File.exist?(app_layout)
77
+
78
+ favicon = '<link rel="shortcut icon" href="<%= asset_path("/favicon.ico") %>">'
79
+
80
+ lines = IO.readlines(app_layout)
81
+ has_favicon = !!lines.find { |l| l.include?(favicon) }
82
+ return if has_favicon
83
+
84
+ content = IO.read(app_layout)
85
+ content = content.sub('</head>', "\n #{favicon}\n </head>")
86
+
87
+ IO.write(app_layout, content)
88
+ end
89
+
90
+ # lines is an Array
91
+ def write_content(path, lines)
92
+ content = lines.join + "\n"
93
+ IO.write(path, content)
94
+ end
95
+
96
+ # Rudimentary rails detection
97
+ # Duplicated in builders/code_builders.rb
98
+ def rails?
99
+ config_ru = "#{@app_root}/config.ru"
100
+ return false unless File.exist?(config_ru)
101
+ !IO.readlines(config_ru).grep(/Rails.application/).empty?
102
+ end
103
+
104
+ # Rudimentary rails api detection
105
+ # Duplicated in builders/code_builders.rb
106
+ # Another way of checking is loading a rails console and checking Rails.application.config.api_only
107
+ # Using this way for simplicity.
108
+ def rails_api?
109
+ config_app = "#{@app_root}/config/application.rb"
110
+ return false unless File.exist?(config_app)
111
+ !IO.readlines(config_app).grep(/config.api_only.*=.*true/).empty?
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,16 @@
1
+ JetsRails.stage = ENV['JETS_STAGE'] || 'dev' # for jets-rails StageMiddleware
2
+
3
+ # config/s3_base_url.txt is generated as part of jets build process
4
+ s3_base_url = IO.read("#{Rails.root}/config/s3_base_url.txt").strip rescue "s3_base_url_placeholder"
5
+ asset_host = "#{s3_base_url}/rack/public"
6
+ Rails.application.config.action_controller.asset_host = asset_host
7
+ Rails.application.config.public_file_server.enabled = true
8
+
9
+ <% unless @api_mode -%>
10
+ # Rails.application.config.assets.quiet = false
11
+ Rails.application.config.assets.debug = false
12
+ Rails.application.config.assets.compile = false
13
+ <% end -%>
14
+
15
+ # Looks better without colorizatiion in CloudWatch logs
16
+ Rails.application.config.colorize_logging = false
@@ -0,0 +1,207 @@
1
+ require "bundler" # for clean_old_submodules only
2
+
3
+ module Jets::Builders
4
+ class RubyPackager
5
+ include Util
6
+
7
+ attr_reader :full_app_root
8
+ def initialize(relative_app_root)
9
+ @full_app_root = "#{build_area}/#{relative_app_root}"
10
+ end
11
+
12
+ def install
13
+ return unless gemfile_exist?
14
+
15
+ reconfigure_ruby_version
16
+ clean_old_submodules
17
+ bundle_install
18
+ setup_bundle_config
19
+ copy_cache_gems
20
+ end
21
+
22
+ # build gems in vendor/gems/ruby/2.5.0 (done in install phase)
23
+ def finish
24
+ return unless gemfile_exist?
25
+ tidy
26
+ end
27
+
28
+ def gemfile_exist?
29
+ gemfile_path = "#{@full_app_root}/Gemfile"
30
+ File.exist?(gemfile_path)
31
+ end
32
+
33
+ # Installs gems on the current target system: both compiled and non-compiled.
34
+ # If user is on a macosx machine, macosx gems will be installed.
35
+ # If user is on a linux machine, linux gems will be installed.
36
+ #
37
+ # Copies Gemfile* to /tmp/jets/demo/cache folder and installs
38
+ # gems with bundle install from there.
39
+ #
40
+ # We take the time to copy Gemfile and bundle into a separate directory
41
+ # because it gets left around to act as a 'cache'. So, when the builds the
42
+ # project gets built again not all the gems from get installed from the
43
+ # beginning.
44
+ def bundle_install
45
+ full_project_path = @full_app_root
46
+ headline "Bundling: running bundle install in cache area: #{cache_area}."
47
+
48
+ copy_gemfiles(full_project_path)
49
+
50
+ # Uncomment out to always remove the cache/vendor/gems to debug
51
+ # FileUtils.rm_rf("#{cache_area}/vendor/gems")
52
+
53
+ require "bundler" # dynamically require bundler so user can use any bundler
54
+ Bundler.with_clean_env do
55
+ sh(
56
+ "cd #{cache_area} && " \
57
+ "env BUNDLE_IGNORE_CONFIG=1 bundle install --path #{cache_area}/vendor/gems --without development test"
58
+ )
59
+ end
60
+
61
+ remove_bundled_with("#{cache_area}/Gemfile.lock")
62
+
63
+ # Copy the Gemfile.lock back to the project in case it was updated.
64
+ # For example we add the jets-rails to the Gemfile.
65
+ copy_back_gemfile_lock
66
+
67
+ puts 'Bundle install success.'
68
+ end
69
+
70
+ def copy_back_gemfile_lock
71
+ src = "#{cache_area}/Gemfile.lock"
72
+ dest = "#{@full_app_root}/Gemfile.lock"
73
+ FileUtils.cp(src, dest)
74
+ end
75
+
76
+ # Clean up extra unneeded files to reduce package size
77
+ # Because we're removing files (something dangerous) use full paths.
78
+ def tidy
79
+ puts "Tidying project: removing ignored files to reduce package size."
80
+ tidy_project(@full_app_root)
81
+ # The rack sub project has it's own gitignore.
82
+ tidy_project(@full_app_root+"/rack")
83
+ end
84
+
85
+ def tidy_project(path)
86
+ Tidy.new(path).cleanup!
87
+ end
88
+
89
+ # This is in case the user has a 2.5.x variant.
90
+ # Force usage of ruby version that jets supports
91
+ # The lambda server only has ruby 2.5.0 installed.
92
+ def reconfigure_ruby_version
93
+ ruby_version = "#{@full_app_root}/.ruby-version"
94
+ IO.write(ruby_version, Jets::RUBY_VERSION)
95
+ end
96
+
97
+ # When using submodules, bundler leaves old submodules behind. Over time this inflates
98
+ # the size of the the cache gems. So we'll clean it up.
99
+ def clean_old_submodules
100
+ # https://stackoverflow.com/questions/38800129/parsing-a-gemfile-lock-with-bundler
101
+ lockfile = "#{cache_area}/Gemfile.lock"
102
+ return unless File.exist?(lockfile)
103
+
104
+ return if Bundler.bundler_major_version <= 1 # LockfileParser only works for Bundler version 2+
105
+
106
+ parser = Bundler::LockfileParser.new(Bundler.read_file(lockfile))
107
+ specs = parser.specs
108
+
109
+ # specs = Bundler.load.specs
110
+ # IE: spec.source.to_s: "https://github.com/tongueroo/webpacker.git (at jets@a8c4661)"
111
+ submoduled_specs = specs.select do |spec|
112
+ spec.source.to_s =~ /@\w+\)/
113
+ end
114
+
115
+ # find git shas to keep
116
+ # IE: ["a8c4661", "abc4661"]
117
+ git_shas = submoduled_specs.map do |spec|
118
+ md = spec.source.to_s.match(/@(\w+)\)/)
119
+ md[1] # git_sha
120
+ end
121
+
122
+ # IE: /tmp/jets/demo/cache/vendor/gems/ruby/2.5.0/bundler/gems/webpacker-a8c46614c675
123
+ Dir.glob("#{cache_area}/vendor/gems/ruby/2.5.0/bundler/gems/*").each do |path|
124
+ sha = path.split('-').last[0..6] # only first 7 chars of the git sha
125
+ unless git_shas.include?(sha)
126
+ # puts "Removing old submoduled gem: #{path}" # uncomment to see and debug
127
+ FileUtils.rm_rf(path) # REMOVE old submodule directory
128
+ end
129
+ end
130
+ end
131
+
132
+ def copy_gemfiles(full_project_path)
133
+ FileUtils.mkdir_p(cache_area)
134
+ FileUtils.cp("#{full_project_path}/Gemfile", "#{cache_area}/Gemfile")
135
+
136
+ gemfile_lock = "#{full_project_path}/Gemfile.lock"
137
+ dest = "#{cache_area}/Gemfile.lock"
138
+ return unless File.exist?(gemfile_lock)
139
+
140
+ FileUtils.cp(gemfile_lock, dest)
141
+ end
142
+
143
+ # Remove the BUNDLED WITH line since we don't control the bundler gem version on AWS Lambda
144
+ # And this can cause issues with require 'bundler/setup'
145
+ def remove_bundled_with(gemfile_lock)
146
+ lines = IO.readlines(gemfile_lock)
147
+
148
+ # amount is the number of lines to remove
149
+ new_lines, capture, count, amount = [], true, 0, 2
150
+ lines.each do |l|
151
+ capture = false if l.include?('BUNDLED WITH')
152
+ if capture
153
+ new_lines << l
154
+ end
155
+ if capture == false
156
+ count += 1
157
+ capture = count > amount # renable capture
158
+ end
159
+ end
160
+
161
+ content = new_lines.join('')
162
+ IO.write(gemfile_lock, content)
163
+ end
164
+
165
+ def setup_bundle_config
166
+ ensure_build_cache_bundle_config_exists!
167
+
168
+ # Override project's .bundle/config and ensure that .bundle/config matches
169
+ # at these 2 spots:
170
+ # app_root/.bundle/config
171
+ # vendor/gems/.bundle/config
172
+ cache_bundle_config = "#{cache_area}/.bundle/config"
173
+ app_bundle_config = "#{@full_app_root}/.bundle/config"
174
+ FileUtils.mkdir_p(File.dirname(app_bundle_config))
175
+ FileUtils.cp(cache_bundle_config, app_bundle_config)
176
+ end
177
+
178
+ # On circleci the "#{Jets.build_root}/.bundle/config" doesnt exist
179
+ # this only happens with ssh debugging, not when the ci.sh script gets ran.
180
+ # But on macosx it exists.
181
+ # Dont know why this is the case.
182
+ def ensure_build_cache_bundle_config_exists!
183
+ text =<<-EOL
184
+ ---
185
+ BUNDLE_FROZEN: "true"
186
+ BUNDLE_PATH: "vendor/gems"
187
+ BUNDLE_WITHOUT: "development:test"
188
+ EOL
189
+ bundle_config = "#{cache_area}/.bundle/config"
190
+ FileUtils.mkdir_p(File.dirname(bundle_config))
191
+ IO.write(bundle_config, text)
192
+ end
193
+
194
+ def copy_cache_gems
195
+ vendor_gems = "#{@full_app_root}/vendor/gems"
196
+ if File.exist?(vendor_gems)
197
+ puts "Removing current vendor_gems from project"
198
+ FileUtils.rm_rf(vendor_gems)
199
+ end
200
+ # Leave #{Jets.build_root}/vendor_gems behind to act as cache
201
+ if File.exist?("#{cache_area}/vendor/gems")
202
+ FileUtils.mkdir_p(File.dirname(vendor_gems))
203
+ Jets::Util.cp_r("#{cache_area}/vendor/gems", vendor_gems)
204
+ end
205
+ end
206
+ end
207
+ end