brut 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +15 -15
  4. data/assets/YouTubeThumb.pxd +0 -0
  5. data/bin/new-version +3 -3
  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/getting-started.md +3 -0
  11. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser-element-styled.png +0 -0
  12. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser-element.png +0 -0
  13. data/brutrb.com/images/tutorial/02-confirmation-dialog-browser.png +0 -0
  14. data/brutrb.com/images/tutorial/02-confirmation-flow.graffle +0 -0
  15. data/brutrb.com/images/tutorial/02-confirmation-flow.png +0 -0
  16. data/brutrb.com/instrumentation.md +142 -3
  17. data/brutrb.com/tutorial.md +29 -1627
  18. data/brutrb.com/tutorials/01-intro.md +1630 -0
  19. data/brutrb.com/tutorials/02-dialog.md +569 -0
  20. data/docs/404.html +2 -2
  21. data/docs/adrs.html +4 -4
  22. data/docs/ai.html +4 -4
  23. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  24. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  25. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  26. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  27. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  28. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  29. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  30. data/docs/api/Brut/BackEnd.html +1 -1
  31. data/docs/api/Brut/CLI/App.html +1 -1
  32. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  33. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
  34. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
  35. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
  36. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
  37. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  38. data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
  39. data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
  40. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
  41. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
  42. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
  43. data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
  45. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  46. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
  47. data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
  48. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
  50. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  51. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
  52. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
  53. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
  54. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +1 -1
  55. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
  56. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  58. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
  59. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  60. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
  61. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  62. data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
  63. data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
  64. data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
  65. data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
  66. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  67. data/docs/api/Brut/CLI/Apps.html +1 -1
  68. data/docs/api/Brut/CLI/Command.html +1 -1
  69. data/docs/api/Brut/CLI/Error.html +1 -1
  70. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  71. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  72. data/docs/api/Brut/CLI/Executor.html +1 -1
  73. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  74. data/docs/api/Brut/CLI/Options.html +1 -1
  75. data/docs/api/Brut/CLI/Output.html +1 -1
  76. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  77. data/docs/api/Brut/CLI.html +1 -1
  78. data/docs/api/Brut/FactoryBot.html +1 -1
  79. data/docs/api/Brut/Framework/App.html +1 -1
  80. data/docs/api/Brut/Framework/Config.html +1 -1
  81. data/docs/api/Brut/Framework/Container.html +1 -1
  82. data/docs/api/Brut/Framework/Error.html +1 -1
  83. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
  84. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  85. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  86. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  87. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  88. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  89. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  90. data/docs/api/Brut/Framework/Errors.html +1 -1
  91. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  92. data/docs/api/Brut/Framework/MCP.html +1 -1
  93. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  94. data/docs/api/Brut/Framework.html +1 -1
  95. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  96. data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
  97. data/docs/api/Brut/FrontEnd/Component.html +1 -1
  98. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +48 -27
  99. data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
  100. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  101. data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
  102. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  103. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +1 -1
  104. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
  105. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +1 -1
  106. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +1 -1
  107. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  108. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  109. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
  110. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  111. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  112. data/docs/api/Brut/FrontEnd/Components.html +1 -1
  113. data/docs/api/Brut/FrontEnd/CsrfProtector.html +1 -1
  114. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  115. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  116. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  117. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
  118. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
  122. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
  123. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
  124. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  127. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
  128. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  129. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  130. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  131. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  132. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  133. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  135. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  136. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  137. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  138. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  139. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  140. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  141. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Layout.html +1 -1
  143. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  145. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  146. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  147. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
  148. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  149. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  150. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  151. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  152. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  153. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  154. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  155. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  156. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  157. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  158. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  159. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  160. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  161. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  162. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  163. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  164. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  165. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  166. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  167. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  168. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  169. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  170. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  171. data/docs/api/Brut/FrontEnd.html +1 -1
  172. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  173. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  174. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  175. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  176. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  177. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  178. data/docs/api/Brut/I18n.html +1 -1
  179. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.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/02-confirmation-dialog-browser-element-styled.3NEGM20-.png +0 -0
  234. data/docs/assets/02-confirmation-dialog-browser-element.DPsf0xUW.png +0 -0
  235. data/docs/assets/02-confirmation-dialog-browser.DH8ALFO4.png +0 -0
  236. data/docs/assets/02-confirmation-flow.D9gZ0S5U.png +0 -0
  237. data/docs/assets/{app.vjGWMSnJ.js → app.0-aKXKdt.js} +1 -1
  238. data/docs/assets/chunks/@localSearchIndexroot.DPhqaz1b.js +1 -0
  239. data/docs/assets/chunks/{VPLocalSearchBox.C-ymMW2k.js → VPLocalSearchBox.CW-UBkNA.js} +1 -1
  240. data/docs/assets/chunks/{theme.pJUosGlI.js → theme.a6feKWJO.js} +2 -2
  241. data/docs/assets/{components.md.B543a3Lm.js → components.md.BzVRwegp.js} +3 -3
  242. data/docs/assets/{configuration.md.-foE_iVv.js → configuration.md.eM5wFVi5.js} +1 -1
  243. data/docs/assets/{form-constraints.md.DK5adCgM.js → form-constraints.md.KTv5cdR4.js} +6 -6
  244. data/docs/assets/{forms.md.D5-2rgHh.js → forms.md.B3BHvCV3.js} +1 -1
  245. data/docs/assets/{getting-started.md.Cd4XSZb_.js → getting-started.md.BgR0ZHsl.js} +6 -3
  246. data/docs/assets/{getting-started.md.Cd4XSZb_.lean.js → getting-started.md.BgR0ZHsl.lean.js} +1 -1
  247. data/docs/assets/recipes_form-errors.md.Bv5RCKqH.js +66 -0
  248. data/docs/assets/recipes_form-errors.md.Bv5RCKqH.lean.js +1 -0
  249. data/docs/assets/tutorial.md.BM40jnoq.js +27 -0
  250. data/docs/assets/tutorial.md.BM40jnoq.lean.js +1 -0
  251. data/docs/assets/{tutorial.md.C4zR5XPG.js → tutorials_01-intro.md.BXvYWcO9.js} +5 -25
  252. data/docs/assets/tutorials_01-intro.md.BXvYWcO9.lean.js +1 -0
  253. data/docs/assets/tutorials_02-dialog.md.CIeg8R--.js +274 -0
  254. data/docs/assets/tutorials_02-dialog.md.CIeg8R--.lean.js +1 -0
  255. data/docs/assets.html +4 -4
  256. data/docs/brut-js/api/AjaxSubmit.html +1 -1
  257. data/docs/brut-js/api/AjaxSubmit.js.html +1 -1
  258. data/docs/brut-js/api/Autosubmit.html +1 -1
  259. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  260. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  261. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  262. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  263. data/docs/brut-js/api/BufferedLogger.html +1 -1
  264. data/docs/brut-js/api/ConfirmSubmit.html +1 -1
  265. data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
  266. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  267. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  268. data/docs/brut-js/api/ConstraintViolationMessage.html +55 -5
  269. data/docs/brut-js/api/ConstraintViolationMessage.js.html +18 -3
  270. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  271. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  272. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  273. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  274. data/docs/brut-js/api/Form.html +7 -10
  275. data/docs/brut-js/api/Form.js.html +20 -24
  276. data/docs/brut-js/api/I18nTranslation.html +1 -1
  277. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  278. data/docs/brut-js/api/LocaleDetection.html +1 -1
  279. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  280. data/docs/brut-js/api/Logger.html +1 -1
  281. data/docs/brut-js/api/Logger.js.html +1 -1
  282. data/docs/brut-js/api/Message.html +1 -1
  283. data/docs/brut-js/api/Message.js.html +1 -1
  284. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  285. data/docs/brut-js/api/RichString.html +1 -1
  286. data/docs/brut-js/api/RichString.js.html +1 -1
  287. data/docs/brut-js/api/Tabs.html +1 -1
  288. data/docs/brut-js/api/Tabs.js.html +1 -1
  289. data/docs/brut-js/api/Tracing.html +1 -1
  290. data/docs/brut-js/api/Tracing.js.html +1 -1
  291. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  292. data/docs/brut-js/api/external-Performance.html +1 -1
  293. data/docs/brut-js/api/external-Promise.html +1 -1
  294. data/docs/brut-js/api/external-ValidityState.html +1 -1
  295. data/docs/brut-js/api/external-Window.html +1 -1
  296. data/docs/brut-js/api/external-fetch.html +1 -1
  297. data/docs/brut-js/api/global.html +1 -1
  298. data/docs/brut-js/api/index.html +1 -1
  299. data/docs/brut-js/api/index.js.html +1 -1
  300. data/docs/brut-js/api/module-testing.html +1 -1
  301. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  302. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  303. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  304. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  305. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  306. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  307. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  308. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  309. data/docs/brut-js/api/testing_index.js.html +1 -1
  310. data/docs/brut-js.html +4 -4
  311. data/docs/business-logic.html +4 -4
  312. data/docs/cli.html +4 -4
  313. data/docs/components.html +8 -8
  314. data/docs/configuration.html +5 -5
  315. data/docs/css.html +4 -4
  316. data/docs/custom-element-tests.html +4 -4
  317. data/docs/database-access.html +4 -4
  318. data/docs/database-schema.html +4 -4
  319. data/docs/deployment.html +4 -4
  320. data/docs/dev-environment.html +4 -4
  321. data/docs/dir-structure.html +4 -4
  322. data/docs/doc-conventions.html +4 -4
  323. data/docs/end-to-end-tests.html +4 -4
  324. data/docs/features.html +4 -4
  325. data/docs/flash-and-session.html +4 -4
  326. data/docs/form-constraints.html +11 -11
  327. data/docs/forms.html +6 -6
  328. data/docs/getting-started.html +10 -7
  329. data/docs/handlers.html +4 -4
  330. data/docs/hashmap.json +1 -1
  331. data/docs/hooks.html +4 -4
  332. data/docs/i18n.html +4 -4
  333. data/docs/index.html +3 -3
  334. data/docs/instrumentation.html +4 -4
  335. data/docs/javascript.html +4 -4
  336. data/docs/jobs.html +4 -4
  337. data/docs/keyword-injection.html +4 -4
  338. data/docs/layouts.html +4 -4
  339. data/docs/lsp.html +4 -4
  340. data/docs/markdown-examples.html +4 -4
  341. data/docs/middleware.html +4 -4
  342. data/docs/overview.html +4 -4
  343. data/docs/pages.html +4 -4
  344. data/docs/recipes/alternate-layouts.html +4 -4
  345. data/docs/recipes/authentication.html +5 -5
  346. data/docs/recipes/blank-layouts.html +4 -4
  347. data/docs/recipes/custom-flash.html +4 -4
  348. data/docs/recipes/form-errors.html +94 -0
  349. data/docs/recipes/indexed-forms.html +4 -4
  350. data/docs/recipes/migrations.html +5 -5
  351. data/docs/recipes/text-field-component.html +4 -4
  352. data/docs/roadmap.html +4 -4
  353. data/docs/routes.html +4 -4
  354. data/docs/security.html +4 -4
  355. data/docs/seed-data.html +4 -4
  356. data/docs/space-time-continuum.html +4 -4
  357. data/docs/tutorial.html +12 -713
  358. data/docs/tutorials/01-intro.html +736 -0
  359. data/docs/tutorials/02-dialog.html +302 -0
  360. data/docs/unit-tests.html +4 -4
  361. data/docs/why.html +4 -4
  362. data/lib/brut/instrumentation/methods.rb +153 -0
  363. data/lib/brut/instrumentation/open_telemetry.rb +1 -0
  364. data/lib/brut/instrumentation.rb +1 -0
  365. data/lib/brut/version.rb +1 -1
  366. data/mkbrut/Gemfile.lock +1 -1
  367. data/mkbrut/bin/publish +1 -1
  368. data/mkbrut/lib/mkbrut/version.rb +1 -1
  369. data/specs/brut/instrumentation/methods.spec.rb +399 -0
  370. metadata +39 -17
  371. data/docs/assets/chunks/@localSearchIndexroot.Dn1xGMv_.js +0 -1
  372. data/docs/assets/tutorial.md.C4zR5XPG.lean.js +0 -1
  373. /data/docs/assets/{components.md.B543a3Lm.lean.js → components.md.BzVRwegp.lean.js} +0 -0
  374. /data/docs/assets/{configuration.md.-foE_iVv.lean.js → configuration.md.eM5wFVi5.lean.js} +0 -0
  375. /data/docs/assets/{form-constraints.md.DK5adCgM.lean.js → form-constraints.md.KTv5cdR4.lean.js} +0 -0
  376. /data/docs/assets/{forms.md.D5-2rgHh.lean.js → forms.md.B3BHvCV3.lean.js} +0 -0
