brut 0.8.0 → 0.9.1

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 (420) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Dockerfile.dx +8 -1
  5. data/Gemfile.lock +101 -63
  6. data/bin/ci +9 -5
  7. data/bin/docs +1 -1
  8. data/bin/generate-and-run-rubocop +52 -0
  9. data/bin/rubocop +27 -0
  10. data/bin/setup +46 -0
  11. data/bin/test +18 -0
  12. data/brut-css/bin/publish +1 -1
  13. data/brut-css/package-lock.json +2 -2
  14. data/brut-css/package.json +1 -1
  15. data/brut-js/bin/publish +1 -1
  16. data/brut-js/package-lock.json +2 -2
  17. data/brut-js/package.json +1 -1
  18. data/brut-js/specs/ConfirmSubmit.spec.js +32 -1
  19. data/brut-js/src/ConfirmSubmit.js +28 -7
  20. data/brut.gemspec +32 -26
  21. data/brutrb.com/.vitepress/config.mjs +3 -0
  22. data/brutrb.com/database-schema.md +1 -1
  23. data/brutrb.com/images/tutorial/basic-form-with-violations.png +0 -0
  24. data/brutrb.com/images/tutorial/basic-form.png +0 -0
  25. data/brutrb.com/images/tutorial/initial-home-page.png +0 -0
  26. data/brutrb.com/images/tutorial/new-post-editor.png +0 -0
  27. data/brutrb.com/images/tutorial/new-post-home-page.png +0 -0
  28. data/brutrb.com/images/tutorial/styled-form-with-server-side-violations.png +0 -0
  29. data/brutrb.com/images/tutorial/styled-form-with-violations.png +0 -0
  30. data/brutrb.com/images/tutorial/styled-home-page-with-posts.png +0 -0
  31. data/brutrb.com/images/tutorial/styled-home-page.png +0 -0
  32. data/brutrb.com/images/tutorial/welcome-to-brut.png +0 -0
  33. data/brutrb.com/recipes/migrations.md +1 -1
  34. data/brutrb.com/tutorial.md +1728 -3
  35. data/docker-compose.dx.yml +3 -0
  36. data/docs/404.html +2 -2
  37. data/docs/adrs.html +3 -3
  38. data/docs/ai.html +3 -3
  39. data/docs/api/Brut/BackEnd/SeedData.html +2 -2
  40. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +2 -2
  41. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +2 -2
  42. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +2 -2
  43. data/docs/api/Brut/BackEnd/Sidekiq.html +2 -2
  44. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +2 -2
  45. data/docs/api/Brut/BackEnd/Validators.html +2 -2
  46. data/docs/api/Brut/BackEnd.html +2 -2
  47. data/docs/api/Brut/CLI/App.html +2 -2
  48. data/docs/api/Brut/CLI/AppRunner.html +2 -2
  49. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +2 -2
  50. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +2 -2
  51. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +2 -2
  52. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +2 -2
  53. data/docs/api/Brut/CLI/Apps/BuildAssets.html +2 -2
  54. data/docs/api/Brut/CLI/Apps/DB/Create.html +2 -2
  55. data/docs/api/Brut/CLI/Apps/DB/Drop.html +2 -2
  56. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +2 -2
  57. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +2 -2
  58. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +2 -2
  59. data/docs/api/Brut/CLI/Apps/DB/Seed.html +2 -2
  60. data/docs/api/Brut/CLI/Apps/DB/Status.html +2 -2
  61. data/docs/api/Brut/CLI/Apps/DB.html +2 -2
  62. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +2 -2
  63. data/docs/api/Brut/CLI/Apps/DeployBase.html +2 -2
  64. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +3 -3
  65. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +2 -2
  66. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +2 -2
  67. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +2 -2
  68. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +2 -2
  69. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +2 -2
  70. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +2 -2
  71. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +2 -2
  72. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +2 -2
  73. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +2 -2
  74. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +2 -2
  75. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +2 -2
  76. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +3 -3
  77. data/docs/api/Brut/CLI/Apps/Scaffold.html +2 -2
  78. data/docs/api/Brut/CLI/Apps/Test/Audit.html +2 -2
  79. data/docs/api/Brut/CLI/Apps/Test/E2e.html +2 -2
  80. data/docs/api/Brut/CLI/Apps/Test/JS.html +2 -2
  81. data/docs/api/Brut/CLI/Apps/Test/Run.html +2 -2
  82. data/docs/api/Brut/CLI/Apps/Test.html +2 -2
  83. data/docs/api/Brut/CLI/Apps.html +2 -2
  84. data/docs/api/Brut/CLI/Command.html +2 -2
  85. data/docs/api/Brut/CLI/Error.html +2 -2
  86. data/docs/api/Brut/CLI/ExecutionResults/Result.html +2 -2
  87. data/docs/api/Brut/CLI/ExecutionResults.html +2 -2
  88. data/docs/api/Brut/CLI/Executor.html +2 -2
  89. data/docs/api/Brut/CLI/InvalidOption.html +2 -2
  90. data/docs/api/Brut/CLI/Options.html +80 -2
  91. data/docs/api/Brut/CLI/Output.html +2 -2
  92. data/docs/api/Brut/CLI/SystemExecError.html +2 -2
  93. data/docs/api/Brut/CLI.html +2 -2
  94. data/docs/api/Brut/FactoryBot.html +3 -3
  95. data/docs/api/Brut/Framework/App.html +3 -3
  96. data/docs/api/Brut/Framework/Config.html +27 -15
  97. data/docs/api/Brut/Framework/Container.html +2 -2
  98. data/docs/api/Brut/Framework/Error.html +2 -2
  99. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +2 -2
  100. data/docs/api/Brut/Framework/Errors/Bug.html +2 -2
  101. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +2 -2
  102. data/docs/api/Brut/Framework/Errors/MissingParameter.html +2 -2
  103. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +2 -2
  104. data/docs/api/Brut/Framework/Errors/NotFound.html +2 -2
  105. data/docs/api/Brut/Framework/Errors/NotImplemented.html +2 -2
  106. data/docs/api/Brut/Framework/Errors.html +2 -2
  107. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +2 -2
  108. data/docs/api/Brut/Framework/MCP.html +21 -11
  109. data/docs/api/Brut/Framework/ProjectEnvironment.html +2 -2
  110. data/docs/api/Brut/Framework.html +2 -2
  111. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +2 -2
  112. data/docs/api/Brut/FrontEnd/Component/Helpers.html +2 -2
  113. data/docs/api/Brut/FrontEnd/Component.html +2 -2
  114. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +2 -2
  115. data/docs/api/Brut/FrontEnd/Components/FormTag.html +4 -4
  116. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +2 -2
  117. data/docs/api/Brut/FrontEnd/Components/Input.html +2 -2
  118. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +2 -2
  119. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +2 -2
  120. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +2 -2
  121. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +2 -2
  122. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +2 -2
  123. data/docs/api/Brut/FrontEnd/Components/Inputs.html +2 -2
  124. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +2 -2
  125. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +2 -2
  126. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +2 -2
  127. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +2 -2
  128. data/docs/api/Brut/FrontEnd/Components.html +2 -2
  129. data/docs/api/Brut/FrontEnd/CsrfProtector.html +250 -0
  130. data/docs/api/Brut/FrontEnd/Download.html +2 -2
  131. data/docs/api/Brut/FrontEnd/Flash.html +2 -2
  132. data/docs/api/Brut/FrontEnd/Form.html +6 -6
  133. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +2 -2
  134. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +2 -2
  135. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +2 -2
  136. data/docs/api/Brut/FrontEnd/Forms/Input.html +2 -2
  137. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +2 -2
  138. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +2 -2
  139. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +2 -2
  140. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +2 -2
  141. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +2 -2
  142. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +2 -2
  143. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +2 -2
  144. data/docs/api/Brut/FrontEnd/Forms.html +2 -2
  145. data/docs/api/Brut/FrontEnd/GenericResponse.html +2 -2
  146. data/docs/api/Brut/FrontEnd/Handler.html +2 -2
  147. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +2 -2
  148. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +2 -2
  149. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +2 -2
  150. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +2 -2
  151. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +2 -2
  152. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +2 -2
  153. data/docs/api/Brut/FrontEnd/Handlers.html +2 -2
  154. data/docs/api/Brut/FrontEnd/HandlingResults.html +2 -2
  155. data/docs/api/Brut/FrontEnd/HttpMethod.html +2 -2
  156. data/docs/api/Brut/FrontEnd/HttpStatus.html +2 -2
  157. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +2 -2
  158. data/docs/api/Brut/FrontEnd/Layout.html +2 -2
  159. data/docs/api/Brut/FrontEnd/Middleware.html +2 -2
  160. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +2 -2
  161. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +2 -2
  162. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +2 -2
  163. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +2 -2
  164. data/docs/api/Brut/FrontEnd/Middlewares.html +2 -2
  165. data/docs/api/Brut/FrontEnd/Page.html +2 -2
  166. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +2 -2
  167. data/docs/api/Brut/FrontEnd/Pages.html +2 -2
  168. data/docs/api/Brut/FrontEnd/RequestContext.html +2 -2
  169. data/docs/api/Brut/FrontEnd/RouteHook.html +2 -2
  170. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +2 -2
  171. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +2 -2
  172. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +2 -2
  173. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +2 -2
  174. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +2 -2
  175. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +2 -2
  176. data/docs/api/Brut/FrontEnd/RouteHooks.html +2 -2
  177. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +2 -2
  178. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +2 -2
  179. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +2 -2
  180. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +2 -2
  181. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +2 -2
  182. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +2 -2
  183. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +2 -2
  184. data/docs/api/Brut/FrontEnd/Routing/Route.html +2 -2
  185. data/docs/api/Brut/FrontEnd/Routing.html +2 -2
  186. data/docs/api/Brut/FrontEnd/Session.html +2 -2
  187. data/docs/api/Brut/FrontEnd.html +3 -3
  188. data/docs/api/Brut/I18n/BaseMethods.html +3 -3
  189. data/docs/api/Brut/I18n/ForBackEnd.html +2 -2
  190. data/docs/api/Brut/I18n/ForCLI.html +2 -2
  191. data/docs/api/Brut/I18n/ForHTML.html +2 -2
  192. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +2 -2
  193. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +2 -2
  194. data/docs/api/Brut/I18n.html +2 -2
  195. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +2 -2
  196. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +2 -2
  197. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +2 -2
  198. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +2 -2
  199. data/docs/api/Brut/Instrumentation.html +2 -2
  200. data/docs/api/Brut/RubocopConfig.html +237 -0
  201. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +2 -2
  202. data/docs/api/Brut/SinatraHelpers.html +2 -2
  203. data/docs/api/Brut/SpecSupport/ClockSupport.html +2 -2
  204. data/docs/api/Brut/SpecSupport/ComponentSupport.html +7 -13
  205. data/docs/api/Brut/SpecSupport/E2ETestServer.html +2 -2
  206. data/docs/api/Brut/SpecSupport/E2eSupport.html +2 -2
  207. data/docs/api/Brut/SpecSupport/EnhancedNode.html +2 -2
  208. data/docs/api/Brut/SpecSupport/FlashSupport.html +2 -2
  209. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +2 -2
  210. data/docs/api/Brut/SpecSupport/GeneralSupport.html +2 -2
  211. data/docs/api/Brut/SpecSupport/HandlerSupport.html +2 -2
  212. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +2 -2
  213. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +2 -2
  214. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +2 -2
  215. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +2 -2
  216. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +2 -2
  217. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +2 -2
  218. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +2 -2
  219. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +2 -2
  220. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +2 -2
  221. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +2 -2
  222. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +2 -2
  223. data/docs/api/Brut/SpecSupport/Matchers.html +2 -2
  224. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +2 -2
  225. data/docs/api/Brut/SpecSupport/RSpecSetup.html +4 -4
  226. data/docs/api/Brut/SpecSupport/SessionSupport.html +2 -2
  227. data/docs/api/Brut/SpecSupport.html +2 -2
  228. data/docs/api/Brut.html +128 -12
  229. data/docs/api/Clock.html +2 -2
  230. data/docs/api/ModuleName.html +28 -28
  231. data/docs/api/RichString.html +22 -22
  232. data/docs/api/SemanticLogger/Appender/Async.html +2 -2
  233. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +2 -2
  234. data/docs/api/Sequel/Extensions/BrutMigrations.html +2 -2
  235. data/docs/api/Sequel/Extensions.html +2 -2
  236. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +2 -2
  237. data/docs/api/Sequel/Plugins/CreatedAt.html +2 -2
  238. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +2 -2
  239. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +2 -2
  240. data/docs/api/Sequel/Plugins/ExternalId.html +2 -2
  241. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +2 -2
  242. data/docs/api/Sequel/Plugins/FindBang.html +2 -2
  243. data/docs/api/Sequel/Plugins.html +2 -2
  244. data/docs/api/Sequel.html +2 -2
  245. data/docs/api/_index.html +16 -2
  246. data/docs/api/class_list.html +1 -1
  247. data/docs/api/file.README.html +28 -2
  248. data/docs/api/index.html +28 -2
  249. data/docs/api/method_list.html +192 -168
  250. data/docs/api/top-level-namespace.html +2 -2
  251. data/docs/assets/{app.DyQLb4Ot.js → app.BuBdZoUg.js} +1 -1
  252. data/docs/assets/basic-form-with-violations.Cv6Y9-Q_.png +0 -0
  253. data/docs/assets/basic-form.DbHnu0oW.png +0 -0
  254. data/docs/assets/chunks/@localSearchIndexroot.BZ_a3X0T.js +1 -0
  255. data/docs/assets/chunks/{VPLocalSearchBox.T1iA-eJx.js → VPLocalSearchBox.UtnyvkX-.js} +1 -1
  256. data/docs/assets/chunks/{theme.ChwsbWjK.js → theme.DqwvuBEK.js} +2 -2
  257. data/docs/assets/{components.md.DHh-NwKs.js → components.md.Bu80E2Nr.js} +3 -3
  258. data/docs/assets/{configuration.md.D8Wz3oJU.js → configuration.md.CuIxVsSf.js} +1 -1
  259. data/docs/assets/{database-schema.md.C5gXexJi.js → database-schema.md.LpmBPVEU.js} +1 -1
  260. data/docs/assets/{forms.md.BRE85eju.js → forms.md.DnLbzVDa.js} +1 -1
  261. data/docs/assets/{getting-started.md.2ioiTe-B.js → getting-started.md.DdQLmU3C.js} +2 -2
  262. data/docs/assets/initial-home-page.DNIaYmgP.png +0 -0
  263. data/docs/assets/new-post-editor.DrHr-5oh.png +0 -0
  264. data/docs/assets/new-post-home-page.Bm34lyMg.png +0 -0
  265. data/docs/assets/{recipes_migrations.md.DPN3gQE3.js → recipes_migrations.md.CTcnWDJF.js} +1 -1
  266. data/docs/assets/styled-form-with-server-side-violations.Bjxd8Dpv.png +0 -0
  267. data/docs/assets/styled-form-with-violations.Bv_sa9tg.png +0 -0
  268. data/docs/assets/styled-home-page-with-posts.Dd4kG89D.png +0 -0
  269. data/docs/assets/styled-home-page.BzdI7dWz.png +0 -0
  270. data/docs/assets/tutorial.md.C4zR5XPG.js +728 -0
  271. data/docs/assets/tutorial.md.C4zR5XPG.lean.js +1 -0
  272. data/docs/assets/welcome-to-brut.VSWzl17-.png +0 -0
  273. data/docs/assets.html +3 -3
  274. data/docs/brut-js/api/AjaxSubmit.html +1 -1
  275. data/docs/brut-js/api/AjaxSubmit.js.html +1 -1
  276. data/docs/brut-js/api/Autosubmit.html +1 -1
  277. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  278. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  279. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  280. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  281. data/docs/brut-js/api/BufferedLogger.html +1 -1
  282. data/docs/brut-js/api/ConfirmSubmit.html +18 -10
  283. data/docs/brut-js/api/ConfirmSubmit.js.html +29 -8
  284. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  285. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  286. data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
  287. data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
  288. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  289. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  290. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  291. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  292. data/docs/brut-js/api/Form.html +1 -1
  293. data/docs/brut-js/api/Form.js.html +1 -1
  294. data/docs/brut-js/api/I18nTranslation.html +1 -1
  295. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  296. data/docs/brut-js/api/LocaleDetection.html +1 -1
  297. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  298. data/docs/brut-js/api/Logger.html +1 -1
  299. data/docs/brut-js/api/Logger.js.html +1 -1
  300. data/docs/brut-js/api/Message.html +1 -1
  301. data/docs/brut-js/api/Message.js.html +1 -1
  302. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  303. data/docs/brut-js/api/RichString.html +1 -1
  304. data/docs/brut-js/api/RichString.js.html +1 -1
  305. data/docs/brut-js/api/Tabs.html +1 -1
  306. data/docs/brut-js/api/Tabs.js.html +1 -1
  307. data/docs/brut-js/api/Tracing.html +1 -1
  308. data/docs/brut-js/api/Tracing.js.html +1 -1
  309. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  310. data/docs/brut-js/api/external-Performance.html +1 -1
  311. data/docs/brut-js/api/external-Promise.html +1 -1
  312. data/docs/brut-js/api/external-ValidityState.html +1 -1
  313. data/docs/brut-js/api/external-Window.html +1 -1
  314. data/docs/brut-js/api/external-fetch.html +1 -1
  315. data/docs/brut-js/api/global.html +1 -1
  316. data/docs/brut-js/api/index.html +1 -1
  317. data/docs/brut-js/api/index.js.html +1 -1
  318. data/docs/brut-js/api/module-testing.html +1 -1
  319. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  320. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  321. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  322. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  323. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  324. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  325. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  326. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  327. data/docs/brut-js/api/testing_index.js.html +1 -1
  328. data/docs/brut-js.html +3 -3
  329. data/docs/business-logic.html +3 -3
  330. data/docs/cli.html +3 -3
  331. data/docs/components.html +7 -7
  332. data/docs/configuration.html +5 -5
  333. data/docs/css.html +3 -3
  334. data/docs/custom-element-tests.html +3 -3
  335. data/docs/database-access.html +3 -3
  336. data/docs/database-schema.html +5 -5
  337. data/docs/deployment.html +3 -3
  338. data/docs/dev-environment.html +3 -3
  339. data/docs/dir-structure.html +3 -3
  340. data/docs/doc-conventions.html +3 -3
  341. data/docs/end-to-end-tests.html +3 -3
  342. data/docs/features.html +3 -3
  343. data/docs/flash-and-session.html +3 -3
  344. data/docs/form-constraints.html +3 -3
  345. data/docs/forms.html +5 -5
  346. data/docs/getting-started.html +6 -6
  347. data/docs/handlers.html +3 -3
  348. data/docs/hashmap.json +1 -1
  349. data/docs/hooks.html +3 -3
  350. data/docs/i18n.html +3 -3
  351. data/docs/index.html +3 -3
  352. data/docs/instrumentation.html +3 -3
  353. data/docs/javascript.html +3 -3
  354. data/docs/jobs.html +3 -3
  355. data/docs/keyword-injection.html +3 -3
  356. data/docs/layouts.html +3 -3
  357. data/docs/lsp.html +3 -3
  358. data/docs/markdown-examples.html +3 -3
  359. data/docs/middleware.html +3 -3
  360. data/docs/overview.html +3 -3
  361. data/docs/pages.html +3 -3
  362. data/docs/recipes/alternate-layouts.html +3 -3
  363. data/docs/recipes/authentication.html +3 -3
  364. data/docs/recipes/blank-layouts.html +3 -3
  365. data/docs/recipes/custom-flash.html +3 -3
  366. data/docs/recipes/indexed-forms.html +3 -3
  367. data/docs/recipes/migrations.html +5 -5
  368. data/docs/recipes/text-field-component.html +3 -3
  369. data/docs/roadmap.html +3 -3
  370. data/docs/routes.html +3 -3
  371. data/docs/security.html +3 -3
  372. data/docs/seed-data.html +3 -3
  373. data/docs/space-time-continuum.html +3 -3
  374. data/docs/tutorial.html +732 -5
  375. data/docs/unit-tests.html +3 -3
  376. data/docs/why.html +3 -3
  377. data/dx/build +45 -9
  378. data/lib/brut/cli/app.rb +1 -1
  379. data/lib/brut/cli/apps/heroku_container_based_deploy.rb +1 -1
  380. data/lib/brut/cli/apps/scaffold.rb +1 -1
  381. data/lib/brut/cli/options.rb +4 -0
  382. data/lib/brut/factory_bot.rb +1 -1
  383. data/lib/brut/framework/app.rb +1 -1
  384. data/lib/brut/framework/config.rb +18 -12
  385. data/lib/brut/framework/mcp.rb +12 -7
  386. data/lib/brut/front_end/csrf_protector.rb +30 -0
  387. data/lib/brut/front_end/form.rb +4 -4
  388. data/lib/brut/front_end/page.rb +1 -1
  389. data/lib/brut/front_end/routing.rb +1 -1
  390. data/lib/brut/front_end.rb +1 -0
  391. data/lib/brut/i18n/base_methods.rb +1 -1
  392. data/lib/brut/instrumentation/logger_span_exporter.rb +1 -1
  393. data/lib/brut/junk_drawer.rb +3 -1
  394. data/lib/brut/rubocop_config.rb +123 -0
  395. data/lib/brut/spec_support/component_support.rb +0 -3
  396. data/lib/brut/spec_support/rspec_setup.rb +2 -2
  397. data/lib/brut/version.rb +1 -1
  398. data/mkbrut/Gemfile.lock +1 -1
  399. data/mkbrut/dx +1 -0
  400. data/mkbrut/lib/mkbrut/app.rb +1 -1
  401. data/mkbrut/lib/mkbrut/cli.rb +1 -1
  402. data/mkbrut/lib/mkbrut/segments/heroku.rb +1 -1
  403. data/mkbrut/lib/mkbrut/version.rb +1 -1
  404. data/mkbrut/mkbrut.gemspec +3 -1
  405. data/mkbrut/templates/Base/app/config/i18n/en/1_defaults.rb +2 -2
  406. data/mkbrut/templates/Base/app/config/i18n/en/2_app.rb +1 -1
  407. data/mkbrut/templates/Base/bin/setup +1 -1
  408. data/mkbrut/templates/segments/Demo/app/src/front_end/components/flash_component.rb +1 -1
  409. data/specs/brut/junk_drawer.spec.rb +4 -0
  410. metadata +92 -35
  411. data/.rspec +0 -3
  412. data/docs/assets/chunks/@localSearchIndexroot.CmtZyrFA.js +0 -1
  413. data/docs/assets/tutorial.md.BIb7XT6j.js +0 -1
  414. data/docs/assets/tutorial.md.BIb7XT6j.lean.js +0 -1
  415. /data/docs/assets/{components.md.DHh-NwKs.lean.js → components.md.Bu80E2Nr.lean.js} +0 -0
  416. /data/docs/assets/{configuration.md.D8Wz3oJU.lean.js → configuration.md.CuIxVsSf.lean.js} +0 -0
  417. /data/docs/assets/{database-schema.md.C5gXexJi.lean.js → database-schema.md.LpmBPVEU.lean.js} +0 -0
  418. /data/docs/assets/{forms.md.BRE85eju.lean.js → forms.md.DnLbzVDa.lean.js} +0 -0
  419. /data/docs/assets/{getting-started.md.2ioiTe-B.lean.js → getting-started.md.DdQLmU3C.lean.js} +0 -0
  420. /data/docs/assets/{recipes_migrations.md.DPN3gQE3.lean.js → recipes_migrations.md.CTcnWDJF.lean.js} +0 -0
