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,139 @@
1
+ require 'action_view'
2
+ require 'digest'
3
+
4
+ module Jets::Cfn
5
+ class Upload
6
+ include Jets::AwsServices
7
+ include ActionView::Helpers::NumberHelper # number_to_human_size
8
+
9
+ attr_reader :bucket_name
10
+ def initialize(bucket_name)
11
+ @bucket_name = bucket_name
12
+ end
13
+
14
+ def upload
15
+ upload_cfn_templates
16
+ upload_zip_files
17
+ upload_assets
18
+ end
19
+
20
+ def upload_cfn_templates
21
+ puts "Uploading CloudFormation templates to S3."
22
+ expression = "#{Jets::Naming.template_path_prefix}-*"
23
+ Dir.glob(expression).each do |path|
24
+ next unless File.file?(path)
25
+
26
+ key = "jets/cfn-templates/#{File.basename(path)}"
27
+ obj = s3_resource.bucket(bucket_name).object(key)
28
+ obj.upload_file(path)
29
+ end
30
+ end
31
+
32
+ def upload_zip_files
33
+ puts "Uploading code zip files to S3."
34
+ zip_area = "#{Jets.build_root}/stage/zips"
35
+ Dir.glob("#{zip_area}/*").each do |file|
36
+ upload_zip_file(file)
37
+ end
38
+ end
39
+
40
+ def upload_zip_file(path)
41
+ file_size = number_to_human_size(File.size(path))
42
+
43
+ puts "Uploading #{path} (#{file_size}) to S3"
44
+ start_time = Time.now
45
+ s3_key = "jets/code/#{File.basename(path)}"
46
+ obj = s3_resource.bucket(bucket_name).object(s3_key)
47
+ obj.upload_file(path)
48
+ puts "Uploaded to s3://#{bucket_name}/#{s3_key}".color(:green)
49
+ puts "Time to upload code to s3: #{pretty_time(Time.now-start_time).color(:green)}"
50
+ end
51
+
52
+ def upload_assets
53
+ puts "Checking for modified public assets and uploading to S3."
54
+ start_time = Time.now
55
+ upload_public_assets
56
+ puts "Time for public assets to s3: #{pretty_time(Time.now-start_time).color(:green)}"
57
+ end
58
+
59
+ def upload_public_assets
60
+ public_folders = %w[public]
61
+ public_folders = add_rack_assets(public_folders)
62
+ public_folders.each do |folder|
63
+ upload_asset_folder(folder)
64
+ end
65
+ end
66
+
67
+ def add_rack_assets(public_folders)
68
+ return public_folders unless Jets.rack?
69
+ public_folders + %w[rack/public]
70
+ end
71
+
72
+ def upload_asset_folder(folder)
73
+ expression = "#{Jets.root}/#{folder}/**/*"
74
+ group_size = 10
75
+ Dir.glob(expression).each_slice(group_size) do |paths|
76
+ threads = []
77
+ paths.each do |full_path|
78
+ next unless File.file?(full_path)
79
+
80
+ threads << Thread.new do
81
+ upload_to_s3(full_path)
82
+ end
83
+ end
84
+ threads.each(&:join)
85
+ end
86
+ end
87
+
88
+ def upload_to_s3(full_path)
89
+ return if identical_on_s3?(full_path)
90
+
91
+ key = s3_key(full_path)
92
+ obj = s3_resource.bucket(bucket_name).object(key)
93
+ puts "Uploading s3://#{bucket_name}/#{key}" # uncomment to see and debug
94
+ obj.upload_file(full_path, acl: "public-read", cache_control: cache_control)
95
+ end
96
+
97
+ def s3_key(full_path)
98
+ relative_path = full_path.sub("#{Jets.root}/", '')
99
+ "jets/#{relative_path}"
100
+ end
101
+
102
+ def identical_on_s3?(full_path)
103
+ local_md5 = ::Digest::MD5.file(full_path)
104
+ key = s3_key(full_path)
105
+ begin
106
+ resp = s3.head_object(bucket: bucket_name, key: key)
107
+ rescue Aws::S3::Errors::NotFound
108
+ return false
109
+ end
110
+
111
+ remote_md5 = resp.etag.delete_prefix('"').delete_suffix('"')
112
+ local_md5 == remote_md5
113
+ end
114
+
115
+ # If cache_control is provided, then it will set the entire cache-control header.
116
+ # If only max_age is provided, then we'll generate a cache_control header.
117
+ # Using max_age is the shorter and simply way of setting the cache_control header.
118
+ def cache_control
119
+ cache_control = Jets.config.assets.cache_control
120
+ unless cache_control
121
+ max_age = Jets.config.assets.max_age # defaults to 3600 in jets/application.rb
122
+ cache_control = "public, max-age=#{max_age}"
123
+ end
124
+ cache_control
125
+ end
126
+
127
+ # http://stackoverflow.com/questions/4175733/convert-duration-to-hoursminutesseconds-or-similar-in-rails-3-or-ruby
128
+ def pretty_time(total_seconds)
129
+ minutes = (total_seconds / 60) % 60
130
+ seconds = total_seconds % 60
131
+ if total_seconds < 60
132
+ "#{seconds.to_i}s"
133
+ else
134
+ "#{minutes.to_i}m #{seconds.to_i}s"
135
+ end
136
+ end
137
+
138
+ end
139
+ end
@@ -0,0 +1,194 @@
1
+ require "thor"
2
+
3
+ class Jets::CLI
4
+ def self.start(given_args=ARGV)
5
+ new(given_args).start
6
+ end
7
+
8
+ def self.thor_tasks
9
+ Jets::Commands::Base.namespaced_commands
10
+ end
11
+
12
+ def initialize(given_args=ARGV, **config)
13
+ @given_args = given_args.dup
14
+ @config = config
15
+ end
16
+
17
+ def start
18
+ # Needs to be at the beginning to avoid boot_jets which causes some load errors
19
+ if version_requested?
20
+ puts Jets.version
21
+ return
22
+ end
23
+
24
+ # Need to boot jets at this point for commands like: jets routes, deploy, console, etc to work
25
+ boot_jets
26
+ command_class = lookup(full_command)
27
+ if command_class
28
+ command_class.perform(full_command, thor_args)
29
+ else
30
+ main_help
31
+ end
32
+ end
33
+
34
+ # The commands new and help do not call Jets.boot. Main reason is that Jets.boot should be run in a Jets project.
35
+ #
36
+ # * jets new - need to generate a project outside a project folder.
37
+ # * jets help - don't need to be in a project folder general help.
38
+ #
39
+ # When you are inside a project folder though, more help commands are available and displayed.
40
+ #
41
+ def boot_jets
42
+ set_jets_env_from_cli_arg!
43
+ command = thor_args.first
44
+ unless %w[new help].include?(command)
45
+ Jets::Turbo.new.charge # handles Afterburner mode
46
+ Jets.boot
47
+ end
48
+ end
49
+
50
+ def version_requested?
51
+ # jets --version
52
+ # jets -v
53
+ version_flags = ["--version", "-v"]
54
+ @given_args.length == 1 && !(@given_args & version_flags).empty?
55
+ end
56
+
57
+ # Adjust JETS_ENV before boot_jets is called for the `jets deploy` command. Must do this early in the process
58
+ # before Jets.boot because because `bundler_require` is called as part of the bootup process. It sets the Jets.env
59
+ # to whatever the JETS_ENV is at the time to require the right bundler group.
60
+ #
61
+ # Defaults to development when not set.
62
+ def set_jets_env_from_cli_arg!
63
+ # Pretty tricky, we need to use the raw @given_args as thor_args eventually calls Commands::Base#eager_load!
64
+ # which uses Jets.env before we get a chance to override ENV['JETS_ENV']
65
+ command, env = @given_args[0..1]
66
+ return unless %w[deploy delete].include?(command)
67
+ env = nil if env&.starts_with?('-')
68
+ return unless env
69
+ ENV['JETS_ENV'] = env ? env : 'development'
70
+ end
71
+
72
+ # thor_args normalized the args Array to work with our Thor command
73
+ # subclasses.
74
+ # 1. The namespace is stripe
75
+ # 2. Help is shifted in front if a help flag is detected
76
+ def thor_args
77
+ args = @given_args.clone
78
+
79
+ help_args = args & help_flags
80
+ unless help_args.empty?
81
+ # Allow using help flags at the end of the command to trigger help menu
82
+ args -= help_flags # remove "help" and help flags from args
83
+ args[0] = meth # first command will always be the meth now since
84
+ # we removed the help flags
85
+ args.unshift("help")
86
+ args.compact!
87
+ return args
88
+ end
89
+
90
+ # reassigns the command without the namespace if reached here
91
+ args[0] = meth
92
+ args.compact
93
+ end
94
+
95
+ def meth
96
+ return nil unless full_command
97
+
98
+ if full_command.include?(':')
99
+ full_command.split(':').pop
100
+ else
101
+ full_command
102
+ end
103
+ end
104
+
105
+ ALIASES = {
106
+ "g" => "generate",
107
+ "c" => "console",
108
+ "s" => "server",
109
+ "db" => "dbconsole",
110
+ }
111
+ def full_command
112
+ # Removes any args that starts with -, those are option args.
113
+ # Also remove "help" flag.
114
+ args = @given_args.reject {|o| o =~ /^-/ } - help_flags
115
+ command = args[0] # first argument should always be the command
116
+ command = ALIASES[command] || command
117
+ Jets::Commands::Base.autocomplete(command)
118
+ end
119
+
120
+ # 1. look up Thor tasks
121
+ # 2. look up Rake tasks
122
+ # 3. help menu with all commands when both Thor and Rake tasks are not found
123
+ def lookup(full_command)
124
+ thor_task_found = Jets::Commands::Base.namespaced_commands.include?(full_command)
125
+ if thor_task_found
126
+ return Jets::Commands::Base.klass_from_namespace(namespace)
127
+ end
128
+
129
+ rake_task_found = Jets::Commands::RakeCommand.namespaced_commands.include?(full_command)
130
+ if rake_task_found
131
+ return Jets::Commands::RakeCommand
132
+ end
133
+ end
134
+
135
+ # ["-h", "-?", "--help", "-D", "help"]
136
+ def help_flags
137
+ Thor::HELP_MAPPINGS + ["help"]
138
+ end
139
+
140
+ def namespace
141
+ return nil unless full_command
142
+
143
+ if full_command.include?(':')
144
+ words = full_command.split(':')
145
+ words.pop
146
+ words.join(':')
147
+ end
148
+ end
149
+
150
+ def main_help
151
+ shell = Thor::Shell::Basic.new
152
+ shell.say "Commands:"
153
+ shell.print_table(thor_list, :indent => 2, :truncate => true)
154
+
155
+ unless rake_list.empty?
156
+ shell.say "\nCommands via rake:"
157
+ shell.print_table(rake_list, :indent => 2, :truncate => true)
158
+ end
159
+
160
+ shell.say "\n"
161
+ shell.say main_help_body
162
+ end
163
+
164
+ def thor_list
165
+ Jets::Commands::Base.help_list(show_all_tasks)
166
+ end
167
+
168
+ def rake_list
169
+ list = Jets::Commands::RakeCommand.formatted_rake_tasks(show_all_tasks)
170
+ list.map do |array|
171
+ array[0] = "jets #{array[0]}"
172
+ array
173
+ end
174
+ end
175
+
176
+ def show_all_tasks
177
+ @given_args.include?("--all") || @given_args.include?("-A")
178
+ end
179
+
180
+ def main_help_body
181
+ <<-EOL
182
+ Add -h to any of the commands for more help. Examples:
183
+
184
+ jets call -h
185
+ jets routes -h
186
+ jets deploy -h
187
+ jets status -h
188
+ jets dynamodb:create -h
189
+ jets db:create -h
190
+
191
+ EOL
192
+ end
193
+
194
+ end
@@ -0,0 +1,146 @@
1
+ require "thor"
2
+
3
+ # Override thor's long_desc identation behavior
4
+ # https://github.com/erikhuda/thor/issues/398
5
+ class Thor
6
+ module Shell
7
+ class Basic
8
+ def print_wrapped(message, options = {})
9
+ message = "\n#{message}" unless message.starts_with?("\n")
10
+ stdout.puts message
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ class Jets::Commands::Base < Thor
17
+ class << self
18
+ extend Memoist
19
+
20
+ # thor_args is an array of commands. Examples:
21
+ # ["help"]
22
+ # ["dynamodb:migrate"]
23
+ #
24
+ # Same signature as RakeCommand.perform. Not using full_command.
25
+ def perform(full_command, thor_args)
26
+ config = {} # doesnt seem like config is used
27
+ dispatch(nil, thor_args, nil, config)
28
+ end
29
+
30
+ # Hacky way to handle error for 'jets new' when no project name is passed in to avoid
31
+ # this error:
32
+ #
33
+ # required arguments 'project_name' (Thor::RequiredArgumentMissingError)
34
+ def dispatch(command, given_args, given_opts, config)
35
+ if given_args.reject{|s| s =~ /^-/} == ['new'] # user forgot to pass a project name
36
+ given_args = ['help', 'new']
37
+ end
38
+ super
39
+ end
40
+
41
+ # Track all command subclasses.
42
+ def subclasses
43
+ @subclasses ||= []
44
+ end
45
+
46
+ def inherited(base)
47
+ super
48
+
49
+ if base.name
50
+ self.subclasses << base
51
+ end
52
+ end
53
+
54
+ # Fully qualifed task names. Examples:
55
+ # build
56
+ # process:controller
57
+ # dynamodb:migrate:down
58
+ def namespaced_commands
59
+ eager_load!
60
+ subclasses.map do |klass|
61
+ # This all_tasks is part of Thor not the lambda/dsl.rb
62
+ klass.all_tasks.keys.map do |task_name|
63
+ klass = klass.to_s.sub('Jets::Commands::','')
64
+ namespace = klass =~ /^Main/ ? nil : klass.underscore.gsub('/',':')
65
+ [namespace, task_name].compact.join(':')
66
+ end
67
+ end.flatten.sort
68
+ end
69
+
70
+ # Use Jets banner instead of Thor to account for namespaces in commands.
71
+ def banner(command, namespace = nil, subcommand = false)
72
+ namespace = namespace_from_class(self)
73
+ command_name = command.usage # set with desc when defining tht Thor class
74
+ namespaced_command = [namespace, command_name].compact.join(':')
75
+
76
+ "jets #{namespaced_command}"
77
+ end
78
+
79
+ def namespace_from_class(klass)
80
+ namespace = klass.to_s.sub('Jets::Commands::', '').underscore.gsub('/',':')
81
+ namespace unless namespace == "main"
82
+ end
83
+
84
+ def help_list(all=false)
85
+ # hack to show hidden comands when requested
86
+ Thor::HiddenCommand.class_eval do
87
+ def hidden?; false; end
88
+ end if all
89
+
90
+ list = []
91
+ eager_load!
92
+ subclasses.each do |klass|
93
+ commands = klass.printable_commands(true, false)
94
+ commands.reject! { |array| array[0].include?(':help') }
95
+ list += commands
96
+ end
97
+
98
+ list.sort_by! { |array| array[0] }
99
+ end
100
+
101
+ def klass_from_namespace(namespace)
102
+ if namespace.nil?
103
+ Jets::Commands::Main
104
+ else
105
+ class_name = namespace.gsub(':','/')
106
+ class_name = "Jets::Commands::#{class_name.camelize}"
107
+ class_name.constantize
108
+ end
109
+ end
110
+
111
+ # If this fails to find a match then return the original full command
112
+ def autocomplete(full_command)
113
+ return nil if full_command.nil? # jets help
114
+
115
+ eager_load!
116
+
117
+ words = full_command.split(':')
118
+ namespace = words[0..-2].join(':') if words.size > 1
119
+ command = words.last
120
+
121
+ # Thor's normalize_command_name autocompletes the command but then we need to add the namespace back
122
+ begin
123
+ thor_subclass = klass_from_namespace(namespace) # could NameError
124
+ command = thor_subclass.normalize_command_name(command) # could Thor::AmbiguousCommandError
125
+ [namespace, command].compact.join(':')
126
+ rescue NameError
127
+ full_command # return original full_command
128
+ rescue Thor::AmbiguousCommandError => e
129
+ puts "Unable to autodetect the command name. #{e.message}."
130
+ full_command # return original full_command
131
+ end
132
+ end
133
+
134
+ # For help menu to list all commands, we must eager load the command classes.
135
+ #
136
+ # There is special eager_load logic here because this is called super early as part of the CLI start.
137
+ # We cannot assume we have full access to to the project yet.
138
+ def eager_load!
139
+ return if Jets::Turbo.afterburner?
140
+
141
+ Jets.application.setup_auto_load_paths # in case an app/extension is defined
142
+ Jets::Autoloaders.once.eager_load
143
+ end
144
+ memoize :eager_load!
145
+ end
146
+ end