@@ -247,7 +247,7 @@ have not been set.</p>
247
247
  </div>
248
248
 
249
249
  <div id="footer">
250
- Generated on Fri Aug 15 19:48:41 2025 by
250
+ Generated on Fri Aug 15 22:12:02 2025 by
251
251
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
252
252
  0.9.37 (ruby-3.4.5).
253
253
  </div>
@@ -263,7 +263,7 @@ 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 Fri Aug 15 19:48:40 2025 by
266
+ Generated on Fri Aug 15 22:12:02 2025 by
267
267
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
268
268
  0.9.37 (ruby-3.4.5).
269
269
  </div>
@@ -461,7 +461,7 @@
461
461
  </div>
462
462
 
463
463
  <div id="footer">
464
- Generated on Fri Aug 15 19:48:40 2025 by
464
+ Generated on Fri Aug 15 22:12:02 2025 by
465
465
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
466
466
  0.9.37 (ruby-3.4.5).
467
467
  </div>
@@ -298,7 +298,7 @@
298
298
  </div>
299
299
 
300
300
  <div id="footer">
301
- Generated on Fri Aug 15 19:48:40 2025 by
301
+ Generated on Fri Aug 15 22:12:01 2025 by
302
302
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
303
303
  0.9.37 (ruby-3.4.5).