@@ -689,9 +689,9 @@ it's intended to be piped into another app.</p>
689
689
  </div>
690
690
 
691
691
  <div id="footer">
692
- Generated on Mon Jul 21 18:28:17 2025 by
692
+ Generated on Tue Aug 12 16:58:16 2025 by
693
693
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
694
- 0.9.37 (ruby-3.4.4).
694
+ 0.9.37 (ruby-3.4.5).
695
695
  </div>
696
696
 
697
697
  </div>
@@ -441,9 +441,9 @@
441
441
  </div>
442
442
 
443
443
  <div id="footer">
444
- Generated on Mon Jul 21 18:28:17 2025 by
444
+ Generated on Tue Aug 12 16:58:16 2025 by
445
445
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
446
- 0.9.37 (ruby-3.4.4).
446
+ 0.9.37 (ruby-3.4.5).
447
447
  </div>
448
448
 
449
449
  </div>
@@ -253,9 +253,9 @@ it via <code>bin/clean-files</code>, you'd create <code>bin/clean-files</code> l
253
253
  </div>
254
254
 
255
255
  <div id="footer">
256
- Generated on Mon Jul 21 18:28:17 2025 by
256
+ Generated on Tue Aug 12 16:58:16 2025 by
257
257
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
258
- 0.9.37 (ruby-3.4.4).
258
+ 0.9.37 (ruby-3.4.5).
259
259
  </div>
