brut 0.15.0 → 0.16.0.pre

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 (400) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Dockerfile.dx +3 -6
  5. data/Gemfile.lock +1 -1
  6. data/brut-css/package-lock.json +2 -2
  7. data/brut-css/package.json +1 -1
  8. data/brut-js/package-lock.json +2 -2
  9. data/brut-js/package.json +1 -1
  10. data/brutrb.com/.vitepress/config.mjs +4 -3
  11. data/brutrb.com/deployment.md +23 -9
  12. data/brutrb.com/jobs.md +107 -7
  13. data/brutrb.com/recipes/dev-env-secrets.md +87 -0
  14. data/brutrb.com/roadmap.md +2 -7
  15. data/docs/404.html +2 -2
  16. data/docs/adrs.html +3 -3
  17. data/docs/ai.html +3 -3
  18. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  19. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  20. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  21. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  22. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  23. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  24. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  25. data/docs/api/Brut/BackEnd.html +1 -1
  26. data/docs/api/Brut/CLI/App.html +1 -1
  27. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  28. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  29. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  30. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  31. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  32. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  33. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  34. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  35. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  36. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  37. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  38. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  39. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  40. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  41. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  42. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  43. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  45. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  46. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  47. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  48. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
  50. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  61. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  62. data/docs/api/Brut/CLI/Apps.html +1 -1
  63. data/docs/api/Brut/CLI/Command.html +1 -1
  64. data/docs/api/Brut/CLI/Error.html +1 -1
  65. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  66. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  67. data/docs/api/Brut/CLI/Executor.html +1 -1
  68. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  69. data/docs/api/Brut/CLI/Options.html +1 -1
  70. data/docs/api/Brut/CLI/Output.html +1 -1
  71. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  72. data/docs/api/Brut/CLI.html +1 -1
  73. data/docs/api/Brut/FactoryBot.html +1 -1
  74. data/docs/api/Brut/Framework/App.html +1 -1
  75. data/docs/api/Brut/Framework/Config.html +1 -1
  76. data/docs/api/Brut/Framework/Container.html +1 -1
  77. data/docs/api/Brut/Framework/Error.html +1 -1
  78. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  79. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  80. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  81. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  82. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  83. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  84. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  85. data/docs/api/Brut/Framework/Errors.html +1 -1
  86. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  87. data/docs/api/Brut/Framework/MCP.html +1 -1
  88. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  89. data/docs/api/Brut/Framework.html +1 -1
  90. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  91. data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
  92. data/docs/api/Brut/FrontEnd/Component.html +1 -1
  93. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
  94. data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
  95. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  96. data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
  97. data/docs/api/Brut/FrontEnd/Components/Inputs/ButtonTag.html +1 -1
  98. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  99. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +1 -1
  100. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
  101. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +1 -1
  102. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +1 -1
  103. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  104. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  105. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
  106. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  107. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  108. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  109. data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
  110. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  111. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  112. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  113. data/docs/api/Brut/FrontEnd/Forms/Button.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Forms/ButtonInputDefinition.html +1 -1
  115. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  116. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  117. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  118. data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  122. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  123. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  124. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  127. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  128. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  129. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  130. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  135. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  136. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  137. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  138. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  139. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Layout.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  143. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  145. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  146. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  147. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  148. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  149. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  150. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  151. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  152. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  153. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  154. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  155. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  156. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  157. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  158. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  159. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  160. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  161. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  162. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  163. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  164. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  165. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  166. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  167. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  168. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  169. data/docs/api/Brut/FrontEnd.html +1 -1
  170. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  171. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  172. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  173. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  174. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  175. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  176. data/docs/api/Brut/I18n.html +1 -1
  177. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  178. data/docs/api/Brut/Instrumentation/Methods/ClassMethods.html +1 -1
  179. data/docs/api/Brut/Instrumentation/Methods.html +1 -1
  180. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
  181. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
  182. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
  183. data/docs/api/Brut/Instrumentation.html +1 -1
  184. data/docs/api/Brut/RubocopConfig.html +1 -1
  185. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
  186. data/docs/api/Brut/SinatraHelpers.html +1 -1
  187. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  188. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  189. data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
  190. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  191. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  192. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  193. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  194. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  195. data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
  196. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
  197. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
  198. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
  199. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
  200. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
  201. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
  202. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
  203. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
  204. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
  205. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
  206. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
  207. data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
  208. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
  209. data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
  210. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  211. data/docs/api/Brut/SpecSupport.html +1 -1
  212. data/docs/api/Brut.html +1 -1
  213. data/docs/api/Clock.html +1 -1
  214. data/docs/api/ModuleName.html +1 -1
  215. data/docs/api/RichString.html +1 -1
  216. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  217. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
  218. data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
  219. data/docs/api/Sequel/Extensions.html +1 -1
  220. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  221. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  222. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  223. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  224. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  225. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  226. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  227. data/docs/api/Sequel/Plugins.html +1 -1
  228. data/docs/api/Sequel.html +1 -1
  229. data/docs/api/_index.html +1 -1
  230. data/docs/api/file.README.html +1 -1
  231. data/docs/api/index.html +1 -1
  232. data/docs/api/top-level-namespace.html +1 -1
  233. data/docs/assets/{app.B0X8upRm.js → app.Dm7v_ouO.js} +1 -1
  234. data/docs/assets/{brut-js.md.CbJAe2Ky.js → brut-js.md.BMz0X1Rz.js} +1 -1
  235. data/docs/assets/chunks/@localSearchIndexroot.BiNFswvo.js +1 -0
  236. data/docs/assets/chunks/{VPLocalSearchBox.jLmhant1.js → VPLocalSearchBox.DQK6jQou.js} +1 -1
  237. data/docs/assets/chunks/{theme.CtVUdCdt.js → theme.BuExsdM9.js} +2 -2
  238. data/docs/assets/{components.md.C6nWgDP0.js → components.md.Dfd3w6UW.js} +3 -3
  239. data/docs/assets/{configuration.md.CpbYHWPb.js → configuration.md.DTYoV2Ea.js} +1 -1
  240. data/docs/assets/{forms.md.Bii91k3E.js → forms.md.DEkmJUvb.js} +1 -1
  241. data/docs/assets/{getting-started.md.ChAvueK7.js → getting-started.md.DO-4eoGW.js} +2 -2
  242. data/docs/assets/{tutorials_02-dialog.md.De6iTsWX.js → tutorials_02-dialog.md.D2vSjDVf.js} +1 -1
  243. data/docs/assets.html +3 -3
  244. data/docs/brut-js/api/AjaxSubmit.html +2 -2
  245. data/docs/brut-js/api/AjaxSubmit.js.html +2 -2
  246. data/docs/brut-js/api/Autosubmit.html +2 -2
  247. data/docs/brut-js/api/Autosubmit.js.html +2 -2
  248. data/docs/brut-js/api/BaseCustomElement.html +2 -2
  249. data/docs/brut-js/api/BaseCustomElement.js.html +2 -2
  250. data/docs/brut-js/api/BrutCustomElements.html +3 -3
  251. data/docs/brut-js/api/BufferedLogger.html +2 -2
  252. data/docs/brut-js/api/ConfirmSubmit.html +2 -2
  253. data/docs/brut-js/api/ConfirmSubmit.js.html +2 -2
  254. data/docs/brut-js/api/ConfirmationDialog.html +2 -2
  255. data/docs/brut-js/api/ConfirmationDialog.js.html +2 -2
  256. data/docs/brut-js/api/ConstraintViolationMessage.html +2 -2
  257. data/docs/brut-js/api/ConstraintViolationMessage.js.html +2 -2
  258. data/docs/brut-js/api/ConstraintViolationMessages.html +2 -2
  259. data/docs/brut-js/api/ConstraintViolationMessages.js.html +2 -2
  260. data/docs/brut-js/api/CopyToClipboard.html +2 -2
  261. data/docs/brut-js/api/CopyToClipboard.js.html +2 -2
  262. data/docs/brut-js/api/Form.html +2 -2
  263. data/docs/brut-js/api/Form.js.html +2 -2
  264. data/docs/brut-js/api/I18nTranslation.html +2 -2
  265. data/docs/brut-js/api/I18nTranslation.js.html +5 -2
  266. data/docs/brut-js/api/LocaleDetection.html +2 -2
  267. data/docs/brut-js/api/LocaleDetection.js.html +2 -2
  268. data/docs/brut-js/api/Logger.html +2 -2
  269. data/docs/brut-js/api/Logger.js.html +2 -2
  270. data/docs/brut-js/api/Message.html +2 -2
  271. data/docs/brut-js/api/Message.js.html +11 -5
  272. data/docs/brut-js/api/PrefixedLogger.html +2 -2
  273. data/docs/brut-js/api/RichString.html +9 -9
  274. data/docs/brut-js/api/RichString.js.html +6 -3
  275. data/docs/brut-js/api/Tabs.html +2 -2
  276. data/docs/brut-js/api/Tabs.js.html +2 -2
  277. data/docs/brut-js/api/Toast.html +270 -0
  278. data/docs/brut-js/api/Toast.js.html +153 -0
  279. data/docs/brut-js/api/Tracing.html +2 -2
  280. data/docs/brut-js/api/Tracing.js.html +2 -2
  281. data/docs/brut-js/api/external-CustomElementRegistry.html +3 -3
  282. data/docs/brut-js/api/external-Performance.html +3 -3
  283. data/docs/brut-js/api/external-Promise.html +3 -3
  284. data/docs/brut-js/api/external-ValidityState.html +3 -3
  285. data/docs/brut-js/api/external-Window.html +4 -4
  286. data/docs/brut-js/api/external-fetch.html +3 -3
  287. data/docs/brut-js/api/global.html +3 -3
  288. data/docs/brut-js/api/index.html +2 -2
  289. data/docs/brut-js/api/index.js.html +5 -2
  290. data/docs/brut-js/api/module-testing.html +2 -2
  291. data/docs/brut-js/api/testing.AssetMetadata.html +2 -2
  292. data/docs/brut-js/api/testing.AssetMetadataLoader.html +2 -2
  293. data/docs/brut-js/api/testing.CustomElementTest.html +2 -2
  294. data/docs/brut-js/api/testing.DOMCreator.html +2 -2
  295. data/docs/brut-js/api/testing_AssetMetadata.js.html +2 -2
  296. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +2 -2
  297. data/docs/brut-js/api/testing_CustomElementTest.js.html +2 -2
  298. data/docs/brut-js/api/testing_DOMCreator.js.html +2 -2
  299. data/docs/brut-js/api/testing_index.js.html +2 -2
  300. data/docs/brut-js.html +5 -5
  301. data/docs/business-logic.html +3 -3
  302. data/docs/cli.html +3 -3
  303. data/docs/components.html +7 -7
  304. data/docs/configuration.html +5 -5
  305. data/docs/css.html +3 -3
  306. data/docs/custom-element-tests.html +3 -3
  307. data/docs/database-access.html +3 -3
  308. data/docs/database-schema.html +3 -3
  309. data/docs/deployment.html +3 -3
  310. data/docs/dev-environment.html +3 -3
  311. data/docs/dir-structure.html +3 -3
  312. data/docs/doc-conventions.html +3 -3
  313. data/docs/end-to-end-tests.html +3 -3
  314. data/docs/features.html +3 -3
  315. data/docs/flash-and-session.html +3 -3
  316. data/docs/form-constraints.html +3 -3
  317. data/docs/forms.html +5 -5
  318. data/docs/getting-started.html +6 -6
  319. data/docs/handlers.html +3 -3
  320. data/docs/hashmap.json +1 -1
  321. data/docs/hooks.html +3 -3
  322. data/docs/i18n.html +3 -3
  323. data/docs/index.html +3 -3
  324. data/docs/instrumentation.html +3 -3
  325. data/docs/javascript.html +3 -3
  326. data/docs/jobs.html +3 -3
  327. data/docs/keyword-injection.html +3 -3
  328. data/docs/layouts.html +3 -3
  329. data/docs/lsp.html +3 -3
  330. data/docs/markdown-examples.html +3 -3
  331. data/docs/middleware.html +3 -3
  332. data/docs/overview.html +3 -3
  333. data/docs/pages.html +3 -3
  334. data/docs/recipes/alternate-layouts.html +3 -3
  335. data/docs/recipes/authentication.html +3 -3
  336. data/docs/recipes/custom-flash.html +3 -3
  337. data/docs/recipes/form-errors.html +3 -3
  338. data/docs/recipes/indexed-forms.html +3 -3
  339. data/docs/recipes/migrations.html +3 -3
  340. data/docs/recipes/text-field-component.html +3 -3
  341. data/docs/roadmap.html +3 -3
  342. data/docs/routes.html +3 -3
  343. data/docs/security.html +3 -3
  344. data/docs/seed-data.html +3 -3
  345. data/docs/space-time-continuum.html +3 -3
  346. data/docs/tutorial.html +3 -3
  347. data/docs/tutorials/01-intro.html +3 -3
  348. data/docs/tutorials/02-dialog.html +5 -5
  349. data/docs/unit-tests.html +3 -3
  350. data/docs/why.html +3 -3
  351. data/dx/bash_customizations +3 -4
  352. data/dx/build.pre +15 -0
  353. data/lib/brut/cli/apps/heroku_container_based_deploy.rb +41 -15
  354. data/lib/brut/cli/apps/test.rb +2 -0
  355. data/lib/brut/framework/container.rb +6 -4
  356. data/lib/brut/framework/mcp.rb +1 -1
  357. data/lib/brut/version.rb +1 -1
  358. data/mkbrut/Gemfile.lock +2 -2
  359. data/mkbrut/lib/mkbrut/add_segment.rb +38 -0
  360. data/mkbrut/lib/mkbrut/add_segment_options.rb +22 -0
  361. data/mkbrut/lib/mkbrut/app.rb +7 -2
  362. data/mkbrut/lib/mkbrut/base.rb +1 -0
  363. data/mkbrut/lib/mkbrut/cli.rb +90 -8
  364. data/mkbrut/lib/mkbrut/ops/insert_code_in_method.rb +19 -7
  365. data/mkbrut/lib/mkbrut/ops/insert_into_file.rb +36 -0
  366. data/mkbrut/lib/mkbrut/ops/prism_parsing_op.rb +14 -2
  367. data/mkbrut/lib/mkbrut/ops.rb +1 -0
  368. data/mkbrut/lib/mkbrut/segments/bare_bones.rb +8 -0
  369. data/mkbrut/lib/mkbrut/segments/demo.rb +8 -0
  370. data/mkbrut/lib/mkbrut/segments/heroku.rb +23 -3
  371. data/mkbrut/lib/mkbrut/segments/sidekiq.rb +136 -1
  372. data/mkbrut/lib/mkbrut/segments.rb +1 -1
  373. data/mkbrut/lib/mkbrut/version.rb +1 -1
  374. data/mkbrut/lib/mkbrut.rb +2 -0
  375. data/mkbrut/templates/Base/.gitignore +3 -0
  376. data/mkbrut/templates/Base/Dockerfile.dx +18 -21
  377. data/mkbrut/templates/Base/Gemfile.erb +1 -1
  378. data/mkbrut/templates/Base/bin/run +107 -67
  379. data/mkbrut/templates/Base/bin/run.run +4 -0
  380. data/mkbrut/templates/Base/bin/setup +32 -1
  381. data/mkbrut/templates/Base/dx/bash_customizations +0 -4
  382. data/mkbrut/templates/Base/package.json.erb +1 -1
  383. data/mkbrut/templates/segments/Heroku/deploy/Dockerfile +15 -15
  384. data/mkbrut/templates/segments/Heroku/deploy/heroku_config.rb +5 -4
  385. data/mkbrut/templates/segments/Sidekiq/app/boot_sidekiq.rb +2 -0
  386. data/mkbrut/templates/segments/Sidekiq/app/config/sidekiq.yml +4 -0
  387. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/app_job.rb +3 -0
  388. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/example_job.rb +12 -0
  389. data/mkbrut/templates/segments/Sidekiq/app/src/back_end/segments/sidekiq_segment.rb +56 -0
  390. data/mkbrut/templates/segments/Sidekiq/bin/run.sidekiq +4 -0
  391. data/mkbrut/templates/segments/Sidekiq/specs/back_end/jobs/example_job.spec.rb +5 -0
  392. data/mkbrut/templates/segments/Sidekiq/specs/integration/sidekiq_works.spec.rb +38 -0
  393. metadata +34 -18
  394. data/docs/assets/chunks/@localSearchIndexroot.C0s1k0UQ.js +0 -1
  395. /data/docs/assets/{brut-js.md.CbJAe2Ky.lean.js → brut-js.md.BMz0X1Rz.lean.js} +0 -0
  396. /data/docs/assets/{components.md.C6nWgDP0.lean.js → components.md.Dfd3w6UW.lean.js} +0 -0
  397. /data/docs/assets/{configuration.md.CpbYHWPb.lean.js → configuration.md.DTYoV2Ea.lean.js} +0 -0
  398. /data/docs/assets/{forms.md.Bii91k3E.lean.js → forms.md.DEkmJUvb.lean.js} +0 -0
  399. /data/docs/assets/{getting-started.md.ChAvueK7.lean.js → getting-started.md.DO-4eoGW.lean.js} +0 -0
  400. /data/docs/assets/{tutorials_02-dialog.md.De6iTsWX.lean.js → tutorials_02-dialog.md.D2vSjDVf.lean.js} +0 -0