304
304
  </div>
@@ -224,7 +224,7 @@ 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 Fri Aug 15 19:48:40 2025 by
227
+ Generated on Fri Aug 15 22:12:02 2025 by
228
228
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
229
229
  0.9.37 (ruby-3.4.5).
230
230
  </div>
@@ -341,7 +341,7 @@ 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 Fri Aug 15 19:48:39 2025 by
344
+ Generated on Fri Aug 15 22:12:00 2025 by
345
345
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
346
346
  0.9.37 (ruby-3.4.5).
347
347
  </div>
@@ -382,7 +382,7 @@ 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 Fri Aug 15 19:48:39 2025 by
385
+ Generated on Fri Aug 15 22:12:00 2025 by
386
386
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
387
387
  0.9.37 (ruby-3.4.5).
388
388
  </div>
@@ -861,7 +861,7 @@ to external resources.</p>
861
861
  </div>
862
862
 
863
863
  <div id="footer">
864
- Generated on Fri Aug 15 19:48:40 2025 by
864
+ Generated on Fri Aug 15 22:12:01 2025 by
865
865
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
866
866
  0.9.37 (ruby-3.4.5).
867
867
  </div>
@@ -638,7 +638,7 @@ to the configuration values. But, you do you.</p>
638
638
  </div>