260
260
 
261
261
  </div>
@@ -198,7 +198,7 @@
198
198
  <span class='kw'>def</span> <span class='id identifier rubyid_setup!'>setup!</span>
199
199
  <span class='const'>Faker</span><span class='op'>::</span><span class='const'>Config</span><span class='period'>.</span><span class='id identifier rubyid_locale'>locale</span> <span class='op'>=</span> <span class='symbol'>:en</span>
200
200
  <span class='const'><span class='object_link'><a href="" title="Brut::FactoryBot (class)">FactoryBot</a></span></span><span class='period'>.</span><span class='id identifier rubyid_definition_file_paths'>definition_file_paths</span> <span class='op'>=</span> <span class='lbracket'>[</span>
201
- <span class='const'><span class='object_link'><a href="../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_app_specs_dir'>app_specs_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>factories</span><span class='tstring_end'>&quot;</span></span>
201
+ <span class='const'><span class='object_link'><a href="../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_app_specs_dir'>app_specs_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>factories</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
202
202
  <span class='rbracket'>]</span>
203
203
  <span class='const'><span class='object_link'><a href="" title="Brut::FactoryBot (class)">FactoryBot</a></span></span><span class='period'>.</span><span class='id identifier rubyid_define'>define</span> <span class='kw'>do</span>
