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,269 @@
1
+ # Based on sinatra/cookies.rb
2
+ # https://github.com/sinatra/sinatra/blob/master/sinatra-contrib/lib/sinatra/cookies.rb
3
+ module Jets::Controller::Cookies
4
+ class Jar
5
+ include Enumerable
6
+ attr_reader :options
7
+
8
+ def initialize(controller)
9
+ @response_string = nil
10
+ @response_hash = {}
11
+ @response = controller.response
12
+ @request = controller.request
13
+ @deleted = []
14
+
15
+ @options = {
16
+ path: @request.script_name.to_s.empty? ? '/' : @request.script_name,
17
+ domain: @request.host == 'localhost' ? nil : @request.host,
18
+ secure: @request.ssl?,
19
+ httponly: true
20
+ }
21
+ end
22
+
23
+ def ==(other)
24
+ other.respond_to? :to_hash and to_hash == other.to_hash
25
+ end
26
+
27
+ def [](key)
28
+ response_cookies[key.to_s] || request_cookies[key.to_s]
29
+ end
30
+
31
+ def []=(key, value)
32
+ set(key, value: value)
33
+ end
34
+
35
+ def assoc(key)
36
+ to_hash.assoc(key.to_s)
37
+ end if Hash.method_defined? :assoc
38
+
39
+ def clear
40
+ each_key { |k| delete(k) }
41
+ end
42
+
43
+ def compare_by_identity?
44
+ false
45
+ end
46
+
47
+ def default
48
+ nil
49
+ end
50
+
51
+ alias default_proc default
52
+
53
+ def delete(key)
54
+ result = self[key]
55
+ @response.delete_cookie(key.to_s, @options)
56
+ result
57
+ end
58
+
59
+ def delete_if
60
+ return enum_for(__method__) unless block_given?
61
+ each { |k, v| delete(k) if yield(k, v) }
62
+ self
63
+ end
64
+
65
+ def each(&block)
66
+ return enum_for(__method__) unless block_given?
67
+ to_hash.each(&block)
68
+ end
69
+
70
+ def each_key(&block)
71
+ return enum_for(__method__) unless block_given?
72
+ to_hash.each_key(&block)
73
+ end
74
+
75
+ alias each_pair each
76
+
77
+ def each_value(&block)
78
+ return enum_for(__method__) unless block_given?
79
+ to_hash.each_value(&block)
80
+ end
81
+
82
+ def empty?
83
+ to_hash.empty?
84
+ end
85
+
86
+ def fetch(key, &block)
87
+ response_cookies.fetch(key.to_s) do
88
+ request_cookies.fetch(key.to_s, &block)
89
+ end
90
+ end
91
+
92
+ def flatten
93
+ to_hash.flatten
94
+ end if Hash.method_defined? :flatten
95
+
96
+ def has_key?(key)
97
+ response_cookies.has_key? key.to_s or request_cookies.has_key? key.to_s
98
+ end
99
+
100
+ def has_value?(value)
101
+ response_cookies.has_value? value or request_cookies.has_value? value
102
+ end
103
+
104
+ def hash
105
+ to_hash.hash
106
+ end
107
+
108
+ alias include? has_key?
109
+ alias member? has_key?
110
+
111
+ def index(value)
112
+ warn "Hash#index is deprecated; use Hash#key"
113
+ key(value)
114
+ end
115
+
116
+ def inspect
117
+ "<##{self.class}: #{to_hash.inspect[1..-2]}>"
118
+ end
119
+
120
+ def invert
121
+ to_hash.invert
122
+ end if Hash.method_defined? :invert
123
+
124
+ def keep_if
125
+ return enum_for(__method__) unless block_given?
126
+ delete_if { |*a| not yield(*a) }
127
+ end
128
+
129
+ def key(value)
130
+ to_hash.key(value)
131
+ end
132
+
133
+ alias key? has_key?
134
+
135
+ def keys
136
+ to_hash.keys
137
+ end
138
+
139
+ def length
140
+ to_hash.length
141
+ end
142
+
143
+ def merge(other, &block)
144
+ to_hash.merge(other, &block)
145
+ end
146
+
147
+ def merge!(other)
148
+ other.each_pair do |key, value|
149
+ if block_given? and include? key
150
+ self[key] = yield(key.to_s, self[key], value)
151
+ else
152
+ self[key] = value
153
+ end
154
+ end
155
+ end
156
+
157
+ def rassoc(value)
158
+ to_hash.rassoc(value)
159
+ end
160
+
161
+ def rehash
162
+ response_cookies.rehash
163
+ request_cookies.rehash
164
+ self
165
+ end
166
+
167
+ def reject(&block)
168
+ return enum_for(__method__) unless block_given?
169
+ to_hash.reject(&block)
170
+ end
171
+
172
+ alias reject! delete_if
173
+
174
+ def replace(other)
175
+ select! { |k, v| other.include?(k) or other.include?(k.to_s) }
176
+ merge! other
177
+ end
178
+
179
+ def select(&block)
180
+ return enum_for(__method__) unless block_given?
181
+ to_hash.select(&block)
182
+ end
183
+
184
+ alias select! keep_if if Hash.method_defined? :select!
185
+
186
+ def set(key, options = {})
187
+ @response.set_cookie key.to_s, @options.merge(options)
188
+ end
189
+
190
+ def shift
191
+ key, value = to_hash.shift
192
+ delete(key)
193
+ [key, value]
194
+ end
195
+
196
+ alias size length
197
+
198
+ def sort(&block)
199
+ to_hash.sort(&block)
200
+ end if Hash.method_defined? :sort
201
+
202
+ alias store []=
203
+
204
+ def to_hash
205
+ request_cookies.merge(response_cookies)
206
+ end
207
+
208
+ def to_a
209
+ to_hash.to_a
210
+ end
211
+
212
+ def to_s
213
+ to_hash.to_s
214
+ end
215
+
216
+ alias update merge!
217
+ alias value? has_value?
218
+
219
+ def values
220
+ to_hash.values
221
+ end
222
+
223
+ def values_at(*list)
224
+ list.map { |k| self[k] }
225
+ end
226
+
227
+ private
228
+
229
+ def warn(message)
230
+ super "#{caller.first[/^[^:]:\d+:/]} warning: #{message}"
231
+ end
232
+
233
+ def deleted
234
+ parse_response
235
+ @deleted
236
+ end
237
+
238
+ def response_cookies
239
+ parse_response
240
+ @response_hash
241
+ end
242
+
243
+ def parse_response
244
+ string = @response.headers['Set-Cookie']
245
+ return if @response_string == string
246
+
247
+ hash = {}
248
+
249
+ string.each_line do |line|
250
+ key, value = line.split(';', 2).first.to_s.split('=', 2)
251
+ next if key.nil?
252
+ key = Rack::Utils.unescape(key)
253
+ if line =~ /expires=Thu, 01[-\s]Jan[-\s]1970/
254
+ @deleted << key
255
+ else
256
+ @deleted.delete key
257
+ hash[key] = value
258
+ end
259
+ end
260
+
261
+ @response_hash.replace hash
262
+ @response_string = string
263
+ end
264
+
265
+ def request_cookies
266
+ @request.cookies.reject { |key, value| deleted.include? key }
267
+ end
268
+ end
269
+ end
@@ -0,0 +1,38 @@
1
+ # Based on sinatra/cookies.rb
2
+ # https://github.com/sinatra/sinatra/blob/master/sinatra-contrib/lib/sinatra/cookies.rb
3
+ class Jets::Controller
4
+ # = Jets::Controller::Cookies
5
+ #
6
+ # Easy way to deal with cookies
7
+ #
8
+ # == Usage
9
+ #
10
+ # Allows you to read cookies:
11
+ #
12
+ # def index
13
+ # "value: #{cookies[:something]}"
14
+ # end
15
+ #
16
+ # And of course to write cookies:
17
+ #
18
+ # def show
19
+ # cookies[:something] = 'foobar'
20
+ # render json: cookies
21
+ # end
22
+ #
23
+ # And generally behaves like a hash:
24
+ #
25
+ # def index
26
+ # cookies.merge! 'foo' => 'bar', 'bar' => 'baz'
27
+ # cookies.keep_if { |key, value| key.start_with? 'b' }
28
+ # foo, bar = cookies.values_at 'foo', 'bar'
29
+ # puts "size: #{cookies.length}"
30
+ # render json: cookies
31
+ # end
32
+ #
33
+ module Cookies
34
+ def cookies
35
+ @cookies ||= Jar.new(self)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,6 @@
1
+ class Jets::Controller
2
+ class Error
3
+ class InvalidAuthenticityToken < Error #:nodoc:
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ class Jets::Controller
2
+ class Error < RuntimeError #:nodoc:
3
+ end
4
+ end
@@ -0,0 +1,43 @@
1
+ class Jets::Controller
2
+ module ForgeryProtection
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ config = Jets.config
7
+ default_protect_from_forgery = config.dig(:controllers, :default_protect_from_forgery)
8
+ if default_protect_from_forgery.nil? && config.mode == "html" || default_protect_from_forgery # true
9
+ protect_from_forgery
10
+ end
11
+ end
12
+
13
+ class_methods do
14
+ def protect_from_forgery(options = {})
15
+ before_action :verify_authenticity_token, options
16
+ end
17
+
18
+ def skip_forgery_protection
19
+ skip_before_action :verify_authenticity_token
20
+ end
21
+
22
+ def forgery_protection_enabled?
23
+ # Example:
24
+ #
25
+ # before_actions [[:verify_authenticity_token, {}], [:set_post, {:only=>[:show, :edit, :update, :delete]}
26
+ #
27
+ before_actions.map { |a| a[0] }.include?(:verify_authenticity_token)
28
+ end
29
+ end
30
+
31
+ # Instance methods
32
+ def verify_authenticity_token
33
+ return true if Jets.env.test? || request.get? || request.head?
34
+
35
+ token = session[:authenticity_token]
36
+ verified = !token.nil? && (token == params[:authenticity_token] || token == request.headers["x-csrf-token"])
37
+
38
+ unless verified
39
+ raise Error::InvalidAuthenticityToken
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,17 @@
1
+ class Jets::Controller
2
+ module Layout
3
+ extend ActiveSupport::Concern
4
+ included do
5
+ class_attribute :layout_name
6
+
7
+ def self.layout(name=nil)
8
+ if !name.nil?
9
+ name = name.to_s if name.is_a?(Symbol)
10
+ self.layout_name = name
11
+ else
12
+ self.layout_name
13
+ end
14
+ end
15
+ end # included
16
+ end # Layout
17
+ end
@@ -0,0 +1,60 @@
1
+ # The rack cors middleware handles all types of requests locally, this includes the OPTIONS request.
2
+ # Remotely on lambda, the rack cors middleware handles all requests except the OPTIONS request.
3
+ # The options request is handled by a OPTIONS API Gateway Method Mock. This is to allow it to bypass
4
+ # API Gateway authorizers.
5
+ module Jets::Controller::Middleware
6
+ class Cors
7
+ extend Memoist
8
+
9
+ def initialize(app)
10
+ @app = app
11
+ end
12
+
13
+ def call(env)
14
+ if env['REQUEST_METHOD'] == 'OPTIONS'
15
+ return [200, cors_headers(true), StringIO.new]
16
+ end
17
+
18
+ status, headers, body = @app.call(env)
19
+ cors_headers.each do |k,v|
20
+ headers[k] ||= v
21
+ end
22
+ [status, headers, body]
23
+ end
24
+
25
+ def cors_headers(preflight=false)
26
+ headers = case Jets.config.cors
27
+ when true
28
+ {
29
+ "access-control-allow-origin" => "*", # Required for CORS support to work
30
+ "access-control-allow-credentials" => "true" # Required for cookies, authorization headers with HTTPS
31
+ }
32
+ when String
33
+ {
34
+ "access-control-allow-origin" => Jets.config.cors, # contains Hash with Access-Control-Allow-* values
35
+ "access-control-allow-credentials" => "true" # Required for cookies, authorization headers with HTTPS
36
+ }
37
+ when Hash
38
+ Jets.config.cors # contains Hash with Access-Control-Allow-* values
39
+ else
40
+ {}
41
+ end
42
+
43
+ headers.merge!(preflight_headers) if preflight
44
+ headers
45
+ end
46
+
47
+ private
48
+ # Preflight OPTIONS request has extra headers.
49
+ # This is only used locally. Remotely on AWS Lambda, OPTIONS requests are handled by an API Gateway Method.
50
+ def preflight_headers
51
+ # FYI: Jets as part of the rack processing normalizes the casing of these headers eventually.
52
+ # IE: Access-Control-Allow-Methods
53
+ default = {
54
+ "access-control-allow-methods" => "DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT",
55
+ "access-control-allow-headers" => "Content-Type,X-Amz-Date,Authorization,Auth,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent",
56
+ }
57
+ Jets.config.cors_preflight || default
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,93 @@
1
+ # Takes a Rack env and converts to ApiGateway event
2
+ class Jets::Controller::Middleware::Local
3
+ class ApiGateway
4
+ extend Memoist
5
+
6
+ def initialize(route, env)
7
+ @route, @env = route, env
8
+ end
9
+
10
+ def event
11
+ resource = @route.path(:api_gateway) # posts/{id}/edit
12
+ path = @env['PATH_INFO'].sub('/','') # remove beginning slash
13
+ {
14
+ "resource" => "/#{resource}", # "/posts/{id}/edit"
15
+ "path" => @env['PATH_INFO'], # /posts/tung/edit
16
+ "httpMethod" => @env['REQUEST_METHOD'], # GET
17
+ "headers" => request_headers,
18
+ "queryStringParameters" => query_string_parameters,
19
+ "pathParameters" => @route.extract_parameters(path),
20
+ "stageVariables" => nil,
21
+ "requestContext" => {},
22
+ "body" => get_body,
23
+ "isBase64Encoded" => false,
24
+ }
25
+ end
26
+ memoize :event
27
+
28
+ # Annoying. The headers part of the AWS Lambda proxy structure
29
+ # does not consisently use the same casing scheme for the header keys.
30
+ # Sometimes it looks like this:
31
+ # Accept-Encoding
32
+ # and sometimes it looks like this:
33
+ # cache-control
34
+ # Map for special cases when the casing doesn't match.
35
+ CASING_MAP = {
36
+ "Cache-Control" => "cache-control",
37
+ "Content-Type" => "content-type",
38
+ "Origin" => "origin",
39
+ "Upgrade-Insecure-Requests" => "upgrade-insecure-requests",
40
+ }
41
+
42
+ # Map rack env headers to Api Gateway event headers. Most rack env headers are
43
+ # prepended by HTTP_.
44
+ #
45
+ # Some API Gateway Lambda Proxy are also in the rack env headers. Example:
46
+ #
47
+ # "X-Amz-Cf-Id": "W8DF6J-lx1bkV00eCiBwIq5dldTSGGiG4BinJlxvN_4o8fCZtbsVjw==",
48
+ # "X-Amzn-Trace-Id": "Root=1-5a0dc1ac-58a7db712a57d6aa4186c2ac",
49
+ # "X-Forwarded-For": "88.88.88.88, 54.239.203.117",
50
+ # "X-Forwarded-Port": "443",
51
+ # "X-Forwarded-Proto": "https",
52
+ #
53
+ # For sample dump of the event headers, check out:
54
+ # spec/fixtures/samples/event-headers-form-post.json
55
+ #
56
+ # We generally do add those API Gateway Lambda specific headers because
57
+ # they would be fake anyway and by not adding them we can distinguish a
58
+ # local request from a remote request on API Gateway.
59
+ def request_headers
60
+ headers = @env.select { |k,v| k =~ /^HTTP_/ }.inject({}) do |h,(k,v)|
61
+ # map things like HTTP_USER_AGENT to "User-Agent"
62
+ key = k.sub('HTTP_','').split('_').map(&:capitalize).join('-')
63
+ h[key] = v
64
+ h
65
+ end
66
+ # Content type is not prepended with HTTP_
67
+ headers["Content-Type"] = @env["CONTENT_TYPE"] if @env["CONTENT_TYPE"]
68
+
69
+ # Adjust the casing so it matches the Lambda AWS Proxy structure
70
+ CASING_MAP.each do |nice_casing, bad_casing|
71
+ if headers.key?(nice_casing)
72
+ headers[bad_casing] = headers.delete(nice_casing)
73
+ end
74
+ end
75
+
76
+ headers
77
+ end
78
+
79
+ def query_string_parameters
80
+ Rack::Utils.parse_nested_query(@env['QUERY_STRING'])
81
+ end
82
+
83
+ # To get the post body:
84
+ # rack.input: #<StringIO:0x007f8ccf8db9a0>
85
+ def get_body
86
+ input = @env["rack.input"] || StringIO.new
87
+ body = input.read
88
+ input.rewind # IMPORTANT or else it screws up other middlewares that use the body
89
+ # return nil for blank string, because Lambda AWS_PROXY does this
90
+ body unless body.empty?
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,38 @@
1
+ class Jets::Controller::Middleware::Local
2
+ class MimicAwsCall
3
+ extend Memoist
4
+
5
+ def initialize(route, env)
6
+ @route, @env = route, env
7
+ end
8
+
9
+ def vars
10
+ {
11
+ 'jets.controller' => controller,
12
+ 'lambda.context' => context,
13
+ 'lambda.event' => event,
14
+ 'lambda.meth' => meth,
15
+ }
16
+ end
17
+
18
+ # Actual controller instance
19
+ def controller
20
+ controller_class = @route.controller_name.constantize
21
+ meth = @route.action_name
22
+ controller_class.new(event, context, meth)
23
+ end
24
+
25
+ def meth
26
+ @route.action_name
27
+ end
28
+
29
+ def event
30
+ @env['adapter.event'] || ApiGateway.new(@route, @env).event
31
+ end
32
+ memoize :event
33
+
34
+ def context
35
+ @env['adapter.context'] || {"fake" => "context in mimic_aws_call.rb"}
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,22 @@
1
+ class Jets::Controller::Middleware::Local
2
+ class RouteMatcher
3
+ def initialize(env)
4
+ @env = env
5
+ end
6
+
7
+ def find_route
8
+ Jets::Router::Finder.new(path, method).run
9
+ end
10
+
11
+ private
12
+ attr_reader :env
13
+
14
+ def method
15
+ env["REQUEST_METHOD"] || "GET"
16
+ end
17
+
18
+ def path
19
+ env["PATH_INFO"].sub(/^\//,'')
20
+ end
21
+ end
22
+ end