639
639
 
640
640
  <div id="footer">
641
- Generated on Fri Aug 15 19:48:40 2025 by
641
+ Generated on Fri Aug 15 22:12:01 2025 by
642
642
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
643
643
  0.9.37 (ruby-3.4.5).
644
644
  </div>
@@ -119,7 +119,7 @@
119
119
  </div>
120
120
 
121
121
  <div id="footer">
122
- Generated on Fri Aug 15 19:48:39 2025 by
122
+ Generated on Fri Aug 15 22:12:00 2025 by
123
123
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
124
124
  0.9.37 (ruby-3.4.5).
125
125
  </div>
@@ -307,7 +307,7 @@
307
307
  </div>
308
308
 
309
309
  <div id="footer">
310
- Generated on Fri Aug 15 19:48:40 2025 by
310
+ Generated on Fri Aug 15 22:12:01 2025 by
311
311
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
312
312
  0.9.37 (ruby-3.4.5).
313
313
  </div>
@@ -410,7 +410,7 @@ looking</p>
410
410
  </div>
411
411
 
412
412
  <div id="footer">
413
- Generated on Fri Aug 15 19:48:39 2025 by
413
+ Generated on Fri Aug 15 22:12:00 2025 by
414
414
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
415
415
  0.9.37 (ruby-3.4.5).
416
416
  </div>
@@ -424,7 +424,7 @@ 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 Fri Aug 15 19:48:40 2025 by
427
+ Generated on Fri Aug 15 22:12:01 2025 by
428
428
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
429
429
  0.9.37 (ruby-3.4.5).
430
430
  </div>
@@ -105,22 +105,31 @@
105
105
 
106
106
  <h2>Overview</h2><div class="docstring">
107
107
  <div class="discussion">
108
- <p>Renders the custom elements used to manage both client- and server-side constraint violations via the <code>&lt;brut-cv-messages&gt;</code> and <code>&lt;brut-cv&gt;</code> tags. Each constraint violation on the input's <span class='object_link'><a href="../Forms/ValidityState.html" title="Brut::FrontEnd::Forms::ValidityState (class)">Forms::ValidityState</a></span> will generate a <code>&lt;brut-cv server-side&gt;</code> tag that will contain the I18n translation of the violation's <span class='object_link'><a href="../Forms/ConstraintViolation.html#key-instance_method" title="Brut::FrontEnd::Forms::ConstraintViolation#key (method)">Forms::ConstraintViolation#key</a></span> prefixed with <code>"cv.ss"</code>.</p>
108
+ <p>Renders the custom elements used to manage both client- and server-side constraint violations via the <code>&lt;brut-cv-messages&gt;</code> and <code>&lt;brut-cv&gt;</code> tags. Each constraint violation on the input's <span class='object_link'><a href="../Forms/ValidityState.html" title="Brut::FrontEnd::Forms::ValidityState (class)">Forms::ValidityState</a></span> will generate a <code>&lt;brut-cv server-generated&gt;</code> tag that will contain the I18n translation of the violation's <span class='object_link'><a href="../Forms/ConstraintViolation.html#key-instance_method" title="Brut::FrontEnd::Forms::ConstraintViolation#key (method)">Forms::ConstraintViolation#key</a></span> prefixed with <code>"cv.cs"</code> or <code>"cv.ss"</code>.</p>
109
109
 
110
110
  <p>The general form of this component will be:</p>
111
111
 
112
112
  <pre class="code html"><code class="html">&lt;brut-cv-messages input-name=&quot;«input_name»&quot;&gt;
113
- &lt;brut-cv server-side&gt;
113
+ &lt;brut-cv server-generated client-side&gt;
114
114
  «message»