204
204
  <span class='id identifier rubyid_to_create'>to_create</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_instance'>instance</span><span class='op'>|</span> <span class='id identifier rubyid_instance'>instance</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span> <span class='rbrace'>}</span>
@@ -215,9 +215,9 @@
215
215
  </div>
216
216
 
217
217
  <div id="footer">
218
- Generated on Mon Jul 21 18:28:17 2025 by
218
+ Generated on Tue Aug 12 16:58:16 2025 by
219
219
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
220
- 0.9.37 (ruby-3.4.4).
220
+ 0.9.37 (ruby-3.4.5).
221
221
  </div>
222
222
 
223
223
  </div>
@@ -749,7 +749,7 @@ not <code>nil</code>, this value is highly likely to be 500.</p>
749
749
  <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Your error handler block may only accept exception: and http_status_code: as required keyword parameters. The following parameters were found:\n </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_messages'>messages</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\n </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
750
750
  <span class='kw'>end</span>
751
751
  <span class='kw'>if</span> <span class='ivar'>@error_blocks</span><span class='lbracket'>[</span><span class='id identifier rubyid_condition'>condition</span><span class='rbracket'>]</span>
752
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You have already configured error handling for condition &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_condition'>condition</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;</span><span class='tstring_end'>&quot;</span></span>
752
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You have already configured error handling for condition &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_condition'>condition</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;</span><span class='tstring_end'>&quot;</span></span>
753
753
  <span class='kw'>end</span>
