jets.benforeva 3.0.17.pre.mount.pre.fix

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 (459) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +92 -0
  3. data/.cody/README.md +13 -0
  4. data/.cody/docs/bin/build.sh +7 -0
  5. data/.cody/docs/bin/bundler_setup.sh +8 -0
  6. data/.cody/docs/bin/cli_docs.sh +6 -0
  7. data/.cody/docs/bin/git_commit.sh +27 -0
  8. data/.cody/docs/bin/git_setup.sh +12 -0
  9. data/.cody/docs/bin/subnav.sh +14 -0
  10. data/.cody/docs/buildspec.yml +10 -0
  11. data/.cody/docs/project.rb +10 -0
  12. data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
  13. data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
  14. data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
  15. data/.github/ISSUE_TEMPLATE/question.md +14 -0
  16. data/.github/ISSUE_TEMPLATE.md +7 -0
  17. data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
  18. data/.gitignore +24 -0
  19. data/.gitmodules +0 -0
  20. data/.python-version +1 -0
  21. data/.rspec +4 -0
  22. data/.ruby-gemset +1 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +1035 -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 +212 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +20 -0
  36. data/bin/release +9 -0
  37. data/exe/jets.benforeva +14 -0
  38. data/jets.benforeva.gemspec +71 -0
  39. data/lib/jets/application/defaults.rb +200 -0
  40. data/lib/jets/application.rb +240 -0
  41. data/lib/jets/authorizer/base.rb +36 -0
  42. data/lib/jets/authorizer/dsl.rb +69 -0
  43. data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
  44. data/lib/jets/autoloaders.rb +112 -0
  45. data/lib/jets/aws_info.rb +111 -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 +64 -0
  49. data/lib/jets/aws_services.rb +95 -0
  50. data/lib/jets/booter.rb +167 -0
  51. data/lib/jets/builders/code_builder.rb +410 -0
  52. data/lib/jets/builders/code_size.rb +57 -0
  53. data/lib/jets/builders/gem_replacer.rb +89 -0
  54. data/lib/jets/builders/handler_generator.rb +186 -0
  55. data/lib/jets/builders/lambda_layer.rb +68 -0
  56. data/lib/jets/builders/md5.rb +60 -0
  57. data/lib/jets/builders/md5_zip.rb +61 -0
  58. data/lib/jets/builders/purger.rb +35 -0
  59. data/lib/jets/builders/rack_packager.rb +51 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  61. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  64. data/lib/jets/builders/ruby_packager.rb +235 -0
  65. data/lib/jets/builders/shim_vars/app.rb +78 -0
  66. data/lib/jets/builders/shim_vars/base.rb +25 -0
  67. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  68. data/lib/jets/builders/templates/handler.rb +12 -0
  69. data/lib/jets/builders/tidy.rb +107 -0
  70. data/lib/jets/builders/util.rb +31 -0
  71. data/lib/jets/bundle.rb +88 -0
  72. data/lib/jets/camelizer.rb +4 -0
  73. data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
  74. data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
  75. data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
  76. data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
  77. data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
  78. data/lib/jets/cfn/builders/controller_builder.rb +50 -0
  79. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  80. data/lib/jets/cfn/builders/interface.rb +133 -0
  81. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  82. data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
  83. data/lib/jets/cfn/builders/parent_builder.rb +130 -0
  84. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  85. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  86. data/lib/jets/cfn/builders/util/source.rb +21 -0
  87. data/lib/jets/cfn/built_template.rb +15 -0
  88. data/lib/jets/cfn/ship.rb +188 -0
  89. data/lib/jets/cfn/status.rb +10 -0
  90. data/lib/jets/cfn/template_source.rb +61 -0
  91. data/lib/jets/cfn/upload.rb +157 -0
  92. data/lib/jets/cli.rb +208 -0
  93. data/lib/jets/commands/base.rb +145 -0
  94. data/lib/jets/commands/build.rb +252 -0
  95. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  96. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  97. data/lib/jets/commands/call/base_guesser.rb +62 -0
  98. data/lib/jets/commands/call/guesser.rb +48 -0
  99. data/lib/jets/commands/call.rb +182 -0
  100. data/lib/jets/commands/clean/base.rb +24 -0
  101. data/lib/jets/commands/clean/build.rb +13 -0
  102. data/lib/jets/commands/clean/log.rb +111 -0
  103. data/lib/jets/commands/clean.rb +19 -0
  104. data/lib/jets/commands/configure.rb +51 -0
  105. data/lib/jets/commands/console.rb +12 -0
  106. data/lib/jets/commands/db/environment-task.rake +3 -0
  107. data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
  108. data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
  109. data/lib/jets/commands/db/tasks.rb +34 -0
  110. data/lib/jets/commands/db.rb +13 -0
  111. data/lib/jets/commands/dbconsole.rb +134 -0
  112. data/lib/jets/commands/delete.rb +136 -0
  113. data/lib/jets/commands/deploy.rb +137 -0
  114. data/lib/jets/commands/dotenv.rb +9 -0
  115. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  116. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  117. data/lib/jets/commands/dynamodb.rb +19 -0
  118. data/lib/jets/commands/gems.rb +13 -0
  119. data/lib/jets/commands/help/build.md +6 -0
  120. data/lib/jets/commands/help/call.md +69 -0
  121. data/lib/jets/commands/help/clean/build.md +5 -0
  122. data/lib/jets/commands/help/clean/log.md +5 -0
  123. data/lib/jets/commands/help/console.md +18 -0
  124. data/lib/jets/commands/help/db/generate.md +8 -0
  125. data/lib/jets/commands/help/dbconsole.md +9 -0
  126. data/lib/jets/commands/help/degenerate.md +16 -0
  127. data/lib/jets/commands/help/delete.md +22 -0
  128. data/lib/jets/commands/help/deploy.md +32 -0
  129. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  130. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  131. data/lib/jets/commands/help/gems/check.md +6 -0
  132. data/lib/jets/commands/help/generate.md +28 -0
  133. data/lib/jets/commands/help/import/rack.md +13 -0
  134. data/lib/jets/commands/help/import/rails.md +11 -0
  135. data/lib/jets/commands/help/new.md +42 -0
  136. data/lib/jets/commands/help/routes.md +16 -0
  137. data/lib/jets/commands/help/runner.md +17 -0
  138. data/lib/jets/commands/help/server.md +15 -0
  139. data/lib/jets/commands/help/status.md +14 -0
  140. data/lib/jets/commands/help/upgrade.md +7 -0
  141. data/lib/jets/commands/help/url.md +6 -0
  142. data/lib/jets/commands/help.rb +9 -0
  143. data/lib/jets/commands/import/base.rb +49 -0
  144. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  145. data/lib/jets/commands/import/rack.rb +16 -0
  146. data/lib/jets/commands/import/rails.rb +74 -0
  147. data/lib/jets/commands/import/sequence.rb +90 -0
  148. data/lib/jets/commands/import/templates/config/database.yml +30 -0
  149. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  150. data/lib/jets/commands/import.rb +12 -0
  151. data/lib/jets/commands/main.rb +166 -0
  152. data/lib/jets/commands/markdown/creator.rb +58 -0
  153. data/lib/jets/commands/markdown/index.rb +27 -0
  154. data/lib/jets/commands/markdown/page.rb +125 -0
  155. data/lib/jets/commands/markdown/shell.rb +11 -0
  156. data/lib/jets/commands/new.rb +173 -0
  157. data/lib/jets/commands/rake_command.rb +61 -0
  158. data/lib/jets/commands/rake_tasks.rb +50 -0
  159. data/lib/jets/commands/runner.rb +16 -0
  160. data/lib/jets/commands/sequence.rb +105 -0
  161. data/lib/jets/commands/stack_info.rb +30 -0
  162. data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
  163. data/lib/jets/commands/templates/skeleton/.env.test +3 -0
  164. data/lib/jets/commands/templates/skeleton/.env.tt +3 -0
  165. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  166. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  167. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  168. data/lib/jets/commands/templates/skeleton/Gemfile.tt +39 -0
  169. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  170. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  171. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  172. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  173. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  174. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  175. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  176. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  177. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +26 -0
  178. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
  179. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
  180. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  181. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  182. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  183. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  184. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  185. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  186. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  187. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  188. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  189. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  190. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  191. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  192. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  193. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  194. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  195. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  196. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +23 -0
  197. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  198. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  199. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  200. data/lib/jets/commands/upgrade/version1.rb +136 -0
  201. data/lib/jets/commands/upgrade.rb +105 -0
  202. data/lib/jets/commands/url.rb +69 -0
  203. data/lib/jets/commands/webpacker_template.rb +18 -0
  204. data/lib/jets/controller/authorization.rb +91 -0
  205. data/lib/jets/controller/base.rb +175 -0
  206. data/lib/jets/controller/callbacks.rb +73 -0
  207. data/lib/jets/controller/cookies/jar.rb +269 -0
  208. data/lib/jets/controller/cookies.rb +38 -0
  209. data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
  210. data/lib/jets/controller/error.rb +4 -0
  211. data/lib/jets/controller/forgery_protection.rb +43 -0
  212. data/lib/jets/controller/layout.rb +17 -0
  213. data/lib/jets/controller/middleware/cors.rb +60 -0
  214. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  215. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  216. data/lib/jets/controller/middleware/local/route_matcher.rb +22 -0
  217. data/lib/jets/controller/middleware/local.rb +120 -0
  218. data/lib/jets/controller/middleware/main.rb +53 -0
  219. data/lib/jets/controller/middleware/reloader.rb +15 -0
  220. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  221. data/lib/jets/controller/parameters_filter.rb +29 -0
  222. data/lib/jets/controller/params.rb +117 -0
  223. data/lib/jets/controller/rack/adapter.rb +94 -0
  224. data/lib/jets/controller/rack/env.rb +122 -0
  225. data/lib/jets/controller/redirection.rb +51 -0
  226. data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
  227. data/lib/jets/controller/rendering.rb +96 -0
  228. data/lib/jets/controller/request.rb +29 -0
  229. data/lib/jets/controller/response.rb +61 -0
  230. data/lib/jets/controller/stage.rb +34 -0
  231. data/lib/jets/controller.rb +3 -0
  232. data/lib/jets/core.rb +157 -0
  233. data/lib/jets/core_ext/bundler.rb +7 -0
  234. data/lib/jets/core_ext/kernel.rb +13 -0
  235. data/lib/jets/db.rb +15 -0
  236. data/lib/jets/dotenv/show.rb +11 -0
  237. data/lib/jets/dotenv/ssm.rb +64 -0
  238. data/lib/jets/dotenv.rb +48 -0
  239. data/lib/jets/erb.rb +51 -0
  240. data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
  241. data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
  242. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  243. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -0
  244. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  245. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  246. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  247. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  248. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  249. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  250. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  251. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  252. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  253. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  254. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  255. data/lib/jets/generator.rb +112 -0
  256. data/lib/jets/inflections.rb +32 -0
  257. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
  258. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  259. data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
  260. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  261. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
  262. data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
  263. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -0
  264. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  265. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  266. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +33 -0
  267. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  268. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  269. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  270. data/lib/jets/internal/turbines/jets/mailer.rb +52 -0
  271. data/lib/jets/job/base.rb +49 -0
  272. data/lib/jets/job/dsl/dynamodb_event.rb +67 -0
  273. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  274. data/lib/jets/job/dsl/iot_event.rb +24 -0
  275. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  276. data/lib/jets/job/dsl/log_event.rb +15 -0
  277. data/lib/jets/job/dsl/rule_event.rb +75 -0
  278. data/lib/jets/job/dsl/s3_event.rb +36 -0
  279. data/lib/jets/job/dsl/sns_event.rb +54 -0
  280. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  281. data/lib/jets/job/dsl.rb +40 -0
  282. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  283. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  284. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  285. data/lib/jets/klass.rb +109 -0
  286. data/lib/jets/lambda/dsl.rb +404 -0
  287. data/lib/jets/lambda/function.rb +29 -0
  288. data/lib/jets/lambda/function_constructor.rb +55 -0
  289. data/lib/jets/lambda/functions.rb +39 -0
  290. data/lib/jets/lambda/task.rb +111 -0
  291. data/lib/jets/logger.rb +21 -0
  292. data/lib/jets/mega/hash_converter.rb +25 -0
  293. data/lib/jets/mega/request/source.rb +21 -0
  294. data/lib/jets/mega/request.rb +163 -0
  295. data/lib/jets/middleware/configurator.rb +84 -0
  296. data/lib/jets/middleware/default_stack.rb +53 -0
  297. data/lib/jets/middleware/layer.rb +34 -0
  298. data/lib/jets/middleware/stack.rb +77 -0
  299. data/lib/jets/middleware.rb +33 -0
  300. data/lib/jets/naming.rb +63 -0
  301. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  302. data/lib/jets/overrides/lambda.rb +1 -0
  303. data/lib/jets/overrides/rails/action_controller.rb +13 -0
  304. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  305. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  306. data/lib/jets/overrides/rails/migration_checker.rb +34 -0
  307. data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
  308. data/lib/jets/overrides/rails/url_helper.rb +88 -0
  309. data/lib/jets/overrides/rails.rb +6 -0
  310. data/lib/jets/poly_fun/base_executor.rb +125 -0
  311. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  312. data/lib/jets/poly_fun/node_error.rb +8 -0
  313. data/lib/jets/poly_fun/node_executor.rb +54 -0
  314. data/lib/jets/poly_fun/python_error.rb +8 -0
  315. data/lib/jets/poly_fun/python_executor.rb +23 -0
  316. data/lib/jets/poly_fun.rb +73 -0
  317. data/lib/jets/preheat.rb +117 -0
  318. data/lib/jets/processors/deducer.rb +65 -0
  319. data/lib/jets/processors/main_processor.rb +61 -0
  320. data/lib/jets/rack_server.rb +86 -0
  321. data/lib/jets/rdoc.rb +30 -0
  322. data/lib/jets/resource/api_gateway/authorizer.rb +82 -0
  323. data/lib/jets/resource/api_gateway/base_path/function.rb +49 -0
  324. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  325. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  326. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  327. data/lib/jets/resource/api_gateway/deployment.rb +80 -0
  328. data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
  329. data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
  330. data/lib/jets/resource/api_gateway/method.rb +102 -0
  331. data/lib/jets/resource/api_gateway/resource.rb +82 -0
  332. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
  333. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  334. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
  335. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
  336. data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
  337. data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
  338. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
  339. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
  340. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
  341. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  342. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  343. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  344. data/lib/jets/resource/api_gateway/rest_api.rb +64 -0
  345. data/lib/jets/resource/associated.rb +37 -0
  346. data/lib/jets/resource/base.rb +28 -0
  347. data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
  348. data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
  349. data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
  350. data/lib/jets/resource/child_stack/api_resource.rb +54 -0
  351. data/lib/jets/resource/child_stack/app_class.rb +149 -0
  352. data/lib/jets/resource/child_stack/authorizer.rb +40 -0
  353. data/lib/jets/resource/child_stack/base.rb +24 -0
  354. data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
  355. data/lib/jets/resource/child_stack/shared.rb +85 -0
  356. data/lib/jets/resource/config/config_rule.rb +74 -0
  357. data/lib/jets/resource/config/managed_rule.rb +15 -0
  358. data/lib/jets/resource/events/rule.rb +31 -0
  359. data/lib/jets/resource/iam/application_role.rb +27 -0
  360. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  361. data/lib/jets/resource/iam/class_role.rb +74 -0
  362. data/lib/jets/resource/iam/function_role.rb +54 -0
  363. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  364. data/lib/jets/resource/iam/policy_document.rb +41 -0
  365. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  366. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  367. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  368. data/lib/jets/resource/lambda/function.rb +221 -0
  369. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  370. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  371. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  372. data/lib/jets/resource/permission.rb +45 -0
  373. data/lib/jets/resource/replacer.rb +85 -0
  374. data/lib/jets/resource/route53/record_set.rb +98 -0
  375. data/lib/jets/resource/s3/bucket.rb +24 -0
  376. data/lib/jets/resource/sns/subscription.rb +29 -0
  377. data/lib/jets/resource/sns/topic.rb +35 -0
  378. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  379. data/lib/jets/resource/sqs/queue.rb +21 -0
  380. data/lib/jets/resource/standardizer.rb +42 -0
  381. data/lib/jets/resource.rb +71 -0
  382. data/lib/jets/router/dsl/mount.rb +13 -0
  383. data/lib/jets/router/dsl.rb +144 -0
  384. data/lib/jets/router/error.rb +4 -0
  385. data/lib/jets/router/finder.rb +47 -0
  386. data/lib/jets/router/helpers/core_helper.rb +27 -0
  387. data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
  388. data/lib/jets/router/helpers.rb +4 -0
  389. data/lib/jets/router/matcher.rb +81 -0
  390. data/lib/jets/router/method_creator/code.rb +99 -0
  391. data/lib/jets/router/method_creator/edit.rb +12 -0
  392. data/lib/jets/router/method_creator/generic.rb +11 -0
  393. data/lib/jets/router/method_creator/index.rb +48 -0
  394. data/lib/jets/router/method_creator/new.rb +12 -0
  395. data/lib/jets/router/method_creator/root.rb +15 -0
  396. data/lib/jets/router/method_creator/show.rb +12 -0
  397. data/lib/jets/router/method_creator.rb +50 -0
  398. data/lib/jets/router/resources/base.rb +7 -0
  399. data/lib/jets/router/resources/filter.rb +15 -0
  400. data/lib/jets/router/resources/options.rb +13 -0
  401. data/lib/jets/router/route/authorizer.rb +57 -0
  402. data/lib/jets/router/route.rb +230 -0
  403. data/lib/jets/router/scope.rb +95 -0
  404. data/lib/jets/router/util.rb +38 -0
  405. data/lib/jets/router.rb +180 -0
  406. data/lib/jets/rule/base.rb +19 -0
  407. data/lib/jets/rule/dsl.rb +109 -0
  408. data/lib/jets/spec_helpers/controllers/params.rb +8 -0
  409. data/lib/jets/spec_helpers/controllers/request.rb +101 -0
  410. data/lib/jets/spec_helpers/controllers/response.rb +10 -0
  411. data/lib/jets/spec_helpers/controllers.rb +47 -0
  412. data/lib/jets/spec_helpers/fixtures.rb +11 -0
  413. data/lib/jets/spec_helpers.rb +21 -0
  414. data/lib/jets/stack/builder.rb +43 -0
  415. data/lib/jets/stack/definition.rb +50 -0
  416. data/lib/jets/stack/depends/item.rb +26 -0
  417. data/lib/jets/stack/depends.rb +34 -0
  418. data/lib/jets/stack/function.rb +69 -0
  419. data/lib/jets/stack/main/dsl/base.rb +63 -0
  420. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  421. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  422. data/lib/jets/stack/main/dsl/kinesis.rb +15 -0
  423. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  424. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  425. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  426. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  427. data/lib/jets/stack/main/dsl.rb +17 -0
  428. data/lib/jets/stack/main.rb +4 -0
  429. data/lib/jets/stack/output/dsl.rb +19 -0
  430. data/lib/jets/stack/output/lookup.rb +36 -0
  431. data/lib/jets/stack/output.rb +35 -0
  432. data/lib/jets/stack/parameter/dsl.rb +42 -0
  433. data/lib/jets/stack/parameter.rb +37 -0
  434. data/lib/jets/stack/resource/dsl.rb +19 -0
  435. data/lib/jets/stack/resource.rb +31 -0
  436. data/lib/jets/stack/s3_event.rb +87 -0
  437. data/lib/jets/stack.rb +88 -0
  438. data/lib/jets/tmp_loader.rb +53 -0
  439. data/lib/jets/turbine.rb +41 -0
  440. data/lib/jets/turbo/database_yaml.rb +41 -0
  441. data/lib/jets/turbo/project/.gitignore +12 -0
  442. data/lib/jets/turbo/project/.jetskeep +1 -0
  443. data/lib/jets/turbo/project/Gemfile +16 -0
  444. data/lib/jets/turbo/project/Rakefile +2 -0
  445. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  446. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  447. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  448. data/lib/jets/turbo/project/config/application.rb +5 -0
  449. data/lib/jets/turbo/project/config/routes.rb +4 -0
  450. data/lib/jets/turbo/project/config.ru +5 -0
  451. data/lib/jets/turbo/rails.rb +127 -0
  452. data/lib/jets/turbo/templates/config/database.yml +30 -0
  453. data/lib/jets/turbo.rb +56 -0
  454. data/lib/jets/util.rb +40 -0
  455. data/lib/jets/version.rb +3 -0
  456. data/lib/jets.rb +31 -0
  457. data/readme/prerelease.md +6 -0
  458. data/readme/testing.md +60 -0
  459. metadata +1105 -0
