jets 3.1.0 → 5.0.0

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 (641) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +5 -1
  4. data/CHANGELOG.md +141 -0
  5. data/Gemfile +1 -5
  6. data/LICENSE.txt +1 -1
  7. data/README.md +21 -43
  8. data/Rakefile +3 -3
  9. data/backers.md +0 -5
  10. data/engines/internal/app/controllers/jets/application_controller.rb +28 -0
  11. data/engines/internal/app/controllers/jets/bare_controller.rb +6 -0
  12. data/engines/internal/app/controllers/jets/health_controller.rb +55 -0
  13. data/engines/internal/app/controllers/jets/info_controller.rb +45 -0
  14. data/{lib/jets → engines}/internal/app/controllers/jets/mailers_controller.rb +12 -14
  15. data/{lib/jets → engines}/internal/app/controllers/jets/mount_controller.rb +6 -10
  16. data/{lib/jets → engines}/internal/app/controllers/jets/public_controller.rb +6 -2
  17. data/engines/internal/app/controllers/jets/welcome_controller.rb +9 -0
  18. data/engines/internal/app/functions/jets/base_path.rb +109 -0
  19. data/engines/internal/app/functions/jets/base_path_mapping.rb +191 -0
  20. data/engines/internal/app/jobs/jets/preheat_job.rb +67 -0
  21. data/engines/internal/app/views/jets/info/properties.html.erb +1 -0
  22. data/engines/internal/app/views/jets/info/routes.html.erb +10 -0
  23. data/{lib/jets → engines}/internal/app/views/jets/mailers/email.html.erb +37 -17
  24. data/engines/internal/app/views/jets/mailers/index.html.erb +8 -0
  25. data/engines/internal/app/views/jets/mailers/mailer.html.erb +6 -0
  26. data/{lib/jets/commands/templates/skeleton/public/index.html.tt → engines/internal/app/views/jets/welcome/index.html.erb} +8 -4
  27. data/engines/internal/app/views/layouts/application.html.erb +51 -0
  28. data/engines/internal/lib/internal/actiondispatch.rb +39 -0
  29. data/engines/internal/lib/internal/actionmailer.rb +51 -0
  30. data/engines/internal/lib/internal/actionview.rb +152 -0
  31. data/engines/internal/lib/internal/activerecord.rb +37 -0
  32. data/engines/internal/lib/internal/activesupport.rb +47 -0
  33. data/engines/internal/lib/internal/engine.rb +13 -0
  34. data/engines/internal/lib/internal/i18n_engine.rb +19 -0
  35. data/engines/internal/lib/internal/jets_controller.rb +46 -0
  36. data/engines/internal/lib/internal/overrides/debug_exceptions.rb +40 -0
  37. data/engines/internal/lib/internal/templates/rescues/_trace.html.erb +62 -0
  38. data/engines/internal/lib/internal/templates/rescues/_trace.text.erb +9 -0
  39. data/engines/internal/lib/internal/turbines/asset_tag_helper.rb +70 -0
  40. data/engines/internal/lib/internal/turbines/helpers.rb +18 -0
  41. data/engines/internal/lib/internal/turbines/routes_helpers.rb +42 -0
  42. data/exe/jets +1 -10
  43. data/jets.gemspec +16 -13
  44. data/lib/jets/app_loader.rb +77 -0
  45. data/lib/jets/application/bootstrap.rb +100 -0
  46. data/lib/jets/application/configuration/defaults.rb +256 -0
  47. data/lib/jets/application/configuration.rb +494 -0
  48. data/lib/jets/application/default_middleware_stack.rb +140 -0
  49. data/lib/jets/application/dummy_erb_compiler.rb +18 -0
  50. data/lib/jets/application/finisher.rb +266 -0
  51. data/lib/jets/application/routes_reloader.rb +80 -0
  52. data/lib/jets/application.rb +515 -199
  53. data/lib/jets/authorizer/base.rb +1 -0
  54. data/lib/jets/authorizer/dsl.rb +15 -11
  55. data/lib/jets/authorizer/helpers/iam_helper.rb +13 -11
  56. data/lib/jets/autoloaders/gem.rb +70 -0
  57. data/lib/jets/autoloaders/inflector.rb +21 -0
  58. data/lib/jets/autoloaders.rb +38 -101
  59. data/lib/jets/aws_info.rb +2 -2
  60. data/lib/jets/aws_services/stack_status.rb +1 -1
  61. data/lib/jets/aws_services.rb +8 -0
  62. data/lib/jets/backtrace_cleaner.rb +27 -0
  63. data/lib/jets/booter.rb +30 -118
  64. data/lib/jets/builders/code_builder.rb +64 -122
  65. data/lib/jets/builders/code_size.rb +1 -0
  66. data/lib/jets/builders/gem_replacer.rb +6 -12
  67. data/lib/jets/builders/handler_generator.rb +34 -14
  68. data/lib/jets/builders/lambda_layer.rb +2 -7
  69. data/lib/jets/builders/purger.rb +1 -1
  70. data/lib/jets/builders/rack_packager.rb +1 -1
  71. data/lib/jets/builders/ruby_packager.rb +54 -10
  72. data/lib/jets/builders/shim_vars/app.rb +10 -6
  73. data/lib/jets/builders/templates/handlers/one_lambda_for_all_controllers.rb +33 -0
  74. data/lib/jets/builders/templates/handlers/one_lambda_per_controller.rb +20 -0
  75. data/lib/jets/builders/templates/{handler.rb → handlers/one_lambda_per_method.rb} +6 -0
  76. data/lib/jets/bundle.rb +2 -9
  77. data/lib/jets/cfn/base.rb +82 -0
  78. data/lib/jets/cfn/builder/api/base.rb +12 -0
  79. data/lib/jets/cfn/{builders/api_deployment_builder.rb → builder/api/deployment.rb} +11 -21
  80. data/lib/jets/cfn/builder/api/gateway.rb +104 -0
  81. data/lib/jets/cfn/builder/api/mapping.rb +54 -0
  82. data/lib/jets/cfn/builder/api/methods.rb +72 -0
  83. data/lib/jets/cfn/builder/api/paged.rb +30 -0
  84. data/lib/jets/cfn/builder/api/pages/base.rb +105 -0
  85. data/lib/jets/cfn/builder/api/pages/methods.rb +17 -0
  86. data/lib/jets/cfn/builder/api/pages/page.rb +19 -0
  87. data/lib/jets/cfn/builder/api/pages/resources.rb +21 -0
  88. data/lib/jets/cfn/builder/api/resources.rb +40 -0
  89. data/lib/jets/cfn/{builders/authorizer_builder.rb → builder/authorizer.rb} +16 -19
  90. data/lib/jets/cfn/builder/controller.rb +28 -0
  91. data/lib/jets/cfn/builder/function.rb +9 -0
  92. data/lib/jets/cfn/builder/interface.rb +146 -0
  93. data/lib/jets/cfn/builder/job.rb +10 -0
  94. data/lib/jets/cfn/builder/nested.rb +130 -0
  95. data/lib/jets/cfn/builder/one_controller.rb +53 -0
  96. data/lib/jets/cfn/{builders/parent_builder → builder/parent}/stagger.rb +1 -1
  97. data/lib/jets/cfn/builder/parent.rb +149 -0
  98. data/lib/jets/cfn/builder/post_process.rb +25 -0
  99. data/lib/jets/cfn/{builders/rule_builder.rb → builder/rule.rb} +4 -8
  100. data/lib/jets/cfn/{builders/shared_builder.rb → builder/shared.rb} +5 -4
  101. data/lib/jets/cfn/{builders → builder}/util/source.rb +1 -1
  102. data/lib/jets/{commands/build.rb → cfn/builder.rb} +50 -78
  103. data/lib/jets/cfn/deployment.rb +45 -0
  104. data/lib/jets/cfn/download.rb +39 -0
  105. data/lib/jets/cfn/params/api/base.rb +39 -0
  106. data/lib/jets/cfn/params/api/cors.rb +10 -0
  107. data/lib/jets/cfn/params/api/methods.rb +69 -0
  108. data/lib/jets/cfn/params/api/resources.rb +28 -0
  109. data/lib/jets/{resource/child_stack/common_parameters.rb → cfn/params/common.rb} +3 -3
  110. data/lib/jets/{resource → cfn/resource}/api_gateway/authorizer.rb +21 -21
  111. data/lib/jets/cfn/resource/api_gateway/base_path/function.rb +57 -0
  112. data/lib/jets/{resource → cfn/resource}/api_gateway/base_path/mapping.rb +13 -12
  113. data/lib/jets/cfn/resource/api_gateway/base_path/role.rb +70 -0
  114. data/lib/jets/{resource → cfn/resource}/api_gateway/deployment.rb +13 -20
  115. data/lib/jets/{resource → cfn/resource}/api_gateway/domain_name.rb +11 -11
  116. data/lib/jets/{resource → cfn/resource}/api_gateway/method/authorization.rb +1 -1
  117. data/lib/jets/cfn/resource/api_gateway/method.rb +92 -0
  118. data/lib/jets/{resource → cfn/resource}/api_gateway/resource.rb +14 -10
  119. data/lib/jets/cfn/resource/api_gateway/resource_id.rb +25 -0
  120. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/change_detection.rb +1 -1
  121. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id/message.rb +14 -4
  122. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/logical_id.rb +2 -2
  123. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/base.rb +15 -41
  124. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/media_types.rb +3 -3
  125. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/page.rb +6 -6
  126. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/to.rb +8 -3
  127. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/change/variable.rb +2 -2
  128. data/lib/jets/cfn/resource/api_gateway/rest_api/routes/change.rb +27 -0
  129. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision/variable_exception.rb +1 -1
  130. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes/collision.rb +1 -1
  131. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api/routes.rb +1 -1
  132. data/lib/jets/{resource → cfn/resource}/api_gateway/rest_api.rb +22 -12
  133. data/lib/jets/{resource → cfn/resource}/associated.rb +1 -1
  134. data/lib/jets/{resource → cfn/resource}/config/config_rule.rb +18 -18
  135. data/lib/jets/{resource → cfn/resource}/config/managed_rule.rb +5 -5
  136. data/lib/jets/{resource → cfn/resource}/events/rule.rb +10 -10
  137. data/lib/jets/{resource → cfn/resource}/iam/application_role.rb +4 -4
  138. data/lib/jets/cfn/resource/iam/base_role_definition.rb +56 -0
  139. data/lib/jets/{resource → cfn/resource}/iam/class_role.rb +5 -5
  140. data/lib/jets/{resource → cfn/resource}/iam/function_role.rb +6 -6
  141. data/lib/jets/{resource → cfn/resource}/iam/managed_policy.rb +1 -1
  142. data/lib/jets/cfn/resource/iam/policy.rb +31 -0
  143. data/lib/jets/{resource → cfn/resource}/iam/policy_document.rb +10 -9
  144. data/lib/jets/{resource → cfn/resource}/iot/topic_rule.rb +10 -10
  145. data/lib/jets/{resource → cfn/resource}/lambda/event_source_mapping.rb +9 -9
  146. data/lib/jets/cfn/resource/lambda/function/controller.rb +21 -0
  147. data/lib/jets/{resource → cfn/resource}/lambda/function/environment.rb +9 -7
  148. data/lib/jets/cfn/resource/lambda/function.rb +266 -0
  149. data/lib/jets/{resource → cfn/resource}/lambda/gem_layer.rb +2 -2
  150. data/lib/jets/{resource → cfn/resource}/lambda/layer_version.rb +10 -10
  151. data/lib/jets/cfn/resource/lambda/permission.rb +51 -0
  152. data/lib/jets/cfn/resource/logs/subscription_filter.rb +31 -0
  153. data/lib/jets/cfn/resource/nested/api/base.rb +4 -0
  154. data/lib/jets/cfn/resource/nested/api/deployment.rb +53 -0
  155. data/lib/jets/cfn/resource/nested/api/gateway.rb +15 -0
  156. data/lib/jets/cfn/resource/nested/api/mapping.rb +33 -0
  157. data/lib/jets/cfn/resource/nested/api/methods.rb +30 -0
  158. data/lib/jets/cfn/resource/nested/api/page.rb +8 -0
  159. data/lib/jets/cfn/resource/nested/api/resources.rb +22 -0
  160. data/lib/jets/{resource/child_stack → cfn/resource/nested}/app_class.rb +15 -48
  161. data/lib/jets/{resource/child_stack → cfn/resource/nested}/authorizer.rb +8 -14
  162. data/lib/jets/cfn/resource/nested/base.rb +38 -0
  163. data/lib/jets/cfn/resource/nested/one_controller.rb +48 -0
  164. data/lib/jets/{resource/child_stack → cfn/resource/nested}/shared.rb +10 -16
  165. data/lib/jets/cfn/resource/one/function.rb +66 -0
  166. data/lib/jets/cfn/resource/one/permission.rb +17 -0
  167. data/lib/jets/{resource → cfn/resource}/replacer.rb +26 -27
  168. data/lib/jets/{resource → cfn/resource}/route53/record_set.rb +18 -18
  169. data/lib/jets/{resource → cfn/resource}/s3/bucket.rb +4 -4
  170. data/lib/jets/cfn/resource/s3/jets_bucket.rb +68 -0
  171. data/lib/jets/{resource → cfn/resource}/sns/subscription.rb +8 -8
  172. data/lib/jets/{resource → cfn/resource}/sns/topic.rb +10 -10
  173. data/lib/jets/{resource → cfn/resource}/sns/topic_policy.rb +13 -13
  174. data/lib/jets/{resource → cfn/resource}/sqs/queue.rb +5 -5
  175. data/lib/jets/{resource → cfn/resource}/standardizer.rb +8 -9
  176. data/lib/jets/cfn/resource.rb +8 -0
  177. data/lib/jets/cfn/ship.rb +30 -16
  178. data/lib/jets/cfn/status.rb +1 -1
  179. data/lib/jets/cfn/template.rb +89 -0
  180. data/lib/jets/cfn/upload.rb +26 -23
  181. data/lib/jets/cli.rb +28 -203
  182. data/lib/jets/command/actions.rb +49 -0
  183. data/lib/jets/command/api_helpers.rb +41 -0
  184. data/lib/jets/command/aws_helpers.rb +26 -0
  185. data/lib/jets/command/base.rb +204 -0
  186. data/lib/jets/command/behavior.rb +83 -0
  187. data/lib/jets/command/environment_argument.rb +42 -0
  188. data/lib/jets/command/help/call.md +48 -0
  189. data/lib/jets/{commands → command}/help/deploy.md +1 -1
  190. data/lib/jets/command/help/logs.md +21 -0
  191. data/lib/jets/{commands → command}/help/new.md +3 -4
  192. data/lib/jets/command/help/projects.md +6 -0
  193. data/lib/jets/command/help/releases.md +37 -0
  194. data/lib/jets/command/help/rollback.md +5 -0
  195. data/lib/jets/command/help/routes.md +15 -0
  196. data/lib/jets/command/help/runner.md +40 -0
  197. data/lib/jets/command/help/stacks.md +6 -0
  198. data/lib/jets/command/help.rb +17 -0
  199. data/lib/jets/command/helpers/editor.rb +35 -0
  200. data/lib/jets/command.rb +133 -0
  201. data/lib/jets/commands/application/application_command.rb +40 -0
  202. data/lib/jets/commands/build/build_command.rb +33 -0
  203. data/lib/jets/commands/call/anonymous_guesser.rb +1 -1
  204. data/lib/jets/commands/call/autoload_guesser.rb +2 -2
  205. data/lib/jets/commands/call/base_guesser.rb +5 -5
  206. data/lib/jets/commands/call/call_command.rb +27 -0
  207. data/lib/jets/commands/call/caller.rb +184 -0
  208. data/lib/jets/commands/call/guesser.rb +1 -1
  209. data/lib/jets/commands/clean/base.rb +1 -1
  210. data/lib/jets/commands/clean/build.rb +1 -1
  211. data/lib/jets/commands/clean/clean_command.rb +15 -0
  212. data/lib/jets/commands/clean/log.rb +4 -4
  213. data/lib/jets/commands/configure/configure_command.rb +9 -0
  214. data/lib/jets/commands/console/console_command.rb +38 -0
  215. data/lib/jets/commands/credentials/USAGE +103 -0
  216. data/lib/jets/commands/credentials/credentials_command/diffing.rb +51 -0
  217. data/lib/jets/commands/credentials/credentials_command.rb +139 -0
  218. data/lib/jets/commands/db/system/change/change_command.rb +24 -0
  219. data/lib/jets/commands/dbconsole/dbconsole_command.rb +184 -0
  220. data/lib/jets/commands/degenerate/degenerate_command.rb +21 -0
  221. data/lib/jets/commands/delete/delete_command.rb +155 -0
  222. data/lib/jets/commands/{deploy.rb → deploy/deploy_command.rb} +30 -49
  223. data/lib/jets/commands/dev/dev_command.rb +19 -0
  224. data/lib/jets/commands/{dotenv.rb → dotenv/dotenv_command.rb} +2 -2
  225. data/lib/jets/commands/encrypted/USAGE +46 -0
  226. data/lib/jets/commands/encrypted/encrypted_command.rb +87 -0
  227. data/lib/jets/commands/gems/gems_command.rb +14 -0
  228. data/lib/jets/commands/generate/generate_command.rb +95 -0
  229. data/lib/jets/commands/help/USAGE +20 -0
  230. data/lib/jets/commands/help/help_command.rb +15 -0
  231. data/lib/jets/commands/initializers/initializers_command.rb +19 -0
  232. data/lib/jets/commands/logs/logs_command.rb +45 -0
  233. data/lib/jets/commands/new/new_command.rb +19 -0
  234. data/lib/jets/commands/notes/notes_command.rb +30 -0
  235. data/lib/jets/commands/plugin/plugin_command.rb +45 -0
  236. data/lib/jets/commands/projects/projects_command.rb +30 -0
  237. data/lib/jets/commands/rake/rake_command.rb +59 -0
  238. data/lib/jets/commands/releases/releases_command.rb +72 -0
  239. data/lib/jets/commands/rollback/rollback_command.rb +41 -0
  240. data/lib/jets/commands/routes/routes_command.rb +19 -0
  241. data/lib/jets/commands/runner/runner_command.rb +60 -0
  242. data/lib/jets/commands/server/server_command.rb +291 -0
  243. data/lib/jets/commands/stacks/stacks_command.rb +39 -0
  244. data/lib/jets/commands/status/status_command.rb +9 -0
  245. data/lib/jets/commands/url/url_command.rb +92 -0
  246. data/lib/jets/commands/version/version_command.rb +11 -0
  247. data/lib/jets/commands.rb +17 -0
  248. data/lib/jets/configuration.rb +166 -0
  249. data/lib/jets/controller/base.rb +105 -183
  250. data/lib/jets/controller/compat/abstract_controller/base.rb +126 -0
  251. data/lib/jets/controller/compat/action_controller/metal.rb +99 -0
  252. data/lib/jets/controller/compat/caching.rb +13 -0
  253. data/lib/jets/controller/compat/future.rb +13 -0
  254. data/lib/jets/controller/compat/route_set.rb +47 -0
  255. data/lib/jets/controller/decorate/apigw_stage.rb +39 -0
  256. data/lib/jets/controller/{authorization.rb → decorate/authorization.rb} +1 -1
  257. data/lib/jets/controller/decorate/logging.rb +90 -0
  258. data/lib/jets/controller/decorate/redirecting.rb +16 -0
  259. data/lib/jets/controller/decorate/url_for.rb +10 -0
  260. data/lib/jets/controller/{rack/adapter.rb → handler/apigw.rb} +36 -37
  261. data/lib/jets/controller/handler.rb +41 -0
  262. data/lib/jets/controller/middleware/main.rb +16 -8
  263. data/lib/jets/controller/middleware/{local/api_gateway.rb → mimic/apigw.rb} +41 -4
  264. data/lib/jets/controller/middleware/mimic/lambda_context.rb +44 -0
  265. data/lib/jets/controller/middleware/{local.rb → mimic.rb} +36 -51
  266. data/lib/jets/controller/rack_adapter/action.rb +35 -0
  267. data/lib/jets/controller/{rack → rack_adapter}/env.rb +39 -18
  268. data/lib/jets/controller/request/compat/params.rb +144 -0
  269. data/lib/jets/controller/request/compat/request.rb +125 -0
  270. data/lib/jets/controller/request.rb +35 -18
  271. data/lib/jets/controller/response/compat/response.rb +67 -0
  272. data/lib/jets/controller/response.rb +91 -8
  273. data/lib/jets/core.rb +153 -50
  274. data/lib/jets/core_ext/file.rb +9 -0
  275. data/lib/jets/core_ext/kernel.rb +2 -2
  276. data/lib/jets/core_ext/symbol.rb +5 -0
  277. data/lib/jets/core_ext.rb +4 -0
  278. data/lib/jets/dev_caching.rb +44 -0
  279. data/lib/jets/dotenv/ssm.rb +5 -2
  280. data/lib/jets/dotenv.rb +4 -3
  281. data/lib/jets/engine/configuration.rb +96 -0
  282. data/lib/jets/engine/turbines.rb +23 -0
  283. data/lib/jets/engine.rb +380 -0
  284. data/lib/jets/erb.rb +1 -1
  285. data/lib/jets/exception_reporting.rb +43 -0
  286. data/lib/jets/generators/job/job_generator.rb +41 -0
  287. data/lib/jets/generators/job/templates/event_types/dynamodb.rb.tt +8 -0
  288. data/lib/jets/generators/job/templates/event_types/iot.rb.tt +8 -0
  289. data/lib/jets/generators/job/templates/event_types/kinesis.rb.tt +9 -0
  290. data/lib/jets/generators/job/templates/event_types/log.rb.tt +9 -0
  291. data/lib/jets/generators/job/templates/event_types/rule.rb.tt +23 -0
  292. data/lib/jets/generators/job/templates/event_types/s3.rb.tt +11 -0
  293. data/lib/jets/{generator/templates/active_job/job/templates/job.rb.tt → generators/job/templates/event_types/scheduled.rb.tt} +3 -3
  294. data/lib/jets/generators/job/templates/event_types/sns.rb.tt +9 -0
  295. data/lib/jets/generators/job/templates/event_types/sqs.rb.tt +9 -0
  296. data/lib/jets/generators/overrides/app/USAGE +38 -0
  297. data/lib/jets/generators/overrides/app/app_generator.rb +148 -0
  298. data/lib/jets/generators/overrides/app/helpers.rb +139 -0
  299. data/lib/jets/generators/overrides/app/templates/.env +10 -0
  300. data/lib/jets/{commands/templates/skeleton/.gitignore → generators/overrides/app/templates/.gitignore.tt} +2 -1
  301. data/lib/jets/generators/overrides/app/templates/Gemfile.tt +25 -0
  302. data/lib/jets/generators/overrides/app/templates/Rakefile +2 -0
  303. data/lib/jets/generators/overrides/app/templates/app/assets/config/manifest.js +3 -0
  304. data/lib/jets/generators/overrides/app/templates/app/assets/stylesheets/application.css +15 -0
  305. data/lib/jets/generators/overrides/app/templates/app/javascript/application.js +5 -0
  306. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/models/application_record.rb +1 -1
  307. data/lib/jets/generators/overrides/app/templates/app/views/layouts/application.html.erb.tt +30 -0
  308. data/lib/jets/generators/overrides/app/templates/bin/jets +3 -0
  309. data/lib/jets/generators/overrides/app/templates/config/application.rb.tt +15 -0
  310. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/database.yml.tt +1 -1
  311. data/lib/jets/generators/overrides/app/templates/config/environments/development.rb.tt +29 -0
  312. data/lib/jets/generators/overrides/app/templates/config/environments/production.rb.tt +19 -0
  313. data/lib/jets/generators/overrides/app/templates/config/environments/test.rb.tt +23 -0
  314. data/lib/jets/generators/overrides/app/templates/config/initializers/content_security_policy.rb +31 -0
  315. data/lib/jets/generators/overrides/app/templates/config/initializers/filter_parameter_logging.rb +8 -0
  316. data/lib/jets/generators/overrides/app/templates/config/initializers/permissions_policy.rb +11 -0
  317. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config/routes.rb +5 -1
  318. data/lib/jets/generators/overrides/app/templates/db/.gitkeep +0 -0
  319. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/404.html +6 -6
  320. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/422.html +6 -6
  321. data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/500.html +6 -6
  322. data/lib/jets/generators/overrides/templates/erb/scaffold/index.html.erb +22 -0
  323. data/lib/jets/generators/overrides/templates/erb/scaffold/partial.html.erb +8 -0
  324. data/lib/jets/{generator/templates/rails/scaffold_controller/api_controller.rb → generators/overrides/templates/rails/scaffold_controller/api_controller.rb.tt} +5 -9
  325. data/lib/jets/generators/overrides/templates/rails/scaffold_controller/controller.rb.tt +67 -0
  326. data/lib/jets/generators.rb +112 -0
  327. data/lib/jets/inflections.rb +1 -1
  328. data/lib/jets/info.rb +116 -0
  329. data/lib/jets/initializable.rb +95 -0
  330. data/lib/jets/job/base.rb +5 -2
  331. data/lib/jets/job/dsl/dynamodb_event.rb +19 -9
  332. data/lib/jets/job/dsl/event_source_mapping.rb +1 -1
  333. data/lib/jets/job/dsl/iot_event.rb +6 -6
  334. data/lib/jets/job/dsl/kinesis_event.rb +5 -5
  335. data/lib/jets/job/dsl/log_event.rb +2 -2
  336. data/lib/jets/job/dsl/rule_event.rb +7 -4
  337. data/lib/jets/job/dsl/s3_event.rb +1 -1
  338. data/lib/jets/job/dsl/sns_event.rb +6 -6
  339. data/lib/jets/job/dsl/sqs_event.rb +11 -11
  340. data/lib/jets/job/helpers/sns_event_helper.rb +8 -0
  341. data/lib/jets/job/helpers/sqs_event_helper.rb +8 -0
  342. data/lib/jets/klass.rb +5 -6
  343. data/lib/jets/lambda/definition.rb +118 -0
  344. data/lib/jets/lambda/dsl/warnings.rb +57 -0
  345. data/lib/jets/lambda/dsl.rb +73 -54
  346. data/lib/jets/lambda/function.rb +3 -3
  347. data/lib/jets/lambda/function_constructor.rb +6 -6
  348. data/lib/jets/lambda/functions.rb +36 -1
  349. data/lib/jets/mega/hash_converter.rb +2 -2
  350. data/lib/jets/mega/request/source.rb +1 -2
  351. data/lib/jets/mega/request.rb +4 -4
  352. data/lib/jets/names.rb +79 -0
  353. data/lib/jets/overrides/dummy/rails.rb +11 -0
  354. data/lib/jets/overrides/lambda/marshaller.rb +10 -0
  355. data/lib/jets/overrides/puma.rb +10 -0
  356. data/lib/jets/paths.rb +243 -0
  357. data/lib/jets/{poly_fun → poly}/base_executor.rb +13 -13
  358. data/lib/jets/{poly_fun → poly}/lambda_executor.rb +2 -2
  359. data/lib/jets/{poly_fun → poly}/node_error.rb +1 -1
  360. data/lib/jets/{poly_fun → poly}/node_executor.rb +4 -4
  361. data/lib/jets/{poly_fun → poly}/python_error.rb +1 -1
  362. data/lib/jets/{poly_fun → poly}/python_executor.rb +2 -2
  363. data/lib/jets/{poly_fun.rb → poly.rb} +12 -12
  364. data/lib/jets/preheat.rb +26 -33
  365. data/lib/jets/processors/deducer.rb +2 -2
  366. data/lib/jets/processors/main_processor.rb +6 -13
  367. data/lib/jets/rack/logger.rb +77 -0
  368. data/lib/jets/router/compat/route_set.rb +177 -0
  369. data/lib/jets/router/dsl/mount.rb +40 -6
  370. data/lib/jets/router/dsl.rb +125 -105
  371. data/lib/jets/router/engine_mount.rb +36 -0
  372. data/lib/jets/router/help.rb +130 -0
  373. data/lib/jets/router/helpers/named_routes/add_full_url.rb +13 -0
  374. data/lib/jets/router/helpers/named_routes/generated.rb +197 -0
  375. data/lib/jets/router/helpers/named_routes/proxy.rb +66 -0
  376. data/lib/jets/router/matcher.rb +140 -17
  377. data/lib/jets/router/resources/options.rb +6 -4
  378. data/lib/jets/router/route/after_initialize.rb +64 -0
  379. data/lib/jets/router/route/as.rb +93 -0
  380. data/lib/jets/router/route/authorizer.rb +1 -0
  381. data/lib/jets/router/route/compat.rb +45 -0
  382. data/lib/jets/router/route/info.rb +74 -0
  383. data/lib/jets/router/route/node.rb +137 -0
  384. data/lib/jets/router/route/path.rb +93 -0
  385. data/lib/jets/router/route.rb +109 -90
  386. data/lib/jets/router/route_set.rb +214 -0
  387. data/lib/jets/router/scope.rb +204 -69
  388. data/lib/jets/router/state.rb +67 -0
  389. data/lib/jets/router/util.rb +1 -31
  390. data/lib/jets/router.rb +64 -150
  391. data/lib/jets/ruby_version_check.rb +15 -0
  392. data/lib/jets/rule/base.rb +1 -0
  393. data/lib/jets/rule/dsl.rb +7 -7
  394. data/lib/jets/secrets.rb +110 -0
  395. data/lib/jets/spec_helpers/controllers/request.rb +22 -16
  396. data/lib/jets/spec_helpers/controllers.rb +32 -24
  397. data/lib/jets/spec_helpers.rb +0 -6
  398. data/lib/jets/stack/builder.rb +3 -2
  399. data/lib/jets/stack/definition.rb +1 -4
  400. data/lib/jets/stack/function.rb +2 -2
  401. data/lib/jets/stack/main/dsl/cloudwatch.rb +4 -4
  402. data/lib/jets/stack/main/dsl/kinesis.rb +2 -2
  403. data/lib/jets/stack/main/dsl/lambda.rb +26 -19
  404. data/lib/jets/stack/main/dsl/sqs.rb +2 -2
  405. data/lib/jets/stack/output/lookup.rb +1 -1
  406. data/lib/jets/stack/output.rb +2 -2
  407. data/lib/jets/stack/parameter.rb +2 -2
  408. data/lib/jets/stack/resource.rb +3 -3
  409. data/lib/jets/stack/s3_event.rb +51 -37
  410. data/lib/jets/stack.rb +1 -1
  411. data/lib/jets/tasks/engine.rake +85 -0
  412. data/lib/jets/tasks/framework.rake +66 -0
  413. data/lib/jets/tasks/log.rake +41 -0
  414. data/lib/jets/tasks/middleware.rake +9 -0
  415. data/lib/jets/tasks/misc.rake +81 -0
  416. data/lib/jets/tasks/statistics.rake +37 -0
  417. data/lib/jets/tasks/tmp.rake +51 -0
  418. data/lib/jets/tasks/yarn.rake +29 -0
  419. data/lib/jets/tasks/zeitwerk.rake +61 -0
  420. data/lib/jets/tasks.rb +18 -0
  421. data/lib/jets/tmp_loader.rb +1 -1
  422. data/lib/jets/turbine/configurable.rb +36 -0
  423. data/lib/jets/turbine/configuration.rb +101 -0
  424. data/lib/jets/turbine.rb +164 -20
  425. data/lib/jets/util/camelize.rb +24 -0
  426. data/lib/jets/util/yamler.rb +16 -0
  427. data/lib/jets/version.rb +1 -1
  428. data/lib/jets.rb +8 -14
  429. metadata +444 -347
  430. data/.python-version +0 -1
  431. data/.ruby-version +0 -1
  432. data/bin/release +0 -9
  433. data/lib/jets/application/defaults.rb +0 -200
  434. data/lib/jets/builders/reconfigure_rails/config/initializers/jets.rb +0 -16
  435. data/lib/jets/builders/reconfigure_rails.rb +0 -114
  436. data/lib/jets/cfn/builders/api_gateway_builder.rb +0 -123
  437. data/lib/jets/cfn/builders/api_resources_builder.rb +0 -44
  438. data/lib/jets/cfn/builders/base_child_builder.rb +0 -69
  439. data/lib/jets/cfn/builders/controller_builder.rb +0 -50
  440. data/lib/jets/cfn/builders/function_builder.rb +0 -14
  441. data/lib/jets/cfn/builders/interface.rb +0 -133
  442. data/lib/jets/cfn/builders/job_builder.rb +0 -14
  443. data/lib/jets/cfn/builders/parent_builder.rb +0 -130
  444. data/lib/jets/cfn/built_template.rb +0 -15
  445. data/lib/jets/cfn/template_source.rb +0 -61
  446. data/lib/jets/commands/base.rb +0 -145
  447. data/lib/jets/commands/call.rb +0 -182
  448. data/lib/jets/commands/clean.rb +0 -19
  449. data/lib/jets/commands/configure.rb +0 -51
  450. data/lib/jets/commands/console.rb +0 -12
  451. data/lib/jets/commands/db/environment-task.rake +0 -3
  452. data/lib/jets/commands/db/tasks/dummy/app.rb +0 -25
  453. data/lib/jets/commands/db/tasks/dummy/config.rb +0 -14
  454. data/lib/jets/commands/db/tasks.rb +0 -34
  455. data/lib/jets/commands/db.rb +0 -13
  456. data/lib/jets/commands/dbconsole.rb +0 -134
  457. data/lib/jets/commands/delete.rb +0 -136
  458. data/lib/jets/commands/dynamodb/migrate.rb +0 -9
  459. data/lib/jets/commands/dynamodb/migrator.rb +0 -36
  460. data/lib/jets/commands/dynamodb.rb +0 -19
  461. data/lib/jets/commands/gems.rb +0 -13
  462. data/lib/jets/commands/help/call.md +0 -69
  463. data/lib/jets/commands/help/dynamodb/generate.md +0 -52
  464. data/lib/jets/commands/help/dynamodb/migrate.md +0 -4
  465. data/lib/jets/commands/help/routes.md +0 -16
  466. data/lib/jets/commands/help/runner.md +0 -17
  467. data/lib/jets/commands/help.rb +0 -9
  468. data/lib/jets/commands/import/base.rb +0 -49
  469. data/lib/jets/commands/import/cheatsheet.rb +0 -35
  470. data/lib/jets/commands/import/rack.rb +0 -16
  471. data/lib/jets/commands/import/rails.rb +0 -74
  472. data/lib/jets/commands/import/sequence.rb +0 -90
  473. data/lib/jets/commands/import/templates/config/database.yml +0 -30
  474. data/lib/jets/commands/import/templates/submodules-cheatsheet.md +0 -89
  475. data/lib/jets/commands/import.rb +0 -12
  476. data/lib/jets/commands/main.rb +0 -166
  477. data/lib/jets/commands/markdown/creator.rb +0 -58
  478. data/lib/jets/commands/markdown/index.rb +0 -27
  479. data/lib/jets/commands/markdown/page.rb +0 -125
  480. data/lib/jets/commands/markdown/shell.rb +0 -11
  481. data/lib/jets/commands/new.rb +0 -173
  482. data/lib/jets/commands/rake_command.rb +0 -61
  483. data/lib/jets/commands/rake_tasks.rb +0 -50
  484. data/lib/jets/commands/runner.rb +0 -16
  485. data/lib/jets/commands/sequence.rb +0 -105
  486. data/lib/jets/commands/stack_info.rb +0 -30
  487. data/lib/jets/commands/templates/skeleton/.env.development.tt +0 -3
  488. data/lib/jets/commands/templates/skeleton/.env.test +0 -3
  489. data/lib/jets/commands/templates/skeleton/.env.tt +0 -3
  490. data/lib/jets/commands/templates/skeleton/.jetskeep +0 -1
  491. data/lib/jets/commands/templates/skeleton/Gemfile.tt +0 -40
  492. data/lib/jets/commands/templates/skeleton/Procfile +0 -7
  493. data/lib/jets/commands/templates/skeleton/Rakefile +0 -2
  494. data/lib/jets/commands/templates/skeleton/app/models/application_item.rb +0 -2
  495. data/lib/jets/commands/templates/skeleton/app/views/layouts/application.html.erb.tt +0 -26
  496. data/lib/jets/commands/templates/skeleton/config/application.rb.tt +0 -71
  497. data/lib/jets/commands/templates/skeleton/config/dynamodb.yml +0 -22
  498. data/lib/jets/commands/templates/skeleton/config/environments/development.rb +0 -7
  499. data/lib/jets/commands/templates/skeleton/config/environments/production.rb +0 -9
  500. data/lib/jets/commands/templates/skeleton/config/environments/test.rb +0 -7
  501. data/lib/jets/commands/templates/webpacker/app/javascript/packs/application.js.tt +0 -23
  502. data/lib/jets/commands/templates/webpacker/app/javascript/packs/theme.scss.tt +0 -24
  503. data/lib/jets/commands/upgrade/templates/bin/webpack +0 -19
  504. data/lib/jets/commands/upgrade/templates/bin/webpack-dev-server +0 -19
  505. data/lib/jets/commands/upgrade/version1.rb +0 -136
  506. data/lib/jets/commands/upgrade.rb +0 -105
  507. data/lib/jets/commands/url.rb +0 -69
  508. data/lib/jets/commands/webpacker_template.rb +0 -18
  509. data/lib/jets/controller/callbacks.rb +0 -73
  510. data/lib/jets/controller/cookies/jar.rb +0 -269
  511. data/lib/jets/controller/cookies.rb +0 -38
  512. data/lib/jets/controller/error/invalid_authenticity_token.rb +0 -6
  513. data/lib/jets/controller/error.rb +0 -4
  514. data/lib/jets/controller/forgery_protection.rb +0 -43
  515. data/lib/jets/controller/layout.rb +0 -17
  516. data/lib/jets/controller/middleware/cors.rb +0 -60
  517. data/lib/jets/controller/middleware/local/mimic_aws_call.rb +0 -38
  518. data/lib/jets/controller/middleware/local/route_matcher.rb +0 -22
  519. data/lib/jets/controller/middleware/reloader.rb +0 -15
  520. data/lib/jets/controller/parameters_filter.rb +0 -29
  521. data/lib/jets/controller/params.rb +0 -117
  522. data/lib/jets/controller/redirection.rb +0 -61
  523. data/lib/jets/controller/rendering/rack_renderer.rb +0 -267
  524. data/lib/jets/controller/rendering.rb +0 -96
  525. data/lib/jets/controller/stage.rb +0 -34
  526. data/lib/jets/controller.rb +0 -3
  527. data/lib/jets/db.rb +0 -15
  528. data/lib/jets/generator/templates/erb/controller/view.html.erb +0 -2
  529. data/lib/jets/generator/templates/erb/scaffold/index.html.erb +0 -29
  530. data/lib/jets/generator/templates/rails/controller/controller.rb +0 -13
  531. data/lib/jets/generator/templates/rails/helper/helper.rb +0 -4
  532. data/lib/jets/generator/templates/rails/scaffold_controller/controller.rb +0 -67
  533. data/lib/jets/generator.rb +0 -112
  534. data/lib/jets/internal/app/controllers/jets/bare_controller.rb +0 -16
  535. data/lib/jets/internal/app/controllers/jets/rack_controller.rb +0 -12
  536. data/lib/jets/internal/app/functions/jets/base_path.rb +0 -18
  537. data/lib/jets/internal/app/functions/jets/base_path_mapping.rb +0 -100
  538. data/lib/jets/internal/app/helpers/jets/mailers_helper.rb +0 -9
  539. data/lib/jets/internal/app/jobs/jets/preheat_job.rb +0 -70
  540. data/lib/jets/internal/app/views/jets/mailers/index.html.erb +0 -8
  541. data/lib/jets/internal/app/views/jets/mailers/mailer.html.erb +0 -6
  542. data/lib/jets/internal/turbines/jets/mailer.rb +0 -52
  543. data/lib/jets/lambda/task.rb +0 -111
  544. data/lib/jets/logger.rb +0 -21
  545. data/lib/jets/middleware/configurator.rb +0 -84
  546. data/lib/jets/middleware/default_stack.rb +0 -53
  547. data/lib/jets/middleware/layer.rb +0 -34
  548. data/lib/jets/middleware/stack.rb +0 -77
  549. data/lib/jets/middleware.rb +0 -33
  550. data/lib/jets/naming.rb +0 -63
  551. data/lib/jets/overrides/rails/action_controller.rb +0 -13
  552. data/lib/jets/overrides/rails/asset_tag_helper.rb +0 -114
  553. data/lib/jets/overrides/rails/common_methods.rb +0 -13
  554. data/lib/jets/overrides/rails/migration_checker.rb +0 -34
  555. data/lib/jets/overrides/rails/rendering_helper.rb +0 -27
  556. data/lib/jets/overrides/rails/url_helper.rb +0 -88
  557. data/lib/jets/overrides/rails.rb +0 -6
  558. data/lib/jets/rack_server.rb +0 -86
  559. data/lib/jets/resource/api_gateway/base_path/function.rb +0 -49
  560. data/lib/jets/resource/api_gateway/base_path/role.rb +0 -76
  561. data/lib/jets/resource/api_gateway/cors.rb +0 -61
  562. data/lib/jets/resource/api_gateway/method.rb +0 -102
  563. data/lib/jets/resource/api_gateway/rest_api/routes/change.rb +0 -16
  564. data/lib/jets/resource/base.rb +0 -28
  565. data/lib/jets/resource/child_stack/api_deployment.rb +0 -58
  566. data/lib/jets/resource/child_stack/api_gateway.rb +0 -23
  567. data/lib/jets/resource/child_stack/api_resource/page.rb +0 -20
  568. data/lib/jets/resource/child_stack/api_resource.rb +0 -54
  569. data/lib/jets/resource/child_stack/base.rb +0 -24
  570. data/lib/jets/resource/iam/base_role_definition.rb +0 -47
  571. data/lib/jets/resource/lambda/function.rb +0 -221
  572. data/lib/jets/resource/logs/subscription_filter.rb +0 -31
  573. data/lib/jets/resource/permission.rb +0 -45
  574. data/lib/jets/resource.rb +0 -71
  575. data/lib/jets/router/error.rb +0 -4
  576. data/lib/jets/router/finder.rb +0 -47
  577. data/lib/jets/router/helpers/core_helper.rb +0 -27
  578. data/lib/jets/router/helpers/named_routes_helper.rb +0 -8
  579. data/lib/jets/router/helpers.rb +0 -4
  580. data/lib/jets/router/method_creator/code.rb +0 -99
  581. data/lib/jets/router/method_creator/edit.rb +0 -12
  582. data/lib/jets/router/method_creator/generic.rb +0 -11
  583. data/lib/jets/router/method_creator/index.rb +0 -48
  584. data/lib/jets/router/method_creator/new.rb +0 -12
  585. data/lib/jets/router/method_creator/root.rb +0 -15
  586. data/lib/jets/router/method_creator/show.rb +0 -12
  587. data/lib/jets/router/method_creator.rb +0 -50
  588. data/lib/jets/turbo/database_yaml.rb +0 -41
  589. data/lib/jets/turbo/project/.gitignore +0 -12
  590. data/lib/jets/turbo/project/.jetskeep +0 -1
  591. data/lib/jets/turbo/project/Gemfile +0 -16
  592. data/lib/jets/turbo/project/Rakefile +0 -2
  593. data/lib/jets/turbo/project/app/controllers/application_controller.rb +0 -2
  594. data/lib/jets/turbo/project/app/helpers/application_helper.rb +0 -2
  595. data/lib/jets/turbo/project/app/jobs/application_job.rb +0 -4
  596. data/lib/jets/turbo/project/config/application.rb +0 -5
  597. data/lib/jets/turbo/project/config/routes.rb +0 -4
  598. data/lib/jets/turbo/project/config.ru +0 -5
  599. data/lib/jets/turbo/rails.rb +0 -127
  600. data/lib/jets/turbo/templates/config/database.yml +0 -30
  601. data/lib/jets/turbo.rb +0 -56
  602. data/readme/prerelease.md +0 -6
  603. data/readme/testing.md +0 -60
  604. /data/{lib/jets → engines}/internal/app/shared/functions/jets/s3_bucket_config.rb +0 -0
  605. /data/lib/jets/{commands → command}/help/build.md +0 -0
  606. /data/lib/jets/{commands → command}/help/clean/build.md +0 -0
  607. /data/lib/jets/{commands → command}/help/clean/log.md +0 -0
  608. /data/lib/jets/{commands → command}/help/console.md +0 -0
  609. /data/lib/jets/{commands → command}/help/db/generate.md +0 -0
  610. /data/lib/jets/{commands → command}/help/dbconsole.md +0 -0
  611. /data/lib/jets/{commands → command}/help/degenerate.md +0 -0
  612. /data/lib/jets/{commands → command}/help/delete.md +0 -0
  613. /data/lib/jets/{commands → command}/help/gems/check.md +0 -0
  614. /data/lib/jets/{commands → command}/help/generate.md +0 -0
  615. /data/lib/jets/{commands → command}/help/import/rack.md +0 -0
  616. /data/lib/jets/{commands → command}/help/import/rails.md +0 -0
  617. /data/lib/jets/{commands → command}/help/server.md +0 -0
  618. /data/lib/jets/{commands → command}/help/status.md +0 -0
  619. /data/lib/jets/{commands → command}/help/upgrade.md +0 -0
  620. /data/lib/jets/{commands → command}/help/url.md +0 -0
  621. /data/lib/jets/{generator/templates/active_job → generators}/job/templates/application_job.rb.tt +0 -0
  622. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/.rspec +0 -0
  623. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/README.md +0 -0
  624. /data/{.gitmodules → lib/jets/generators/overrides/app/templates/app/assets/images/.keep} +0 -0
  625. /data/lib/jets/{commands/templates/skeleton/db/.gitkeep → generators/overrides/app/templates/app/assets/javascripts/.keep} +0 -0
  626. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/controllers/application_controller.rb +0 -0
  627. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/helpers/application_helper.rb +0 -0
  628. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/app/jobs/application_job.rb +0 -0
  629. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/config.ru +0 -0
  630. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/public/favicon.ico +0 -0
  631. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/controllers/posts_controller_spec.rb +0 -0
  632. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-index.json +0 -0
  633. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/fixtures/payloads/posts-show.json +0 -0
  634. /data/lib/jets/{commands/templates/skeleton → generators/overrides/app/templates}/spec/spec_helper.rb.tt +0 -0
  635. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/_form.html.erb +0 -0
  636. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/edit.html.erb +0 -0
  637. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/new.html.erb +0 -0
  638. /data/lib/jets/{generator → generators/overrides}/templates/erb/scaffold/show.html.erb +0 -0
  639. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/javascript.js +0 -0
  640. /data/lib/jets/{generator → generators/overrides}/templates/rails/assets/stylesheet.css +0 -0
  641. /data/lib/jets/{generator → generators/overrides}/templates/rails/scaffold/scaffold.css +0 -0