@@ -37,7 +37,8 @@ WORKDIR /brut-app
37
37
  # - lsb-release is used to generically access information for this OS's version
38
38
  # - wget allows us to copy/paste commands from vendors about how to install
39
39
  # software even though it does the same thing as curl
40
- RUN apt-get update --quiet --yes && \
40
+ RUN --mount=type=cache,target=/var/cache/apt \
41
+ apt-get update --quiet --yes && \
41
42
  apt-get install --no-install-recommends --quiet --yes \
42
43
  ca-certificates \
43
44
  curl \
@@ -62,8 +63,7 @@ RUN /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && \
62
63
  ENV RACK_ENV="production" \
63
64
  BUNDLE_DEPLOYMENT="1" \
64
65
  BUNDLE_PATH="/usr/local/bundle" \
65
- BUNDLE_WITHOUT="development" \
66
- APP_GIT_SHA1="${app_git_sha1}"
66
+ BUNDLE_WITHOUT="development"
67
67
 
68
68
  # This makes a new image that we'll throw away after building
69
69
  # needed artifacts.
@@ -74,30 +74,29 @@ FROM base AS build
74
74
  # - libpq-dev is needed by postgres
75
75
  # - pkg-config is, I guess, not considered "essential" (as in build-essential),
76
76
  # but still needed to install downstream stuff