115
115
  &lt;/brut-cv&gt;
116
- &lt;brut-cv server-side&gt;
116
+ &lt;brut-cv server-generated server-side&gt;
117
117
  «message»
118
118
  &lt;/brut-cv&gt;
119
119
  &lt;!- ... -&gt;
120
120
  &lt;/brut-cv-messages&gt;
121
121
  </code></pre>
122
122
 
123
- <p>Note that if you are using <code>&lt;brut-form&gt;</code> then <code>&lt;brut-cv&gt;</code> elements will be inserted into the <code>&lt;brut-cv-messages&gt;</code> element, however they will not have the <code>server-side</code> attribute.</p>
123
+ <p>Notes:</p>
124
+
125
+ <ul>
126
+ <li>If the form is considered #<span class='object_link'><a href="../Form.html#new%3F-instance_method" title="Brut::FrontEnd::Form#new? (method)">Form#new?</a></span>, then the client-side constraint violations
127
+ will not be generated. This is to prevent a fresh form from being generated with a bunch of
128
+ errors already present.</li>
129
+ <li>If using <code>&lt;brut-form&gt;</code>, the <code>&lt;brut-cv-messages&gt;</code> element this generates will be where it inserts
130
+ client side constraint violations.</li>
131
+ </ul>
132
+
124
133
 
125
134
 
126
135
  </div>
@@ -361,17 +370,17 @@
361
370
  <pre class="lines">
362
371
 
363
372
 
364
- 26
365
- 27
366
- 28
367
- 29
368
- 30
369
- 31
370
373
  32
371
- 33</pre>
374
+ 33
375
+ 34
376
+ 35
377
+ 36
378
+ 37
379
+ 38
380
+ 39</pre>
372
381
  </td>
373
382
  <td>
374
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/constraint_violations.rb', line 26</span>
383
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/constraint_violations.rb', line 32</span>
375
384
 
376
385
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>form:</span><span class='comma'>,</span> <span class='label'>input_name:</span><span class='comma'>,</span> <span class='label'>index:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>message_html_attributes:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span>
377
386
  <span class='ivar'>@form</span> <span class='op'>=</span> <span class='id identifier rubyid_form'>form</span>
@@ -408,12 +417,6 @@
408
417
  <pre class="lines">
409
418
 
410
419
 
411
- 35
412
- 36
413
- 37
414
- 38
415
- 39
416
- 40
417
420
  41
418
421
  42
419
422
  43
@@ -426,10 +429,22 @@
426
429
  50
427
430
  51
428
431
  52
429
- 53</pre>
432
+ 53
433
+ 54
434
+ 55
435
+ 56
436
+ 57
437
+ 58
438
+ 59
439
+ 60
440
+ 61
441
+ 62
442
+ 63
443
+ 64
444
+ 65</pre>
430
445
  </td>
431
446
  <td>
432
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/constraint_violations.rb', line 35</span>
447
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/constraint_violations.rb', line 41</span>
433
448
 
434
449
  <span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
435
450
  <span class='id identifier rubyid_html_attributes'>html_attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span>
@@ -437,15 +452,21 @@
437
452
  <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='ivar'>@html_attributes</span><span class='rparen'>)</span>
438
453
 
439
454
  <span class='id identifier rubyid_message_html_attributes'>message_html_attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span>
440
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>server-side</span><span class='label_end'>&quot;:</span> <span class='kw'>true</span><span class='comma'>,</span>
455
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>server-generated</span><span class='label_end'>&quot;:</span> <span class='kw'>true</span><span class='comma'>,</span>
441
456
  <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='ivar'>@message_html_attributes</span><span class='rparen'>)</span>
442
457
 
443
458
  <span class='id identifier rubyid_brut_cv_messages'>brut_cv_messages</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span> <span class='kw'>do</span>
