jets.benforeva 3.0.17.pre.mount.pre.fix

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +92 -0
  3. data/.cody/README.md +13 -0
  4. data/.cody/docs/bin/build.sh +7 -0
  5. data/.cody/docs/bin/bundler_setup.sh +8 -0
  6. data/.cody/docs/bin/cli_docs.sh +6 -0
  7. data/.cody/docs/bin/git_commit.sh +27 -0
  8. data/.cody/docs/bin/git_setup.sh +12 -0
  9. data/.cody/docs/bin/subnav.sh +14 -0
  10. data/.cody/docs/buildspec.yml +10 -0
  11. data/.cody/docs/project.rb +10 -0
  12. data/.github/ISSUE_TEMPLATE/bug_report.md +84 -0
  13. data/.github/ISSUE_TEMPLATE/documentation.md +27 -0
  14. data/.github/ISSUE_TEMPLATE/feature_request.md +64 -0
  15. data/.github/ISSUE_TEMPLATE/question.md +14 -0
  16. data/.github/ISSUE_TEMPLATE.md +7 -0
  17. data/.github/PULL_REQUEST_TEMPLATE.md +50 -0
  18. data/.gitignore +24 -0
  19. data/.gitmodules +0 -0
  20. data/.python-version +1 -0
  21. data/.rspec +4 -0
  22. data/.ruby-gemset +1 -0
  23. data/.ruby-version +1 -0
  24. data/CHANGELOG.md +1035 -0
  25. data/CONDUCT.md +1 -0
  26. data/CONTRIBUTING.md +1 -0
  27. data/Dockerfile +16 -0
  28. data/Dockerfile.base +53 -0
  29. data/Gemfile +14 -0
  30. data/Guardfile +22 -0
  31. data/LICENSE.txt +22 -0
  32. data/Procfile +2 -0
  33. data/README.md +212 -0
  34. data/Rakefile +24 -0
  35. data/backers.md +20 -0
  36. data/bin/release +9 -0
  37. data/exe/jets.benforeva +14 -0
  38. data/jets.benforeva.gemspec +71 -0
  39. data/lib/jets/application/defaults.rb +200 -0
  40. data/lib/jets/application.rb +240 -0
  41. data/lib/jets/authorizer/base.rb +36 -0
  42. data/lib/jets/authorizer/dsl.rb +69 -0
  43. data/lib/jets/authorizer/helpers/iam_helper.rb +47 -0
  44. data/lib/jets/autoloaders.rb +112 -0
  45. data/lib/jets/aws_info.rb +111 -0
  46. data/lib/jets/aws_services/global_memoist.rb +57 -0
  47. data/lib/jets/aws_services/s3_bucket.rb +34 -0
  48. data/lib/jets/aws_services/stack_status.rb +64 -0
  49. data/lib/jets/aws_services.rb +95 -0
  50. data/lib/jets/booter.rb +167 -0
  51. data/lib/jets/builders/code_builder.rb +410 -0
  52. data/lib/jets/builders/code_size.rb +57 -0
  53. data/lib/jets/builders/gem_replacer.rb +89 -0
  54. data/lib/jets/builders/handler_generator.rb +186 -0
  55. data/lib/jets/builders/lambda_layer.rb +68 -0
  56. data/lib/jets/builders/md5.rb +60 -0
  57. data/lib/jets/builders/md5_zip.rb +61 -0
  58. data/lib/jets/builders/purger.rb +35 -0
  59. data/lib/jets/builders/rack_packager.rb +51 -0
  60. data/lib/jets/builders/rackup_wrappers/rackup +19 -0
  61. data/lib/jets/builders/rackup_wrappers/rackup.rb +7 -0
  62. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +16 -0
  63. data/lib/jets/builders/reconfigure_rails.rb +114 -0
  64. data/lib/jets/builders/ruby_packager.rb +235 -0
  65. data/lib/jets/builders/shim_vars/app.rb +78 -0
  66. data/lib/jets/builders/shim_vars/base.rb +25 -0
  67. data/lib/jets/builders/shim_vars/shared.rb +37 -0
  68. data/lib/jets/builders/templates/handler.rb +12 -0
  69. data/lib/jets/builders/tidy.rb +107 -0
  70. data/lib/jets/builders/util.rb +31 -0
  71. data/lib/jets/bundle.rb +88 -0
  72. data/lib/jets/camelizer.rb +4 -0
  73. data/lib/jets/cfn/builders/api_deployment_builder.rb +56 -0
  74. data/lib/jets/cfn/builders/api_gateway_builder.rb +123 -0
  75. data/lib/jets/cfn/builders/api_resources_builder.rb +44 -0
  76. data/lib/jets/cfn/builders/authorizer_builder.rb +67 -0
  77. data/lib/jets/cfn/builders/base_child_builder.rb +69 -0
  78. data/lib/jets/cfn/builders/controller_builder.rb +50 -0
  79. data/lib/jets/cfn/builders/function_builder.rb +14 -0
  80. data/lib/jets/cfn/builders/interface.rb +133 -0
  81. data/lib/jets/cfn/builders/job_builder.rb +14 -0
  82. data/lib/jets/cfn/builders/parent_builder/stagger.rb +34 -0
  83. data/lib/jets/cfn/builders/parent_builder.rb +130 -0
  84. data/lib/jets/cfn/builders/rule_builder.rb +24 -0
  85. data/lib/jets/cfn/builders/shared_builder.rb +14 -0
  86. data/lib/jets/cfn/builders/util/source.rb +21 -0
  87. data/lib/jets/cfn/built_template.rb +15 -0
  88. data/lib/jets/cfn/ship.rb +188 -0
  89. data/lib/jets/cfn/status.rb +10 -0
  90. data/lib/jets/cfn/template_source.rb +61 -0
  91. data/lib/jets/cfn/upload.rb +157 -0
  92. data/lib/jets/cli.rb +208 -0
  93. data/lib/jets/commands/base.rb +145 -0
  94. data/lib/jets/commands/build.rb +252 -0
  95. data/lib/jets/commands/call/anonymous_guesser.rb +96 -0
  96. data/lib/jets/commands/call/autoload_guesser.rb +136 -0
  97. data/lib/jets/commands/call/base_guesser.rb +62 -0
  98. data/lib/jets/commands/call/guesser.rb +48 -0
  99. data/lib/jets/commands/call.rb +182 -0
  100. data/lib/jets/commands/clean/base.rb +24 -0
  101. data/lib/jets/commands/clean/build.rb +13 -0
  102. data/lib/jets/commands/clean/log.rb +111 -0
  103. data/lib/jets/commands/clean.rb +19 -0
  104. data/lib/jets/commands/configure.rb +51 -0
  105. data/lib/jets/commands/console.rb +12 -0
  106. data/lib/jets/commands/db/environment-task.rake +3 -0
  107. data/lib/jets/commands/db/tasks/dummy/app.rb +25 -0
  108. data/lib/jets/commands/db/tasks/dummy/config.rb +14 -0
  109. data/lib/jets/commands/db/tasks.rb +34 -0
  110. data/lib/jets/commands/db.rb +13 -0
  111. data/lib/jets/commands/dbconsole.rb +134 -0
  112. data/lib/jets/commands/delete.rb +136 -0
  113. data/lib/jets/commands/deploy.rb +137 -0
  114. data/lib/jets/commands/dotenv.rb +9 -0
  115. data/lib/jets/commands/dynamodb/migrate.rb +9 -0
  116. data/lib/jets/commands/dynamodb/migrator.rb +36 -0
  117. data/lib/jets/commands/dynamodb.rb +19 -0
  118. data/lib/jets/commands/gems.rb +13 -0
  119. data/lib/jets/commands/help/build.md +6 -0
  120. data/lib/jets/commands/help/call.md +69 -0
  121. data/lib/jets/commands/help/clean/build.md +5 -0
  122. data/lib/jets/commands/help/clean/log.md +5 -0
  123. data/lib/jets/commands/help/console.md +18 -0
  124. data/lib/jets/commands/help/db/generate.md +8 -0
  125. data/lib/jets/commands/help/dbconsole.md +9 -0
  126. data/lib/jets/commands/help/degenerate.md +16 -0
  127. data/lib/jets/commands/help/delete.md +22 -0
  128. data/lib/jets/commands/help/deploy.md +32 -0
  129. data/lib/jets/commands/help/dynamodb/generate.md +52 -0
  130. data/lib/jets/commands/help/dynamodb/migrate.md +4 -0
  131. data/lib/jets/commands/help/gems/check.md +6 -0
  132. data/lib/jets/commands/help/generate.md +28 -0
  133. data/lib/jets/commands/help/import/rack.md +13 -0
  134. data/lib/jets/commands/help/import/rails.md +11 -0
  135. data/lib/jets/commands/help/new.md +42 -0
  136. data/lib/jets/commands/help/routes.md +16 -0
  137. data/lib/jets/commands/help/runner.md +17 -0
  138. data/lib/jets/commands/help/server.md +15 -0
  139. data/lib/jets/commands/help/status.md +14 -0
  140. data/lib/jets/commands/help/upgrade.md +7 -0
  141. data/lib/jets/commands/help/url.md +6 -0
  142. data/lib/jets/commands/help.rb +9 -0
  143. data/lib/jets/commands/import/base.rb +49 -0
  144. data/lib/jets/commands/import/cheatsheet.rb +35 -0
  145. data/lib/jets/commands/import/rack.rb +16 -0
  146. data/lib/jets/commands/import/rails.rb +74 -0
  147. data/lib/jets/commands/import/sequence.rb +90 -0
  148. data/lib/jets/commands/import/templates/config/database.yml +30 -0
  149. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +89 -0
  150. data/lib/jets/commands/import.rb +12 -0
  151. data/lib/jets/commands/main.rb +166 -0
  152. data/lib/jets/commands/markdown/creator.rb +58 -0
  153. data/lib/jets/commands/markdown/index.rb +27 -0
  154. data/lib/jets/commands/markdown/page.rb +125 -0
  155. data/lib/jets/commands/markdown/shell.rb +11 -0
  156. data/lib/jets/commands/new.rb +173 -0
  157. data/lib/jets/commands/rake_command.rb +61 -0
  158. data/lib/jets/commands/rake_tasks.rb +50 -0
  159. data/lib/jets/commands/runner.rb +16 -0
  160. data/lib/jets/commands/sequence.rb +105 -0
  161. data/lib/jets/commands/stack_info.rb +30 -0
  162. data/lib/jets/commands/templates/skeleton/.env.development.tt +3 -0
  163. data/lib/jets/commands/templates/skeleton/.env.test +3 -0
  164. data/lib/jets/commands/templates/skeleton/.env.tt +3 -0
  165. data/lib/jets/commands/templates/skeleton/.gitignore +12 -0
  166. data/lib/jets/commands/templates/skeleton/.jetskeep +1 -0
  167. data/lib/jets/commands/templates/skeleton/.rspec +3 -0
  168. data/lib/jets/commands/templates/skeleton/Gemfile.tt +39 -0
  169. data/lib/jets/commands/templates/skeleton/Procfile +7 -0
  170. data/lib/jets/commands/templates/skeleton/README.md +11 -0
  171. data/lib/jets/commands/templates/skeleton/Rakefile +2 -0
  172. data/lib/jets/commands/templates/skeleton/app/controllers/application_controller.rb +2 -0
  173. data/lib/jets/commands/templates/skeleton/app/helpers/application_helper.rb +2 -0
  174. data/lib/jets/commands/templates/skeleton/app/jobs/application_job.rb +4 -0
  175. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +2 -0
  176. data/lib/jets/commands/templates/skeleton/app/models/application_record.rb +3 -0
  177. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +26 -0
  178. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +71 -0
  179. data/lib/jets/commands/templates/skeleton/config/database.yml.tt +27 -0
  180. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +22 -0
  181. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +7 -0
  182. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +9 -0
  183. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +7 -0
  184. data/lib/jets/commands/templates/skeleton/config/routes.rb +9 -0
  185. data/lib/jets/commands/templates/skeleton/config.ru +5 -0
  186. data/lib/jets/commands/templates/skeleton/db/.gitkeep +0 -0
  187. data/lib/jets/commands/templates/skeleton/public/404.html +67 -0
  188. data/lib/jets/commands/templates/skeleton/public/422.html +67 -0
  189. data/lib/jets/commands/templates/skeleton/public/500.html +66 -0
  190. data/lib/jets/commands/templates/skeleton/public/favicon.ico +0 -0
  191. data/lib/jets/commands/templates/skeleton/public/index.html.tt +91 -0
  192. data/lib/jets/commands/templates/skeleton/spec/controllers/posts_controller_spec.rb +15 -0
  193. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-index.json +51 -0
  194. data/lib/jets/commands/templates/skeleton/spec/fixtures/payloads/posts-show.json +53 -0
  195. data/lib/jets/commands/templates/skeleton/spec/spec_helper.rb.tt +30 -0
  196. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +23 -0
  197. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +24 -0
  198. data/lib/jets/commands/upgrade/templates/bin/webpack +19 -0
  199. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +19 -0
  200. data/lib/jets/commands/upgrade/version1.rb +136 -0
  201. data/lib/jets/commands/upgrade.rb +105 -0
  202. data/lib/jets/commands/url.rb +69 -0
  203. data/lib/jets/commands/webpacker_template.rb +18 -0
  204. data/lib/jets/controller/authorization.rb +91 -0
  205. data/lib/jets/controller/base.rb +175 -0
  206. data/lib/jets/controller/callbacks.rb +73 -0
  207. data/lib/jets/controller/cookies/jar.rb +269 -0
  208. data/lib/jets/controller/cookies.rb +38 -0
  209. data/lib/jets/controller/error/invalid_authenticity_token.rb +6 -0
  210. data/lib/jets/controller/error.rb +4 -0
  211. data/lib/jets/controller/forgery_protection.rb +43 -0
  212. data/lib/jets/controller/layout.rb +17 -0
  213. data/lib/jets/controller/middleware/cors.rb +60 -0
  214. data/lib/jets/controller/middleware/local/api_gateway.rb +93 -0
  215. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +38 -0
  216. data/lib/jets/controller/middleware/local/route_matcher.rb +22 -0
  217. data/lib/jets/controller/middleware/local.rb +120 -0
  218. data/lib/jets/controller/middleware/main.rb +53 -0
  219. data/lib/jets/controller/middleware/reloader.rb +15 -0
  220. data/lib/jets/controller/middleware/webpacker_setup.rb +6 -0
  221. data/lib/jets/controller/parameters_filter.rb +29 -0
  222. data/lib/jets/controller/params.rb +117 -0
  223. data/lib/jets/controller/rack/adapter.rb +94 -0
  224. data/lib/jets/controller/rack/env.rb +122 -0
  225. data/lib/jets/controller/redirection.rb +51 -0
  226. data/lib/jets/controller/rendering/rack_renderer.rb +267 -0
  227. data/lib/jets/controller/rendering.rb +96 -0
  228. data/lib/jets/controller/request.rb +29 -0
  229. data/lib/jets/controller/response.rb +61 -0
  230. data/lib/jets/controller/stage.rb +34 -0
  231. data/lib/jets/controller.rb +3 -0
  232. data/lib/jets/core.rb +157 -0
  233. data/lib/jets/core_ext/bundler.rb +7 -0
  234. data/lib/jets/core_ext/kernel.rb +13 -0
  235. data/lib/jets/db.rb +15 -0
  236. data/lib/jets/dotenv/show.rb +11 -0
  237. data/lib/jets/dotenv/ssm.rb +64 -0
  238. data/lib/jets/dotenv.rb +48 -0
  239. data/lib/jets/erb.rb +51 -0
  240. data/lib/jets/generator/templates/active_job/job/templates/application_job.rb.tt +6 -0
  241. data/lib/jets/generator/templates/active_job/job/templates/job.rb.tt +8 -0
  242. data/lib/jets/generator/templates/erb/controller/view.html.erb +2 -0
  243. data/lib/jets/generator/templates/erb/scaffold/_form.html.erb +34 -0
  244. data/lib/jets/generator/templates/erb/scaffold/edit.html.erb +6 -0
  245. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +29 -0
  246. data/lib/jets/generator/templates/erb/scaffold/new.html.erb +5 -0
  247. data/lib/jets/generator/templates/erb/scaffold/show.html.erb +9 -0
  248. data/lib/jets/generator/templates/rails/assets/javascript.js +2 -0
  249. data/lib/jets/generator/templates/rails/assets/stylesheet.css +4 -0
  250. data/lib/jets/generator/templates/rails/controller/controller.rb +13 -0
  251. data/lib/jets/generator/templates/rails/helper/helper.rb +4 -0
  252. data/lib/jets/generator/templates/rails/scaffold/scaffold.css +80 -0
  253. data/lib/jets/generator/templates/rails/scaffold_controller/api_controller.rb +62 -0
  254. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +79 -0
  255. data/lib/jets/generator.rb +112 -0
  256. data/lib/jets/inflections.rb +32 -0
  257. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +16 -0
  258. data/lib/jets/internal/app/controllers/jets/mailers_controller.rb +97 -0
  259. data/lib/jets/internal/app/controllers/jets/mount_controller.rb +63 -0
  260. data/lib/jets/internal/app/controllers/jets/public_controller.rb +31 -0
  261. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +12 -0
  262. data/lib/jets/internal/app/functions/jets/base_path.rb +18 -0
  263. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +100 -0
  264. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +9 -0
  265. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +70 -0
  266. data/lib/jets/internal/app/shared/functions/jets/s3_bucket_config.rb +33 -0
  267. data/lib/jets/internal/app/views/jets/mailers/email.html.erb +145 -0
  268. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +8 -0
  269. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  270. data/lib/jets/internal/turbines/jets/mailer.rb +52 -0
  271. data/lib/jets/job/base.rb +49 -0
  272. data/lib/jets/job/dsl/dynamodb_event.rb +67 -0
  273. data/lib/jets/job/dsl/event_source_mapping.rb +11 -0
  274. data/lib/jets/job/dsl/iot_event.rb +24 -0
  275. data/lib/jets/job/dsl/kinesis_event.rb +46 -0
  276. data/lib/jets/job/dsl/log_event.rb +15 -0
  277. data/lib/jets/job/dsl/rule_event.rb +75 -0
  278. data/lib/jets/job/dsl/s3_event.rb +36 -0
  279. data/lib/jets/job/dsl/sns_event.rb +54 -0
  280. data/lib/jets/job/dsl/sqs_event.rb +96 -0
  281. data/lib/jets/job/dsl.rb +40 -0
  282. data/lib/jets/job/helpers/kinesis_event_helper.rb +13 -0
  283. data/lib/jets/job/helpers/log_event_helper.rb +17 -0
  284. data/lib/jets/job/helpers/s3_event_helper.rb +13 -0
  285. data/lib/jets/klass.rb +109 -0
  286. data/lib/jets/lambda/dsl.rb +404 -0
  287. data/lib/jets/lambda/function.rb +29 -0
  288. data/lib/jets/lambda/function_constructor.rb +55 -0
  289. data/lib/jets/lambda/functions.rb +39 -0
  290. data/lib/jets/lambda/task.rb +111 -0
  291. data/lib/jets/logger.rb +21 -0
  292. data/lib/jets/mega/hash_converter.rb +25 -0
  293. data/lib/jets/mega/request/source.rb +21 -0
  294. data/lib/jets/mega/request.rb +163 -0
  295. data/lib/jets/middleware/configurator.rb +84 -0
  296. data/lib/jets/middleware/default_stack.rb +53 -0
  297. data/lib/jets/middleware/layer.rb +34 -0
  298. data/lib/jets/middleware/stack.rb +77 -0
  299. data/lib/jets/middleware.rb +33 -0
  300. data/lib/jets/naming.rb +63 -0
  301. data/lib/jets/overrides/lambda/marshaller.rb +31 -0
  302. data/lib/jets/overrides/lambda.rb +1 -0
  303. data/lib/jets/overrides/rails/action_controller.rb +13 -0
  304. data/lib/jets/overrides/rails/asset_tag_helper.rb +114 -0
  305. data/lib/jets/overrides/rails/common_methods.rb +13 -0
  306. data/lib/jets/overrides/rails/migration_checker.rb +34 -0
  307. data/lib/jets/overrides/rails/rendering_helper.rb +27 -0
  308. data/lib/jets/overrides/rails/url_helper.rb +88 -0
  309. data/lib/jets/overrides/rails.rb +6 -0
  310. data/lib/jets/poly_fun/base_executor.rb +125 -0
  311. data/lib/jets/poly_fun/lambda_executor.rb +16 -0
  312. data/lib/jets/poly_fun/node_error.rb +8 -0
  313. data/lib/jets/poly_fun/node_executor.rb +54 -0
  314. data/lib/jets/poly_fun/python_error.rb +8 -0
  315. data/lib/jets/poly_fun/python_executor.rb +23 -0
  316. data/lib/jets/poly_fun.rb +73 -0
  317. data/lib/jets/preheat.rb +117 -0
  318. data/lib/jets/processors/deducer.rb +65 -0
  319. data/lib/jets/processors/main_processor.rb +61 -0
  320. data/lib/jets/rack_server.rb +86 -0
  321. data/lib/jets/rdoc.rb +30 -0
  322. data/lib/jets/resource/api_gateway/authorizer.rb +82 -0
  323. data/lib/jets/resource/api_gateway/base_path/function.rb +49 -0
  324. data/lib/jets/resource/api_gateway/base_path/mapping.rb +44 -0
  325. data/lib/jets/resource/api_gateway/base_path/role.rb +76 -0
  326. data/lib/jets/resource/api_gateway/cors.rb +61 -0
  327. data/lib/jets/resource/api_gateway/deployment.rb +80 -0
  328. data/lib/jets/resource/api_gateway/domain_name.rb +65 -0
  329. data/lib/jets/resource/api_gateway/method/authorization.rb +41 -0
  330. data/lib/jets/resource/api_gateway/method.rb +102 -0
  331. data/lib/jets/resource/api_gateway/resource.rb +82 -0
  332. data/lib/jets/resource/api_gateway/rest_api/change_detection.rb +10 -0
  333. data/lib/jets/resource/api_gateway/rest_api/logical_id/message.rb +49 -0
  334. data/lib/jets/resource/api_gateway/rest_api/logical_id.rb +98 -0
  335. data/lib/jets/resource/api_gateway/rest_api/routes/change/base.rb +136 -0
  336. data/lib/jets/resource/api_gateway/rest_api/routes/change/media_types.rb +36 -0
  337. data/lib/jets/resource/api_gateway/rest_api/routes/change/page.rb +93 -0
  338. data/lib/jets/resource/api_gateway/rest_api/routes/change/to.rb +25 -0
  339. data/lib/jets/resource/api_gateway/rest_api/routes/change/variable.rb +35 -0
  340. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +16 -0
  341. data/lib/jets/resource/api_gateway/rest_api/routes/collision/variable_exception.rb +7 -0
  342. data/lib/jets/resource/api_gateway/rest_api/routes/collision.rb +121 -0
  343. data/lib/jets/resource/api_gateway/rest_api/routes.rb +7 -0
  344. data/lib/jets/resource/api_gateway/rest_api.rb +64 -0
  345. data/lib/jets/resource/associated.rb +37 -0
  346. data/lib/jets/resource/base.rb +28 -0
  347. data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
  348. data/lib/jets/resource/child_stack/api_gateway.rb +23 -0
  349. data/lib/jets/resource/child_stack/api_resource/page.rb +20 -0
  350. data/lib/jets/resource/child_stack/api_resource.rb +54 -0
  351. data/lib/jets/resource/child_stack/app_class.rb +149 -0
  352. data/lib/jets/resource/child_stack/authorizer.rb +40 -0
  353. data/lib/jets/resource/child_stack/base.rb +24 -0
  354. data/lib/jets/resource/child_stack/common_parameters.rb +14 -0
  355. data/lib/jets/resource/child_stack/shared.rb +85 -0
  356. data/lib/jets/resource/config/config_rule.rb +74 -0
  357. data/lib/jets/resource/config/managed_rule.rb +15 -0
  358. data/lib/jets/resource/events/rule.rb +31 -0
  359. data/lib/jets/resource/iam/application_role.rb +27 -0
  360. data/lib/jets/resource/iam/base_role_definition.rb +47 -0
  361. data/lib/jets/resource/iam/class_role.rb +74 -0
  362. data/lib/jets/resource/iam/function_role.rb +54 -0
  363. data/lib/jets/resource/iam/managed_policy.rb +22 -0
  364. data/lib/jets/resource/iam/policy_document.rb +41 -0
  365. data/lib/jets/resource/iot/topic_rule.rb +34 -0
  366. data/lib/jets/resource/lambda/event_source_mapping.rb +31 -0
  367. data/lib/jets/resource/lambda/function/environment.rb +62 -0
  368. data/lib/jets/resource/lambda/function.rb +221 -0
  369. data/lib/jets/resource/lambda/gem_layer.rb +17 -0
  370. data/lib/jets/resource/lambda/layer_version.rb +44 -0
  371. data/lib/jets/resource/logs/subscription_filter.rb +31 -0
  372. data/lib/jets/resource/permission.rb +45 -0
  373. data/lib/jets/resource/replacer.rb +85 -0
  374. data/lib/jets/resource/route53/record_set.rb +98 -0
  375. data/lib/jets/resource/s3/bucket.rb +24 -0
  376. data/lib/jets/resource/sns/subscription.rb +29 -0
  377. data/lib/jets/resource/sns/topic.rb +35 -0
  378. data/lib/jets/resource/sns/topic_policy.rb +40 -0
  379. data/lib/jets/resource/sqs/queue.rb +21 -0
  380. data/lib/jets/resource/standardizer.rb +42 -0
  381. data/lib/jets/resource.rb +71 -0
  382. data/lib/jets/router/dsl/mount.rb +13 -0
  383. data/lib/jets/router/dsl.rb +144 -0
  384. data/lib/jets/router/error.rb +4 -0
  385. data/lib/jets/router/finder.rb +47 -0
  386. data/lib/jets/router/helpers/core_helper.rb +27 -0
  387. data/lib/jets/router/helpers/named_routes_helper.rb +8 -0
  388. data/lib/jets/router/helpers.rb +4 -0
  389. data/lib/jets/router/matcher.rb +81 -0
  390. data/lib/jets/router/method_creator/code.rb +99 -0
  391. data/lib/jets/router/method_creator/edit.rb +12 -0
  392. data/lib/jets/router/method_creator/generic.rb +11 -0
  393. data/lib/jets/router/method_creator/index.rb +48 -0
  394. data/lib/jets/router/method_creator/new.rb +12 -0
  395. data/lib/jets/router/method_creator/root.rb +15 -0
  396. data/lib/jets/router/method_creator/show.rb +12 -0
  397. data/lib/jets/router/method_creator.rb +50 -0
  398. data/lib/jets/router/resources/base.rb +7 -0
  399. data/lib/jets/router/resources/filter.rb +15 -0
  400. data/lib/jets/router/resources/options.rb +13 -0
  401. data/lib/jets/router/route/authorizer.rb +57 -0
  402. data/lib/jets/router/route.rb +230 -0
  403. data/lib/jets/router/scope.rb +95 -0
  404. data/lib/jets/router/util.rb +38 -0
  405. data/lib/jets/router.rb +180 -0
  406. data/lib/jets/rule/base.rb +19 -0
  407. data/lib/jets/rule/dsl.rb +109 -0
  408. data/lib/jets/spec_helpers/controllers/params.rb +8 -0
  409. data/lib/jets/spec_helpers/controllers/request.rb +101 -0
  410. data/lib/jets/spec_helpers/controllers/response.rb +10 -0
  411. data/lib/jets/spec_helpers/controllers.rb +47 -0
  412. data/lib/jets/spec_helpers/fixtures.rb +11 -0
  413. data/lib/jets/spec_helpers.rb +21 -0
  414. data/lib/jets/stack/builder.rb +43 -0
  415. data/lib/jets/stack/definition.rb +50 -0
  416. data/lib/jets/stack/depends/item.rb +26 -0
  417. data/lib/jets/stack/depends.rb +34 -0
  418. data/lib/jets/stack/function.rb +69 -0
  419. data/lib/jets/stack/main/dsl/base.rb +63 -0
  420. data/lib/jets/stack/main/dsl/cloudwatch.rb +19 -0
  421. data/lib/jets/stack/main/dsl/iam.rb +8 -0
  422. data/lib/jets/stack/main/dsl/kinesis.rb +15 -0
  423. data/lib/jets/stack/main/dsl/lambda.rb +83 -0
  424. data/lib/jets/stack/main/dsl/s3.rb +12 -0
  425. data/lib/jets/stack/main/dsl/sns.rb +16 -0
  426. data/lib/jets/stack/main/dsl/sqs.rb +10 -0
  427. data/lib/jets/stack/main/dsl.rb +17 -0
  428. data/lib/jets/stack/main.rb +4 -0
  429. data/lib/jets/stack/output/dsl.rb +19 -0
  430. data/lib/jets/stack/output/lookup.rb +36 -0
  431. data/lib/jets/stack/output.rb +35 -0
  432. data/lib/jets/stack/parameter/dsl.rb +42 -0
  433. data/lib/jets/stack/parameter.rb +37 -0
  434. data/lib/jets/stack/resource/dsl.rb +19 -0
  435. data/lib/jets/stack/resource.rb +31 -0
  436. data/lib/jets/stack/s3_event.rb +87 -0
  437. data/lib/jets/stack.rb +88 -0
  438. data/lib/jets/tmp_loader.rb +53 -0
  439. data/lib/jets/turbine.rb +41 -0
  440. data/lib/jets/turbo/database_yaml.rb +41 -0
  441. data/lib/jets/turbo/project/.gitignore +12 -0
  442. data/lib/jets/turbo/project/.jetskeep +1 -0
  443. data/lib/jets/turbo/project/Gemfile +16 -0
  444. data/lib/jets/turbo/project/Rakefile +2 -0
  445. data/lib/jets/turbo/project/app/controllers/application_controller.rb +2 -0
  446. data/lib/jets/turbo/project/app/helpers/application_helper.rb +2 -0
  447. data/lib/jets/turbo/project/app/jobs/application_job.rb +4 -0
  448. data/lib/jets/turbo/project/config/application.rb +5 -0
  449. data/lib/jets/turbo/project/config/routes.rb +4 -0
  450. data/lib/jets/turbo/project/config.ru +5 -0
  451. data/lib/jets/turbo/rails.rb +127 -0
  452. data/lib/jets/turbo/templates/config/database.yml +30 -0
  453. data/lib/jets/turbo.rb +56 -0
  454. data/lib/jets/util.rb +40 -0
  455. data/lib/jets/version.rb +3 -0
  456. data/lib/jets.rb +31 -0
  457. data/readme/prerelease.md +6 -0
  458. data/readme/testing.md +60 -0
  459. metadata +1105 -0
