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,21 @@
1
+ class Jets::Mega::Request
2
+ class Source
3
+ def initialize(event)
4
+ @event = event
5
+ env = Jets::Controller::Rack::Env.new(@event, {}).convert # convert to Rack env
6
+ @source_request = Rack::Request.new(env)
7
+ end
8
+
9
+ def body
10
+ if @source_request.body.respond_to?(:read)
11
+ body = @source_request.body.read
12
+ @source_request.body.rewind
13
+ end
14
+ body
15
+ end
16
+
17
+ def content_length
18
+ @source_request.content_length.to_i
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,163 @@
1
+ require 'net/http'
2
+ require 'rack'
3
+
4
+ module Jets::Mega
5
+ class Request
6
+ JETS_OUTPUT = "/tmp/jets-output.log"
7
+
8
+ extend Memoist
9
+
10
+ def initialize(event, controller)
11
+ @event = event
12
+ @controller = controller # Jets::Controller instance
13
+ end
14
+
15
+ def proxy
16
+ http_method = @event['httpMethod'] # GET, POST, PUT, DELETE, etc
17
+ params = @controller.params(raw: true, path_parameters: false)
18
+
19
+ uri = get_uri
20
+
21
+ http = Net::HTTP.new(uri.host, uri.port)
22
+ http.open_timeout = http.read_timeout = 60
23
+
24
+ # Rails sets _method=patch or _method=put as workaround
25
+ # Falls back to GET when testing in lambda console
26
+ http_class = params['_method'] || http_method || 'GET'
27
+ http_class.capitalize!
28
+
29
+ request_class = "Net::HTTP::#{http_class}".constantize # IE: Net::HTTP::Get
30
+ request = request_class.new(uri)
31
+
32
+ # Set form data
33
+ if %w[Post Patch Put].include?(http_class)
34
+ params = HashConverter.encode(params)
35
+ request.set_form_data(params)
36
+ end
37
+
38
+ # Set body info
39
+ request.body = source.body
40
+ request.content_length = source.content_length
41
+
42
+ # Need to set headers after body and form_data for some reason
43
+ request = set_headers!(request)
44
+
45
+ # Make request
46
+ response = send_request(http, request)
47
+
48
+ puts_rack_output
49
+
50
+ status = response.code.to_i
51
+ headers = response.each_header.to_h
52
+ encoding = get_encoding(headers['content-type'])
53
+ body = response.body&.force_encoding(encoding)
54
+ {
55
+ status: status,
56
+ headers: headers,
57
+ body: body,
58
+ }
59
+ end
60
+
61
+ # Adds error handling in case the rack server has gone down. Will try to start the server back up if needed.
62
+ # Search CloudWatch logs for 'Unable to send request' to find for indication of this.
63
+ def send_request(http, request)
64
+ retries = 0
65
+ max_retries = 30 # 15 seconds at a delay of 0.5s
66
+ delay = 0.5
67
+
68
+ begin
69
+ http.request(request) # response
70
+ rescue Errno::ECONNREFUSED, Errno::EAFNOSUPPORT
71
+ puts "Unable to send request to localhost:9292. Will try to start the server with a delay of #{delay} and try again."
72
+ Jets.start_rack_server
73
+
74
+ sleep(delay)
75
+ retries += 1
76
+ if retries < max_retries
77
+ retry
78
+ else
79
+ puts "Giving up on trying to send request to localhost:9292"
80
+ raise # re-raise error
81
+ end
82
+ end
83
+ end
84
+
85
+ def get_encoding(content_type)
86
+ default = Jets.config.encoding.default
87
+ return default unless content_type
88
+
89
+ md = content_type.match(/charset=(.+)/)
90
+ return default unless md
91
+
92
+ md[1]
93
+ end
94
+
95
+ # Grab the rack output from the /tmp/jets-output.log and puts it back in the
96
+ # main process' stdout
97
+ def puts_rack_output
98
+ return unless File.exist?(JETS_OUTPUT)
99
+ puts IO.readlines(JETS_OUTPUT)
100
+ File.truncate(JETS_OUTPUT, 0)
101
+ end
102
+
103
+ def get_uri
104
+ url = "http://localhost:9292#{@controller.request.path}" # local rack server
105
+ unless @controller.query_parameters.empty?
106
+ # Thanks: https://stackoverflow.com/questions/798710/ruby-how-to-turn-a-hash-into-http-parameters
107
+ query_string = Rack::Utils.build_nested_query(@controller.query_parameters)
108
+ url += "?#{query_string}"
109
+ end
110
+ URI(url)
111
+ end
112
+
113
+ def source
114
+ Source.new(@event)
115
+ end
116
+ memoize :source
117
+
118
+ # Rails sets _method=patch or _method=put as workaround
119
+ # Falls back to GET when testing in lambda console
120
+ # @event['httpMethod'] is GET, POST, PUT, DELETE, etc
121
+ def http_class
122
+ http_class = params['_method'] || @event['httpMethod'] || 'GET'
123
+ http_class.capitalize!
124
+ http_class
125
+ end
126
+
127
+ def params
128
+ @controller.params(raw: true, path_parameters: false, body_parameters: true)
129
+ end
130
+ memoize :params
131
+
132
+ # Set request headers. Forwards original request info from remote API gateway.
133
+ # By this time, the server/api_gateway.rb middleware.
134
+ def set_headers!(request)
135
+ headers = @event['headers'] # from api gateway
136
+ if headers # remote API Gateway
137
+ # Forward headers from API Gateway over to the sub http request.
138
+ # It's important to forward the headers. Here are some examples:
139
+ #
140
+ # "Turbolinks-Referrer"=>"http://localhost:8888/posts/122",
141
+ # "Referer"=>"http://localhost:8888/posts/122",
142
+ # "Accept-Encoding"=>"gzip, deflate",
143
+ # "Accept-Language"=>"en-US,en;q=0.9,pt;q=0.8",
144
+ # "Cookie"=>"_demo_session=...",
145
+ # "If-None-Match"=>"W/\"9fa479205fc6d24ca826d46f1f6cf461\"",
146
+ headers.each do |k,v|
147
+ request[k] = v
148
+ end
149
+
150
+ # Note by the time headers get to rack later in the they get changed to:
151
+ #
152
+ # request['X-Forwarded-Host'] vs env['HTTP_X_FORWARDED_HOST']
153
+ #
154
+ request['X-Forwarded-For'] = headers['X-Forwarded-For'] # "1.1.1.1, 2.2.2.2" # can be comma separated list
155
+ request['X-Forwarded-Host'] = headers['Host'] # uhghn8z6t1.execute-api.us-east-1.amazonaws.com
156
+ request['X-Forwarded-Port'] = headers['X-Forwarded-Port'] # 443
157
+ request['X-Forwarded-Proto'] = headers['X-Forwarded-Proto'] # https # scheme
158
+ end
159
+
160
+ request
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,84 @@
1
+ # Based on Rails MiddlewareStackProxy
2
+ #
3
+ # Configurator is a recorder for the Jets middleware stack that allows
4
+ # you to configure middlewares in your application. It works basically as a
5
+ # command recorder, saving each command to be applied after initialization
6
+ # over the default middleware stack, so you can add, swap, or remove any
7
+ # middleware in Jets.
8
+ #
9
+ # You can add your own middlewares by using the +config.middleware.use+ method:
10
+ #
11
+ # config.middleware.use Magical::Unicorns
12
+ #
13
+ # This will put the <tt>Magical::Unicorns</tt> middleware on the end of the stack.
14
+ # You can use +insert_before+ if you wish to add a middleware before another:
15
+ #
16
+ # config.middleware.insert_before Rack::Head, Magical::Unicorns
17
+ #
18
+ # There's also +insert_after+ which will insert a middleware after another:
19
+ #
20
+ # config.middleware.insert_after Rack::Head, Magical::Unicorns
21
+ #
22
+ # Middlewares can also be completely swapped out and replaced with others:
23
+ #
24
+ # config.middleware.swap ActionDispatch::Flash, Magical::Unicorns
25
+ #
26
+ # And finally they can also be removed from the stack completely:
27
+ #
28
+ # config.middleware.delete ActionDispatch::Flash
29
+ #
30
+ module Jets::Middleware
31
+ class Configurator
32
+ def initialize(operations = [], delete_operations = [])
33
+ @operations = operations
34
+ @delete_operations = delete_operations
35
+ end
36
+
37
+ def insert_before(*args, &block)
38
+ @operations << [__method__, args, block]
39
+ end
40
+
41
+ alias :insert :insert_before
42
+
43
+ def insert_after(*args, &block)
44
+ @operations << [__method__, args, block]
45
+ end
46
+
47
+ def swap(*args, &block)
48
+ @operations << [__method__, args, block]
49
+ end
50
+
51
+ def use(*args, &block)
52
+ @operations << [__method__, args, block]
53
+ end
54
+
55
+ def delete(*args, &block)
56
+ @delete_operations << [__method__, args, block]
57
+ end
58
+
59
+ def unshift(*args, &block)
60
+ @operations << [__method__, args, block]
61
+ end
62
+
63
+ def merge_into(other) #:nodoc:
64
+ (@operations + @delete_operations).each do |operation, args, block|
65
+ other.send(operation, *args, &block)
66
+ end
67
+
68
+ other
69
+ end
70
+
71
+ def +(other) # :nodoc:
72
+ Configurator.new(@operations + other.operations, @delete_operations + other.delete_operations)
73
+ end
74
+
75
+ protected
76
+ def operations
77
+ @operations
78
+ end
79
+
80
+ def delete_operations
81
+ @delete_operations
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,53 @@
1
+ require "shotgun"
2
+
3
+ module Jets::Middleware
4
+ class DefaultStack
5
+ attr_reader :config, :app
6
+ def initialize(app, config)
7
+ @app = app
8
+ @config = config
9
+ end
10
+
11
+ def build_stack
12
+ Stack.new do |middleware|
13
+ middleware.use Shotgun::Static
14
+ middleware.use Rack::Runtime
15
+ middleware.use Jets::Controller::Middleware::Cors if cors_enabled?
16
+ middleware.use Rack::MethodOverride # must come before Middleware::Local for multipart post forms to work
17
+ middleware.use Jets::Controller::Middleware::Reloader if Jets.config.hot_reload
18
+ middleware.use Jets::Controller::Middleware::Local # mimics AWS Lambda for local server only
19
+ middleware.use session_store, session_options
20
+ middleware.use Rack::Head
21
+ middleware.use Rack::ConditionalGet
22
+ middleware.use Rack::ETag
23
+ use_webpacker(middleware)
24
+ end
25
+ end
26
+
27
+ private
28
+ def cors_enabled?
29
+ Jets.config.cors
30
+ end
31
+
32
+ # Written as method to easily not include webpacker for case when either
33
+ # webpacker not installed at all or disabled upon `jets deploy`.
34
+ def use_webpacker(middleware)
35
+ return unless Jets.webpacker? # checks for local development if webpacker installed
36
+ # Different check for middleware because we need webpacker helpers for url helpers.
37
+ # But we dont want to actually serve via webpacker middleware when running on AWS.
38
+ # By this time the url helpers are serving assets out of s3.
39
+ return if File.exist?("#{Jets.root}/config/disable-webpacker-middleware.txt") # created as part of `jets deploy`
40
+ require "jets/controller/middleware/webpacker_setup"
41
+ middleware.use Webpacker::DevServerProxy
42
+ end
43
+
44
+ def session_store
45
+ Jets.config.session[:store] # do not use dot notation. session.store is a method on ActiveSupport::OrderedOptions.new
46
+ end
47
+
48
+ def session_options
49
+ defaults = { secret: ENV['SECRET_KEY_BASE'] }
50
+ defaults.merge(Jets.config.session.options)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,34 @@
1
+ module Jets::Middleware
2
+ class Layer
3
+ attr_reader :args, :block, :klass
4
+
5
+ def initialize(klass, args, block)
6
+ @klass = klass
7
+ @args = args
8
+ @block = block
9
+ end
10
+
11
+ def name; klass.name; end
12
+
13
+ def ==(middleware)
14
+ case middleware
15
+ when Layer
16
+ klass == middleware.klass
17
+ when Class
18
+ klass == middleware
19
+ end
20
+ end
21
+
22
+ def inspect
23
+ if klass.is_a?(Class)
24
+ klass.to_s
25
+ else
26
+ klass.class.to_s
27
+ end
28
+ end
29
+
30
+ def build(app)
31
+ klass.new(app, *args, &block)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,77 @@
1
+ module Jets::Middleware
2
+ class Stack
3
+ include Enumerable
4
+
5
+ attr_accessor :middlewares
6
+ def initialize(*args)
7
+ @middlewares = []
8
+ yield(self) if block_given?
9
+ end
10
+
11
+ def each
12
+ @middlewares.each { |x| yield x }
13
+ end
14
+
15
+ def size
16
+ middlewares.size
17
+ end
18
+
19
+ def last
20
+ middlewares.last
21
+ end
22
+
23
+ def [](i)
24
+ middlewares[i]
25
+ end
26
+
27
+ def unshift(klass, *args, &block)
28
+ middlewares.unshift(build_middleware(klass, args, block))
29
+ end
30
+
31
+ def initialize_copy(other)
32
+ self.middlewares = other.middlewares.dup
33
+ end
34
+
35
+ def insert(index, klass, *args, &block)
36
+ index = assert_index(index, :before)
37
+ middlewares.insert(index, build_middleware(klass, args, block))
38
+ end
39
+
40
+ alias_method :insert_before, :insert
41
+
42
+ def insert_after(index, *args, &block)
43
+ index = assert_index(index, :after)
44
+ insert(index + 1, *args, &block)
45
+ end
46
+
47
+ def swap(target, *args, &block)
48
+ index = assert_index(target, :before)
49
+ insert(index, *args, &block)
50
+ middlewares.delete_at(index + 1)
51
+ end
52
+
53
+ def delete(target)
54
+ middlewares.delete_if { |m| m.klass == target }
55
+ end
56
+
57
+ def use(klass, *args, &block)
58
+ middlewares.push(build_middleware(klass, args, block))
59
+ end
60
+
61
+ def build(app = Proc.new)
62
+ middlewares.freeze.reverse.inject(app) { |a, e| e.build(a) }
63
+ end
64
+
65
+ private
66
+
67
+ def assert_index(index, where)
68
+ i = index.is_a?(Integer) ? index : middlewares.index { |m| m.klass == index }
69
+ raise "No such middleware to insert #{where}: #{index.inspect}" unless i
70
+ i
71
+ end
72
+
73
+ def build_middleware(klass, args, block)
74
+ Layer.new(klass, args, block)
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,33 @@
1
+ module Jets
2
+ module Middleware
3
+ extend Memoist
4
+
5
+ def call(env)
6
+ stack = middlewares.build(endpoint)
7
+ stack.call(env)
8
+ end
9
+
10
+ # Final middleware in the stack
11
+ def endpoint
12
+ Jets::Controller::Middleware::Main
13
+ end
14
+
15
+ # Called in Jets::Booter to build middleware stack only once during bootup
16
+ def build_stack
17
+ middlewares
18
+ end
19
+
20
+ def middlewares
21
+ config_middleware.merge_into(default_stack) # returns Jets::Middleware::Stack
22
+ end
23
+ memoize :middlewares
24
+
25
+ def default_stack
26
+ Jets::Middleware::DefaultStack.new(Jets.config, Jets.application).build_stack # returns Jets::Middleware::Stack
27
+ end
28
+
29
+ def config_middleware
30
+ Jets.config.middleware # returns Jets::Middleware::Configurator
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,63 @@
1
+ # This class groups the naming in one place.
2
+ # Some naming is for CloudFormation
3
+ # Some are for the Build process
4
+ class Jets::Naming
5
+ # Mainly used by build.rb
6
+ class << self
7
+ extend Memoist
8
+
9
+ def app_template_path(app_class)
10
+ underscored = underscore(app_class)
11
+ "#{template_path_prefix}-app-#{underscored}.yml"
12
+ end
13
+
14
+ def shared_template_path(shared_class)
15
+ underscored = underscore(shared_class)
16
+ "#{template_path_prefix}-shared-#{underscored}.yml"
17
+ end
18
+
19
+ def template_path_prefix
20
+ "#{Jets.build_root}/templates/#{Jets.config.project_namespace}"
21
+ end
22
+
23
+ # consider moving these methods into cfn/builder/helpers.rb or that area.
24
+ def parent_template_path
25
+ "#{template_path_prefix}.yml"
26
+ end
27
+
28
+ # consider moving these methods into cfn/builder/helpers.rb or that area.
29
+ def api_gateway_template_path
30
+ "#{template_path_prefix}-api-gateway.yml"
31
+ end
32
+
33
+ def api_resources_template_path(page)
34
+ "#{template_path_prefix}-api-resources-#{page}.yml"
35
+ end
36
+
37
+ def api_deployment_template_path
38
+ "#{template_path_prefix}-api-deployment.yml"
39
+ end
40
+
41
+ def shared_resources_template_path
42
+ "#{template_path_prefix}-shared-resources.yml"
43
+ end
44
+
45
+ def parent_stack_name
46
+ File.basename(parent_template_path, ".yml")
47
+ end
48
+
49
+ def gateway_api_name
50
+ "#{Jets.config.project_namespace}"
51
+ end
52
+
53
+ def authorizer_template_path(path)
54
+ underscored = underscore(path)
55
+ underscored.sub!(/^app-/, '')
56
+ "#{template_path_prefix}-#{underscored}.yml"
57
+ end
58
+
59
+ def underscore(s)
60
+ s.to_s.underscore.sub(/\.rb$/,'').gsub('/','-')
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,31 @@
1
+ require 'json'
2
+
3
+ # Hack AwsLambda Ruby Runtime to fix .to_json issue collision with ActiveSupport.
4
+ # To reproduce:
5
+ # Create a shared resource from the docs and call sns.publish
6
+ #
7
+ # Causes an infinite loop when calling sns.publish somehow.
8
+ # Overriding with JSON.dump and follow up with AWS ticket.
9
+ module AwsLambda
10
+ class Marshaller
11
+ class << self
12
+ # By default, just runs #to_json on the method's response value.
13
+ # This can be overwritten by users who know what they are doing.
14
+ # The response is an array of response, content-type.
15
+ # If returned without a content-type, it is assumed to be application/json
16
+ # Finally, StringIO/IO is used to signal a response that shouldn't be
17
+ # formatted as JSON, and should get a different content-type header.
18
+ def marshall_response(method_response)
19
+ case method_response
20
+ when StringIO, IO
21
+ [method_response, 'application/unknown']
22
+ else
23
+ # Orignal method calls .to_json but this collides with ActiveSupport's to_json
24
+ # method_response.to_json # application/json is assumed
25
+ JSON.dump(method_response)
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1 @@
1
+ require "jets/overrides/lambda/marshaller"
@@ -0,0 +1,13 @@
1
+ ActiveSupport.on_load :action_controller do
2
+ class ActionController::Base
3
+ class << self
4
+ @@_prefixes = nil
5
+ def _prefixes
6
+ @@_prefixes
7
+ end
8
+ def _prefixes=(v)
9
+ @@_prefixes = v
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,114 @@
1
+ # Override to prepend stage name when on AWS.
2
+ module Jets::AssetTagHelper
3
+ extend Memoist
4
+ include Jets::CommonMethods
5
+ include Jets::AwsServices
6
+
7
+ def javascript_include_tag(*sources, **options)
8
+ sources = sources.map { |s| s3_public_url(s, :javascripts) }
9
+ super
10
+ end
11
+
12
+ def stylesheet_link_tag(*sources, **options)
13
+ sources = sources.map { |s| s3_public_url(s, :stylesheets) }
14
+ super
15
+ end
16
+
17
+ # Locally:
18
+ #
19
+ # image_tag("jets.png") => /images/jets.png
20
+ # image_tag("/images/jets.png") => /images/jets.png
21
+ #
22
+ # Remotely:
23
+ #
24
+ # image_tag("jets.png") => https://s3-us-west-2.amazonaws.com/demo-dev-s3bucket-1kih4n2te0n66/jets/public/images/jets.png
25
+ def image_tag(source, options = {})
26
+ source = source.to_s # convert to String because passing a posts.photo object to results in failure to resolve the immage to a URL since we haven't defined polymorphic_url yet
27
+
28
+ # mimic original behavior to get /images in source
29
+ source = "/images/#{source}" unless source.starts_with?('/') || source.starts_with?('http')
30
+ if on_aws? && !source.starts_with?('http')
31
+ source = "#{s3_public}#{source}"
32
+ end
33
+
34
+ super
35
+ end
36
+
37
+ def asset_path(source, options = {})
38
+ source = source.to_s # convert to String because passing a posts.photo object to results in failure to resolve the immage to a URL since we haven't defined polymorphic_url yet
39
+ # mimic original behavior to get /images in source
40
+ source = "/images/#{source}" unless source.starts_with?('/') || source.starts_with?('http')
41
+
42
+ # Examples to help understand:
43
+ #
44
+ # puts "AssetTagHelper#asset_path source #{source}"
45
+ # puts "AssetTagHelper#asset_path asset_folder?(source) #{asset_folder?(source).inspect}"
46
+ # AssetTagHelper#asset_path source /packs/images/myimage-e5f675d1ba26865fd65e919beb5bb86b.png
47
+ # AssetTagHelper#asset_path asset_folder?(source) "images"
48
+ #
49
+ if on_aws? && asset_folder?(source) && !source.starts_with?('http')
50
+ source = "#{s3_public}#{source}"
51
+ end
52
+
53
+ super
54
+ end
55
+
56
+ # Serves favicon out of s3 when on API gateway.
57
+ #
58
+ # Useful helper for API Gateway since serving binary data like images without
59
+ # an Accept header doesnt work well. You can changed Media Types to '*/*'
60
+ # but then that messes up form data.
61
+ def favicon_path(path='favicon.ico')
62
+ on_aws? ? "#{s3_public}/#{path}" : "/#{path}"
63
+ end
64
+
65
+ private
66
+ # Whatever is configured in Jets.config.assets.folders
67
+ # Example: packs, images, assets
68
+ def asset_folder?(url)
69
+ Jets.config.assets.folders.detect do |folder|
70
+ url.include?(folder)
71
+ end
72
+ end
73
+
74
+ # User can use:
75
+ # javascript_include_tag "assets/test"
76
+ #
77
+ # Rails automatically adds "javscript" in front, to become:
78
+ #
79
+ # /javascripts/assets/test
80
+ #
81
+ # We want to add the API Gateway stage name in front for this:
82
+ #
83
+ # /stag/javascript/asset/test
84
+ #
85
+ # But adding it in front results in this:
86
+ #
87
+ # /javascript/stag/asset/test
88
+ #
89
+ # If there's a / in front then rails will not add the "javascript":
90
+ # So we can add the javascript ourselves and then add the stag with a
91
+ # / in front.
92
+ def s3_public_url(url, asset_type)
93
+ unless url.starts_with?('/') or url.starts_with?('http')
94
+ url = "/#{asset_type}/#{url}" # /javascript/asset/test
95
+ end
96
+ add_s3_public(url)
97
+ end
98
+
99
+ # Example:
100
+ # Url: /packs/application-e7654c50abd78161b641.js
101
+ # Returns: https://s3-us-west-2.amazonaws.com/demo-dev-s3bucket-1jg5o076egkk4/jets/public/packs/application-e7654c50abd78161b641.js
102
+ def add_s3_public(url)
103
+ return url unless on_aws?
104
+ "#{s3_public}#{url}"
105
+ end
106
+
107
+ def s3_public
108
+ # s3_base_url.txt is created as part of the build process
109
+ s3_base_url = IO.read("#{Jets.root}/config/s3_base_url.txt").strip
110
+ "#{s3_base_url}/public"
111
+ end
112
+ memoize :s3_public
113
+ end
114
+ ActionView::Helpers.send(:include, Jets::AssetTagHelper)