444
- <span class='ivar'>@form</span><span class='period'>.</span><span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='ivar'>@input_name</span><span class='comma'>,</span> <span class='label'>index:</span> <span class='ivar'>@index</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_validity_state'>validity_state</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_constraint'>constraint</span><span class='op'>|</span>
445
- <span class='op'>!</span><span class='id identifier rubyid_constraint'>constraint</span><span class='period'>.</span><span class='id identifier rubyid_client_side?'>client_side?</span>
446
- <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_constraint'>constraint</span><span class='op'>|</span>
447
- <span class='id identifier rubyid_brut_cv'>brut_cv</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_message_html_attributes'>message_html_attributes</span><span class='rparen'>)</span> <span class='kw'>do</span>
448
- <span class='id identifier rubyid_t'>t</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>cv.ss.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_constraint'>constraint</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_constraint'>constraint</span><span class='period'>.</span><span class='id identifier rubyid_context'>context</span><span class='rparen'>)</span>
459
+ <span class='ivar'>@form</span><span class='period'>.</span><span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='ivar'>@input_name</span><span class='comma'>,</span> <span class='label'>index:</span> <span class='ivar'>@index</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_validity_state'>validity_state</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_constraint'>constraint</span><span class='op'>|</span>
460
+ <span class='kw'>if</span> <span class='id identifier rubyid_constraint'>constraint</span><span class='period'>.</span><span class='id identifier rubyid_client_side?'>client_side?</span>
461
+ <span class='kw'>if</span> <span class='op'>!</span><span class='ivar'>@form</span><span class='period'>.</span><span class='id identifier rubyid_new?'>new?</span>
462
+ <span class='id identifier rubyid_brut_cv'>brut_cv</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_message_html_attributes'>message_html_attributes</span><span class='comma'>,</span> <span class='label'>client_side:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>do</span>
463
+ <span class='id identifier rubyid_t'>t</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>cv.cs.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_constraint'>constraint</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_constraint'>constraint</span><span class='period'>.</span><span class='id identifier rubyid_context'>context</span><span class='rparen'>)</span>
464
+ <span class='kw'>end</span>
465
+ <span class='kw'>end</span>
466
+ <span class='kw'>else</span>
467
+ <span class='id identifier rubyid_brut_cv'>brut_cv</span><span class='lparen'>(</span><span class='op'>**</span><span class='id identifier rubyid_message_html_attributes'>message_html_attributes</span><span class='comma'>,</span> <span class='label'>server_side:</span> <span class='kw'>true</span><span class='rparen'>)</span> <span class='kw'>do</span>
468
+ <span class='id identifier rubyid_t'>t</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>cv.ss.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_constraint'>constraint</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='op'>**</span><span class='id identifier rubyid_constraint'>constraint</span><span class='period'>.</span><span class='id identifier rubyid_context'>context</span><span class='rparen'>)</span>
469
+ <span class='kw'>end</span>
449
470
  <span class='kw'>end</span>
450
471
  <span class='kw'>end</span>
451
472
  <span class='kw'>end</span>
@@ -460,7 +481,7 @@
460
481
  </div>
461
482
 
462
483
  <div id="footer">
463
- Generated on Fri Aug 15 19:48:41 2025 by
484
+ Generated on Fri Aug 15 22:12:02 2025 by
464
485
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
465
486
  0.9.37 (ruby-3.4.5).
466
487
  </div>
@@ -516,7 +516,7 @@ If the form's action is GET, it will not.</p>
516
516
  </div>
517
517
 
518
518
  <div id="footer">
519
- Generated on Fri Aug 15 19:48:40 2025 by
519
+ Generated on Fri Aug 15 22:12:01 2025 by
520
520
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
521
521
  0.9.37 (ruby-3.4.5).
522
522
  </div>
@@ -303,7 +303,7 @@ 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 Fri Aug 15 19:48:41 2025 by
306
+ Generated on Fri Aug 15 22:12:02 2025 by
307
307
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
308
308
  0.9.37 (ruby-3.4.5).
309
309
  </div>
@@ -185,7 +185,7 @@
185
185
  </div>
186
186
 
187
187
  <div id="footer">
188
- Generated on Fri Aug 15 19:48:40 2025 by
188
+ Generated on Fri Aug 15 22:12:01 2025 by
189
189
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
190
190
  0.9.37 (ruby-3.4.5).
191
191
  </div>
@@ -329,7 +329,7 @@ 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 Fri Aug 15 19:48:41 2025 by
332
+ Generated on Fri Aug 15 22:12:02 2025 by
333
333
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
334
334
  0.9.37 (ruby-3.4.5).
335
335
  </div>
@@ -553,7 +553,7 @@ Generally, you want to use this method over the initializer.</p>
553
553
  </div>
554
554
 
555
555
  <div id="footer">
556
- Generated on Fri Aug 15 19:48:41 2025 by
556
+ Generated on Fri Aug 15 22:12:02 2025 by
557
557
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
558
558
  0.9.37 (ruby-3.4.5).
559
559
  </div>
@@ -409,7 +409,7 @@ method once for each radio button in the group.</p>
409
409
  </div>
410
410
 
411
411
  <div id="footer">
412
- Generated on Fri Aug 15 19:48:41 2025 by
412
+ Generated on Fri Aug 15 22:12:02 2025 by
413
413
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
414
414
  0.9.37 (ruby-3.4.5).
415
415
  </div>
@@ -601,7 +601,7 @@ to be used as the <code>value</code> attribute and option text content, respecti
601
601
  </div>
602
602
 
603
603
  <div id="footer">
604
- Generated on Fri Aug 15 19:48:41 2025 by
604
+ Generated on Fri Aug 15 22:12:02 2025 by
605
605
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
606
606
  0.9.37 (ruby-3.4.5).
607
607
  </div>
