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

Sign up to get free protection for your applications and to get access to all the features.
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,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!
@@ -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,166 @@
1
+ require "thor"
2
+
3
+ module Jets::Commands
4
+ class Main < Base
5
+
6
+ class_option :noop, type: :boolean
7
+
8
+ desc "build", "Builds and packages project for AWS Lambda"
9
+ long_desc Help.text(:build)
10
+ option :templates, type: :boolean, default: false, desc: "Only build the CloudFormation templates. Skip code building"
11
+ def build
12
+ Build.new(options).run
13
+ end
14
+
15
+ desc "configure [TOKEN]", "configure token and updates ~/.jets/config.yml"
16
+ long_desc Help.text(:configure)
17
+ def configure(token=nil)
18
+ Configure.new(options.merge(token: token)).run
19
+ end
20
+
21
+ desc "deploy [environment]", "Builds and deploys project to AWS Lambda"
22
+ long_desc Help.text(:deploy)
23
+ # Note the environment is here to trick the Thor parser to allowing an
24
+ # environment parameter. It is not actually set here. It is set earlier
25
+ # in cli.rb: set_jets_env_from_cli_arg!
26
+ def deploy(environment=nil)
27
+ Deploy.new(options).run
28
+ end
29
+
30
+ desc "delete", "Delete the Jets project and all its resources"
31
+ long_desc Help.text(:delete)
32
+ option :yes, aliases: %w[y], type: :boolean, desc: "Skip are you sure prompt."
33
+ option :wait, type: :boolean, default: true, desc: "Wait for stack deletion to complete."
34
+ # Note the environment is here to trick the Thor parser to allowing an
35
+ # environment parameter. It is not actually set here. It is set earlier
36
+ # in cli.rb: set_jets_env_from_cli_arg!
37
+ def delete(environment=nil)
38
+ Delete.new(options).run
39
+ end
40
+
41
+ desc "server", "Runs a local server that mimics API Gateway for development"
42
+ long_desc Help.text(:server)
43
+ option :port, default: "8888", desc: "use PORT"
44
+ option :host, default: "127.0.0.1", desc: "listen on HOST"
45
+ def server
46
+ o = options
47
+ command = "bundle exec rackup --port #{o[:port]} --host #{o[:host]}"
48
+ puts "=> #{command}".color(:green)
49
+ puts Jets::Booter.message
50
+ Jets::Booter.check_config_ru!
51
+ Jets::RackServer.start(options) unless ENV['JETS_RACK'] == '0' # rack server runs in background by default
52
+ Bundler.with_unbundled_env do
53
+ system(command)
54
+ end
55
+ end
56
+
57
+ desc "routes", "Print out your application routes"
58
+ long_desc Help.text(:routes)
59
+ def routes
60
+ puts Jets::Router.help(Jets::Router.routes)
61
+ Jets::Router.validate_routes!
62
+ end
63
+
64
+ desc "console", "REPL console with Jets environment loaded"
65
+ long_desc Help.text(:console)
66
+ def console
67
+ Console.run
68
+ end
69
+
70
+ desc "runner", "Run Ruby code in the context of Jets app non-interactively"
71
+ long_desc Help.text(:runner)
72
+ def runner(code)
73
+ Runner.run(code)
74
+ end
75
+
76
+ desc "dbconsole", "Starts DB REPL console"
77
+ long_desc Help.text(:dbconsole)
78
+ def dbconsole
79
+ Dbconsole.start(*args)
80
+ end
81
+
82
+ # Command is called 'call' because invoke is a Thor keyword.
83
+ desc "call [function] [event]", "Call a lambda function on AWS or locally"
84
+ long_desc Help.text(:call)
85
+ option :invocation_type, default: "RequestResponse", desc: "RequestResponse, Event, or DryRun"
86
+ option :log_type, default: "Tail", desc: "Works if invocation_type set to RequestResponse"
87
+ option :qualifier, desc: "Lambda function version or alias name"
88
+ option :show_log, type: :boolean, desc: "Shows last 4KB of log in the x-amz-log-result header"
89
+ option :lambda_proxy, type: :boolean, default: true, desc: "Enables automatic Lambda proxy transformation of the event payload"
90
+ option :guess, type: :boolean, default: true, desc: "Enables guess mode. Uses inference to allows use of all dashes to specify functions. Guess mode verifies that the function exists in the code base."
91
+ option :local, type: :boolean, desc: "Enables local mode. Instead of invoke the AWS Lambda function, the method gets called locally with current app code. With local mode guess mode is always used."
92
+ option :retry_limit, type: :numeric, default: nil, desc: "Retry count of invoking function. It work with remote call"
93
+ option :read_timeout, type: :numeric, default: nil, desc: " The number of seconds to wait for response data. It work with remote call"
94
+ def call(function_name, payload='')
95
+ # Printing to stdout can mangle up the response when piping
96
+ # the value to jq. For example:
97
+ #
98
+ # `jets call --local .. | jq`
99
+ #
100
+ # By redirecting stderr we can use jq safely.
101
+ #
102
+ $stdout.sync = true
103
+ $stderr.sync = true
104
+ $stdout = $stderr # jets call operation
105
+ Call.new(function_name, payload, options).run
106
+ end
107
+
108
+ desc "generate [type] [args]", "Generates things like scaffolds"
109
+ long_desc Help.text(:generate) # do use Jets::Generator.help as it'll load Rails const
110
+ def generate(generator, *args)
111
+ Jets::Generator.invoke(generator, *args)
112
+ end
113
+
114
+ desc "degenerate [type] [args]", "Destroys things like scaffolds"
115
+ long_desc Help.text(:degenerate) # do use Jets::Generator.help as it'll load Rails const
116
+ def degenerate(generator, *args)
117
+ Jets::Generator.revoke(generator, *args)
118
+ end
119
+
120
+ desc "status", "Shows the current status of the Jets app"
121
+ long_desc Help.text(:status)
122
+ def status
123
+ Jets::Cfn::Status.new(options).run
124
+ end
125
+
126
+ desc "url", "App url if routes are defined"
127
+ long_desc Help.text(:url)
128
+ def url
129
+ Jets::Commands::Url.new(options).display
130
+ end
131
+
132
+ desc "secret", "Generates secret"
133
+ long_desc Help.text(:secret)
134
+ def secret
135
+ puts SecureRandom.hex(64)
136
+ end
137
+
138
+ desc "middleware", "Prints list of middleware"
139
+ long_desc Help.text(:middleware)
140
+ def middleware
141
+ stack = Jets.application.middlewares
142
+ stack.middlewares.each do |middleware|
143
+ puts "use #{middleware.name}"
144
+ end
145
+ puts "run #{Jets.application.endpoint}"
146
+ end
147
+
148
+ desc "upgrade", "Upgrade Jets"
149
+ long_desc Help.text(:upgrade)
150
+ def upgrade
151
+ Jets::Commands::Upgrade.new(options).run
152
+ end
153
+
154
+ desc "version", "Prints Jets version"
155
+ long_desc Help.text(:version)
156
+ def version
157
+ puts Jets.version
158
+ end
159
+
160
+ long_desc Help.text(:new)
161
+ Jets::Commands::New.cli_options.each do |args|
162
+ option(*args)
163
+ end
164
+ register(Jets::Commands::New, "new", "new", "Creates a starter skeleton jets project")
165
+ end
166
+ end
@@ -0,0 +1,58 @@
1
+ module Jets::Commands::Markdown
2
+ class Creator
3
+ cattr_accessor :mute
4
+
5
+ def self.create_all
6
+ clean
7
+ new.create_all
8
+ end
9
+
10
+ def self.clean
11
+ FileUtils.rm_rf("docs/_reference")
12
+ FileUtils.rm_f("docs/reference.md")
13
+ end
14
+
15
+ def cli_classes
16
+ Jets::Commands::Base.namespaced_commands.map do |full_command|
17
+ # IE of full_command: dynamodb:generate
18
+ Jets::CLI.new([full_command]).lookup(full_command)
19
+ end.uniq
20
+ end
21
+
22
+ def create_all
23
+ create_index
24
+
25
+ cli_classes.each do |cli_class|
26
+ # cli_class examples:
27
+ # Jets::Commands::Main
28
+ # Jets::Commands::Db
29
+ # Jets::Commands::Dynamodb::Migrate
30
+ cli_class.commands.each do |command|
31
+ command_name = command.first
32
+
33
+ page = Page.new(cli_class: cli_class, command_name: command_name)
34
+ create_page(page)
35
+ end
36
+ end
37
+ end
38
+
39
+ def create_page(page)
40
+ puts "Creating page: #{page.path}..."
41
+ FileUtils.mkdir_p(File.dirname(page.path))
42
+ IO.write(page.path, page.doc)
43
+ end
44
+
45
+ def create_index
46
+ create_include_reference
47
+ page = Index.new
48
+ FileUtils.mkdir_p(File.dirname(page.path))
49
+ puts "Creating index: #{page.path}"
50
+ IO.write(page.path, page.doc)
51
+ end
52
+
53
+ def create_include_reference
54
+ path = "docs/_includes/reference.md"
55
+ IO.write(path, "Generic tool description. Please edit #{path} with a description.") unless File.exist?(path)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,27 @@
1
+ module Jets::Commands::Markdown
2
+ class Index
3
+ def path
4
+ "docs/reference.md"
5
+ end
6
+
7
+ def command_list
8
+ commands = Jets::Commands::Base.namespaced_commands.sort.reject {|c| c.include?('help') }
9
+ commands.map do |full_command|
10
+ # Example: [jets deploy]({% link _reference/jets-deploy.md %})
11
+ link = full_command.gsub(':','-')
12
+ "* [jets #{full_command}]({% link _reference/jets-#{link}.md %})"
13
+ end.join("\n")
14
+ end
15
+
16
+ def doc
17
+ <<-EOL
18
+ ---
19
+ title: CLI Reference
20
+ ---
21
+ {% include reference.md %}
22
+
23
+ #{command_list}
24
+ EOL
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,125 @@
1
+ module Jets::Commands::Markdown
2
+ class Page
3
+ attr_reader :cli_name
4
+ def initialize(cli_class:, command_name:)
5
+ @cli_class = cli_class # IE: Jets::Commands::Main
6
+ @command_name = command_name # IE: generate
7
+
8
+ @cli_name = "jets"
9
+ @command = @cli_class.commands[@command_name]
10
+ end
11
+
12
+ def usage
13
+ banner = @cli_class.send(:banner, @command) # banner is protected method
14
+ invoking_command = File.basename($0) # could be rspec, etc
15
+ banner.sub(invoking_command, cli_name)
16
+ end
17
+
18
+ def full_command
19
+ [namespace, @command_name].compact.join(':')
20
+ end
21
+
22
+ def namespace
23
+ ns = @cli_class.to_s.sub('Jets::Commands::','').underscore.gsub('/','-')
24
+ ns == 'main' ? nil : ns
25
+ end
26
+
27
+ def description
28
+ @command.description
29
+ end
30
+
31
+ def options
32
+ shell = Shell.new
33
+ @cli_class.send(:class_options_help, shell, nil => @command.options.values)
34
+ text = shell.stdout.string
35
+ return "" if text.empty? # there are no options
36
+
37
+ lines = text.split("\n")[1..-1] # remove first line wihth "Options: "
38
+ lines.map! do |line|
39
+ # remove 2 leading spaces
40
+ line.sub(/^ /, '')
41
+ end
42
+ lines.join("\n")
43
+ end
44
+
45
+ # Use command's long description as main description
46
+ def long_description
47
+ text = @command.long_description
48
+ return "" if text.nil? # empty description
49
+
50
+ lines = text.split("\n")
51
+ lines.map do |line|
52
+ # In the CLI help, we use 2 spaces to designate commands
53
+ # In Markdown we need 4 spaces.
54
+ line.sub(/^ \b/, ' ')
55
+ end.join("\n")
56
+ end
57
+
58
+ def path
59
+ full_name = [cli_name, namespace, @command_name].compact.join('-')
60
+ "docs/_reference/#{full_name}.md"
61
+ end
62
+
63
+ def doc
64
+ <<-EOL
65
+ #{front_matter}
66
+ #{usage_markdown}
67
+ #{long_desc_markdown}
68
+ #{options_markdown}
69
+ EOL
70
+ end
71
+
72
+ def front_matter
73
+ command = [cli_name, full_command].compact.join(' ')
74
+ <<-EOL
75
+ ---
76
+ title: #{command}
77
+ reference: true
78
+ ---
79
+ EOL
80
+ end
81
+
82
+ def usage_markdown
83
+ <<-EOL
84
+ ## Usage
85
+
86
+ #{usage}
87
+ EOL
88
+ end
89
+
90
+ def desc_markdown
91
+ <<-EOL
92
+ ## Description
93
+
94
+ #{description}
95
+ EOL
96
+ end
97
+
98
+ # If the Thor long_description is empty then use the description.
99
+ def long_desc_markdown
100
+ return desc_markdown if long_description.empty?
101
+
102
+ <<-EOL
103
+ ## Description
104
+
105
+ #{description}.
106
+
107
+ #{long_description}
108
+ EOL
109
+ end
110
+
111
+ # handles blank options
112
+ def options_markdown
113
+ return '' if options.empty?
114
+
115
+ <<-EOL
116
+ ## Options
117
+
118
+ ```
119
+ #{options}
120
+ ```
121
+ EOL
122
+ end
123
+
124
+ end
125
+ end
@@ -0,0 +1,11 @@
1
+ require 'thor'
2
+
3
+ module Jets::Commands::Markdown
4
+ # Override stdout as an @io object so we can grab the text written normally
5
+ # outputted to the shell.
6
+ class Shell < Thor::Shell::Basic
7
+ def stdout
8
+ @io ||= StringIO.new
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,173 @@
1
+ module Jets::Commands
2
+ class New < Sequence
3
+ VALID_MODES = %w[html api job]
4
+ argument :project_folder
5
+
6
+ # Ugly, but when the class_option is only defined in the Thor::Group class
7
+ # it doesnt show up with jets new help :(
8
+ # If anyone knows how to fix this let me know.
9
+ def self.cli_options
10
+ [
11
+ [:bootstrap, type: :boolean, default: true, desc: "Install bootstrap css"], # same option in WebpackerTemplate
12
+ [:database, type: :string, default: 'mysql', desc: "Preconfigure database (options: mysql/postgresql)"],
13
+ [:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
14
+ [:git, type: :boolean, default: true, desc: "Git initialize the project"],
15
+ [:mode, default: 'html', desc: "mode: #{VALID_MODES.join(',')}"],
16
+ [:repo, desc: "GitHub repo to use. Format: user/repo"],
17
+ [:webpacker, type: :boolean, default: true, desc: "Install webpacker"],
18
+ ]
19
+ end
20
+
21
+ cli_options.each do |args|
22
+ class_option(*args)
23
+ end
24
+
25
+ def set_initial_variables
26
+ @project_name = project_folder == '.' ? File.basename(Dir.pwd) : project_folder
27
+ @database_name = @project_name.gsub('-','_')
28
+
29
+ # options is a frozen hash by Thor so cannot modify it.
30
+ # Also had trouble unfreezing it with .dup. So using instance variables instead
31
+ case options[:mode]
32
+ when 'html'
33
+ @bootstrap = options[:bootstrap]
34
+ @database = options[:database]
35
+ @webpacker = options[:webpacker]
36
+ when 'api'
37
+ @bootstrap = false
38
+ @database = options[:database]
39
+ @webpacker = false
40
+ when 'job'
41
+ @bootstrap = false
42
+ @database = false
43
+ @webpacker = false
44
+ else
45
+ puts "Invalid mode provided: #{@options[:mode].color(:red)}. Please pass in an valid mode: #{VALID_MODES.join(',').color(:green)}."
46
+ exit 1
47
+ end
48
+ end
49
+
50
+ def create_project
51
+ options[:repo] ? clone_project : copy_project
52
+
53
+ destination_root = "#{Dir.pwd}/#{project_folder}"
54
+ self.destination_root = destination_root
55
+ FileUtils.cd("#{Dir.pwd}/#{project_folder}")
56
+ end
57
+
58
+ def make_bin_executable
59
+ return unless File.exist?("bin")
60
+ chmod "bin", 0755 & ~File.umask, verbose: false
61
+ end
62
+
63
+ def bundle_install
64
+ Bundler.with_unbundled_env do
65
+ system("BUNDLE_IGNORE_CONFIG=1 bundle install")
66
+ end
67
+ end
68
+
69
+ def webpacker_install
70
+ return unless @webpacker
71
+ unless yarn_installed?
72
+ puts "Yarn is not installed or has not been detected. Please double check that yarn has been installed.".color(:red)
73
+ puts <<~EOL
74
+ To check:
75
+
76
+ which yarn
77
+
78
+ If it is not installed, you can usually install it with:
79
+
80
+ npm install -g yarn
81
+
82
+ Refer to the install docs for more info: http://rubyonjets.com/docs/install/
83
+ EOL
84
+ exit 1
85
+ end
86
+
87
+ command = "bundle exec jets webpacker:install"
88
+ command += " FORCE=1" if options[:force]
89
+ run(command)
90
+ end
91
+
92
+ def update_package_json
93
+ path = "package.json"
94
+ return unless File.exist?(path)
95
+ data = JSON.load(IO.read(path))
96
+ data["private"] = true
97
+ IO.write(path, JSON.pretty_generate(data))
98
+ end
99
+
100
+ # bootstrap is dependent on webpacker, options[:bootstrap] is used
101
+ # in webpacker_install.
102
+ def bootstrap_install
103
+ return unless @bootstrap
104
+
105
+ # Add jquery and popper plugin to handle Delete of CRUD
106
+ jquery =<<-JS
107
+ const webpack = require('webpack')
108
+ environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
109
+ $: 'jquery',
110
+ jQuery: 'jquery',
111
+ Popper: ['popper.js', 'default']
112
+ }))
113
+ JS
114
+ after = "const { environment } = require('@rails/webpacker')\n"
115
+ insert_into_file("config/webpack/environment.js", jquery, after: after)
116
+
117
+ jets_ujs =<<-JS
118
+ import Jets from "@rubyonjets/ujs-compat"
119
+ Jets.start()
120
+ JS
121
+ after = "Rails.start()\n"
122
+ insert_into_file("app/javascript/packs/application.js", jets_ujs, after: after)
123
+
124
+ run("yarn add bootstrap jquery popper.js postcss-cssnext @rails/ujs @rubyonjets/ujs-compat")
125
+ end
126
+
127
+ def git_init
128
+ return if !options[:git]
129
+ return unless git_installed?
130
+ return if File.exist?(".git") # this is a clone repo
131
+ return unless git_credentials_set?
132
+
133
+ run("git init")
134
+ run("git add .")
135
+ run("git commit -m 'first commit'")
136
+ end
137
+
138
+ def user_message
139
+ more_info = if options[:mode] == 'job'
140
+ <<~EOL
141
+ Learn more about jobs here: http://rubyonjets.com/docs/jobs/
142
+
143
+ To deploy to AWS Lambda:
144
+ jets deploy
145
+ EOL
146
+ else
147
+ <<~EOL
148
+ To start a server and test locally:
149
+ jets server # localhost:8888 should have the Jets welcome page
150
+
151
+ Scaffold example:
152
+ jets generate scaffold post title:string body:text published:boolean
153
+ jets db:create db:migrate
154
+
155
+ To deploy to AWS Lambda, edit your .env.development.remote and add a DATABASE_URL endpoint.
156
+ Then run:
157
+
158
+ jets deploy
159
+ EOL
160
+ end
161
+
162
+ puts <<~EOL
163
+ #{"="*64}
164
+ Congrats 🎉 You have successfully created a Jets project.
165
+
166
+ Cd into the project directory:
167
+ cd #{project_folder}
168
+
169
+ #{more_info}
170
+ EOL
171
+ end
172
+ end
173
+ end