754
754
  <span class='ivar'>@error_blocks</span><span class='lbracket'>[</span><span class='id identifier rubyid_condition'>condition</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_block'>block</span>
755
755
  <span class='kw'>end</span></pre>
@@ -1087,9 +1087,9 @@ actions where an app needs to exist inside some organizational context.</p>
1087
1087
  </div>
1088
1088
 
1089
1089
  <div id="footer">
1090
- Generated on Mon Jul 21 18:28:17 2025 by
1090
+ Generated on Tue Aug 12 16:58:16 2025 by
1091
1091
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1092
- 0.9.37 (ruby-3.4.4).
1092
+ 0.9.37 (ruby-3.4.5).
1093
1093
  </div>
1094
1094
 
1095
1095
  </div>
@@ -609,7 +609,13 @@ connection to your database.</p>
609
609
  433
610
610
  434
611
611
  435
612
- 436</pre>
612
+ 436
613
+ 437
614
+ 438
615
+ 439
616
+ 440
617
+ 441
618
+ 442</pre>
613
619
  </td>
614
620
  <td>
615
621
  <pre class="code"><span class="info file"># File 'lib/brut/framework/config.rb', line 12</span>
@@ -924,25 +930,31 @@ connection to your database.</p>
924
930
  <span class='label'>allow_app_override:</span> <span class='kw'>true</span><span class='comma'>,</span>
925
931
  <span class='rparen'>)</span>
926
932
 