@@ -1,51 +0,0 @@
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
@@ -1,12 +0,0 @@
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
@@ -1,3 +0,0 @@
1
- task :environment do
2
- Jets.boot
3
- end
@@ -1,25 +0,0 @@
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
@@ -1,14 +0,0 @@
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
@@ -1,34 +0,0 @@
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
@@ -1,13 +0,0 @@
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
@@ -1,134 +0,0 @@
1
- # Thanks: Rails dbconsole_command.rb
2
- module Jets::Commands
3
- class Dbconsole
4
- extend Memoist
5
-
6
- def self.start(*args)
7
- new(*args).start
8
- end
9
-
10
- def initialize(options = {})
11
- defaults = {"include_password" => true}
12
- @options = defaults.merge(options)
13
- end
14
-
15
- def start
16
- ENV["RAILS_ENV"] ||= @options[:environment] || environment
17
-
18
- case config["adapter"]
19
- when /^(jdbc)?mysql/
20
- args = {
21
- "host" => "--host",
22
- "port" => "--port",
23
- "socket" => "--socket",
24
- "username" => "--user",
25
- "encoding" => "--default-character-set",
26
- "sslca" => "--ssl-ca",
27
- "sslcert" => "--ssl-cert",
28
- "sslcapath" => "--ssl-capath",
29
- "sslcipher" => "--ssl-cipher",
30
- "sslkey" => "--ssl-key"
31
- }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact
32
-
33
- if config["password"] && @options["include_password"]
34
- args << "--password=#{config['password']}"
35
- elsif config["password"] && !config["password"].to_s.empty?
36
- args << "-p"
37
- end
38
-
39
- args << config["database"]
40
-
41
- find_cmd_and_exec(["mysql", "mysql5"], *args)
42
-
43
- when /^postgres|^postgis/
44
- ENV["PGUSER"] = config["username"] if config["username"]
45
- ENV["PGHOST"] = config["host"] if config["host"]
46
- ENV["PGPORT"] = config["port"].to_s if config["port"]
47
- ENV["PGPASSWORD"] = config["password"].to_s if config["password"] && @options["include_password"]
48
- find_cmd_and_exec("psql", config["database"])
49
-
50
- when "sqlite3"
51
- args = []
52
-
53
- args << "-#{@options['mode']}" if @options["mode"]
54
- args << "-header" if @options["header"]
55
- args << File.expand_path(config["database"], Jets.root)
56
-
57
- find_cmd_and_exec("sqlite3", *args)
58
-
59
- when "oracle", "oracle_enhanced"
60
- logon = ""
61
-
62
- if config["username"]
63
- logon = config["username"]
64
- logon << "/#{config['password']}" if config["password"] && @options["include_password"]
65
- logon << "@#{config['database']}" if config["database"]
66
- end
67
-
68
- find_cmd_and_exec("sqlplus", logon)
69
-
70
- when "sqlserver"
71
- args = []
72
-
73
- args += ["-D", "#{config['database']}"] if config["database"]
74
- args += ["-U", "#{config['username']}"] if config["username"]
75
- args += ["-P", "#{config['password']}"] if config["password"]
76
-
77
- if config["host"]
78
- host_arg = "#{config['host']}"
79
- host_arg << ":#{config['port']}" if config["port"]
80
- args += ["-S", host_arg]
81
- end
82
-
83
- find_cmd_and_exec("sqsh", *args)
84
-
85
- else
86
- abort "Unknown command-line client for #{config['database']}."
87
- end
88
- end
89
-
90
- def config
91
- configs = configurations.configs_for(env_name: environment)
92
- if configs.blank?
93
- raise ActiveRecord::AdapterNotSpecified, "'#{environment}' database is not configured. Available configuration: #{configurations.inspect}"
94
- else
95
- configs.first.configuration_hash.dup.stringify_keys!
96
- end
97
- end
98
- memoize :config
99
-
100
- def environment
101
- Jets.env.to_s
102
- end
103
-
104
- private
105
- def configurations # :doc:
106
- db_config = Jets.application.config.database
107
- ActiveRecord::Base.configurations = db_config
108
- ActiveRecord::Base.configurations
109
- end
110
-
111
- def find_cmd_and_exec(commands, *args) # :doc:
112
- commands = Array(commands)
113
-
114
- dirs_on_path = ENV["PATH"].to_s.split(File::PATH_SEPARATOR)
115
- unless (ext = RbConfig::CONFIG["EXEEXT"]).empty?
116
- commands = commands.map { |cmd| "#{cmd}#{ext}" }
117
- end
118
-
119
- full_path_command = nil
120
- found = commands.detect do |cmd|
121
- dirs_on_path.detect do |path|
122
- full_path_command = File.join(path, cmd)
123
- File.file?(full_path_command) && File.executable?(full_path_command)
124
- end
125
- end
126
-
127
- if found
128
- exec full_path_command, *args
129
- else
130
- abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
131
- end
132
- end
133
- end
134
- end
@@ -1,136 +0,0 @@
1
- class Jets::Commands::Delete
2
- include Jets::AwsServices
3
-
4
- def initialize(options)
5
- @options = options
6
- end
7
-
8
- def run
9
- puts("Deleting project...")
10
- return if @options[:noop]
11
-
12
- are_you_sure?
13
-
14
- confirm_project_exists
15
-
16
- # Must first remove all objects from s3 bucket in order to delete stack
17
- puts "First, deleting objects in s3 bucket #{s3_bucket_name}" if s3_bucket_name
18
- empty_s3_bucket
19
-
20
- stack_in_progress?(parent_stack_name)
21
-
22
- cfn.delete_stack(stack_name: parent_stack_name)
23
- puts "Deleting #{Jets.config.project_namespace.color(:green)}..."
24
-
25
- wait_for_stack if @options[:wait]
26
-
27
- delete_logs
28
-
29
- puts "Project #{Jets.config.project_namespace.color(:green)} deleted!"
30
- end
31
-
32
- def wait_for_stack
33
- status = Jets::Cfn::Status.new(@options)
34
- start_time = Time.now
35
- status.wait
36
- took = Time.now - start_time
37
- puts "Time took for deletion: #{status.pretty_time(took).color(:green)}."
38
- end
39
-
40
- def delete_logs
41
- puts "Deleting CloudWatch logs"
42
- log = Jets::Commands::Clean::Log.new(mute: true, yes: true)
43
- log.clean
44
- end
45
-
46
- def confirm_project_exists
47
- cfn.describe_stacks(stack_name: parent_stack_name)
48
- end
49
-
50
- def empty_s3_bucket
51
- return unless s3_bucket_name # Happens when minimal stack fails to build
52
- return unless bucket_exists?(s3_bucket_name)
53
-
54
- resp = s3.list_objects(bucket: s3_bucket_name)
55
- if resp.contents.size > 0
56
- # IE: objects = [{key: "objectkey1"}, {key: "objectkey2"}]
57
- objects = resp.contents.map { |item| {key: item.key} }
58
- s3.delete_objects(
59
- bucket: s3_bucket_name,
60
- delete: {
61
- objects: objects,
62
- quiet: false,
63
- }
64
- )
65
- empty_s3_bucket # keep deleting objects until bucket is empty
66
- end
67
- end
68
-
69
- def s3_bucket_name
70
- return @s3_bucket_name if defined?(@s3_bucket_name)
71
-
72
- resp = cfn.describe_stacks(stack_name: parent_stack_name)
73
- outputs = resp.stacks[0].outputs
74
- if outputs.empty?
75
- @s3_bucket_name = false
76
- else
77
- @s3_bucket_name = outputs.find {|o| o.output_key == 'S3Bucket'}.output_value
78
- end
79
- end
80
-
81
- # Thanks: https://docs.aws.amazon.com/sdk-for-ruby/v3/developer-guide/s3-example-does-bucket-exist.html
82
- def bucket_exists?(bucket_name)
83
- bucket_exists = false
84
- begin
85
- resp = s3.head_bucket(bucket: bucket_name, use_accelerate_endpoint: false)
86
- bucket_exists = true
87
- rescue
88
- end
89
- bucket_exists
90
- end
91
-
92
- def parent_stack_name
93
- Jets::Naming.parent_stack_name
94
- end
95
-
96
- def are_you_sure?
97
- if @options[:yes]
98
- sure = 'y'
99
- else
100
- puts "Are you sure you want to want to delete the #{Jets.config.project_namespace.color(:green)} project? (y/N)"
101
- sure = $stdin.gets
102
- end
103
-
104
- unless sure =~ /^y/
105
- puts "Phew! Jets #{Jets.config.project_namespace.color(:green)} project was not deleted."
106
- exit 0
107
- end
108
- end
109
-
110
- # All CloudFormation states listed here: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-describing-stacks.html
111
- #
112
- # Returns resp so we can use it to grab data about the stack without calling api again.
113
- def check_deleteable_status
114
- return true if !stack_exists?(@parent_stack_name)
115
-
116
- # Assumes stack exists
117
- resp = cfn.describe_stacks(stack_name: @parent_stack_name)
118
- status = resp.stacks[0].stack_status
119
-
120
- return true if status == 'ROLLBACK_COMPLETE'
121
-
122
- if status =~ /_IN_PROGRESS$/
123
- puts "The '#{@parent_stack_name}' stack status is #{status}. " \
124
- "It is not in an updateable status. Please wait until the stack is ready and try again.".color(:red)
125
- exit 0
126
- elsif resp.stacks[0].outputs.empty?
127
- # This Happens when the miminal stack fails at the very beginning.
128
- # There is no s3 bucket at all. User should delete the stack.
129
- puts "The minimal stack failed to create. Please delete the stack first and try again. " \
130
- "You can delete the CloudFormation stack or use the `jets delete` command"
131
- exit 0
132
- else
133
- true
134
- end
135
- end
136
- end
@@ -1,9 +0,0 @@
1
- class Jets::Commands::Dynamodb::Migrate < Jets::Commands::Base
2
- desc "down", "Runs migrations down"
3
- # desc "migrate:down [path]", "Runs migrations down"
4
- # long_desc Help.migrate
5
- def down#(path)
6
- # Migrate.new(path, options).run
7
- puts "Jets::Commands::Dynamodb::Down ran"
8
- end
9
- end
@@ -1,36 +0,0 @@
1
- begin
2
- require "dynomite"
3
- rescue LoadError # Commands::Base.eager_load
4
- nil
5
- end
6
-
7
- class Jets::Commands::Dynamodb::Migrator
8
- def initialize(path, options)
9
- @path = path
10
- @options = options
11
- end
12
-
13
- def run
14
- puts "Running database migrations"
15
- return if @options[:noop]
16
- migrate
17
- end
18
-
19
- def migrate
20
- path = "#{Jets.root}/#{@path}"
21
- unless File.exist?(path)
22
- puts "Unable to find the migration file: #{path}"
23
- exit 1 unless Jets.env.test?
24
- end
25
-
26
- require path
27
- migration_class = get_migration_class
28
- migration_class.new.up
29
- end
30
-
31
- def get_migration_class
32
- filename = File.basename(@path, '.rb')
33
- filename = filename.sub(/\d+[-_]/, '') # strip leading timestsamp
34
- filename.camelize.constantize
35
- end
36
- end
@@ -1,19 +0,0 @@
1
- module Jets::Commands
2
- class Dynamodb < Jets::Commands::Base
3
- desc "migrate [path]", "Runs migrations"
4
- long_desc Help.text('dynamodb:migrate')
5
- def migrate(path)
6
- Migrator.new(path, options).run
7
- end
8
-
9
- desc "generate [name]", "Creates a migration for a DynamoDB table"
10
- long_desc Help.text('dynamodb:generate')
11
- option :partition_key, default: "id:string:hash", desc: "table's partition key"
12
- option :sort_key, default: nil, desc: "table's sort key"
13
- option :table_name, desc: "override the the conventional table name"
14
- option :table_action, desc: "create_table or update_table. Defaults to convention based on the name of the migration."
15
- def generate(name)
16
- Dynomite::Migration::Generator.new(name, options).generate
17
- end
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- module Jets::Commands
2
- class Gems < Jets::Commands::Base
3
- desc "check", "Check if pre-built Lambda gems are available from the sources"
4
- long_desc Help.text("gems:check")
5
- option :verbose, type: :boolean, desc: "Verbose mode"
6
- def check
7
- check = Jets::Gems::Check.new(@options)
8
- check.run! # exits early if missing gems found
9
- # If reach here, means all gems are ok.
10
- puts "Congrats! All gems are available in as pre-built Lambda gems 👍"
11
- end
12
- end
13
- end
@@ -1,69 +0,0 @@
1
- ## Remote mode
2
-
3
- Invoke the lambda function on AWS. The `jets call` command does a few extra things for your convenience:
4
-
5
- It adds the function namespace to the function name. So, you pass in `posts_controller-index` and the Lambda function is `demo-dev-posts_controller-index`.
6
-
7
- CLI Name | Lambda Function
8
- --- | ---
9
- posts_controller-index | demo-dev-posts_controller-index
10
-
11
- The `jets call` command can also print out the last 4KB of the lambda logs with the `--show-logs` option. The logging output is directed to stderr and the response output from the lambda function itself is directed to stdout so you can safely pipe the results of the call command to other tools like `jq`.
12
-
13
- For [controllers](http://rubyonjets.com/docs/controllers/), the event you pass at the CLI is automatically transformed into [Lambda Proxy](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-proxy-integrations.html) payload that contains the params as the `queryStringParameters`. For example:
14
-
15
- {"test":1}
16
-
17
- Gets changed to:
18
-
19
- {"queryStringParameters":{"test":1}}
20
-
21
- This spares you from assembling the event payload manually to the payload that Jets controllers normally receive. If you would like to disable this Lambda Proxy transformation then use the `--no-lambda-proxy` flag.
22
-
23
- For [jobs](http://rubyonjets.com/docs/jobs/), the event is passed through untouched.
24
-
25
- ## Examples
26
-
27
- jets call hard_job-drive '{"test":1}'
28
- jets call hard_job-drive '{"test":1}' | jq .
29
- jets call hard_job-drive file://event.json | jq . # load event with a file
30
- jets call posts_controller-index # event payload is optional
31
- jets call posts_controller-index '{"path":"/posts"}' --show-log | jq .
32
- jets call posts_controller-index 'file://event.json' --show-log | jq .
33
-
34
- The equivalent AWS Lambda CLI command:
35
-
36
- aws lambda invoke --function-name demo-dev-hard_job-dig --payload '{"path":"/posts","test":1}' outfile.txt
37
- cat outfile.txt | jq '.'
38
-
39
- aws lambda invoke --function-name demo-dev-posts_controller-index --payload '{"queryStringParameters":{"path":"/posts",test":1}}' outfile.txt
40
- cat outfile.txt | jq '.'
41
-
42
- For convenience, you can also provide the function name with only dashes and `jets call` figures out what function you intend to call. Examples:
43
-
44
- jets call posts-controller-index
45
- jets call admin-related-pages-controller-index
46
-
47
- Are the same as:
48
-
49
- aws lambda invoke --function-name demo-dev-posts_controller-index
50
- aws lambda invoke --function-name demo-dev-admin/related_pages_controller-index
51
-
52
- Jets figures out what functions to call by evaluating the app code and finds if the controller and method exists. If you want to turn guess mode off and want to always explicitly provide the method name use the `--no-guess` option. The function name will then have to match the lambda function without the namespace. Example:
53
-
54
- jets call admin-related_pages_controller-index --no-guess
55
-
56
- If you want to call a function which runs too long time, you can set `read_timeout`.
57
-
58
- jets call some_long_job-index --read_timeout 900
59
-
60
- And you can set `retry_limit`. If you don't want to retry you can set 0.
61
-
62
- jets call some_long_job-index --retry_limit 0
63
-
64
- ## Local mode
65
-
66
- Instead of calling AWS lambda remote, you can also have `jets call` use the code directly on your machine. To enable this, use the `--local` flag. Example:
67
-
68
- jets call hard_job-drive --local
69
-
@@ -1,52 +0,0 @@
1
- Generates a migration file which can be used to create a DynamoDB table. To run the migration file use `jets dynamodb:migrate`.
2
-
3
- The table name will have a namespace. For example, if your project is called `demo`, the environment is `development`, and you create a table called `posts`. The DynamoDB full table name will be `demo-dev-posts`. You can change this behavior by editing your `config/dynamodb.yml` and adjusting the `table_namespace` value.
4
-
5
- DynamoDB tables support certain types of attribute types. The CLI will parse the `--partition-key` option and use the second part of the option to map it to the underlying DynamoDB type using this mapping.
6
-
7
- ```ruby
8
- ATTRIBUTE_TYPE_MAP = {
9
- 'string' => 'S',
10
- 'number' => 'N',
11
- 'binary' => 'B',
12
- 's' => 'S',
13
- 'n' => 'N',
14
- 'b' => 'B',
15
- }
16
- ```
17
-
18
- For example, `--partition-key id:string` maps 'string' to 's'. More info on DynamoDB types is available at the ruby aws-sdk docs: [Aws::DynamoDB::Types::AttributeDefinition](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/DynamoDB/Types/AttributeDefinition.html)
19
-
20
- ## Examples
21
-
22
- $ jets dynamodb:generate create_posts --partition-key id # default attribute type is string
23
- $ jets dynamodb:generate create_posts --partition-key id:number # attribute type will be number
24
- $ jets dynamodb:generate create_comments --partition-key post_id:string --sort-key created_at:string
25
-
26
- ## Running migrations
27
-
28
- $ jets dynamodb:migrate path/to/migration
29
- $ jets dynamodb:migrate dynamodb/migrate/20171112162404-create_articles_migration.rb
30
-
31
- To add global secondary indexes:
32
-
33
- $ jets dynamodb:generate update_comments --partition-key user_id:string --sort-key created_at:string
34
-
35
- To run:
36
-
37
- $ jets dynamodb:migrate dynamodb/migrate/20171112161530-create_posts_migration.rb
38
-
39
- ## Conventions
40
-
41
- A create_table or update_table migration file is generated based name you provide. If `update` is included in the name then an update_table migration table is generated. If `create` is included in the name then a create_table migration table is generated.
42
-
43
- The table_name is also inferred from the migration name you provide. Examples:
44
-
45
- $ jets dynamodb:generate create_posts # table_name: posts
46
- $ jets dynamodb:generate update_comments # table_name: comments
47
-
48
- You can override both of these conventions:
49
-
50
- $ jets dynamodb:generate create_my_posts --table-name posts
51
- $ jets dynamodb:generate my_posts --table-action create_table --table-name posts
52
- $ jets dynamodb:generate my_posts --table-action update_table --table-name posts
@@ -1,4 +0,0 @@
1
- ## Examples
2
-
3
- jets dynamodb:migrate path/to/migration
4
- jets dynamodb:migrate db/migrate/posts_migration.rb
@@ -1,16 +0,0 @@
1
- ## Example
2
-
3
- $ jets routes
4
- +--------+----------------+--------------------+
5
- | Verb | Path | Controller#action |
6
- +--------+----------------+--------------------+
7
- | GET | posts | posts#index |
8
- | GET | posts/new | posts#new |
9
- | GET | posts/:id | posts#show |
10
- | POST | posts | posts#create |
11
- | GET | posts/:id/edit | posts#edit |
12
- | PUT | posts/:id | posts#update |
13
- | DELETE | posts/:id | posts#delete |
14
- | ANY | *catchall | jets/public#show |
15
- +--------+----------------+--------------------+
16
- $
@@ -1,17 +0,0 @@
1
- ## Examples
2
-
3
- $ jets runner 'puts "hi"'
4
- hi
5
- $ jets runner 'puts Jets.env'
6
- development
7
-
8
- Using a script in a file. Let's say you have a script:
9
-
10
- script.rb:
11
-
12
- ```ruby
13
- puts "hello world: #{Jets.env}"
14
- ```
15
-
16
- $ jets runner file://script.rb
17
- hello world: development