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,186 @@
1
+ require "fileutils"
2
+ require "erb"
3
+
4
+ # Example:
5
+ #
6
+ # Jets::Builders::HandlerGenerator.new(
7
+ # "PostsController",
8
+ # :create, :update
9
+ # )
10
+ module Jets::Builders
11
+ class HandlerGenerator
12
+ def self.build!
13
+ new.build
14
+ end
15
+
16
+ def build
17
+ generate_data_yaml
18
+ app_ruby_shims
19
+ poly_shims
20
+ shared_shims
21
+ internal_shims
22
+ end
23
+
24
+ # The handlers/data.yml is used by the shims
25
+ def generate_data_yaml
26
+ vars = Jets::Builders::ShimVars::Base.new
27
+ data = {
28
+ "s3_bucket" => vars.s3_bucket
29
+ }
30
+ data["rack_zip"] = vars.rack_zip if vars.rack_zip
31
+
32
+ content = YAML.dump(data)
33
+ path = "#{tmp_code}/handlers/data.yml"
34
+ FileUtils.mkdir_p(File.dirname(path))
35
+ IO.write(path, content)
36
+ end
37
+
38
+ def app_ruby_shims
39
+ app_files.each do |path|
40
+ # Generates one shim for each app class: controller, job, etc
41
+ vars = Jets::Builders::ShimVars::App.new(path)
42
+ if path.include?('app/functions')
43
+ copy_simple_function(path)
44
+ else
45
+ generate_handler(vars)
46
+ end
47
+ end
48
+ end
49
+
50
+ # source_path: app/functions/simple.rb
51
+ def copy_simple_function(source_path)
52
+ # Handler: handlers/controllers/posts_controller.handle
53
+ dest_path = source_path.sub('app/functions', 'handlers/functions')
54
+ FileUtils.mkdir_p(File.dirname(dest_path))
55
+ FileUtils.cp(source_path, dest_path)
56
+ end
57
+
58
+ def app_files
59
+ Jets::Commands::Build.app_files
60
+ end
61
+
62
+ def poly_shims
63
+ missing = []
64
+
65
+ app_files.each do |path|
66
+ vars = Jets::Builders::ShimVars::App.new(path)
67
+ poly_tasks = vars.klass.tasks.select { |t| t.lang != :ruby }
68
+ poly_tasks.each do |task|
69
+ source_path = get_source_path(path, task)
70
+ if File.exist?(source_path)
71
+ native_function(path, task)
72
+ else
73
+ missing << source_path
74
+ end
75
+ end
76
+
77
+ unless missing.empty?
78
+ puts "ERROR: Missing source files. Please make sure these source files exist or remove their declarations".color(:red)
79
+ puts missing
80
+ exit 1
81
+ end
82
+ end
83
+ end
84
+
85
+ def shared_shims
86
+ Jets::Stack.subclasses.each do |subclass|
87
+ subclass.functions.each do |fun|
88
+ if fun.lang.to_s == "ruby"
89
+ shared_ruby_shim(fun)
90
+ else
91
+ copy_source_as_handler(fun)
92
+ end
93
+ end
94
+ end
95
+ end
96
+
97
+ def internal_shims
98
+ jets_base_path if Jets.custom_domain?
99
+ s3_bucket_config if Jets.s3_event?
100
+ end
101
+
102
+ def jets_base_path
103
+ copy_function_template("functions/jets/base_path.rb", stage_name: Jets::Resource::ApiGateway::Deployment.stage_name)
104
+ end
105
+
106
+ def s3_bucket_config
107
+ copy_function_template("shared/functions/jets/s3_bucket_config.rb")
108
+ end
109
+
110
+ # Copy code from internal folder to materialized app code
111
+ def copy_function_template(path, vars={})
112
+ internal = File.expand_path("../internal", File.dirname(__FILE__))
113
+ src = "#{internal}/app/#{path}"
114
+ result = Jets::Erb.result(src, vars)
115
+ dest = "#{tmp_code}/handlers/#{path}"
116
+ FileUtils.mkdir_p(File.dirname(dest))
117
+ IO.write(dest, result)
118
+ end
119
+
120
+ # app/shared/functions/kevin.py => /tmp/jets/demo/app_root/handlers/shared/functions/kevin.py
121
+ def copy_source_as_handler(fun)
122
+ return if fun.internal?
123
+
124
+ source_path = fun.source_file
125
+ unless source_path
126
+ attributes = fun.template.values.first
127
+ function_name = attributes['Properties']['FunctionName']
128
+ puts "WARN: missing source file for: '#{function_name}' function".color(:yellow)
129
+ return
130
+ end
131
+
132
+ dest_path = "#{tmp_code}/#{fun.handler_dest}"
133
+ FileUtils.mkdir_p(File.dirname(dest_path))
134
+ FileUtils.cp(source_path, dest_path)
135
+ end
136
+
137
+ def get_source_path(original_path, task)
138
+ folder = original_path.sub(/\.rb$/,'')
139
+ lang_folder = "#{folder}/#{task.lang}"
140
+ root = Jets.root unless original_path.include?("lib/jets/internal")
141
+ "#{root}/#{lang_folder}/#{task.meth}#{task.lang_ext}"
142
+ end
143
+
144
+ # Builds and copies over the native source code: python or node
145
+ def native_function(original_path, task)
146
+ source_path = get_source_path(original_path, task)
147
+ # Handler: handlers/controllers/posts_controller.handle
148
+ dest_path = "#{tmp_code}/#{task.handler_path}"
149
+ FileUtils.mkdir_p(File.dirname(dest_path))
150
+ FileUtils.cp(source_path, dest_path)
151
+ end
152
+
153
+ def shared_ruby_shim(fun)
154
+ # Cant use native_function because that requires task. Just re-implement
155
+ dest_path = fun.handler_dest
156
+ source_path = dest_path.sub(/^handlers/,'app')
157
+ FileUtils.mkdir_p(File.dirname(dest_path))
158
+ FileUtils.cp(source_path, dest_path)
159
+ end
160
+
161
+ def common_base_shim
162
+ vars = Jets::Builders::ShimVars::Base.new
163
+ result = evaluate_template("shim.js", vars)
164
+ dest = "#{tmp_code}/handlers/shim.js"
165
+ FileUtils.mkdir_p(File.dirname(dest))
166
+ IO.write(dest, result)
167
+ end
168
+
169
+ def generate_handler(vars)
170
+ result = evaluate_template("handler.rb", vars)
171
+ dest = "#{tmp_code}/#{vars.dest_path}"
172
+ FileUtils.mkdir_p(File.dirname(dest))
173
+ IO.write(dest, result)
174
+ end
175
+
176
+ def evaluate_template(template_file, vars)
177
+ template_path = File.expand_path("../templates/#{template_file}", __FILE__)
178
+ Jets::Erb.result(template_path, vars: vars)
179
+ end
180
+
181
+ # TODO: move CodeBuilder.tmp_code to a common level for HandlerGenerator and CodeBuilder
182
+ def tmp_code
183
+ "#{Jets.build_root}/#{CodeBuilder.tmp_code}"
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,68 @@
1
+ module Jets::Builders
2
+ class LambdaLayer
3
+ include Util
4
+
5
+ # At this point gems are in the stage/code and stage/rack folders still.
6
+ # We consolidate all gems to stage/opt.
7
+ # Then replace the binary gems.
8
+ def build
9
+ consolidate_gems_to_opt
10
+ replace_compiled_gems unless Jets.config.gems.disable
11
+ end
12
+
13
+ # Also restructure the folder from:
14
+ # vendor/gems/ruby/2.5.0
15
+ # To:
16
+ # ruby/gems/2.5.0
17
+ #
18
+ # For Lambda Layer structure
19
+ def consolidate_gems_to_opt
20
+ src = "#{stage_area}/code/vendor/gems/ruby/#{Jets.ruby_folder}"
21
+ dest = "#{stage_area}/opt/ruby/gems/#{Jets.ruby_folder}"
22
+ rsync_and_link(src, dest)
23
+
24
+ return unless Jets.rack?
25
+
26
+ src = "#{stage_area}/rack/vendor/gems/ruby/#{Jets.ruby_folder}"
27
+ rsync_and_link(src, dest)
28
+ end
29
+
30
+ def rsync_and_link(src, dest)
31
+ FileUtils.mkdir_p(dest)
32
+ # Trailing slashes are required
33
+ sh "rsync -a --links #{src}/ #{dest}/"
34
+
35
+ FileUtils.rm_rf(src) # blow away original 2.5.0 folder
36
+
37
+ # Create symlink that will point to the gems in the Lambda Layer:
38
+ # stage/opt/ruby/gems/2.5.0 -> /opt/ruby/gems/2.5.0
39
+ FileUtils.ln_sf("/opt/ruby/gems/#{Jets::Gems.ruby_folder}", src)
40
+ end
41
+
42
+ # replace_compiled_gems:
43
+ # remove binary gems in vendor/gems/ruby/2.5.0
44
+ # extract binary gems in opt/ruby/gems/2.5.0
45
+ # move binary gems from opt/ruby/gems/2.5.0 to vendor/gems/ruby/2.5.0
46
+ #
47
+ # After this point, gems have been replace in stage/code/vendor/gems with their
48
+ # binary extensions: a good state. This method moves these gems to the Lambda
49
+ # Layers structure and creates a symlinks to it. First:
50
+ #
51
+ # from stage/code/vendor/gems/ruby/2.5.0
52
+ # to stage/opt/ruby/gems/2.5.0
53
+ #
54
+ # Then:
55
+ #
56
+ # stage/code/vendor/gems/ruby/2.5.0 -> /opt/ruby/gems/2.5.0
57
+ #
58
+ def replace_compiled_gems
59
+ project_root = "#{stage_area}/opt"
60
+ headline "Replacing compiled gems with AWS Lambda Linux compiled versions: #{project_root}"
61
+ options = {
62
+ build_root: cache_area, # used in jets-gems
63
+ project_root: project_root, # used in gem_replacer and jets-gems
64
+ }
65
+ GemReplacer.new(options).run
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,60 @@
1
+ require 'digest'
2
+
3
+ # Resolves the chicken-and-egg problem with md5 checksums. The handlers need
4
+ # to reference files with the md5 checksum. The files are the:
5
+ #
6
+ # jets/code/rack-checksum.zip
7
+ # jets/code/opt-checksum.zip
8
+ #
9
+ # We compute the checksums before we generate the node shim handlers.
10
+ module Jets::Builders
11
+ class Md5
12
+ class << self
13
+ @@checksums = {}
14
+ def checksums
15
+ @@checksums
16
+ end
17
+
18
+ def stage_folders
19
+ paths = []
20
+ paths << "stage/opt" if folder_exist?("opt")
21
+ paths << "stage/rack" if folder_exist?("rack")
22
+ # Important to have stage/code at the end, since its md5 checksum depends
23
+ # on the previous folders.
24
+ paths << "stage/code"
25
+ paths
26
+ end
27
+
28
+ def folder_exist?(folder)
29
+ path = "#{Jets.build_root}/stage/#{folder}"
30
+ File.directory?(path)
31
+ end
32
+
33
+ def compute!
34
+ stage_folders.each do |path|
35
+ @@checksums[path] = dir(path)
36
+ end
37
+ @@checksums
38
+ end
39
+
40
+ def dir(short_path)
41
+ path = "#{Jets.build_root}/#{short_path}"
42
+ files = Dir["#{path}/**/*"]
43
+ files = files.reject { |f| File.directory?(f) }
44
+ .reject { |f| File.symlink?(f) }
45
+ content = files.map do |f|
46
+ Digest::MD5.file(f).to_s[0..7]
47
+ end.join
48
+
49
+ # The stage/code md5 sha depends on the other 'symlinked' folders.
50
+ if short_path == "stage/code"
51
+ content += @@checksums.values.join
52
+ end
53
+
54
+ md5 = Digest::MD5.new
55
+ md5.update(content)
56
+ md5.hexdigest.to_s[0..7]
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,61 @@
1
+ require "active_support/number_helper"
2
+
3
+ # Examples:
4
+ #
5
+ # zip = Jets::Builders::Md5Zip.new("/tmp/jets/demo/stage/code")
6
+ # zip.create
7
+ #
8
+ # zip = Jets::Builders::Md5Zip.new("/tmp/jets/demo/stage/bundled")
9
+ # zip.create
10
+ #
11
+ module Jets::Builders
12
+ class Md5Zip
13
+ include ActiveSupport::NumberHelper # number_to_human_size
14
+ include Util
15
+
16
+ def initialize(folder)
17
+ @path = "#{Jets.build_root}/#{folder}"
18
+ @checksum = Md5.checksums[folder]
19
+ end
20
+
21
+ def create
22
+ headline "Creating zip file for #{@path}"
23
+ # => Creating zip file for /tmp/jets/demo/stage/bundled
24
+
25
+ # https://serverfault.com/questions/265675/how-can-i-zip-compress-a-symlink
26
+ command = "cd #{@path} && chmod -R 755 . && zip --symlinks -rq #{zip_file} ."
27
+ sh(command)
28
+ # move out of the lower folder to the stage folder
29
+ # mv /tmp/jets/demo/stage/code/code.zip /tmp/jets/demo/stage/code.zip
30
+ FileUtils.mkdir_p(File.dirname(zip_dest))
31
+ FileUtils.mv("#{@path}/#{zip_file}", zip_dest)
32
+
33
+ # mv /tmp/jets/demo/stage/zips/code.zip /tmp/jets/demo/stage/zips/code-a8a604aa.zip
34
+ FileUtils.mv(zip_dest, md5_dest)
35
+
36
+ file_size = number_to_human_size(File.size(md5_dest))
37
+ puts "Zip file created at: #{md5_dest.color(:green)} (#{file_size})"
38
+ end
39
+
40
+ # /tmp/jets/demo/stage/zips/code.zip
41
+ def zip_dest
42
+ stage_area, filename = File.dirname(@path), File.basename(@path)
43
+ zip_area = stage_area + '/zips' # /tmp/jets/demo/stage/zips
44
+ zip_file = filename + '.zip' # code.zip
45
+ "#{zip_area}/#{zip_file}" # /tmp/jets/demo/stage/zips/code.zip
46
+ end
47
+
48
+ def zip_file
49
+ File.basename(zip_dest)
50
+ end
51
+
52
+ # /tmp/jets/demo/stage/zips/code-SHA.zip
53
+ def md5_dest
54
+ zip_dest.sub(".zip", "-#{@checksum}.zip")
55
+ end
56
+
57
+ def md5_name
58
+ File.basename(md5_dest)
59
+ end
60
+ end
61
+ end
@@ -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,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,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