@@ -0,0 +1,235 @@
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
+ clean_old_submodules
16
+ bundle_install
17
+ copy_bundle_config
18
+ copy_cache_gems
19
+ end
20
+
21
+ # build gems in vendor/gems/ruby/2.5.0 (done in install phase)
22
+ def finish
23
+ return unless gemfile_exist?
24
+ tidy
25
+ end
26
+
27
+ def gemfile_exist?
28
+ gemfile_path = "#{@full_app_root}/Gemfile"
29
+ File.exist?(gemfile_path)
30
+ end
31
+
32
+ # Installs gems on the current target system: both compiled and non-compiled.
33
+ # If user is on a macosx machine, macosx gems will be installed.
34
+ # If user is on a linux machine, linux gems will be installed.
35
+ #
36
+ # Copies Gemfile* to /tmp/jets/demo/cache folder and installs
37
+ # gems with bundle install from there.
38
+ #
39
+ # We take the time to copy Gemfile and bundle into a separate directory
40
+ # because it gets left around to act as a 'cache'. So, when the builds the
41
+ # project gets built again not all the gems from get installed from the
42
+ # beginning.
43
+ def bundle_install
44
+ full_project_path = @full_app_root
45
+ headline "Bundling: running bundle install in cache area: #{cache_area}."
46
+
47
+ copy_gemfiles(full_project_path)
48
+ copy_bundled_gems(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
+ # Remove .bundle folder so .bundle/config doesnt affect how Jets packages gems.
54
+ # Not using BUNDLE_IGNORE_CONFIG=1 to allow home ~/.bundle/config to affect bundling though.
55
+ # This is useful if you have private gems sources that require authentication. Example:
56
+ #
57
+ # bundle config gems.myprivatesource.com user:pass
58
+ #
59
+
60
+ create_bundle_config
61
+ require "bundler" # dynamically require bundler so user can use any bundler
62
+ Bundler.with_unbundled_env do
63
+ sh(
64
+ "cd #{cache_area} && " \
65
+ "env bundle install"
66
+ )
67
+ end
68
+ create_bundle_config(frozen: true)
69
+
70
+ rewrite_gemfile_lock("#{cache_area}/Gemfile.lock")
71
+
72
+ # Copy the Gemfile.lock back to the project in case it was updated.
73
+ # For example we add the jets-rails to the Gemfile.
74
+ copy_back_gemfile_lock
75
+
76
+ puts 'Bundle install success.'
77
+ end
78
+
79
+ def copy_back_gemfile_lock
80
+ src = "#{cache_area}/Gemfile.lock"
81
+ dest = "#{@full_app_root}/Gemfile.lock"
82
+ FileUtils.cp(src, dest)
83
+ end
84
+
85
+ # Clean up extra unneeded files to reduce package size
86
+ # Because we're removing files (something dangerous) use full paths.
87
+ def tidy
88
+ puts "Tidying project: removing ignored files to reduce package size."
89
+ tidy_project(@full_app_root)
90
+ # The rack sub project has it's own gitignore.
91
+ tidy_project(@full_app_root+"/rack")
92
+ end
93
+
94
+ def tidy_project(path)
95
+ Tidy.new(path).cleanup!
96
+ end
97
+
98
+ # When using submodules, bundler leaves old submodules behind. Over time this inflates
99
+ # the size of the the cache gems. So we'll clean it up.
100
+ def clean_old_submodules
101
+ # https://stackoverflow.com/questions/38800129/parsing-a-gemfile-lock-with-bundler
102
+ lockfile = "#{cache_area}/Gemfile.lock"
103
+ return unless File.exist?(lockfile)
104
+
105
+ return if Bundler.bundler_major_version <= 1 # LockfileParser only works for Bundler version 2+
106
+
107
+ parser = Bundler::LockfileParser.new(Bundler.read_file(lockfile))
108
+ specs = parser.specs
109
+
110
+ # specs = Bundler.load.specs
111
+ # IE: spec.source.to_s: "https://github.com/tongueroo/webpacker.git (at jets@a8c4661)"
112
+ submoduled_specs = specs.select do |spec|
113
+ spec.source.to_s =~ /@\w+\)/
114
+ end
115
+
116
+ # find git shas to keep
117
+ # IE: ["a8c4661", "abc4661"]
118
+ git_shas = submoduled_specs.map do |spec|
119
+ md = spec.source.to_s.match(/@(\w+)\)/)
120
+ md[1] # git_sha
121
+ end
122
+
123
+ # IE: /tmp/jets/demo/cache/vendor/gems/ruby/2.5.0/bundler/gems/webpacker-a8c46614c675
124
+ Dir.glob("#{cache_area}/vendor/gems/ruby/2.5.0/bundler/gems/*").each do |path|
125
+ sha = path.split('-').last[0..6] # only first 7 chars of the git sha
126
+ unless git_shas.include?(sha)
127
+ # puts "Removing old submoduled gem: #{path}" # uncomment to see and debug
128
+ FileUtils.rm_rf(path) # REMOVE old submodule directory
129
+ end
130
+ end
131
+ end
132
+
133
+ def copy_bundled_gems(full_project_path)
134
+ src = "#{full_project_path}/bundled_gems"
135
+ return unless File.exist?(src)
136
+ Jets::Util.cp_r(src, "#{cache_area}/bundled_gems")
137
+ end
138
+
139
+ def copy_gemfiles(full_project_path)
140
+ FileUtils.mkdir_p(cache_area)
141
+ FileUtils.cp("#{full_project_path}/Gemfile", "#{cache_area}/Gemfile")
142
+
143
+ gemfile_lock = "#{full_project_path}/Gemfile.lock"
144
+ dest = "#{cache_area}/Gemfile.lock"
145
+ return unless File.exist?(gemfile_lock)
146
+
147
+ FileUtils.cp(gemfile_lock, dest)
148
+ end
149
+
150
+ # Remove the BUNDLED WITH line since we don't control the bundler gem version on AWS Lambda
151
+ # And this can cause issues with require 'bundler/setup'
152
+ def rewrite_gemfile_lock(gemfile_lock)
153
+ lines = IO.readlines(gemfile_lock)
154
+
155
+ # Remove BUNDLED WITH
156
+ # amount is the number of lines to remove
157
+ new_lines, capture, count, amount = [], true, 0, 2
158
+ lines.each do |l|
159
+ capture = false if l.include?('BUNDLED WITH')
160
+ if capture
161
+ new_lines << l
162
+ end
163
+ if capture == false
164
+ count += 1
165
+ capture = count > amount # renable capture
166
+ end
167
+ end
168
+
169
+ # Replace things like nokogiri (1.11.1-x86_64-darwin) => nokogiri (1.11.1)
170
+ lines, new_lines = new_lines, []
171
+ lines.each do |l|
172
+ if l.include?("-x86_64-darwin")
173
+ l = l.sub('-x86_64-darwin','')
174
+ end
175
+ new_lines << l
176
+ end
177
+
178
+ # Make sure platform is ruby
179
+ lines, new_lines, marker = new_lines, [], false
180
+ lines.each do |l|
181
+ if marker # the next loop has the platform we want to replace
182
+ new_lines << " ruby\n"
183
+ marker = false
184
+ next
185
+ end
186
+ marker = l.include?('PLATFORMS')
187
+ new_lines << l
188
+ end
189
+
190
+ content = new_lines.join('')
191
+ IO.write(gemfile_lock, content)
192
+ end
193
+
194
+ def copy_bundle_config
195
+ # Override project's .bundle/config and ensure that .bundle/config matches
196
+ # at these 2 spots:
197
+ # app_root/.bundle/config
198
+ # vendor/gems/.bundle/config
199
+ cache_bundle_config = "#{cache_area}/.bundle/config"
200
+ app_bundle_config = "#{@full_app_root}/.bundle/config"
201
+ FileUtils.mkdir_p(File.dirname(app_bundle_config))
202
+ FileUtils.cp(cache_bundle_config, app_bundle_config)
203
+ end
204
+
205
+ # On circleci the "#{Jets.build_root}/.bundle/config" doesnt exist
206
+ # this only happens with ssh debugging, not when the ci.sh script gets ran.
207
+ # But on macosx it exists.
208
+ # Dont know why this is the case.
209
+ def create_bundle_config(frozen: false)
210
+ FileUtils.rm_rf("#{cache_area}/.bundle")
211
+ frozen_line = %Q|BUNDLE_FROZEN: "true"\n| if frozen
212
+ text =<<-EOL
213
+ ---
214
+ #{frozen_line}BUNDLE_PATH: "vendor/gems"
215
+ BUNDLE_WITHOUT: "development:test"
216
+ EOL
217
+ bundle_config = "#{cache_area}/.bundle/config"
218
+ FileUtils.mkdir_p(File.dirname(bundle_config))
219
+ IO.write(bundle_config, text)
220
+ end
221
+
222
+ def copy_cache_gems
223
+ vendor_gems = "#{@full_app_root}/vendor/gems"
224
+ if File.exist?(vendor_gems)
225
+ puts "Removing current vendor_gems from project"
226
+ FileUtils.rm_rf(vendor_gems)
227
+ end
228
+ # Leave #{Jets.build_root}/vendor_gems behind to act as cache
229
+ if File.exist?("#{cache_area}/vendor/gems")
230
+ FileUtils.mkdir_p(File.dirname(vendor_gems))
231
+ Jets::Util.cp_r("#{cache_area}/vendor/gems", vendor_gems)
232
+ end
233
+ end
234
+ end
235
+ end
@@ -0,0 +1,78 @@
1
+ # Jets::Builders::ShimVars::Shared.new(path)
2
+ #
3
+ # @vars.functions.each do |function_name|
4
+ # @vars.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class App < Base
15
+ # Allow user to specify relative or full path. The right path gets used
16
+ # internally. Example paths:
17
+ # app/controllers/posts_controller.rb
18
+ # app/jobs/hard_job.rb
19
+ # /tmp/jets/build/app_root/app/jobs/hard_job.rb
20
+ # /tmp/jets/build/app_root/app/functions/hello.rb
21
+ def initialize(path)
22
+ @full_path = full(path)
23
+ @relative_path = relative(path)
24
+ end
25
+
26
+ def full(path)
27
+ path = "#{Jets.root}/#{path}" unless path.starts_with?("/")
28
+ path
29
+ end
30
+
31
+ def relative(path)
32
+ full_path = full(path)
33
+ full_path.sub("#{Jets.root}/", "")
34
+ .sub(/.*internal\/app/, "app")
35
+
36
+ end
37
+
38
+ # process_type is key, it will either "controller" or "job".
39
+ # It is used to deduce klass, etc.
40
+ # We get the process_type from the path.
41
+ # Example paths:
42
+ # app/controllers/posts_controller.rb
43
+ # app/jobs/hard_job.rb
44
+ def process_type
45
+ @relative_path.split('/')[1].singularize # controller or job
46
+ end
47
+
48
+ # Returns the public methods of the child_class.
49
+ # Example: [:create, :update]
50
+ def functions
51
+ klass.lambda_functions
52
+ end
53
+
54
+ # Examples: PostsController, HardJob, Hello, HelloFunction
55
+ def klass
56
+ @klass ||= Jets::Klass.from_path(@relative_path)
57
+ end
58
+
59
+ def lang(meth)
60
+ klass.tasks.find
61
+ end
62
+
63
+ # This gets called in the node shim js template
64
+ # IE handlers/controllers/posts_controller.index
65
+ def handler_for(meth)
66
+ # possibly not include _function
67
+ underscored_name = @relative_path.sub(%r{app/(\w+)/},'').sub('.rb','')
68
+ "handlers/#{process_type.pluralize}/#{underscored_name}.#{meth}"
69
+ end
70
+
71
+ # Example return: "handlers/controllers/posts.js"
72
+ # TODO: rename this to dest_path or something better now since using native ruby
73
+ def dest_path
74
+ @relative_path
75
+ .sub("app", "handlers")
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,25 @@
1
+ module Jets::Builders::ShimVars
2
+ class Base
3
+ include Jets::AwsServices
4
+ extend Memoist
5
+
6
+ def s3_bucket
7
+ Jets.aws.s3_bucket
8
+ end
9
+
10
+ def rack_zip
11
+ checksum_zip(:rack)
12
+ end
13
+
14
+ def bundled_zip
15
+ checksum_zip(:bundled)
16
+ end
17
+
18
+ private
19
+ def checksum_zip(name)
20
+ checksum = Jets::Builders::Md5.checksums["stage/#{name}"]
21
+ return unless checksum
22
+ "#{name}-#{checksum}.zip"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ # Jets::Builders::ShimVars::Shared.new(fun)
2
+ #
3
+ # @deducer.functions.each do |function_name|
4
+ # @deducer.handler_for(function_name)
5
+ # end
6
+ #
7
+ # Implements:
8
+ #
9
+ # functions: IE [:index, :show]
10
+ # handler_for(function_name): IE handlers/controllers/posts_controller.index
11
+ # dest_path: IE: handlers/controllers/posts_controller.js
12
+ #
13
+ module Jets::Builders::ShimVars
14
+ class Shared < Base
15
+ # fun is a Jets::Stack::Function
16
+ def initialize(fun)
17
+ @fun = fun
18
+ end
19
+
20
+ # Always only one element for shared functions
21
+ # functions: IE [:handle]
22
+ def functions
23
+ [@fun.meth] # function_names
24
+ end
25
+
26
+ # Dont need function_name arg but keeping the same interface as parent class
27
+ # IE handlers/shared/functions/bob.handle
28
+ def handler_for(function_name)
29
+ @fun.handler_dest
30
+ end
31
+
32
+ # IE handlers/shared/functions/bob.js
33
+ def dest_path
34
+ @fun.handler_dest
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,12 @@
1
+ require "bundler/setup"
2
+ require "jets"
3
+ Jets.once # runs once in lambda execution context
4
+
5
+ <% @vars.functions.each do |function_name|
6
+ handler = @vars.handler_for(function_name)
7
+ meth = handler.split('.').last
8
+ -%>
9
+ def <%= meth -%>(event:, context:)
10
+ Jets.process(event, context, "<%= handler -%>")
11
+ end
12
+ <% end %>
@@ -0,0 +1,107 @@
1
+ module Jets::Builders
2
+ class Tidy
3
+ include Util
4
+
5
+ def initialize(project_root, noop: false)
6
+ @project_root = project_root
7
+ @noop = noop
8
+ end
9
+
10
+ def cleanup!
11
+ removals.each do |removal|
12
+ removal = removal.sub(%r{^/},'') # remove leading slash
13
+ path = "#{@project_root}/#{removal}"
14
+ rm_rf(path)
15
+ end
16
+
17
+ clean_vendor_gems
18
+ clean_webpack_assets
19
+ end
20
+
21
+ # Clean out unnecessary src and compiled packs because Jets serves them out of s3.
22
+ # This keeps the code size down to help keep it in size limit so we can use the
23
+ # live Lambda console editor.
24
+ def clean_webpack_assets
25
+ FileUtils.rm_rf("#{@project_root}/app/javascript/src")
26
+
27
+ return unless File.exist?("#{@project_root}/public/packs") # this class works for rack subfolder too
28
+ FileUtils.mv("#{@project_root}/public/packs/manifest.json", "#{stage_area}/manifest.json")
29
+ FileUtils.rm_rf("#{@project_root}/public/packs")
30
+ FileUtils.mkdir_p("#{@project_root}/public/packs")
31
+ FileUtils.mv("#{stage_area}/manifest.json", "#{@project_root}/public/packs/manifest.json")
32
+ end
33
+
34
+ def removals
35
+ removals = always_removals
36
+ removals += get_removals("#{@project_root}/.gitignore")
37
+ removals += get_removals("#{@project_root}/.dockerignore")
38
+ removals += get_removals("#{@project_root}/.jetsignore")
39
+ removals = removals.reject do |p|
40
+ jetskeep.find do |keep|
41
+ p == keep
42
+ end
43
+ end
44
+ removals.uniq
45
+ end
46
+
47
+ def get_removals(file)
48
+ path = file
49
+ return [] unless File.exist?(path)
50
+
51
+ removal = File.read(path).split("\n")
52
+ removal.map {|i| i.strip}.reject {|i| i =~ /^#/ || i.empty?}
53
+ # IE: ["/handlers", "/bundled*", "/vendor/jets]
54
+ end
55
+
56
+ # We clean out ignored files pretty aggressively. So provide
57
+ # a way for users to keep files from being cleaned out.
58
+ def jetskeep
59
+ always = %w[.bundle /public/packs /public/packs-test vendor]
60
+ path = "#{@project_root}/.jetskeep"
61
+ return always unless File.exist?(path)
62
+
63
+ keep = IO.readlines(path)
64
+ keep = keep.map {|i| i.strip}.reject { |i| i =~ /^#/ || i.empty? }
65
+ (always + keep).uniq
66
+ end
67
+
68
+ # folders to remove in the vendor/gems folder regardless of the level of the folder
69
+ def clean_vendor_gems
70
+ # Thanks: https://stackoverflow.com/questions/11385795/ruby-list-directory-with-dir-including-dotfiles-but-not-and
71
+ Dir.glob("#{@project_root}/vendor/gems/**/*", File::FNM_DOTMATCH).each do |path|
72
+ next unless File.directory?(path)
73
+ dir = File.basename(path)
74
+ next unless always_removals.include?(dir)
75
+
76
+ rm_rf(path)
77
+ end
78
+
79
+ remove_gem_cache
80
+ end
81
+
82
+ # Reason do not remove the cache folder generally is because some gems have
83
+ # actual cache folders that they used.
84
+ def remove_gem_cache
85
+ cache_path = "#{@project_root}/vendor/gems/ruby/#{Jets.ruby_folder}/cache"
86
+ FileUtils.rm_rf(cache_path)
87
+ end
88
+
89
+ def rm_rf(path)
90
+ exists = File.exist?("#{path}/.gitkeep") || File.exist?("#{path}/.keep")
91
+ return if exists
92
+
93
+ # say " rm -rf #{path}".color(:yellow) # uncomment to debug
94
+ system("rm -rf #{path}") unless @noop
95
+ end
96
+
97
+ # These directories will be removed regardless of dir level
98
+ def always_removals
99
+ %w[.git spec tmp]
100
+ end
101
+
102
+ def say(message)
103
+ message = "NOOP #{message}" if @noop
104
+ puts message
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,31 @@
1
+ module Jets::Builders
2
+ module Util
3
+ private
4
+ def sh(command)
5
+ puts "=> #{command}".color(:green)
6
+ success = system(command)
7
+ unless success
8
+ puts "#{command} failed to run.".color(:red)
9
+ puts caller[0]
10
+ exit 1
11
+ end
12
+ success
13
+ end
14
+
15
+ def headline(message)
16
+ puts "=> #{message}".color(:cyan)
17
+ end
18
+
19
+ def build_area
20
+ Jets.build_root
21
+ end
22
+
23
+ def stage_area
24
+ "#{build_area}/stage"
25
+ end
26
+
27
+ def cache_area
28
+ "#{build_area}/cache" # cleaner to use full path for this setting
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,88 @@
1
+ require "jets/turbo"
2
+
3
+ module Jets
4
+ # Named Bundle vs Bundler to avoid having to fully qualify ::Bundler
5
+ module Bundle
6
+ # Looks like for zeitwerk module autovivification to work `bundle exec` must be called.
7
+ # This allows zeitwork module autovivification to work even if the user has not called jets with `bundle exec jets`.
8
+ # Bundler.setup is essentially the same as `bundle exec`
9
+ # Reference: https://www.justinweiss.com/articles/what-are-the-differences-between-irb/
10
+ #
11
+ # The Bundler.setup is only necessary because we use Bundler.require after require "zeitwerk" is called.
12
+ #
13
+ # Note, this is called super early right before require "zeitwerk"
14
+ # The initially Bundler.setup does not include the Jets.env group.
15
+ # Later in Jets::Booter, Bundle.require is called and includes the Jets.env group.
16
+ #
17
+ def setup
18
+ return unless jets_project?
19
+ return unless bundler_enabled?
20
+ Kernel.require "bundler/setup"
21
+ Bundler.setup # Same as Bundler.setup(:default)
22
+ rescue LoadError => e
23
+ handle_error(e)
24
+ end
25
+
26
+ # Bundler.require called when environment boots up via Jets.boot. This will eagerly require all gems in the
27
+ # Gemfile. This means the user will not have to explictly require dependencies.
28
+ #
29
+ # It also useful for when to loading Rake tasks in Jets::Commands::RakeTasks.load! For example, some gems like
30
+ # webpacker that load rake tasks are specified with a git based source:
31
+ #
32
+ # gem "webpacker", git: "https://github.com/tongueroo/webpacker.git"
33
+ #
34
+ # This results in the user having to specific bundle exec in front of jets for those rake tasks to show up in
35
+ # jets help. Instead, when the user is within the project folder, jets automatically requires bundler for the
36
+ # user. So the rake tasks show up when calling jets help.
37
+ #
38
+ # When the user calls jets help from outside the project folder, bundler is not used and the load errors get
39
+ # rescued gracefully. This is done in Jets::Commands::RakeTasks.load! In the case when user is in another
40
+ # project with another Gemfile, the load errors will also be rescued.
41
+ def require
42
+ return unless jets_project?
43
+ return unless bundler_enabled?
44
+ Kernel.require "bundler/setup"
45
+ Bundler.require(*bundler_groups)
46
+ rescue LoadError => e
47
+ handle_error(e)
48
+ end
49
+
50
+ def handle_error(e)
51
+ puts e.message
52
+ puts <<~EOL.color(:yellow)
53
+ WARNING: Unable to require "bundler/setup"
54
+ There may be something funny with your ruby and bundler setup.
55
+ You can try upgrading bundler and rubygems:
56
+
57
+ gem update --system
58
+ gem install bundler
59
+
60
+ Here are some links that may be helpful:
61
+
62
+ * https://bundler.io/blog/2019/01/03/announcing-bundler-2.html
63
+ * https://community.rubyonjets.com/t/jets-1-9-8-install-issue-bundler-setup-missing/185/2
64
+
65
+ Also, running bundle exec in front of your command may remove this message.
66
+ EOL
67
+ end
68
+
69
+ # Also check for Afterburner mode since in that mode jets is a standalone tool.
70
+ def bundler_enabled?
71
+ !Jets::Turbo.afterburner? && gemfile?
72
+ end
73
+
74
+ def gemfile?
75
+ ENV['BUNDLE_GEMFILE'] || File.exist?("Gemfile")
76
+ end
77
+
78
+ def bundler_groups
79
+ [:default, Jets.env.to_sym]
80
+ end
81
+
82
+ def jets_project?
83
+ File.exist?("config/application.rb")
84
+ end
85
+
86
+ extend self
87
+ end
88
+ end
@@ -0,0 +1,4 @@
1
+ # Wrapper to CfnCamelizer gem
2
+ module Jets
3
+ Camelizer = CfnCamelizer
4
+ end
@@ -0,0 +1,56 @@
1
+ module Jets::Cfn::Builders
2
+ class ApiDeploymentBuilder
3
+ include Interface
4
+ include Jets::AwsServices
5
+
6
+ def initialize(options={})
7
+ @options = options
8
+ @template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
9
+ end
10
+
11
+ # compose is an interface method
12
+ def compose
13
+ deployment = Jets::Resource::ApiGateway::Deployment.new
14
+ add_resource(deployment)
15
+ add_parameters(deployment.parameters)
16
+ add_outputs(deployment.outputs)
17
+
18
+ add_base_path_mapping
19
+ end
20
+
21
+ # Because Jets generates a new timestamped logical id for the API Deployment
22
+ # resource it also creates a new root base path mapping and fails. Additionally,
23
+ # the base path mapping depends on the API Deploy for the stage name.
24
+ #
25
+ # We resolve this by using a custom resource that does an in-place update.
26
+ #
27
+ # Note, also tried to change the domain name of to something like demo-dev-[random].mydomain.com
28
+ # but that does not work because the domain name has to match the route53 record exactly.
29
+ #
30
+ def add_base_path_mapping
31
+ return unless Jets.custom_domain?
32
+
33
+ function = Jets::Resource::ApiGateway::BasePath::Function.new
34
+ add_resource(function)
35
+ add_outputs(function.outputs)
36
+
37
+ mapping = Jets::Resource::ApiGateway::BasePath::Mapping.new
38
+ add_resource(mapping)
39
+ add_outputs(mapping.outputs)
40
+
41
+ iam_role = Jets::Resource::ApiGateway::BasePath::Role.new
42
+ add_resource(iam_role)
43
+ add_outputs(iam_role.outputs)
44
+ end
45
+
46
+ # template_path is an interface method
47
+ def template_path
48
+ Jets::Naming.api_deployment_template_path
49
+ end
50
+
51
+ # do not bother writing a template if routes are empty
52
+ def write
53
+ super unless Jets::Router.routes.empty?
54
+ end
55
+ end
56
+ end