jets_bb_fork 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/bin/commit_docs.sh +26 -0
  3. data/.circleci/config.yml +126 -0
  4. data/.codebuild/README.md +68 -0
  5. data/.codebuild/bin/jets +3 -0
  6. data/.codebuild/buildspec-base.yml +14 -0
  7. data/.codebuild/integration.sh +72 -0
  8. data/.codebuild/jets.postman_collection.json +323 -0
  9. data/.codebuild/scripts/install-docker.sh +12 -0
  10. data/.codebuild/scripts/install-dynamodb-local.sh +22 -0
  11. data/.codebuild/scripts/install-java.sh +22 -0
  12. data/.codebuild/scripts/install-node.sh +4 -0
  13. data/.github/ISSUE_TEMPLATE.md +7 -0
  14. data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
  15. data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
  16. data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
  17. data/.github/ISSUE_TEMPLATE/question.md +16 -0
  18. data/.github/PULL_REQUEST_TEMPLATE.md +42 -0
  19. data/.gitignore +24 -0
  20. data/.gitmodules +0 -0
  21. data/.python-version +1 -0
  22. data/.rspec +4 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +734 -0
  25. data/CONDUCT.md +1 -0
  26. data/CONTRIBUTING.md +1 -0
  27. data/Dockerfile +16 -0
  28. data/Dockerfile.base +53 -0
  29. data/Gemfile +14 -0
  30. data/Guardfile +22 -0
  31. data/LICENSE.txt +22 -0
  32. data/Procfile +2 -0
  33. data/README.md +203 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +16 -0
  36. data/bin/release +9 -0
  37. data/buildspec.yml +18 -0
  38. data/exe/jets_bb_fork +14 -0
  39. data/jets.gemspec +68 -0
  40. data/lib/jets.rb +27 -0
  41. data/lib/jets/application.rb +216 -0
  42. data/lib/jets/application/defaults.rb +172 -0
  43. data/lib/jets/autoloaders.rb +97 -0
  44. data/lib/jets/aws_info.rb +113 -0
  45. data/lib/jets/aws_services.rb +65 -0
  46. data/lib/jets/aws_services/global_memoist.rb +57 -0
  47. data/lib/jets/aws_services/s3_bucket.rb +34 -0
  48. data/lib/jets/aws_services/stack_status.rb +59 -0
  49. data/lib/jets/booter.rb +119 -0
  50. data/lib/jets/builders/code_builder.rb +399 -0
  51. data/lib/jets/builders/code_size.rb +57 -0
  52. data/lib/jets/builders/gem_replacer.rb +76 -0
  53. data/lib/jets/builders/handler_generator.rb +186 -0
  54. data/lib/jets/builders/lambda_layer.rb +69 -0
  55. data/lib/jets/builders/md5.rb +60 -0
  56. data/lib/jets/builders/md5_zip.rb +61 -0
  57. data/lib/jets/builders/purger.rb +35 -0
  58. data/lib/jets/builders/rack_packager.rb +51 -0
  59. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  61. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/ruby_packager.rb +207 -0
  64. data/lib/jets/builders/shim_vars/app.rb +78 -0
  65. data/lib/jets/builders/shim_vars/base.rb +25 -0
  66. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  67. data/lib/jets/builders/templates/handler.rb +12 -0
  68. data/lib/jets/builders/tidy.rb +107 -0
  69. data/lib/jets/builders/util.rb +31 -0
  70. data/lib/jets/bundle.rb +82 -0
  71. data/lib/jets/camelizer.rb +71 -0
  72. data/lib/jets/cfn/builders/api_deployment_builder.rb +63 -0
  73. data/lib/jets/cfn/builders/api_gateway_builder.rb +157 -0
  74. data/lib/jets/cfn/builders/base_child_builder.rb +75 -0
  75. data/lib/jets/cfn/builders/controller_builder.rb +42 -0
  76. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  77. data/lib/jets/cfn/builders/interface.rb +137 -0
  78. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  79. data/lib/jets/cfn/builders/paged.rb +37 -0
  80. data/lib/jets/cfn/builders/parent_builder.rb +100 -0
  81. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  82. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  83. data/lib/jets/cfn/ship.rb +185 -0
  84. data/lib/jets/cfn/status.rb +212 -0
  85. data/lib/jets/cfn/upload.rb +139 -0
  86. data/lib/jets/cli.rb +194 -0
  87. data/lib/jets/commands/base.rb +146 -0
  88. data/lib/jets/commands/build.rb +234 -0
  89. data/lib/jets/commands/call.rb +169 -0
  90. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  91. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  92. data/lib/jets/commands/call/base_guesser.rb +60 -0
  93. data/lib/jets/commands/call/guesser.rb +48 -0
  94. data/lib/jets/commands/clean.rb +19 -0
  95. data/lib/jets/commands/clean/base.rb +24 -0
  96. data/lib/jets/commands/clean/build.rb +13 -0
  97. data/lib/jets/commands/clean/log.rb +107 -0
  98. data/lib/jets/commands/console.rb +12 -0
  99. data/lib/jets/commands/db.rb +13 -0
  100. data/lib/jets/commands/db/environment-task.rake +3 -0
  101. data/lib/jets/commands/db/tasks.rb +44 -0
  102. data/lib/jets/commands/dbconsole.rb +131 -0
  103. data/lib/jets/commands/delete.rb +143 -0
  104. data/lib/jets/commands/deploy.rb +141 -0
  105. data/lib/jets/commands/dynamodb.rb +19 -0
  106. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  107. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  108. data/lib/jets/commands/gems.rb +21 -0
  109. data/lib/jets/commands/help.rb +9 -0
  110. data/lib/jets/commands/help/build.md +6 -0
  111. data/lib/jets/commands/help/call.md +61 -0
  112. data/lib/jets/commands/help/clean/build.md +5 -0
  113. data/lib/jets/commands/help/clean/log.md +5 -0
  114. data/lib/jets/commands/help/console.md +18 -0
  115. data/lib/jets/commands/help/db/generate.md +8 -0
  116. data/lib/jets/commands/help/dbconsole.md +9 -0
  117. data/lib/jets/commands/help/delete.md +22 -0
  118. data/lib/jets/commands/help/deploy.md +32 -0
  119. data/lib/jets/commands/help/destroy.md +16 -0
  120. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  121. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  122. data/lib/jets/commands/help/gems/check.md +8 -0
  123. data/lib/jets/commands/help/generate.md +22 -0
  124. data/lib/jets/commands/help/import/rack.md +13 -0
  125. data/lib/jets/commands/help/import/rails.md +11 -0
  126. data/lib/jets/commands/help/new.md +42 -0
  127. data/lib/jets/commands/help/routes.md +16 -0
  128. data/lib/jets/commands/help/runner.md +17 -0
  129. data/lib/jets/commands/help/server.md +15 -0
  130. data/lib/jets/commands/help/status.md +14 -0
  131. data/lib/jets/commands/help/upgrade.md +5 -0
  132. data/lib/jets/commands/help/url.md +6 -0
  133. data/lib/jets/commands/import.rb +12 -0
  134. data/lib/jets/commands/import/base.rb +49 -0
  135. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  136. data/lib/jets/commands/import/rack.rb +16 -0
  137. data/lib/jets/commands/import/rails.rb +74 -0
  138. data/lib/jets/commands/import/sequence.rb +90 -0
  139. data/lib/jets/commands/import/templates/config/database.yml +26 -0
  140. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  141. data/lib/jets/commands/main.rb +157 -0
  142. data/lib/jets/commands/markdown/creator.rb +58 -0
  143. data/lib/jets/commands/markdown/index.rb +27 -0
  144. data/lib/jets/commands/markdown/page.rb +125 -0
  145. data/lib/jets/commands/markdown/shell.rb +11 -0
  146. data/lib/jets/commands/new.rb +157 -0
  147. data/lib/jets/commands/rake_command.rb +61 -0
  148. data/lib/jets/commands/rake_tasks.rb +46 -0
  149. data/lib/jets/commands/runner.rb +16 -0
  150. data/lib/jets/commands/sequence.rb +99 -0
  151. data/lib/jets/commands/stack_info.rb +30 -0
  152. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  153. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  154. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  155. data/lib/jets/commands/templates/skeleton/Gemfile.tt +38 -0
  156. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  157. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  158. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  159. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  160. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  161. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  162. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  163. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  164. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +25 -0
  165. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  166. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +67 -0
  167. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +26 -0
  168. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  169. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  170. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  171. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  172. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  173. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  174. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  175. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  176. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  177. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  178. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  179. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  180. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  181. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  182. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  183. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +14 -0
  184. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  185. data/lib/jets/commands/templates/webpacker/app/javascript/src/jets/crud.js +87 -0
  186. data/lib/jets/commands/upgrade.rb +145 -0
  187. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  188. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  189. data/lib/jets/commands/url.rb +68 -0
  190. data/lib/jets/commands/webpacker_template.rb +18 -0
  191. data/lib/jets/controller.rb +3 -0
  192. data/lib/jets/controller/base.rb +108 -0
  193. data/lib/jets/controller/callbacks.rb +68 -0
  194. data/lib/jets/controller/cookies.rb +38 -0
  195. data/lib/jets/controller/cookies/jar.rb +269 -0
  196. data/lib/jets/controller/layout.rb +17 -0
  197. data/lib/jets/controller/middleware/cors.rb +60 -0
  198. data/lib/jets/controller/middleware/local.rb +116 -0
  199. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  200. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  201. data/lib/jets/controller/middleware/local/route_matcher.rb +106 -0
  202. data/lib/jets/controller/middleware/main.rb +46 -0
  203. data/lib/jets/controller/middleware/reloader.rb +15 -0
  204. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  205. data/lib/jets/controller/params.rb +87 -0
  206. data/lib/jets/controller/rack/adapter.rb +88 -0
  207. data/lib/jets/controller/rack/env.rb +105 -0
  208. data/lib/jets/controller/redirection.rb +55 -0
  209. data/lib/jets/controller/rendering.rb +79 -0
  210. data/lib/jets/controller/rendering/rack_renderer.rb +250 -0
  211. data/lib/jets/controller/request.rb +29 -0
  212. data/lib/jets/controller/response.rb +61 -0
  213. data/lib/jets/controller/stage.rb +33 -0
  214. data/lib/jets/core.rb +149 -0
  215. data/lib/jets/core_ext/kernel.rb +13 -0
  216. data/lib/jets/db.rb +15 -0
  217. data/lib/jets/dotenv.rb +48 -0
  218. data/lib/jets/dotenv/ssm.rb +48 -0
  219. data/lib/jets/erb.rb +51 -0
  220. data/lib/jets/generator.rb +48 -0
  221. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  222. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +39 -0
  223. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  224. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  225. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  226. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  227. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  228. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  229. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  230. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  231. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  232. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  233. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  234. data/lib/jets/inflections.rb +32 -0
  235. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  236. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  237. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +25 -0
  238. data/lib/jets/internal/app/functions/jets/base_path.rb +157 -0
  239. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  240. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  241. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +43 -0
  242. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  243. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  244. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  245. data/lib/jets/internal/turbines/jets/mailer.rb +51 -0
  246. data/lib/jets/job/base.rb +39 -0
  247. data/lib/jets/job/dsl.rb +40 -0
  248. data/lib/jets/job/dsl/dynamodb_event.rb +65 -0
  249. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  250. data/lib/jets/job/dsl/iot_event.rb +24 -0
  251. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  252. data/lib/jets/job/dsl/log_event.rb +15 -0
  253. data/lib/jets/job/dsl/rule_event.rb +75 -0
  254. data/lib/jets/job/dsl/s3_event.rb +36 -0
  255. data/lib/jets/job/dsl/sns_event.rb +54 -0
  256. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  257. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  258. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  259. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  260. data/lib/jets/klass.rb +109 -0
  261. data/lib/jets/lambda/dsl.rb +419 -0
  262. data/lib/jets/lambda/function.rb +29 -0
  263. data/lib/jets/lambda/function_constructor.rb +55 -0
  264. data/lib/jets/lambda/functions.rb +34 -0
  265. data/lib/jets/lambda/task.rb +111 -0
  266. data/lib/jets/logger.rb +21 -0
  267. data/lib/jets/mega/hash_converter.rb +25 -0
  268. data/lib/jets/mega/request.rb +139 -0
  269. data/lib/jets/mega/request/source.rb +21 -0
  270. data/lib/jets/middleware.rb +33 -0
  271. data/lib/jets/middleware/configurator.rb +84 -0
  272. data/lib/jets/middleware/default_stack.rb +51 -0
  273. data/lib/jets/middleware/layer.rb +34 -0
  274. data/lib/jets/middleware/stack.rb +77 -0
  275. data/lib/jets/naming.rb +49 -0
  276. data/lib/jets/overrides/lambda.rb +1 -0
  277. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  278. data/lib/jets/overrides/rails.rb +4 -0
  279. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  280. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  281. data/lib/jets/overrides/rails/rendering_helper.rb +26 -0
  282. data/lib/jets/overrides/rails/url_helper.rb +25 -0
  283. data/lib/jets/poly_fun.rb +73 -0
  284. data/lib/jets/poly_fun/base_executor.rb +125 -0
  285. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  286. data/lib/jets/poly_fun/node_error.rb +8 -0
  287. data/lib/jets/poly_fun/node_executor.rb +54 -0
  288. data/lib/jets/poly_fun/python_error.rb +8 -0
  289. data/lib/jets/poly_fun/python_executor.rb +23 -0
  290. data/lib/jets/preheat.rb +117 -0
  291. data/lib/jets/processors/deducer.rb +65 -0
  292. data/lib/jets/processors/main_processor.rb +61 -0
  293. data/lib/jets/rack_server.rb +86 -0
  294. data/lib/jets/rdoc.rb +30 -0
  295. data/lib/jets/resource.rb +71 -0
  296. data/lib/jets/resource/api_gateway/base_path/function.rb +42 -0
  297. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  298. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  299. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  300. data/lib/jets/resource/api_gateway/deployment.rb +78 -0
  301. data/lib/jets/resource/api_gateway/domain_name.rb +59 -0
  302. data/lib/jets/resource/api_gateway/method.rb +98 -0
  303. data/lib/jets/resource/api_gateway/resource.rb +101 -0
  304. data/lib/jets/resource/api_gateway/rest_api.rb +56 -0
  305. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +42 -0
  306. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +63 -0
  307. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  308. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +8 -0
  309. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +130 -0
  310. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +29 -0
  311. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +39 -0
  312. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  313. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  314. data/lib/jets/resource/associated.rb +37 -0
  315. data/lib/jets/resource/base.rb +28 -0
  316. data/lib/jets/resource/child_stack/api_deployment.rb +56 -0
  317. data/lib/jets/resource/child_stack/api_gateway.rb +53 -0
  318. data/lib/jets/resource/child_stack/app_class.rb +107 -0
  319. data/lib/jets/resource/child_stack/base.rb +24 -0
  320. data/lib/jets/resource/child_stack/shared.rb +92 -0
  321. data/lib/jets/resource/config/config_rule.rb +74 -0
  322. data/lib/jets/resource/config/managed_rule.rb +15 -0
  323. data/lib/jets/resource/events/rule.rb +31 -0
  324. data/lib/jets/resource/iam/application_role.rb +27 -0
  325. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  326. data/lib/jets/resource/iam/class_role.rb +74 -0
  327. data/lib/jets/resource/iam/function_role.rb +54 -0
  328. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  329. data/lib/jets/resource/iam/policy_document.rb +41 -0
  330. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  331. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  332. data/lib/jets/resource/lambda/function.rb +214 -0
  333. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  334. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  335. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  336. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  337. data/lib/jets/resource/permission.rb +45 -0
  338. data/lib/jets/resource/replacer.rb +85 -0
  339. data/lib/jets/resource/route53/record_set.rb +70 -0
  340. data/lib/jets/resource/s3/bucket.rb +24 -0
  341. data/lib/jets/resource/sns/subscription.rb +29 -0
  342. data/lib/jets/resource/sns/topic.rb +35 -0
  343. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  344. data/lib/jets/resource/sqs/queue.rb +21 -0
  345. data/lib/jets/resource/standardizer.rb +42 -0
  346. data/lib/jets/route.rb +166 -0
  347. data/lib/jets/router.rb +177 -0
  348. data/lib/jets/router/scope.rb +30 -0
  349. data/lib/jets/rule/base.rb +19 -0
  350. data/lib/jets/rule/dsl.rb +110 -0
  351. data/lib/jets/spec_helpers.rb +54 -0
  352. data/lib/jets/spec_helpers/params.rb +10 -0
  353. data/lib/jets/spec_helpers/request.rb +78 -0
  354. data/lib/jets/spec_helpers/response.rb +5 -0
  355. data/lib/jets/stack.rb +88 -0
  356. data/lib/jets/stack/builder.rb +43 -0
  357. data/lib/jets/stack/definition.rb +50 -0
  358. data/lib/jets/stack/depends.rb +34 -0
  359. data/lib/jets/stack/depends/item.rb +9 -0
  360. data/lib/jets/stack/function.rb +69 -0
  361. data/lib/jets/stack/main.rb +4 -0
  362. data/lib/jets/stack/main/dsl.rb +28 -0
  363. data/lib/jets/stack/main/dsl/base.rb +49 -0
  364. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  365. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  366. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  367. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  368. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  369. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  370. data/lib/jets/stack/output.rb +35 -0
  371. data/lib/jets/stack/output/dsl.rb +19 -0
  372. data/lib/jets/stack/output/lookup.rb +36 -0
  373. data/lib/jets/stack/parameter.rb +37 -0
  374. data/lib/jets/stack/parameter/dsl.rb +42 -0
  375. data/lib/jets/stack/resource.rb +31 -0
  376. data/lib/jets/stack/resource/dsl.rb +19 -0
  377. data/lib/jets/stack/s3_event.rb +87 -0
  378. data/lib/jets/tmp_loader.rb +52 -0
  379. data/lib/jets/turbine.rb +41 -0
  380. data/lib/jets/turbo.rb +55 -0
  381. data/lib/jets/turbo/database_yaml.rb +41 -0
  382. data/lib/jets/turbo/project/.gitignore +12 -0
  383. data/lib/jets/turbo/project/.jetskeep +1 -0
  384. data/lib/jets/turbo/project/Gemfile +16 -0
  385. data/lib/jets/turbo/project/Rakefile +2 -0
  386. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  387. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  388. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  389. data/lib/jets/turbo/project/config.ru +5 -0
  390. data/lib/jets/turbo/project/config/application.rb +4 -0
  391. data/lib/jets/turbo/project/config/routes.rb +4 -0
  392. data/lib/jets/turbo/rails.rb +127 -0
  393. data/lib/jets/turbo/templates/config/database.yml +26 -0
  394. data/lib/jets/util.rb +38 -0
  395. data/lib/jets/version.rb +3 -0
  396. data/readme/prerelease.md +6 -0
  397. data/readme/testing.md +60 -0
  398. metadata +1004 -0