77
- RUN apt-get update --quiet --yes && \
77
+ RUN --mount=type=cache,target=/var/cache/apt \
78
+ apt-get update --quiet --yes && \
78
79
  apt-get install --no-install-recommends --quiet --yes \
79
80
  build-essential \
80
81
  git \
81
82
  libpq-dev \
82
83
  pkg-config
83
84
 
84
- # Install NodeJS, per https://nodejs.org/en/download
85
- RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash && \
86
- \. "$HOME/.nvm/nvm.sh" && \
87
- nvm install 22 && \
88
- node -v && nvm current && npm -v
85
+ # Install NodeJS from their Docker image
86
+ COPY --from=node:22-slim /usr/local /usr/local
89
87
 
90
- # Copy the app into the file, excluding the contents of .dockerignore
91
- COPY . .
88
+ COPY Gemfile Gemfile.lock .
92
89
 
93
90
  # Install RubyGems from app's Gemfile
94
- RUN bundle install --verbose && \
91
+ RUN --mount=type=cache,target=${BUNDLE_PATH}/cache \
92
+ bundle install --verbose && \
95
93
  rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git
96
94
 
95
+ COPY package.json package-lock.json ./
97
96
  # Install Node Modules from package.json
98
- RUN \. "$HOME/.nvm/nvm.sh" && \
99
- nvm use default && \
100
- npm clean-install --no-audit --no-fund --verbose
97
+ RUN npm clean-install --no-audit --no-fund --verbose
98
+
99
+ COPY . .
101
100
 