@@ -525,7 +525,7 @@ Generally, you want to use this method over the initializer.</p>
525
525
  </div>
526
526
 
527
527
  <div id="footer">
528
- Generated on Fri Aug 15 19:48:41 2025 by
528
+ Generated on Fri Aug 15 22:12:02 2025 by
529
529
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
530
530
  0.9.37 (ruby-3.4.5).
531
531
  </div>
@@ -115,7 +115,7 @@
115
115
  </div>
116
116
 
117
117
  <div id="footer">
118
- Generated on Fri Aug 15 19:48:39 2025 by
118
+ Generated on Fri Aug 15 22:12:00 2025 by
119
119
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
120
120
  0.9.37 (ruby-3.4.5).
121
121
  </div>
@@ -357,7 +357,7 @@ ask the browser to send it, or not.</p>
357
357
  </div>
358
358
 
359
359
  <div id="footer">
360
- Generated on Fri Aug 15 19:48:41 2025 by
360
+ Generated on Fri Aug 15 22:12:02 2025 by
361
361
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
362
362
  0.9.37 (ruby-3.4.5).
363
363
  </div>
@@ -326,7 +326,7 @@
326
326
  </div>
327
327
 
328
328
  <div id="footer">
329
- Generated on Fri Aug 15 19:48:40 2025 by
329
+ Generated on Fri Aug 15 22:12:02 2025 by
330
330
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
331
331
  0.9.37 (ruby-3.4.5).
332
332
  </div>
@@ -645,7 +645,7 @@ you would like to be accessible. If omitted, the tag's contents will be the for
645
645
  </div>
646
646
 
647
647
  <div id="footer">
648
- Generated on Fri Aug 15 19:48:40 2025 by
648
+ Generated on Fri Aug 15 22:12:01 2025 by
649
649
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
650
650
  0.9.37 (ruby-3.4.5).
651
651
  </div>
@@ -342,7 +342,7 @@
342
342
  </div>
343
343
 
344
344
  <div id="footer">
345
- Generated on Fri Aug 15 19:48:40 2025 by
345
+ Generated on Fri Aug 15 22:12:02 2025 by
346
346
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
347
347
  0.9.37 (ruby-3.4.5).
348
348
  </div>
@@ -146,7 +146,7 @@ end</code></pre>
146
146
  </div>
147
147
 
148
148
  <div id="footer">
149
- Generated on Fri Aug 15 19:48:39 2025 by
149
+ Generated on Fri Aug 15 22:12:00 2025 by
150
150
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
151
151
  0.9.37 (ruby-3.4.5).
152
152
  </div>
@@ -240,7 +240,7 @@ class App &lt; Brut::Framework::App
240
240
  </div>
241
241
 
242
242
  <div id="footer">
243
- Generated on Fri Aug 15 19:48:40 2025 by
243
+ Generated on Fri Aug 15 22:12:01 2025 by
244
244
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
245
245
  0.9.37 (ruby-3.4.5).
246
246
  </div>
@@ -457,7 +457,7 @@ download the same file mulitple times but you want to make each name different a
457
457
  </div>
458
458
 
459
459
  <div id="footer">
460
- Generated on Fri Aug 15 19:48:40 2025 by
460
+ Generated on Fri Aug 15 22:12:01 2025 by
461
461
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
462
462
  0.9.37 (ruby-3.4.5).
463
463
  </div>
@@ -1140,7 +1140,7 @@ flash from being more than 1 request old. This is usually sufficient for a hand
1140
1140
  </div>
1141
1141
 
1142
1142
  <div id="footer">
1143
- Generated on Fri Aug 15 19:48:40 2025 by
1143
+ Generated on Fri Aug 15 22:12:01 2025 by
1144
1144
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1145
1145
  0.9.37 (ruby-3.4.5).
1146
1146
  </div>
@@ -1217,7 +1217,7 @@ will be represented as a key in the resulting hash—only those keys that were p
1217
1217
  </div>
1218
1218
 
1219
1219
  <div id="footer">
1220
- Generated on Fri Aug 15 19:48:40 2025 by
1220
+ Generated on Fri Aug 15 22:12:01 2025 by
1221
1221
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1222
1222
  0.9.37 (ruby-3.4.5).
1223
1223
  </div>
@@ -580,7 +580,7 @@ form-related classes.</p>
580
580
  </div>
581
581
 
582
582
  <div id="footer">
583
- Generated on Fri Aug 15 19:48:41 2025 by
583
+ Generated on Fri Aug 15 22:12:02 2025 by
584
584
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
585
585
  0.9.37 (ruby-3.4.5).
586
586
  </div>
@@ -191,7 +191,7 @@
191
191
  </div>
192
192
 
193
193
  <div id="footer">