@@ -0,0 +1,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,51 @@
1
+ module Jets::Middleware
2
+ class DefaultStack
3
+ attr_reader :config, :app
4
+ def initialize(app, config)
5
+ @app = app
6
+ @config = config
7
+ end
8
+
9
+ def build_stack
10
+ Stack.new do |middleware|
11
+ middleware.use Shotgun::Static if Jets.env.development?
12
+ middleware.use Rack::Runtime
13
+ middleware.use Jets::Controller::Middleware::Cors if cors_enabled?
14
+ middleware.use Rack::MethodOverride # must come before Middleware::Local for multipart post forms to work
15
+ middleware.use Jets::Controller::Middleware::Reloader if Jets.env.development?
16
+ middleware.use Jets::Controller::Middleware::Local # mimics AWS Lambda for local server only
17
+ middleware.use session_store, session_options
18
+ middleware.use Rack::Head
19
+ middleware.use Rack::ConditionalGet
20
+ middleware.use Rack::ETag
21
+ use_webpacker(middleware)
22
+ end
23
+ end
24
+
25
+ private
26
+ def cors_enabled?
27
+ Jets.config.cors
28
+ end
29
+
30
+ # Written as method to easily not include webpacker for case when either
31
+ # webpacker not installed at all or disabled upon `jets deploy`.
32
+ def use_webpacker(middleware)
33
+ return unless Jets.webpacker? # checks for local development if webpacker installed
34
+ # Different check for middleware because we need webpacker helpers for url helpers.
35
+ # But we dont want to actually serve via webpacker middleware when running on AWS.
36
+ # By this time the url helpers are serving assets out of s3.
37
+ return if File.exist?("#{Jets.root}/config/disable-webpacker-middleware.txt") # created as part of `jets deploy`
38
+ require "jets/controller/middleware/webpacker_setup"
39
+ middleware.use Webpacker::DevServerProxy
40
+ end
41
+
42
+ def session_store
43
+ Jets.config.session[:store] # do not use dot notation. session.store is a method on ActiveSupport::OrderedOptions.new
44
+ end
45
+
46
+ def session_options
47
+ defaults = { secret: ENV['SECRET_KEY_BASE'] }
48
+ defaults.merge(Jets.config.session.options)
49
+ end
50
+ end
51
+ 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,49 @@
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 = app_class.to_s.underscore.gsub('/','-')
11
+ "#{template_path_prefix}-app-#{underscored}.yml"
12
+ end
13
+
14
+ def shared_template_path(shared_class)
15
+ underscored = shared_class.to_s.underscore.gsub('/','-')
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(suffix)
30
+ "#{template_path_prefix}-api-gateway#{suffix}.yml"
31
+ end
32
+
33
+ def api_deployment_template_path
34
+ "#{template_path_prefix}-api-deployment.yml"
35
+ end
36
+
37
+ def shared_resources_template_path
38
+ "#{template_path_prefix}-shared-resources.yml"
39
+ end
40
+
41
+ def parent_stack_name
42
+ File.basename(parent_template_path, ".yml")
43
+ end
44
+
45
+ def gateway_api_name
46
+ "#{Jets.config.project_namespace}"
47
+ end
48
+ end
49
+ end
@@ -0,0 +1 @@
1
+ require "jets/overrides/lambda/marshaller"
@@ -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,4 @@
1
+ require "jets/overrides/rails/common_methods"
2
+ require "jets/overrides/rails/url_helper"
3
+ require "jets/overrides/rails/rendering_helper"
4
+ require "jets/overrides/rails/asset_tag_helper"
@@ -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)