102
101
  # Build all assets
103
102
  RUN \. "$HOME/.nvm/nvm.sh" && \
@@ -118,6 +117,7 @@ RUN groupadd --system --gid 1000 brut && \
118
117
  chown -R brut:brut logs tmp
119
118
  USER 1000:1000
120
119
 
120
+ ENV APP_GIT_SHA1="${app_git_sha1}"
121
121
  # This is used to execute other commands. When the app is run in production,
122
122
  # this script is used to run it.
123
123
  ENTRYPOINT ["/brut-app/deploy/docker-entrypoint"]
@@ -8,8 +8,8 @@ class HerokuConfig
8
8
  # The format of this Hash is:
9
9
  #
10
10
  # {
11
- # image name» => {
12
- # cmd: command line for Dockerfile RUN directive»",
11
+ # *image name* => {
12
+ # cmd: *command line for Dockerfile RUN directive*,
13
13
  # }
14
14
  # }
15
15
  #
@@ -21,6 +21,7 @@ class HerokuConfig
21
21
  # cmd: "bin/run-sidekiq",
22
22
  # }
23
23
  # }
24
- def self.additional_images = {}
24
+ #
25
+ def self.additional_images
26
+ end
25
27
  end
26
-
@@ -0,0 +1,2 @@
1
+ require_relative "bootstrap"
2
+ bootstrap = Bootstrap.new.bootstrap!
@@ -0,0 +1,4 @@
1
+ :concurrency: <%= ENV.fetch("SIDEKIQ_CONCURRENCY") { 5 } %>
2
+ :timeout: <%= ENV.fetch("SIDEKIQ_TIMEOUT_SECONDS") { 25 } %>
3
+ :queues:
4
+ - default
@@ -0,0 +1,3 @@
1
+ class AppJob
2
+ include Sidekiq::Job
3
+ end
@@ -0,0 +1,12 @@
1
+ # This is entirely to allow the integration test to run
2
+ # that verifies you have Sidekqi working and the segment was
3
+ # installed correctly. Once you have created a real job for
4
+ # your app and done whatever testing you need, please delete
5
+ # this job and the integration test.
6
+ class ExampleJob < AppJob
7
+ def perform(path_to_file, contents)
8
+ File.open(path_to_file, "w") do |f|
9
+ f.puts(contents)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,56 @@
1
+ require "sidekiq"
2
+ # Encapsulates all Sidekiq configuraiton beyond what can be done in
3
+ # app/config/sidekiq.yml. You can edit this as needed.
4
+ class SidekiqSegment
5
+
6
+ def initialize
7
+ Brut.container.store(
8
+ "flush_spans_in_sidekiq?",
9
+ "Boolean",
10
+ "True if sidekiq jobs should flush all OTel spans after the job completes"
11
+ ) do |project_env|
12
+ if ENV["FLUSH_SPANS_IN_SIDEKIQ"] == "true"
13
+ true
14
+ elsif ENV["FLUSH_SPANS_IN_SIDEKIQ"] == "false"
15
+ false
16
+ else
17
+ project_env.development?
18
+ end
19
+ end
20
+ end
21
+
22
+ def boot!
23
+ Sidekiq.configure_server do |config|
24
+ config.redis = {
25
+ # Per https://devcenter.heroku.com/articles/connecting-heroku-redis#connecting-in-ruby
26
+ ssl_params: {
27
+ verify_mode: OpenSSL::SSL::VERIFY_NONE,
28
+ },
29
+ }
30
+ config.logger = SemanticLogger["Sidekiq:server"]
31
+ if Brut.container.flush_spans_in_sidekiq?
32
+ SemanticLogger[self.class].info("Sidekiq jobs will flush spans")
33
+ config.server_middleware do |chain|
34
+ if defined? OpenTelemetry::Instrumentation::Sidekiq::Middlewares::Server::TracerMiddleware
35
+ chain.insert_before OpenTelemetry::Instrumentation::Sidekiq::Middlewares::Server::TracerMiddleware,
36
+ Brut::BackEnd::Sidekiq::Middlewares::Server::FlushSpans
37
+ else
38
+ SemanticLogger["Sidekiq:server"].warn("OpenTelemetry::Instrumentation::Sidekiq::Middlewares::Server::TracerMiddleware not defined")
39
+ end
40
+ end
41
+ else
42
+ SemanticLogger[self.class].info("Sidekiq jobs will not flush spans")
43
+ end
44
+ end
45
+
46
+ Sidekiq.configure_client do |config|
47
+ config.redis = {
48
+ # Per https://devcenter.heroku.com/articles/connecting-heroku-redis#connecting-in-ruby
49
+ ssl_params: {
50
+ verify_mode: OpenSSL::SSL::VERIFY_NONE,
51
+ },
52
+ }
53
+ config.logger = SemanticLogger["Sidekiq:client"]
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,4 @@
1
+ PIDFILE="${SCRIPT_DIR}/../tmp/pidfile.sidekiq"
2
+ CMD_MAP[sidekiq]="bin/sidekiq --config ${SCRIPT_DIR}/../app/config/sidekiq.yml --require ${SCRIPT_DIR}/../app/boot_sidekiq.rb --verbose"
3
+ PIDFILE_MAP[sidekiq]="${PIDFILE}"
4
+ CREATES_PIDFILE_MAP[sidekiq]="false"
@@ -0,0 +1,5 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe ExampleJob do
4
+ implementation_is_trivial
5
+ end
@@ -0,0 +1,38 @@
1
+ require "spec_helper"
2
+ require "timeout"
3
+
4
+ # This test will ensure that Sidekiq segment was installed
5
+ # correctly and your app can use Sidekiq. Once you have
6
+ # created a real job for your app, delete ExampleJob and this test.
7
+ RSpec.describe "Sidekiq is working", e2e: true do
8
+ it "processes jobs using the real Sidekiq server" do
9
+ # ExampleJob will write contents to a file. This
10
+ # test will delete that fail, queue the job, then
11
+ # wait up to 5 seconds for the job to run and create
12
+ # the file with the contents. This should be more than
13
+ # enough time.
14
+ file = Brut.container.tmp_dir / "sidekiq_test.txt"
15
+ if file.exist?
16
+ file.delete
17
+ end
18
+
19
+ # If the file still exists at this point, the test
20
+ # will pass even if Sidekiq is not working.
21
+ confidence_check { expect(file.exist?).to eq(false) }
22
+
23
+ ExampleJob.perform_async(file.to_s, "test content for file")
24
+ queue_name = ExampleJob.sidekiq_options["queue"]
25
+ expect {
26
+ Timeout.timeout(5) do
27
+ loop do
28
+ if file.exist?
29
+ break
30
+ end
31
+ sleep 0.1
32
+ end
33
+ end
34
+ }.not_to raise_error
35
+ content = File.read(file)
36
+ expect(content).to eq("test content for file\n")
37
+ end
38
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Bryant Copeland
@@ -706,6 +706,7 @@ files:
706
706
  - brutrb.com/recipes/alternate-layouts.md