@@ -0,0 +1,48 @@
1
+ # Guesser transforms the user provided function name to the actual lambda
2
+ # function name.
3
+ #
4
+ # Allow for variety of different inputs to work:
5
+ # Simple:
6
+ # admin/pages_controller-index => admin-pages_controller-index
7
+ # admin-pages_controller-index => admin-pages_controller-index
8
+ #
9
+ # Complex, requires detecting the right class name:
10
+ # admin/related_pages_controller-list_all
11
+ # admin-related-pages-controller-list-all
12
+ #
13
+ # All still result in: admin-related_pages_controller-index
14
+ #
15
+ # The detection process follows. Given worse case:
16
+ # admin-related-pages-controller-list-all
17
+ #
18
+ # Know that the action comes after controller, try:
19
+ # AdminRelatedPagesController
20
+ # Admin::RelatedPagesController <= found stop guessing
21
+ #
22
+ # admin/related_pages_controller <= underscored
23
+ # admin/related_pages_controller-list_all <= add action back on
24
+ # admin-related_pages_controller-list_all <= gsub / - DONE
25
+ #
26
+ # Now we're at a point where we can start guessing
27
+ # function_name = detect_function_name(function_name)
28
+ class Jets::Commands::Call
29
+ class Guesser
30
+ delegate :class_name, :method_name, :error_message, :function_name,
31
+ to: :delegate_guesser
32
+
33
+ # Example of provided_function_name:
34
+ # admin/related_pages_controller-list_all
35
+ # admin-related-pages-controller-list-all
36
+ def initialize(provided_function_name)
37
+ @provided_function_name = provided_function_name
38
+ end
39
+
40
+ def delegate_guesser
41
+ @delegate_guesser ||= if @provided_function_name =~ /[-_](controller|job|rule)/
42
+ AutoloadGuesser.new(@provided_function_name)
43
+ else
44
+ AnonymousGuesser.new(@provided_function_name)
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,182 @@
1
+ require "base64"
2
+ require "json"
3
+
4
+ class Jets::Commands::Call
5
+ include Jets::AwsServices
6
+
7
+ def initialize(provided_function_name, event, options={})
8
+ @options = options
9
+ @guess = @options[:guess].nil? ? true : @options[:guess]
10
+
11
+ @provided_function_name = provided_function_name
12
+ @event = event
13
+
14
+ @invocation_type = options[:invocation_type] || "RequestResponse"
15
+ @log_type = options[:log_type] || "Tail"
16
+ @qualifier = @qualifier
17
+ end
18
+
19
+ def function_name
20
+ if @guess
21
+ ensure_guesses_found! # possibly exits here
22
+ guesser.function_name # guesser adds namespace already
23
+ else
24
+ [Jets.config.project_namespace, @provided_function_name].join('-')
25
+ end
26
+ end
27
+
28
+ def run
29
+ @options[:local] ? local_run : remote_run
30
+ end
31
+
32
+ # With local mode there is no way to bypass the guesser
33
+ def local_run
34
+ puts "Local mode enabled!"
35
+ ensure_guesses_found! # possibly exits here
36
+ klass = guesser.class_name.constantize
37
+ # Example:
38
+ # PostsController.process(event, context, meth)
39
+ event = JSON.load(transformed_event) || {} # transformed_event is JSON text String
40
+
41
+ fun = Jets::PolyFun.new(klass, guesser.method_name)
42
+ result = fun.run(event) # check the logs for polymorphic function errors
43
+ # Note: even though data might not always be json, the JSON.dump does a
44
+ # good job of not bombing, so always calling it to simplify code.
45
+
46
+ text = Jets::Util.normalize_result(result)
47
+ STDOUT.puts text
48
+ end
49
+
50
+ def remote_run
51
+ puts "Calling lambda function #{function_name} on AWS" unless @options[:mute]
52
+ return if @options[:noop]
53
+
54
+ options = {
55
+ # client_context: client_context,
56
+ function_name: function_name,
57
+ invocation_type: @invocation_type, # "Event", # RequestResponse
58
+ log_type: @log_type, # pretty sweet
59
+ payload: transformed_event, # "fileb://file-path/input.json", <= JSON
60
+ qualifier: @qualifier, # "1",
61
+ }
62
+
63
+ begin
64
+ resp = lambda_client.invoke(options)
65
+ rescue Aws::Lambda::Errors::ResourceNotFoundException
66
+ puts "The function #{function_name} was not found. Maybe check the spelling or the AWS_PROFILE?".color(:red)
67
+ return
68
+ end
69
+
70
+ if @options[:show_log]
71
+ puts "Last 4KB of log in the x-amz-log-result header:".color(:green)
72
+ puts Base64.decode64(resp.log_result)
73
+ end
74
+
75
+ add_console_link_to_clipboard
76
+ result = resp.payload.read # already been normalized/JSON.dump by AWS
77
+ unless @options[:mute_output]
78
+ STDOUT.puts result # only thing that goes to stdout
79
+ end
80
+ end
81
+
82
+ def guesser
83
+ @guesser ||= Guesser.new(@provided_function_name)
84
+ end
85
+
86
+ def ensure_guesses_found!
87
+ unless guesser.class_name and guesser.method_name
88
+ puts guesser.error_message
89
+ exit
90
+ end
91
+ end
92
+
93
+ # @event is String because it can be the file:// notation
94
+ # Returns text String for the lambda.invoke payload.
95
+ def transformed_event
96
+ text = @event
97
+ if text && text.include?("file://")
98
+ text = load_event_from_file(text)
99
+ end
100
+
101
+ check_valid_json!(text)
102
+
103
+ puts "Function name: #{function_name.color(:green)}" unless @options[:mute]
104
+ return text unless function_name.include?("_controller-")
105
+ return text if @options[:lambda_proxy] == false
106
+
107
+ event = JSON.load(text)
108
+ lambda_proxy = {"queryStringParameters" => event}
109
+ JSON.dump(lambda_proxy)
110
+ end
111
+
112
+ def load_event_from_file(text)
113
+ path = text.gsub('file://','')
114
+ path = "#{Jets.root}/#{path}" unless path[0..0] == '/'
115
+ unless File.exist?(path)
116
+ puts "File #{path} does not exist. Are you sure the file exists?".color(:red)
117
+ exit
118
+ end
119
+ text = IO.read(path)
120
+ end
121
+
122
+ # Exits with friendly error message when user provides bad just
123
+ def check_valid_json!(text)
124
+ JSON.load(text)
125
+ rescue JSON::ParserError => e
126
+ puts "Invalid json provided:\n '#{text}'"
127
+ puts "Exiting... Please try again and provide valid json."
128
+ exit 1
129
+ end
130
+
131
+ # So use can quickly paste this into their browser if they want to see the function
132
+ # via the Lambda console
133
+ def add_console_link_to_clipboard
134
+ return unless RUBY_PLATFORM =~ /darwin/
135
+ return unless system("type pbcopy > /dev/null")
136
+
137
+ # TODO: for add_console_link_to_clipboard get the region from the ~/.aws/config and AWS_PROFILE setting
138
+ region = Aws::S3::Client.new.config.region || ENV["AWS_REGION"] ||'us-east-1'
139
+ link = "https://console.aws.amazon.com/lambda/home?region=#{region}#/functions/#{function_name}?tab=configuration"
140
+ system("echo #{link} | pbcopy")
141
+ puts "Pro tip: The Lambda Console Link to the #{function_name} function has been added to your clipboard." unless @options[:mute]
142
+ end
143
+
144
+ # TODO: Hook client_context up and make sure it works. Think I've figure out how to sign client_context below.
145
+ # Client context must be a valid Base64-encoded JSON object
146
+ # Example: http://docs.aws.amazon.com/mobileanalytics/latest/ug/PutEvents.html
147
+ def client_context
148
+ context = {
149
+ "client" => {
150
+ "client_id" => "Jets",
151
+ "app_title" => "jets call cli",
152
+ "app_version_name" => Jets::VERSION,
153
+ },
154
+ "custom" => {},
155
+ "env" =>{
156
+ "platform" => RUBY_PLATFORM,
157
+ "platform_version" => RUBY_VERSION,
158
+ }
159
+ }
160
+ Base64.encode64(JSON.dump(context))
161
+ end
162
+
163
+ # For this class redirect puts to stderr so user can pipe output to tools like
164
+ # jq. Example:
165
+ # jets call posts_controller-index '{"test":1}' | jq .
166
+ def puts(text)
167
+ $stderr.puts(text)
168
+ end
169
+
170
+ def lambda_client
171
+ opt = {}
172
+ opt = opt.merge({retry_limit: @options[:retry_limit]}) if @options[:retry_limit].present?
173
+ opt = opt.merge({http_read_timeout: @options[:read_timeout]}) if @options[:read_timeout].present?
174
+
175
+ if opt.empty?
176
+ aws_lambda
177
+ else
178
+ Aws::Lambda::Client.new(opt)
179
+ end
180
+ end
181
+
182
+ end
@@ -0,0 +1,24 @@
1
+ class Jets::Commands::Clean
2
+ class Base
3
+ def initialize(options={})
4
+ @options = options
5
+ end
6
+
7
+ private
8
+ def say(message)
9
+ prefix = 'NOOP ' if @options[:noop]
10
+ puts "#{prefix}#{message}" unless @options[:mute]
11
+ end
12
+
13
+ def are_you_sure?(message)
14
+ return true if @options[:yes]
15
+
16
+ puts "Are you sure that you want to #{message}? (y/N)"
17
+ yes = $stdin.gets.strip
18
+ unless yes =~ /^y/
19
+ puts "Phew that was close!"
20
+ exit 0
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,13 @@
1
+ require 'fileutils'
2
+
3
+ class Jets::Commands::Clean
4
+ class Build < Base
5
+ def clean
6
+ are_you_sure?("delete /tmp/jets")
7
+
8
+ say "Removing /tmp/jets..."
9
+ FileUtils.rm_rf("/tmp/jets") unless @options[:noop]
10
+ say "Removed /tmp/jets"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,111 @@
1
+ # The thing that limits this implementation is that there needs to be at least
2
+ # one lambda function created from an internal jets function. Example:
3
+ #
4
+ # /aws/lambda/demo-dev-2-jets-preheat_job-warm
5
+ # /aws/lambda/demo-dev-2-jets-public_controller-show
6
+ #
7
+ # We're doing this because JETS_ENV_EXTRA environments can create additional matching
8
+ # log groups and we don't want to overly-aggressively delete them.
9
+ #
10
+ # The `keep_prefixes(log_group_names)` method calcuates the log groups to keep.
11
+ class Jets::Commands::Clean
12
+ class Log < Base
13
+ extend Memoist
14
+ include Jets::AwsServices
15
+
16
+ def clean
17
+ are_you_sure?("delete CloudWatch logs")
18
+
19
+ say "Removing CloudWatch logs for #{prefix_guess}..."
20
+ log_groups.each do |g|
21
+ next if keep_log_group?(g.log_group_name)
22
+ delete_log_group(g.log_group_name) unless @options[:noop]
23
+ say "Removed log group: #{g.log_group_name}"
24
+ end
25
+ say "Removed CloudWatch logs for #{prefix_guess}"
26
+ end
27
+
28
+ def delete_log_group(log_group_name)
29
+ logs.delete_log_group(log_group_name: log_group_name)
30
+ end
31
+
32
+ def clean_deploys
33
+ groups = deploy_log_groups.sort_by do |g|
34
+ g.log_group_name
35
+ end
36
+ # Keep the last 2 recent log groups so we can see the deleted logic
37
+ groups = groups[0..-3]
38
+ groups.each do |g|
39
+ logs.delete_log_group(log_group_name: g.log_group_name) unless @options[:noop]
40
+ end
41
+ end
42
+
43
+ def deploy_log_groups
44
+ log_groups.select do |g|
45
+ !keep_log_group?(g.log_group_name) &&
46
+ g.log_group_name.include?('jets-base-path')
47
+ end
48
+ end
49
+
50
+ private
51
+ def prefix_guess
52
+ Jets::Naming.parent_stack_name
53
+ end
54
+
55
+ def log_groups
56
+ groups, next_token = [], true
57
+ while next_token
58
+ next_token = nil if next_token == true # just at start the loop
59
+ resp = logs.describe_log_groups(
60
+ log_group_name_prefix: "/aws/lambda/#{prefix_guess}-",
61
+ next_token: next_token,
62
+ )
63
+ groups += resp.log_groups
64
+ next_token = resp.next_token
65
+ end
66
+ groups
67
+ end
68
+ memoize :log_groups
69
+
70
+ def log_group_names
71
+ log_groups.map(&:log_group_name)
72
+ end
73
+
74
+ def all_prefixes(log_group_names)
75
+ log_prefixes(log_group_names)
76
+ end
77
+ memoize :all_prefixes
78
+
79
+ # Check for the prefixes to keep. The slightly tricky thing to watch for is
80
+ # for the prefix matching addiitonal log groups that belong to other
81
+ # JETS_ENV_EXTRA=xxx created environments.
82
+ #
83
+ # We find and store the prefixes to keep so we don't over aggressively delete
84
+ # log groups.
85
+ def keep_prefixes(log_group_names)
86
+ names = log_group_names.reject do |name|
87
+ name =~ %r{/aws/lambda/#{prefix_guess}-jets}
88
+ end
89
+ log_prefixes(names)
90
+ end
91
+ memoize :keep_prefixes
92
+
93
+ # Strips -jets.* from the full log group name to leave only the prefix behind
94
+ def log_prefixes(names)
95
+ names = names.select do |name|
96
+ name.match(Regexp.new("#{prefix_guess}-.*jets"))
97
+ end
98
+ names.map do |name|
99
+ name.sub(/-jets.*/,'')
100
+ end.uniq.sort
101
+ end
102
+
103
+ # Check if it is safe to delete the log group
104
+ def keep_log_group?(log_group_name)
105
+ keep_prefixes = keep_prefixes(log_group_names)
106
+ !!keep_prefixes.detect do |keep_prefix|
107
+ log_group_name =~ Regexp.new(keep_prefix)
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,19 @@
1
+ module Jets::Commands
2
+ class Clean < Jets::Commands::Base
3
+ class_option :noop, type: :boolean, desc: "noop or dry-run mode"
4
+ class_option :mute, type: :boolean, desc: "mute output"
5
+ class_option :yes, type: :boolean, desc: "bypass are you sure prompt"
6
+
7
+ desc "log", "Cleans CloudWatch log groups assocated with app"
8
+ long_desc Help.text('clean:log')
9
+ def log
10
+ Log.new(options).clean
11
+ end
12
+
13
+ desc "build", "Cleans jets build"
14
+ long_desc Help.text('clean:build')
15
+ def build
16
+ Build.new(options).clean
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,51 @@
1
+ module Jets::Commands
2
+ class Configure
3
+ extend Memoist
4
+
5
+ def initialize(options)
6
+ @options = options
7
+ end
8
+
9
+ def run
10
+ data = load_yaml
11
+ data['key'] = token
12
+ FileUtils.mkdir_p(File.dirname(path))
13
+ IO.write(path, YAML.dump(data))
14
+ puts "Updated #{pretty(path)}"
15
+ end
16
+
17
+ def load_yaml
18
+ if File.exist?(path)
19
+ YAML.load_file(path)
20
+ else
21
+ {}
22
+ end
23
+ rescue Psych::SyntaxError => e
24
+ puts "WARN: There was an error reading #{pretty(path)}".color(:yellow)
25
+ puts "WARN: #{e.class} #{e.message}".color(:yellow)
26
+ {}
27
+ end
28
+
29
+ def pretty(path)
30
+ path.sub(ENV['HOME'], '~')
31
+ end
32
+
33
+ def path
34
+ "#{ENV['HOME']}/.jets/config.yml"
35
+ end
36
+
37
+ def token
38
+ @options[:token] || prompt
39
+ end
40
+ memoize :token
41
+
42
+ def prompt
43
+ puts <<~EOL
44
+ You are about to configure your ~/.jets/config.yml
45
+ You can get a token from serverlessgems.com
46
+ EOL
47
+ print "Please provide your token: "
48
+ $stdin.gets.strip
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,12 @@
1
+ class Jets::Commands::Console
2
+ def self.run
3
+ puts Jets::Booter.message
4
+
5
+ # Thanks: https://mutelight.org/bin-console
6
+ require "irb"
7
+ require "irb/completion"
8
+
9
+ ARGV.clear # https://stackoverflow.com/questions/33070092/irb-start-not-starting/33136762
10
+ IRB.start
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ task :environment do
2
+ Jets.boot
3
+ end
@@ -0,0 +1,25 @@
1
+ require "recursive-open-struct"
2
+
3
+ module Jets::Commands::Db::Tasks::Dummy
4
+ class App
5
+ def config
6
+ Config.new(
7
+ active_record: {
8
+ belongs_to_required_by_default: true
9
+ },
10
+ paths: {
11
+ db: ["db"],
12
+ "db/migrate": ["db/migrate"]
13
+ }
14
+ )
15
+ end
16
+
17
+ def paths
18
+ RecursiveOpenStruct.new(
19
+ paths: {
20
+ "db/migrate": ["db/migrate"]
21
+ }
22
+ )
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ require "recursive-open-struct"
2
+
3
+ module Jets::Commands::Db::Tasks::Dummy
4
+ class Config < RecursiveOpenStruct
5
+ def load_database_yaml # :nodoc:
6
+ require "rails/application/dummy_erb_compiler"
7
+
8
+ path = "#{Jets.root}/config/database.yml"
9
+ yaml = Pathname.new(path)
10
+ erb = DummyERB.new(yaml.read)
11
+ YAML.load(erb.result) || {}
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,34 @@
1
+ class Jets::Commands::Db::Tasks
2
+ # Ugly but it loads ActiveRecord database tasks
3
+ def self.load!
4
+ # Lazy require rails so Rails const is only defined in jets db:* tasks
5
+ require "rails"
6
+ require "active_record"
7
+
8
+ # Jets.boot # Jets.boot here screws up jets -h, the db_config doesnt seem to match exactly
9
+ # but seems to be working anyway.
10
+ db_configs = Jets.application.config.database
11
+ ActiveRecord::Tasks::DatabaseTasks.database_configuration = db_configs
12
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths = ["db/migrate"]
13
+ ActiveRecord::Tasks::DatabaseTasks.seed_loader = Seeder.new("#{Jets.root}/db/seeds.rb")
14
+
15
+ # Need to mock out the usage of Rails.application in:
16
+ # activerecord-5.1.4/lib/active_record/tasks/database_tasks.rb
17
+ Rails.application = Dummy::App.new
18
+ load "active_record/railties/databases.rake"
19
+ load File.expand_path("../environment-task.rake", __FILE__)
20
+ end
21
+
22
+
23
+ # Thanks: https://stackoverflow.com/questions/19206764/how-can-i-load-activerecord-database-tasks-on-a-ruby-project-outside-rails/24840749
24
+ class Seeder
25
+ def initialize(seed_file)
26
+ @seed_file = seed_file
27
+ end
28
+
29
+ def load_seed
30
+ raise "Seed file '#{@seed_file}' does not exist" unless File.file?(@seed_file)
31
+ load @seed_file
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,13 @@
1
+ module Jets::Commands
2
+ class Db < Jets::Commands::Base
3
+ desc "generate", "Creates a migration to change a db table"
4
+ long_desc Help.text('db:generate')
5
+ def generate(*args)
6
+ require "rails/generators"
7
+ require "rails/generators/active_record/migration/migration_generator"
8
+
9
+ generator = ActiveRecord::Generators::MigrationGenerator.new(args)
10
+ generator.create_migration_file
11
+ end
12
+ end
13
+ end