jets_bb_fork 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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,16 @@
1
+ ## Example
2
+
3
+ $ jets routes
4
+ +--------+----------------+--------------------+
5
+ | Verb | Path | Controller#action |
6
+ +--------+----------------+--------------------+
7
+ | GET | posts | posts#index |
8
+ | GET | posts/new | posts#new |
9
+ | GET | posts/:id | posts#show |
10
+ | POST | posts | posts#create |
11
+ | GET | posts/:id/edit | posts#edit |
12
+ | PUT | posts/:id | posts#update |
13
+ | DELETE | posts/:id | posts#delete |
14
+ | ANY | *catchall | jets/public#show |
15
+ +--------+----------------+--------------------+
16
+ $
@@ -0,0 +1,17 @@
1
+ ## Examples
2
+
3
+ $ jets runner 'puts "hi"'
4
+ hi
5
+ $ jets runner 'puts Jets.env'
6
+ development
7
+
8
+ Using a script in a file. Let's say you have a script:
9
+
10
+ script.rb:
11
+
12
+ ```ruby
13
+ puts "hello world: #{Jets.env}"
14
+ ```
15
+
16
+ $ jets runner file://script.rb
17
+ hello world: development
@@ -0,0 +1,15 @@
1
+ The local server for mimics API Gateway and provides a way to test your app locally without deploying to AWS.
2
+
3
+ ## Examples
4
+
5
+ $ jets server
6
+ => bundle exec shotgun --port 8888 --host 127.0.0.1
7
+ Jets booting up in development mode!
8
+ == Shotgun/WEBrick on http://127.0.0.1:8888/
9
+ [2018-08-17 05:31:33] INFO WEBrick 1.4.2
10
+ [2018-08-17 05:31:33] INFO ruby 2.5.1 (2018-03-29) [x86_64-linux]
11
+ [2018-08-17 05:31:33] INFO WEBrick::HTTPServer#start: pid=27433 port=8888
12
+
13
+ Start up server binding to host `0.0.0.0`:
14
+
15
+ jets server --host 0.0.0.0
@@ -0,0 +1,14 @@
1
+ The CloudFormation stack status info. Essentially the events of the CloudFormation stack since the last update. If the CloudFormation stack is currently updating, this will live tail the events logs.
2
+
3
+ ## Example
4
+
5
+ $ jets status
6
+ The current status for the stack demo-dev is UPDATE_COMPLETE
7
+ Stack events:
8
+ 05:21:42AM UPDATE_IN_PROGRESS AWS::CloudFormation::Stack demo-dev User Initiated
9
+ 05:21:45AM CREATE_IN_PROGRESS AWS::CloudFormation::Stack ApiGateway
10
+ ...
11
+ 05:23:22AM CREATE_COMPLETE AWS::CloudFormation::Stack JetsPreheatJob
12
+ 05:23:25AM UPDATE_COMPLETE_CLEANUP_IN_PROGRESS AWS::CloudFormation::Stack demo-dev
13
+ 05:23:25AM UPDATE_COMPLETE AWS::CloudFormation::Stack demo-dev
14
+ $
@@ -0,0 +1,5 @@
1
+ Upgrades the Jets project structure to the latest version. This command is designed to be idempotent, so it should be safe to run this command multiple times.
2
+
3
+ ## Example
4
+
5
+ $ jets upgrade
@@ -0,0 +1,6 @@
1
+ If routes have been configured and an API Gateway was created for the app, this provides the application's url.
2
+
3
+ ## Example
4
+
5
+ $ jets url
6
+ https://v9wa7vqcia.execute-api.us-west-2.amazonaws.com/dev
@@ -0,0 +1,12 @@
1
+ module Jets::Commands
2
+ class Import < Jets::Commands::Base
3
+ Jets::Commands::Import::Base.cli_options.each do |args|
4
+ class_option(*args)
5
+ end
6
+ long_desc Help.text('import:rails')
7
+ register(Jets::Commands::Import::Rails, "rails", "rails", "Imports rails project in the rack subfolder")
8
+
9
+ long_desc Help.text('import:rack')
10
+ register(Jets::Commands::Import::Rack, "rack", "rack", "Imports rack project in the rack subfolder")
11
+ end
12
+ end
@@ -0,0 +1,49 @@
1
+ class Jets::Commands::Import
2
+ class Base < Sequence
3
+ # Ugly, but when the class_option is only defined in the Thor::Group class
4
+ # it doesnt show up with jets new help :(
5
+ # If anyone knows how to fix this let me know.
6
+ def self.cli_options
7
+ [
8
+ [:submodule, type: :boolean, default: false, desc: "Imports the project as a submodule"],
9
+ ]
10
+ end
11
+ cli_options.each { |args| class_option(*args) }
12
+
13
+ # Since setup is public it will automatically run in the subclasses
14
+ def setup
15
+ start_message
16
+ create_rack_folder
17
+ configure_ruby
18
+ create_rackup_wrappers
19
+ end
20
+
21
+ private
22
+ def start_message
23
+ puts "Importing app into the rack folder..."
24
+ end
25
+
26
+ def create_rack_folder
27
+ repo? ? clone_project : copy_project
28
+ end
29
+
30
+ def configure_ruby
31
+ gsub_file 'rack/Gemfile', /^ruby(.*)/, '# ruby\1' # comment out ruby declaration
32
+ create_file "rack/.ruby-version", RUBY_VERSION, force: true
33
+ end
34
+
35
+ def create_rackup_wrappers
36
+ path = File.expand_path("../../builders/rackup_wrappers", File.dirname(__FILE__))
37
+ Dir.glob("#{path}/*").each do |p|
38
+ FileUtils.cp(p, "#{rack_folder}/bin/")
39
+ end
40
+ chmod "#{rack_folder}/bin/rackup", 0755
41
+ end
42
+
43
+ def bundle_install
44
+ Bundler.with_clean_env do
45
+ run "cd rack && bundle install"
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,35 @@
1
+ class Jets::Commands::Import
2
+ class Cheatsheet
3
+ def self.create(rack_repo_url)
4
+ new(rack_repo_url).create
5
+ end
6
+
7
+ def initialize(rack_repo_url)
8
+ @rack_repo_url = rack_repo_url
9
+ end
10
+
11
+ def create
12
+ path = File.expand_path("./templates/", File.dirname(__FILE__)) + "/submodules-cheatsheet.md"
13
+ basename = File.basename(path)
14
+ dest = "#{Jets.root}/#{basename}"
15
+ cheatsheet = Jets::Erb.result(path, cheatsheet_vars)
16
+ FileUtils.mkdir_p(File.dirname(dest))
17
+ IO.write(dest, cheatsheet)
18
+ puts "Created #{basename} to help with using submodules."
19
+ end
20
+
21
+ def cheatsheet_vars
22
+ import_command = ARGV[0]
23
+ {
24
+ import_command: import_command,
25
+ rack_repo_url: @rack_repo_url,
26
+ jets_project_repo_url: jets_project_repo_url,
27
+ }
28
+ end
29
+
30
+ def jets_project_repo_url
31
+ # Thanks: https://stackoverflow.com/questions/4089430/how-can-i-determine-the-url-that-a-local-git-repository-was-originally-cloned-fr/4089452
32
+ `git config --get remote.origin.url`.strip rescue 'https://github.com/user/repo'
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,16 @@
1
+ class Jets::Commands::Import
2
+ class Rack < Base
3
+ def install
4
+ bundle_install
5
+ end
6
+
7
+ def finish_message
8
+ puts <<~EOL
9
+ #{"="*30}
10
+ Congrats! The Rack project from #{@source} has been imported to the rack folder.
11
+
12
+ Note, generic rack projects will likely need some adjustments to take into account API Gateway stages and logging. For more info refer to [Mega Mode Considerations](http://rubyonjets.com//megamode-details/).
13
+ EOL
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,74 @@
1
+ class Jets::Commands::Import
2
+ class Rails < Base
3
+ # We add jets-rails gem even though it's only activated within the megamode
4
+ # rackup wrapper script so user can check run bundle install and determine early
5
+ # if dependencies are met. The jets-rails gem is also added as part of the deploy
6
+ # process but we add it here also so the user gets earlier possible errors and
7
+ # can fix before they hit the deploy phase.
8
+ def configure_gemfile
9
+ append_to_file 'rack/Gemfile' do
10
+ %Q|gem "jets-rails"\n|
11
+ end
12
+ end
13
+
14
+ def install
15
+ bundle_install
16
+ end
17
+
18
+ def configure_routes
19
+ # comment out current catchall route
20
+ comment_lines("config/routes.rb", 'any[ (][\'"]\*', verbose: true) # any "*catchall", to: ...
21
+
22
+ # Add catchall route for rack
23
+ insert_into_file "config/routes.rb", :before => /^end/ do
24
+ <<-CODE
25
+ # Enables Mega Mode Rails integration
26
+ any "*catchall", to: "jets/rack#process"
27
+ CODE
28
+ end
29
+ end
30
+
31
+ def reconfigure_database_yml
32
+ Jets::Turbo::DatabaseYaml.new.reconfigure
33
+ end
34
+
35
+ def finish_message
36
+ puts <<~EOL
37
+ #{"="*30}
38
+ Congrats! The Rails project from #{@source} has been imported to the rack folder. Here are some next steps:
39
+
40
+ # Local Testing
41
+
42
+ Check out the config/routes.rb file and noticed how a new catchall route has been added. It looks something like this:
43
+
44
+ any "*catchall", to: "jets/rack#process"
45
+
46
+ The catchall route passes any route not handled by the Jets app as a request onto the Rails app. You can modified the route to selectively route what you want.
47
+
48
+ Please double check that rack/config/database.yml is appropriately configured, it likely needs to be updated.
49
+
50
+ Test the application locally. Test that the Rails app in the rack subfolder works independently. You can start the application up with:
51
+
52
+ cd rack # cd into the imported Rails project
53
+ bundle exec rackup
54
+
55
+ The rack server starts up on http://localhost:9292
56
+
57
+ Once tested, stop that server with CTRL-C.
58
+
59
+ Then you can start the jets server from the main jets project:
60
+
61
+ cd .. # back to the main jets projet
62
+ jets server # starts both jets and rack servers
63
+
64
+ The jets server starts up on http://localhost:8888 You can stop both servers with CTRL-C.
65
+
66
+ # Deploy
67
+
68
+ When you are ready deploy to AWS Lambda with:
69
+
70
+ jets deploy
71
+ EOL
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,90 @@
1
+ require 'bundler'
2
+ require 'fileutils'
3
+ require 'thor'
4
+
5
+ class Jets::Commands::Import
6
+ class Sequence < Thor::Group
7
+ include Thor::Actions
8
+ argument :source
9
+
10
+ private
11
+ def clone_project
12
+ if File.exist?(rack_folder)
13
+ abort "The folder #{rack_folder} already exists. Please remove it first if you want to import a project."
14
+ end
15
+
16
+ check_git_installed
17
+ if @options[:submodule]
18
+ git_submodule
19
+ else
20
+ git_clone
21
+ end
22
+ end
23
+
24
+ def git_submodule
25
+ puts "Adding project as a submodule"
26
+ run "git submodule add --force #{repo_url} #{rack_folder}"
27
+ Cheatsheet.create(repo_url)
28
+ end
29
+
30
+ def git_clone
31
+ command = "git clone #{repo_url} #{rack_folder}"
32
+ # Thor's run already puts out the command, so no need to puts
33
+ run command
34
+ run "rm -rf #{Jets.root}rack/.git"
35
+ end
36
+
37
+ def copy_project
38
+ puts "Creating rack folder"
39
+ template_path = File.expand_path(@source)
40
+ set_source_paths(template_path)
41
+ begin
42
+ directory ".", rack_folder, exclude_pattern: %r{.git}
43
+ rescue Thor::Error => e
44
+ puts e.message.color(:red)
45
+ exit 1
46
+ end
47
+ end
48
+
49
+ def set_source_paths(*paths)
50
+ # Using string with instance_eval because block doesnt have access to
51
+ # path at runtime.
52
+ self.class.instance_eval %{
53
+ def self.source_paths
54
+ #{paths.flatten.inspect}
55
+ end
56
+ }
57
+ end
58
+
59
+ # normalize repo_url
60
+ def repo_url
61
+ if repo?
62
+ @source # leave as is, user has provided full github url
63
+ else
64
+ # Defaults to GitHub
65
+ "https://github.com/#{@source}"
66
+ end
67
+ end
68
+
69
+ def repo?
70
+ @source.include?('github.com') ||
71
+ @source.include?('bitbucket.org') ||
72
+ @source.include?('gitlab.com')
73
+ end
74
+
75
+ def check_git_installed
76
+ return unless repo_url.include?('http') || repo_url.include?('git@')
77
+ unless git_installed?
78
+ abort "Unable to detect git installation on your system. Git needs to be installed in order to clone the project."
79
+ end
80
+ end
81
+
82
+ def git_installed?
83
+ system("type git > /dev/null 2>&1")
84
+ end
85
+
86
+ def rack_folder
87
+ "#{Jets.root}/rack"
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,26 @@
1
+ default: &default
2
+ adapter: <%= @adapter %>
3
+ encoding: utf8
4
+ pool: <%%= ENV["DB_POOL"] || 5 %>
5
+ database: <%%= ENV['DB_NAME'] || '<%= @database_development %>' %>
6
+ <% if @adapter == 'postgresql' -%>
7
+ username: <%%= ENV['DB_USER'] || ENV['USER'] %>
8
+ <% else -%>
9
+ username: <%%= ENV['DB_USER'] || 'root' %>
10
+ <% end -%>
11
+ password: <%%= ENV['DB_PASS'] %>
12
+ host: <%%= ENV["DB_HOST"] %>
13
+ url: <%%= ENV['DATABASE_URL'] %> # takes higher precedence than other settings
14
+
15
+ development:
16
+ <<: *default
17
+ database: <%%= ENV['DB_NAME'] || '<%= @database_development %>' %>
18
+
19
+ test:
20
+ <<: *default
21
+ database: <%= @database_test %>
22
+
23
+ production:
24
+ <<: *default
25
+ database: <%= @database_production %>
26
+ url: <%%= ENV['DATABASE_URL'] %>
@@ -0,0 +1,89 @@
1
+ # Git Submodule Cheatsheet
2
+
3
+ Git submodules take a little bit of getting used to. This is a cheatsheet for Git Submodules to help learn how to use them. This file was generated as part of the `jets <%= @import_command %>` command.
4
+
5
+ ## Cheatsheet Summary
6
+
7
+ The important submodule commands are:
8
+
9
+ ### On fresh clone project
10
+
11
+ git clone <%= @jets_project_repo_url %>
12
+ git submodule init # required on a fresh clone, or update won't do anything
13
+ git submodule update # syncs submodule rack folder with what parent project has as commits
14
+
15
+ ### Updating
16
+
17
+ After doing a git pull on the Jets main project, you might notice changes to the submodule rack folder, you can update the rack folder with:
18
+
19
+ git submodule update # syncs submodule rack folder with what parent project has as commits
20
+
21
+ ## More Details
22
+
23
+ The rest of the guide will explain in a little more detail submodules.
24
+
25
+ ## What are Git Submodules?
26
+
27
+ Git submodules are a way to have a subfolder in your project be managed as a separate git repo. The submodule folder is its own separate git repo and has its own history. The parent git project references a commit from the submodule project to sync up the subfolder accordingly. Using submodules allows you to include a rack subfolder project into your Jets project code base and managed the rack project as a separate git repo.
28
+
29
+ By using the `--submodule` option when you run the `jets import` command, Jets imports the rack project to the rack folder as a submodule. This allows you to keep development of the rack project independent from the development of the Jets project. This is a useful setup if you are testing [Jets Mega Mode](http://rubyonjets.com/docs/megamode/) for more extended periods of time.
30
+
31
+ We'll show you how to managed and sync the `rack` submodule folder with the parent Jets project folder.
32
+
33
+ ### rack submodule
34
+
35
+ A rack folder was added to your Jets project as a git submodule. Essentially this command was run.
36
+
37
+ git submodule add --force <%= @rack_repo_url %> rack
38
+
39
+ The rack submodule folder gets immediately synced as a part of that `git submodule add` command. This has already happened as part of the `jets <%= @import_command %>, we're just explaining the underlying command in case you're interested.
40
+
41
+ ### Fresh Clone
42
+
43
+ **IMPORTANT**: On a fresh clone of your project, submodule folders do not automatically update and appear "empty". This can be confusing for people who don't use submodules often. So here are the commands to update and sync the submodule folder:
44
+
45
+ git clone <%= @jets_project_repo_url %>
46
+ git submodule init # important to run init or next update will do nothing
47
+ git submodule update # after this the rack folder will no longer be empty
48
+ # and will have code from <%= @rack_repo_url %>
49
+
50
+ ### Remove submodule
51
+
52
+ If you ever decide to remove the submodule from your project, here are the commands.
53
+
54
+ git submodule deinit rack
55
+ git rm rack
56
+ # then add and commit your changes
57
+
58
+ ## Updating Projects
59
+
60
+ The typical workflow is to go into the rack folder and run `git pull` to update the submodule folder to the latest changes. Then you cd back up to the main Jets project folder and run `git add`. This updates the project submodule commit reference, which then allows others to pull down the changes and resync the submodules to the same commit. We'll go through some examples to help explain:
61
+
62
+ ### Updating rack folder submodule
63
+
64
+ Here's an example where we will update the rack submodule folder to the latest `master` branch. Remember the master branch refers to the `rack` submodule folder of the <%= @rack_repo_url %> in this case.
65
+
66
+ cd my-jets-project # root of the Jets project
67
+ cd rack # in the submodule now, which contains a different repo history
68
+ git checkout master # on a fresh clone, the submodule folder will point to a specific git sha instead of a branch
69
+ git pull # get latest changes in master
70
+ cd .. # back to parent Jets project
71
+ git status # notice, it'll say: modified: rack (new commits)
72
+ git add rack # updates the main projects' reference to the submodule git commit
73
+ git commit -m "update rack submodule"
74
+ git push # send your changes to everyone else
75
+
76
+ Eventually, later another developer will pull down your changes on the Jets project and notice that the submodules have been updated. When he runs a `git pull` and then does a `git status` he'll notice this:
77
+
78
+ $ git pull # another developer pulled down the changes
79
+ $ git st # notice the changes
80
+ modified: rack (new commits)
81
+ $ git diff # another way a summary of the changes in the rack project
82
+ Submodule rack 6b0fb3a..4f6ea3f (rewind):
83
+ < test commit in rack submodule project
84
+
85
+ This is when the developer will need to resync the rack submodule folder. He does it with this:
86
+
87
+ git submodule update # updates the rack folder to the commit that the parent is referencing
88
+
89
+ That's it!