707
707
  - brutrb.com/recipes/authentication.md
708
708
  - brutrb.com/recipes/custom-flash.md
709
+ - brutrb.com/recipes/dev-env-secrets.md
709
710
  - brutrb.com/recipes/form-errors.md
710
711
  - brutrb.com/recipes/indexed-forms.md
711
712
  - brutrb.com/recipes/migrations.md
@@ -965,25 +966,25 @@ files:
965
966
  - docs/assets/adrs.md.YglbWtQe.lean.js
966
967
  - docs/assets/ai.md.ChLnvDAX.js
967
968
  - docs/assets/ai.md.ChLnvDAX.lean.js
968
- - docs/assets/app.B0X8upRm.js
969
+ - docs/assets/app.Dm7v_ouO.js
969
970
  - docs/assets/assets.md.BEF6Oz6K.js
970
971
  - docs/assets/assets.md.BEF6Oz6K.lean.js
971
972
  - docs/assets/basic-form-with-violations.Cv6Y9-Q_.png
972
973
  - docs/assets/basic-form.DbHnu0oW.png
973
- - docs/assets/brut-js.md.CbJAe2Ky.js
974
- - docs/assets/brut-js.md.CbJAe2Ky.lean.js
974
+ - docs/assets/brut-js.md.BMz0X1Rz.js
975
+ - docs/assets/brut-js.md.BMz0X1Rz.lean.js
975
976
  - docs/assets/business-logic.md.DbuaOYGU.js