194
- Generated on Fri Aug 15 19:48:40 2025 by
194
+ Generated on Fri Aug 15 22:12:01 2025 by
195
195
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
196
196
  0.9.37 (ruby-3.4.5).
197
197
  </div>
@@ -525,7 +525,7 @@
525
525
  </div>
526
526
 
527
527
  <div id="footer">
528
- Generated on Fri Aug 15 19:48:40 2025 by
528
+ Generated on Fri Aug 15 22:12:01 2025 by
529
529
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
530
530
  0.9.37 (ruby-3.4.5).
531
531
  </div>
@@ -1553,7 +1553,7 @@ initializer</p>
1553
1553
  </div>
1554
1554
 
1555
1555
  <div id="footer">
1556
- Generated on Fri Aug 15 19:48:40 2025 by
1556
+ Generated on Fri Aug 15 22:12:01 2025 by
1557
1557
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1558
1558
  0.9.37 (ruby-3.4.5).
1559
1559
  </div>
@@ -537,7 +537,7 @@ Components::Inputs::Select</p>
537
537
  </div>
538
538
 
539
539
  <div id="footer">
540
- Generated on Fri Aug 15 19:48:39 2025 by
540
+ Generated on Fri Aug 15 22:12:00 2025 by
541
541
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
542
542
  0.9.37 (ruby-3.4.5).
543
543
  </div>
@@ -1318,7 +1318,7 @@ inputs. <code>nil</code> is allowed only if the input definition is not for an a
1318
1318
  </div>
1319
1319
 
1320
1320
  <div id="footer">
1321
- Generated on Fri Aug 15 19:48:40 2025 by
1321
+ Generated on Fri Aug 15 22:12:02 2025 by
1322
1322
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1323
1323
  0.9.37 (ruby-3.4.5).
1324
1324
  </div>
@@ -720,7 +720,7 @@ that <code>key</code> should not be a key used for client-side validations.</p>
720
720
  </div>
721
721
 
722
722
  <div id="footer">
723
- Generated on Fri Aug 15 19:48:41 2025 by
723
+ Generated on Fri Aug 15 22:12:02 2025 by
724
724
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
725
725
  0.9.37 (ruby-3.4.5).
726
726
  </div>
@@ -577,7 +577,7 @@ supported by the browser. Also note that arrays of radio button groups are not
577
577
  </div>
578
578
 
579
579
  <div id="footer">
580
- Generated on Fri Aug 15 19:48:41 2025 by
580
+ Generated on Fri Aug 15 22:12:02 2025 by
581
581
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
582
582
  0.9.37 (ruby-3.4.5).
583
583
  </div>
@@ -724,7 +724,7 @@ that <code>key</code> should not be a key used for client-side validations.</p>
724
724
  </div>
725
725
 
726
726
  <div id="footer">
727
- Generated on Fri Aug 15 19:48:40 2025 by
727
+ Generated on Fri Aug 15 22:12:01 2025 by
728
728
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
729
729
  0.9.37 (ruby-3.4.5).
730
730
  </div>
@@ -572,7 +572,7 @@ such as implementing a <span class='object_link'><a href="../../BackEnd/Validato
572
572
  </div>
573
573
 
574
574
  <div id="footer">
575
- Generated on Fri Aug 15 19:48:41 2025 by
575
+ Generated on Fri Aug 15 22:12:02 2025 by
576
576
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
577
577
  0.9.37 (ruby-3.4.5).
578
578
  </div>
@@ -649,7 +649,7 @@ on your use-case.</p>
649
649
  </div>
650
650
 
651
651
  <div id="footer">
652
- Generated on Fri Aug 15 19:48:40 2025 by
652
+ Generated on Fri Aug 15 22:12:01 2025 by
653
653
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
654
654
  0.9.37 (ruby-3.4.5).
655
655
  </div>
@@ -117,7 +117,7 @@
117
117
  </div>
118
118
 
119
119
  <div id="footer">
120
- Generated on Fri Aug 15 19:48:39 2025 by
120
+ Generated on Fri Aug 15 22:12:00 2025 by
121
121
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
122
122
  0.9.37 (ruby-3.4.5).
123
123
  </div>
@@ -367,7 +367,7 @@ something that responds to <code>each</code>.</p>
367
367
  </div>
368
368
 
369
369
  <div id="footer">
370
- Generated on Fri Aug 15 19:48:40 2025 by
370
+ Generated on Fri Aug 15 22:12:01 2025 by
371
371
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
372
372
  0.9.37 (ruby-3.4.5).
373
373
  </div>
@@ -432,7 +432,7 @@ returns is returned here.</p>
432
432
  </div>
433
433
 
434
434
  <div id="footer">
435
- Generated on Fri Aug 15 19:48:40 2025 by
435
+ Generated on Fri Aug 15 22:12:01 2025 by
436
436
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
437
437
  0.9.37 (ruby-3.4.5).
438
438
  </div>