933
+ <span class='id identifier rubyid_c'>c</span><span class='period'>.</span><span class='id identifier rubyid_store'>store</span><span class='lparen'>(</span>
934
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>csrf_protector</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
935
+ <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd.html" title="Brut::FrontEnd (module)">FrontEnd</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd/CsrfProtector.html" title="Brut::FrontEnd::CsrfProtector (class)">CsrfProtector</a></span></span><span class='comma'>,</span>
936
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Object to allow custom logic related to CSRF protection</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
937
+ <span class='label'>allow_app_override:</span> <span class='kw'>true</span>
938
+ <span class='rparen'>)</span> <span class='kw'>do</span>
939
+ <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd.html" title="Brut::FrontEnd (module)">FrontEnd</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd/CsrfProtector.html" title="Brut::FrontEnd::CsrfProtector (class)">CsrfProtector</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
940
+ <span class='kw'>end</span>
941
+
927
942
  <span class='id identifier rubyid_c'>c</span><span class='period'>.</span><span class='id identifier rubyid_store'>store</span><span class='lparen'>(</span>
928
943
  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>semantic_logger_appenders</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
929
944
  <span class='lbrace'>{</span> <span class='const'>Hash</span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>if only one appender is needed</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='const'>Array</span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>to configure multiple appenders</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
930
945
  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>List of appenders to be configured for SemanticLogger</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
931
946
  <span class='label'>allow_app_override:</span> <span class='kw'>true</span>
932
947
  <span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_project_env'>project_env</span><span class='comma'>,</span><span class='id identifier rubyid_log_dir'>log_dir</span><span class='op'>|</span>
933
- <span class='id identifier rubyid_appenders'>appenders</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='id identifier rubyid_project_env'>project_env</span><span class='period'>.</span><span class='id identifier rubyid_development?'>development?</span>
934
- <span class='lbracket'>[</span>
935
- <span class='lbrace'>{</span> <span class='label'>formatter:</span> <span class='symbol'>:color</span><span class='comma'>,</span> <span class='label'>io:</span> <span class='gvar'>$stdout</span> <span class='rbrace'>}</span><span class='comma'>,</span>
936
- <span class='lbrace'>{</span> <span class='label'>file_name:</span> <span class='lparen'>(</span><span class='id identifier rubyid_log_dir'>log_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>development.log</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span><span class='comma'>,</span>
937
- <span class='rbracket'>]</span>
938
- <span class='kw'>end</span>
939
- <span class='kw'>if</span> <span class='id identifier rubyid_appenders'>appenders</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
940
- <span class='id identifier rubyid_appenders'>appenders</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>file_name:</span> <span class='lparen'>(</span><span class='id identifier rubyid_log_dir'>log_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_project_env'>project_env</span><span class='embexpr_end'>}</span><span class='tstring_content'>.log</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span>
941
- <span class='kw'>end</span>
942
- <span class='kw'>if</span> <span class='id identifier rubyid_appenders'>appenders</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
943
- <span class='id identifier rubyid_appenders'>appenders</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>io:</span> <span class='gvar'>$stdout</span> <span class='rbrace'>}</span>
948
+ <span class='kw'>if</span> <span class='id identifier rubyid_project_env'>project_env</span><span class='period'>.</span><span class='id identifier rubyid_development?'>development?</span>
949
+ <span class='lbracket'>[</span>
950
+ <span class='lbrace'>{</span> <span class='label'>formatter:</span> <span class='symbol'>:color</span><span class='comma'>,</span> <span class='label'>io:</span> <span class='gvar'>$stdout</span> <span class='rbrace'>}</span><span class='comma'>,</span>
951
+ <span class='lbrace'>{</span> <span class='label'>file_name:</span> <span class='lparen'>(</span><span class='id identifier rubyid_log_dir'>log_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>development.log</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span><span class='comma'>,</span>
952
+ <span class='rbracket'>]</span>
953
+ <span class='kw'>elsif</span> <span class='id identifier rubyid_project_env'>project_env</span><span class='period'>.</span><span class='id identifier rubyid_test?'>test?</span>
954
+ <span class='lbrace'>{</span> <span class='label'>file_name:</span> <span class='lparen'>(</span><span class='id identifier rubyid_log_dir'>log_dir</span> <span class='op'>/</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>test.log</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='rbrace'>}</span>
955
+ <span class='kw'>else</span>
956
+ <span class='lbrace'>{</span> <span class='label'>io:</span> <span class='gvar'>$stdout</span> <span class='rbrace'>}</span>
944
957
  <span class='kw'>end</span>
945
- <span class='id identifier rubyid_appenders'>appenders</span>
946
958
  <span class='kw'>end</span>
947
959
 
948
960
  <span class='id identifier rubyid_c'>c</span><span class='period'>.</span><span class='id identifier rubyid_store'>store</span><span class='lparen'>(</span>
@@ -1049,9 +1061,9 @@ connection to your database.</p>
1049
1061
  </div>
1050
1062
 
1051
1063
  <div id="footer">
1052
- Generated on Mon Jul 21 18:28:17 2025 by
1064
+ Generated on Tue Aug 12 16:58:17 2025 by
1053
1065
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1054
- 0.9.37 (ruby-3.4.4).
1066
+ 0.9.37 (ruby-3.4.5).
1055
1067
  </div>
1056
1068
 
1057
1069
  </div>
@@ -1450,9 +1450,9 @@ The names of the parameters must match the name of another configuration value.<
1450
1450
  </div>
1451
1451
 
1452
1452
  <div id="footer">
1453
- Generated on Mon Jul 21 18:28:18 2025 by
1453
+ Generated on Tue Aug 12 16:58:17 2025 by
1454
1454
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1455
- 0.9.37 (ruby-3.4.4).
1455
+ 0.9.37 (ruby-3.4.5).
1456
1456
  </div>
1457
1457
 
1458
1458
  </div>
@@ -130,9 +130,9 @@ for Brut-specific error conditions.</p>
130
130
  </div>
131
131
 
132
132
  <div id="footer">
133
- Generated on Mon Jul 21 18:28:17 2025 by
133
+ Generated on Tue Aug 12 16:58:17 2025 by
134
134
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
135
- 0.9.37 (ruby-3.4.4).
135
+ 0.9.37 (ruby-3.4.5).
136
136
  </div>
137
137
 
138
138
  </div>
@@ -222,9 +222,9 @@ makes sense.</p>
222
222
  </div>
223
223
 
224
224
  <div id="footer">
225
- Generated on Mon Jul 21 18:28:18 2025 by
225
+ Generated on Tue Aug 12 16:58:17 2025 by
226
226
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
227
- 0.9.37 (ruby-3.4.4).
227
+ 0.9.37 (ruby-3.4.5).
228
228
  </div>
229
229
 
230
230
  </div>
@@ -224,9 +224,9 @@ prevented</p>
224
224
  </div>
225
225
 
226
226
  <div id="footer">
227
- Generated on Mon Jul 21 18:28:18 2025 by
227
+ Generated on Tue Aug 12 16:58:17 2025 by
228
228
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
229
- 0.9.37 (ruby-3.4.4).
229
+ 0.9.37 (ruby-3.4.5).
230
230
  </div>
231
231
 
232
232
  </div>
@@ -247,9 +247,9 @@ have not been set.</p>
247
247
  </div>
248
248
 
249
249
  <div id="footer">
250
- Generated on Mon Jul 21 18:28:18 2025 by
250
+ Generated on Tue Aug 12 16:58:17 2025 by
251
251
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
252
- 0.9.37 (ruby-3.4.4).
252
+ 0.9.37 (ruby-3.4.5).
253
253
  </div>
254
254
 
255
255
  </div>
@@ -263,9 +263,9 @@ the one provided by standard library exceptions like <code>KeyError</code></p>
263
263
  </div>
264
264
 
265
265
  <div id="footer">
266
- Generated on Mon Jul 21 18:28:18 2025 by
266
+ Generated on Tue Aug 12 16:58:17 2025 by
267
267
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
268
- 0.9.37 (ruby-3.4.4).
268
+ 0.9.37 (ruby-3.4.5).
269
269
  </div>
270
270
 
271
271
  </div>
@@ -461,9 +461,9 @@
461
461
  </div>
462
462
 
463
463
  <div id="footer">
464
- Generated on Mon Jul 21 18:28:18 2025 by
464
+ Generated on Tue Aug 12 16:58:17 2025 by
465
465
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
466
- 0.9.37 (ruby-3.4.4).
466
+ 0.9.37 (ruby-3.4.5).
467
467
  </div>
468
468
 
469
469
  </div>
@@ -298,9 +298,9 @@
298
298
  </div>
299
299
 
300
300
  <div id="footer">
301
- Generated on Mon Jul 21 18:28:18 2025 by
301
+ Generated on Tue Aug 12 16:58:17 2025 by
302
302
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
303
- 0.9.37 (ruby-3.4.4).
303
+ 0.9.37 (ruby-3.4.5).
304
304
  </div>
305
305
 
306
306
  </div>
@@ -224,9 +224,9 @@ support the same features, but for technical reasons one of the APIs does not.</
224
224
  </div>
225
225
 
226
226
  <div id="footer">
227
- Generated on Mon Jul 21 18:28:18 2025 by
227
+ Generated on Tue Aug 12 16:58:17 2025 by
228
228
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
229
- 0.9.37 (ruby-3.4.4).
229
+ 0.9.37 (ruby-3.4.5).
230
230
  </div>
231
231
 
232
232
  </div>
@@ -341,9 +341,9 @@ state of the system is such that it would never be misused.</p>
341
341
  </div>
342
342
 
343
343
  <div id="footer">
344
- Generated on Mon Jul 21 18:28:17 2025 by
344
+ Generated on Tue Aug 12 16:58:16 2025 by
345
345
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
346
- 0.9.37 (ruby-3.4.4).
346
+ 0.9.37 (ruby-3.4.5).
347
347
  </div>
348
348
 
349
349
  </div>
@@ -382,9 +382,9 @@ For example, if you accept a string but know it should be a number, pass in <cod
382
382
  </div>
383
383
 
384
384
  <div id="footer">
385
- Generated on Mon Jul 21 18:28:17 2025 by
385
+ Generated on Tue Aug 12 16:58:16 2025 by
386
386
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
387
- 0.9.37 (ruby-3.4.4).
387
+ 0.9.37 (ruby-3.4.5).
388
388
  </div>
389
389
 
390
390
  </div>
@@ -618,7 +618,12 @@ to external resources.</p>
618
618
  286
619
619
  287
620
620
  288
621
- 289</pre>
621
+ 289
622
+ 290
623
+ 291
624
+ 292
625
+ 293
626
+ 294</pre>
622
627
  </td>
623
628
  <td>
624
629
  <pre class="code"><span class="info file"># File 'lib/brut/framework/mcp.rb', line 72</span>
@@ -685,9 +690,9 @@ to external resources.</p>
685
690
  <span class='label'>exception:</span> <span class='id identifier rubyid_ex'>ex</span><span class='rparen'>)</span>
686
691
  <span class='kw'>rescue</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_ex2'>ex2</span>
687
692
  <span class='gvar'>$stderr</span><span class='period'>.</span><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>While handling an error recording an exception, we get another error from SemanticLogger.</span><span class='tstring_end'>&quot;</span></span> <span class='op'>+</span> <span class='lbracket'>[</span>
688
- <span class='lbracket'>[</span> <span class='symbol'>:original_exception</span><span class='comma'>,</span> <span class='id identifier rubyid_exception'>exception</span><span class='comma'>,</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
689
- <span class='lbracket'>[</span> <span class='symbol'>:exception_from_recording_exception</span><span class='comma'>,</span> <span class='id identifier rubyid_ex'>ex</span><span class='comma'>,</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
690
- <span class='lbracket'>[</span> <span class='symbol'>:exception_from_semantic_logger</span><span class='comma'>,</span> <span class='id identifier rubyid_ex2'>ex2</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
693
+ <span class='lbracket'>[</span> <span class='symbol'>:original_exception</span><span class='comma'>,</span> <span class='id identifier rubyid_exception'>exception</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
694
+ <span class='lbracket'>[</span> <span class='symbol'>:exception_from_recording_exception</span><span class='comma'>,</span> <span class='id identifier rubyid_ex'>ex</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
695
+ <span class='lbracket'>[</span> <span class='symbol'>:exception_from_semantic_logger</span><span class='comma'>,</span> <span class='id identifier rubyid_ex2'>ex2</span> <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>: </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
691
696
 
692
697
  <span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>, </span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
693
698
  <span class='kw'>end</span>
@@ -728,7 +733,7 @@ to external resources.</p>
728
733
  <span class='kw'>end</span>
729
734
 
730
735
  <span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='kw'>if</span> <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_project_env'>project_env</span><span class='period'>.</span><span class='id identifier rubyid_development?'>development?</span>
731
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Form submission did not include an authenticity token. All forms must include one. To add one, use the `form_tag` helper, or include Brut::FrontEnd::Components::Inputs::CsrfToken somewhere inside your &lt;form&gt; tag</span><span class='tstring_end'>&quot;</span></span>
736
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Form submission did not include an authenticity token. All forms must include one. To add one, use the `Brut::FrontEnd::Components::FormTag` component, or include Brut::FrontEnd::Components::Inputs::CsrfToken somewhere inside your &lt;form&gt; tag</span><span class='tstring_end'>&quot;</span></span>
732
737
  <span class='kw'>else</span>
733
738
  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Forbidden</span><span class='tstring_end'>&quot;</span></span>
734
739
  <span class='kw'>end</span>
@@ -740,10 +745,15 @@ to external resources.</p>
740
745
  <span class='const'>Rack</span><span class='op'>::</span><span class='const'>Protection</span><span class='op'>::</span><span class='const'>AuthenticityToken</span><span class='comma'>,</span>
741
746
  <span class='lbracket'>[</span>
742
747
  <span class='lbrace'>{</span>
743
- <span class='label'>allow_if:</span> <span class='tlambda'>-&gt;</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span> <span class='tlambeg'>{</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>brut.owned_path</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='rbrace'>}</span><span class='comma'>,</span>
748
+ <span class='label'>allow_if:</span> <span class='tlambda'>-&gt;</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span> <span class='tlambeg'>{</span>
749
+ <span class='id identifier rubyid_brut_owned_path'>brut_owned_path</span> <span class='op'>=</span> <span class='id identifier rubyid_env'>env</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>brut.owned_path</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
750
+ <span class='id identifier rubyid_app_allowed'>app_allowed</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_csrf_protector'>csrf_protector</span><span class='period'>.</span><span class='id identifier rubyid_tap'>tap</span> <span class='lbrace'>{</span><span class='op'>|</span><span class='id identifier rubyid__'>_</span><span class='op'>|</span> <span class='id identifier rubyid_puts'>puts</span> <span class='id identifier rubyid__'>_</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_allowed?'>allowed?</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span>
751
+
752
+ <span class='id identifier rubyid_brut_owned_path'>brut_owned_path</span> <span class='op'>||</span> <span class='id identifier rubyid_app_allowed'>app_allowed</span>
753
+ <span class='rbrace'>}</span><span class='comma'>,</span>
744
754
  <span class='label'>message:</span> <span class='id identifier rubyid_message'>message</span><span class='comma'>,</span>
745
- <span class='rbrace'>}</span>
746
- <span class='rbracket'>]</span>
755
+ <span class='rbrace'>}</span><span class='comma'>,</span>
756
+ <span class='rbracket'>]</span><span class='comma'>,</span>
747
757
  <span class='rbracket'>]</span><span class='comma'>,</span>
748
758
  <span class='rbracket'>]</span>
749
759
  <span class='kw'>if</span> <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_auto_reload_classes?'>auto_reload_classes?</span>
@@ -829,7 +839,7 @@ to external resources.</p>
829
839
  <span class='kw'>in</span> <span class='const'>TrueClass</span>
830
840
  <span class='kw'>nil</span>
831
841
  <span class='kw'>else</span>
832
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>NoMatchingPatternError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Result from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_method'>method</span><span class='embexpr_end'>}</span><span class='tstring_content'> hook </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_klass'>klass</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;s </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_method'>method</span><span class='embexpr_end'>}</span><span class='tstring_content'> method was a </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'> (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_content'> as a string), which cannot be used to understand the response to generate. Return nil or true if processing should proceed</span><span class='tstring_end'>&quot;</span></span>
842
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>NoMatchingPatternError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Result from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_method'>method</span><span class='embexpr_end'>}</span><span class='tstring_content'> hook </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_klass'>klass</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;s </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_method'>method</span><span class='embexpr_end'>}</span><span class='tstring_content'> method was a </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'> (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_result'>result</span><span class='embexpr_end'>}</span><span class='tstring_content'> as a string), which cannot be used to understand the response to generate. Return nil or true if processing should proceed</span><span class='tstring_end'>&quot;</span></span>
833
843
  <span class='kw'>end</span>
834
844
  <span class='kw'>end</span>
835
845
  <span class='kw'>end</span>
@@ -851,9 +861,9 @@ to external resources.</p>
851
861
  </div>
852
862
 
853
863
  <div id="footer">
854
- Generated on Mon Jul 21 18:28:17 2025 by
864
+ Generated on Tue Aug 12 16:58:17 2025 by
855
865
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
856
- 0.9.37 (ruby-3.4.4).
866
+ 0.9.37 (ruby-3.4.5).
857
867
  </div>
858
868
 
859
869
  </div>
@@ -638,9 +638,9 @@ to the configuration values. But, you do you.</p>
638
638
  </div>
639
639
 
640
640
  <div id="footer">
641
- Generated on Mon Jul 21 18:28:18 2025 by
641
+ Generated on Tue Aug 12 16:58:17 2025 by
642
642
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
643
- 0.9.37 (ruby-3.4.4).
643
+ 0.9.37 (ruby-3.4.5).
644
644
  </div>
645
645
 
646
646
  </div>
@@ -119,9 +119,9 @@
119
119
  </div>
120
120
 
121
121
  <div id="footer">
122
- Generated on Mon Jul 21 18:28:17 2025 by
122
+ Generated on Tue Aug 12 16:58:16 2025 by
123
123
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
124
- 0.9.37 (ruby-3.4.4).
124
+ 0.9.37 (ruby-3.4.5).
125
125
  </div>
126
126
 
127
127
  </div>
@@ -307,9 +307,9 @@
307
307
  </div>
308
308
 
309
309
  <div id="footer">
310
- Generated on Mon Jul 21 18:28:18 2025 by
310
+ Generated on Tue Aug 12 16:58:17 2025 by
311
311
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
312
- 0.9.37 (ruby-3.4.4).
312
+ 0.9.37 (ruby-3.4.5).
313
313
  </div>
314
314
 
315
315
  </div>
@@ -410,9 +410,9 @@ looking</p>
410
410
  </div>
411
411
 
412
412
  <div id="footer">
413
- Generated on Mon Jul 21 18:28:17 2025 by
413
+ Generated on Tue Aug 12 16:58:16 2025 by
414
414
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
415
- 0.9.37 (ruby-3.4.4).
415
+ 0.9.37 (ruby-3.4.5).
416
416
  </div>
417
417
 
418
418
  </div>
@@ -424,9 +424,9 @@ method <span class='object_link'><a href="#component_name-class_method" title="B
424
424
  </div>
425
425
 
426
426
  <div id="footer">
427
- Generated on Mon Jul 21 18:28:18 2025 by
427
+ Generated on Tue Aug 12 16:58:17 2025 by
428
428
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
429
- 0.9.37 (ruby-3.4.4).
429
+ 0.9.37 (ruby-3.4.5).
430
430
  </div>
431
431
 
432
432
  </div>
@@ -460,9 +460,9 @@
460
460
  </div>
461
461
 
462
462
  <div id="footer">
463
- Generated on Mon Jul 21 18:28:18 2025 by
463
+ Generated on Tue Aug 12 16:58:18 2025 by
464
464
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
465
- 0.9.37 (ruby-3.4.4).
465
+ 0.9.37 (ruby-3.4.5).
466
466
  </div>
467
467
 
468
468
  </div>
@@ -425,10 +425,10 @@ If the form's action is GET, it will not.</p>
425
425
  <span class='id identifier rubyid_form_class'>form_class</span> <span class='op'>=</span> <span class='id identifier rubyid_form_class'>form_class</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span>
426
426
  <span class='kw'>end</span>
427
427
  <span class='kw'>if</span> <span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:action</span><span class='rbracket'>]</span>
428
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You cannot specify both for: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_form_class'>form_class</span><span class='embexpr_end'>}</span><span class='tstring_content'>) and and action: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:action</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>) to a form_tag</span><span class='tstring_end'>&quot;</span></span>
428
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You cannot specify both for: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_form_class'>form_class</span><span class='embexpr_end'>}</span><span class='tstring_content'>) and and action: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:action</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>) to </span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
429
429
  <span class='kw'>end</span>
430
430
  <span class='kw'>if</span> <span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:method</span><span class='rbracket'>]</span>
431
- <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You cannot specify both for: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_form_class'>form_class</span><span class='embexpr_end'>}</span><span class='tstring_content'>) and and method: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:method</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>) to a form_tag</span><span class='tstring_end'>&quot;</span></span>
431
+ <span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You cannot specify both for: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_form_class'>form_class</span><span class='embexpr_end'>}</span><span class='tstring_content'>) and and method: (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='lbracket'>[</span><span class='symbol'>:method</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>) to </span><span class='embexpr_beg'>#{</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
432
432
  <span class='kw'>end</span>
433
433
  <span class='kw'>begin</span>
434
434
  <span class='id identifier rubyid_route'>route</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_routing'>routing</span><span class='period'>.</span><span class='id identifier rubyid_route'>route</span><span class='lparen'>(</span><span class='id identifier rubyid_form_class'>form_class</span><span class='rparen'>)</span>
@@ -516,9 +516,9 @@ If the form's action is GET, it will not.</p>
516
516
  </div>
517
517
 
518
518
  <div id="footer">
519
- Generated on Mon Jul 21 18:28:18 2025 by
519
+ Generated on Tue Aug 12 16:58:17 2025 by
520
520
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
521
- 0.9.37 (ruby-3.4.4).
521
+ 0.9.37 (ruby-3.4.5).
522
522
  </div>
523
523
 
524
524
  </div>
@@ -303,9 +303,9 @@ client side <code>ValidityState</code> returns true for, say, <code>badInput</co
303
303
  </div>
304
304
 
305
305
  <div id="footer">
306
- Generated on Mon Jul 21 18:28:18 2025 by
306
+ Generated on Tue Aug 12 16:58:17 2025 by
307
307
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
308
- 0.9.37 (ruby-3.4.4).
308
+ 0.9.37 (ruby-3.4.5).
309
309
  </div>
310
310
 
311
311
  </div>
@@ -185,9 +185,9 @@
185
185
  </div>
186
186
 
187
187
  <div id="footer">
188
- Generated on Mon Jul 21 18:28:18 2025 by
188
+ Generated on Tue Aug 12 16:58:17 2025 by
189
189
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
190
- 0.9.37 (ruby-3.4.4).
190
+ 0.9.37 (ruby-3.4.5).
191
191
  </div>
192
192
 
193
193
  </div>
@@ -329,9 +329,9 @@ to use this directly if you are building a form without <span class='object_link
329
329
  </div>
330
330
 
331
331
  <div id="footer">
332
- Generated on Mon Jul 21 18:28:18 2025 by
332
+ Generated on Tue Aug 12 16:58:17 2025 by
333
333
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
334
- 0.9.37 (ruby-3.4.4).
334
+ 0.9.37 (ruby-3.4.5).
335
335
  </div>
336
336
 
337
337
  </div>