976
977
  - docs/assets/business-logic.md.DbuaOYGU.lean.js
977
- - docs/assets/chunks/@localSearchIndexroot.C0s1k0UQ.js
978
- - docs/assets/chunks/VPLocalSearchBox.jLmhant1.js
978
+ - docs/assets/chunks/@localSearchIndexroot.BiNFswvo.js
979
+ - docs/assets/chunks/VPLocalSearchBox.DQK6jQou.js
979
980
  - docs/assets/chunks/framework.C4nOkCZI.js
980
- - docs/assets/chunks/theme.CtVUdCdt.js
981
+ - docs/assets/chunks/theme.BuExsdM9.js
981
982
  - docs/assets/cli.md.DDMar_51.js
982
983
  - docs/assets/cli.md.DDMar_51.lean.js
983
- - docs/assets/components.md.C6nWgDP0.js
984
- - docs/assets/components.md.C6nWgDP0.lean.js
985
- - docs/assets/configuration.md.CpbYHWPb.js
986
- - docs/assets/configuration.md.CpbYHWPb.lean.js
984
+ - docs/assets/components.md.Dfd3w6UW.js
985
+ - docs/assets/components.md.Dfd3w6UW.lean.js
986
+ - docs/assets/configuration.md.DTYoV2Ea.js
987
+ - docs/assets/configuration.md.DTYoV2Ea.lean.js
987
988
  - docs/assets/css.md.K5rOCOQY.js
988
989
  - docs/assets/css.md.K5rOCOQY.lean.js
989
990
  - docs/assets/custom-element-tests.md.DiLe-eFw.js
@@ -1009,10 +1010,10 @@ files:
1009
1010
  - docs/assets/flash-and-session.md.CUsMxoNl.lean.js
1010
1011
  - docs/assets/form-constraints.md.KlfXSKm2.js
1011
1012
  - docs/assets/form-constraints.md.KlfXSKm2.lean.js
1012
- - docs/assets/forms.md.Bii91k3E.js
1013
- - docs/assets/forms.md.Bii91k3E.lean.js
1014
- - docs/assets/getting-started.md.ChAvueK7.js
1015
- - docs/assets/getting-started.md.ChAvueK7.lean.js
1013
+ - docs/assets/forms.md.DEkmJUvb.js
1014
+ - docs/assets/forms.md.DEkmJUvb.lean.js
1015
+ - docs/assets/getting-started.md.DO-4eoGW.js
1016
+ - docs/assets/getting-started.md.DO-4eoGW.lean.js
1016
1017
  - docs/assets/handlers.md.C5tUwmmo.js
1017
1018
  - docs/assets/handlers.md.C5tUwmmo.lean.js
1018
1019
  - docs/assets/hooks.md.CoiYCKRc.js
@@ -1078,8 +1079,8 @@ files:
1078
1079
  - docs/assets/tutorial.md.BX6f6l00.lean.js
1079
1080
  - docs/assets/tutorials_01-intro.md.CzZ3kpF_.js
1080
1081
  - docs/assets/tutorials_01-intro.md.CzZ3kpF_.lean.js
1081
- - docs/assets/tutorials_02-dialog.md.De6iTsWX.js
1082
- - docs/assets/tutorials_02-dialog.md.De6iTsWX.lean.js
1082
+ - docs/assets/tutorials_02-dialog.md.D2vSjDVf.js
1083
+ - docs/assets/tutorials_02-dialog.md.D2vSjDVf.lean.js
1083
1084
  - docs/assets/unit-tests.md.vDsdBbO_.js
1084
1085
  - docs/assets/unit-tests.md.vDsdBbO_.lean.js
1085
1086
  - docs/assets/welcome-to-brut.VSWzl17-.png
@@ -1149,6 +1150,8 @@ files:
1149
1150
  - docs/brut-js/api/RichString.js.html
1150
1151
  - docs/brut-js/api/Tabs.html
1151
1152
  - docs/brut-js/api/Tabs.js.html
1153
+ - docs/brut-js/api/Toast.html
1154
+ - docs/brut-js/api/Toast.js.html
1152
1155
  - docs/brut-js/api/Tracing.html
1153
1156
  - docs/brut-js/api/Tracing.js.html
1154
1157
  - docs/brut-js/api/external-CustomElementRegistry.html
@@ -1231,6 +1234,7 @@ files:
1231
1234
  - docs/why.html
1232
1235
  - dx/bash_customizations
1233
1236
  - dx/build
1237
+ - dx/build.pre
1234
1238
  - dx/docker-compose.env
1235
1239
  - dx/dx.sh.lib
1236
1240
  - dx/exec
@@ -1404,6 +1408,8 @@ files:
1404
1408
  - mkbrut/dx
1405
1409
  - mkbrut/exe/mkbrut
1406
1410
  - mkbrut/lib/mkbrut.rb
1411
+ - mkbrut/lib/mkbrut/add_segment.rb
1412
+ - mkbrut/lib/mkbrut/add_segment_options.rb
1407
1413
  - mkbrut/lib/mkbrut/app.rb
1408
1414
  - mkbrut/lib/mkbrut/app_id.rb
1409
1415
  - mkbrut/lib/mkbrut/app_name.rb
@@ -1421,6 +1427,7 @@ files:
1421
1427
  - mkbrut/lib/mkbrut/ops/base_op.rb
1422
1428
  - mkbrut/lib/mkbrut/ops/copy_file.rb
1423
1429
  - mkbrut/lib/mkbrut/ops/insert_code_in_method.rb
1430
+ - mkbrut/lib/mkbrut/ops/insert_into_file.rb
1424
1431
  - mkbrut/lib/mkbrut/ops/insert_route.rb
1425
1432
  - mkbrut/lib/mkbrut/ops/mkdir.rb
1426
1433
  - mkbrut/lib/mkbrut/ops/prism_parsing_op.rb
@@ -1489,6 +1496,7 @@ files:
1489
1496
  - mkbrut/templates/Base/bin/dev
1490
1497
  - mkbrut/templates/Base/bin/release
1491
1498
  - mkbrut/templates/Base/bin/run
1499
+ - mkbrut/templates/Base/bin/run.run
1492
1500
  - mkbrut/templates/Base/bin/scaffold
1493
1501
  - mkbrut/templates/Base/bin/setup
1494
1502
  - mkbrut/templates/Base/bin/startup-message
@@ -1543,6 +1551,14 @@ files:
1543
1551
  - mkbrut/templates/segments/Heroku/deploy/Dockerfile
1544
1552
  - mkbrut/templates/segments/Heroku/deploy/docker-entrypoint
1545
1553
  - mkbrut/templates/segments/Heroku/deploy/heroku_config.rb
1554
+ - mkbrut/templates/segments/Sidekiq/app/boot_sidekiq.rb
1555
+ - mkbrut/templates/segments/Sidekiq/app/config/sidekiq.yml
1556
+ - mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/app_job.rb
1557
+ - mkbrut/templates/segments/Sidekiq/app/src/back_end/jobs/example_job.rb
1558
+ - mkbrut/templates/segments/Sidekiq/app/src/back_end/segments/sidekiq_segment.rb
1559
+ - mkbrut/templates/segments/Sidekiq/bin/run.sidekiq
1560
+ - mkbrut/templates/segments/Sidekiq/specs/back_end/jobs/example_job.spec.rb
1561
+ - mkbrut/templates/segments/Sidekiq/specs/integration/sidekiq_works.spec.rb
1546
1562
  - specs/brut/front_end/forms/input.spec.rb
1547
1563
  - specs/brut/front_end/forms/radio_button_group_input.spec.rb
1548
1564
  - specs/brut/front_end/forms/select_input.spec.rb
@@ -1575,7 +1591,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1575
1591
  - !ruby/object:Gem::Version
1576
1592
  version: '0'
1577
1593
  requirements: []
1578
- rubygems_version: 3.7.1
1594
+ rubygems_version: 3.7.2
1579
1595
  specification_version: 4
1580
1596
  summary: Web Framework Built around Ruby, Web Standards, Simplicity, and Object-Orientation
1581
1597
  test_files: []