brut 0.0.27 → 0.0.29

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 (411) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -0
  3. data/.projections.json +10 -0
  4. data/.rspec +3 -0
  5. data/Dockerfile.dx +32 -14
  6. data/Gemfile.lock +1 -1
  7. data/assets/Logo-Square.pxd +0 -0
  8. data/assets/LogoPylon.pxd +0 -0
  9. data/assets/LogoStop.pxd +0 -0
  10. data/assets/LogoTall.pxd +0 -0
  11. data/bin/docs +24 -2
  12. data/bin/rspec +27 -0
  13. data/bin/setup +3 -3
  14. data/brutrb.com/.vitepress/config.mjs +1 -0
  15. data/brutrb.com/.vitepress/theme/custom.css +7 -0
  16. data/brutrb.com/.vitepress/theme/style.css +26 -15
  17. data/brutrb.com/deployment.md +123 -45
  18. data/brutrb.com/dev-environment.md +6 -5
  19. data/brutrb.com/doc-conventions.md +1 -1
  20. data/brutrb.com/getting-started.md +64 -28
  21. data/brutrb.com/images/LogoPylon.png +0 -0
  22. data/brutrb.com/images/LogoSquare.png +0 -0
  23. data/brutrb.com/images/LogoStop.png +0 -0
  24. data/brutrb.com/images/LogoTall.png +0 -0
  25. data/brutrb.com/images/OverviewMetro.graffle +0 -0
  26. data/brutrb.com/images/OverviewMetro.png +0 -0
  27. data/brutrb.com/index.md +4 -3
  28. data/brutrb.com/instrumentation.md +12 -0
  29. data/brutrb.com/layouts.md +130 -0
  30. data/brutrb.com/overview.md +6 -6
  31. data/docker-compose.dx.yml +5 -2
  32. data/docs/404.html +3 -3
  33. data/docs/ai.html +6 -6
  34. data/docs/api/Brut/BackEnd/SeedData.html +1 -1
  35. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
  36. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
  37. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
  38. data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
  39. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
  40. data/docs/api/Brut/BackEnd/Validators.html +1 -1
  41. data/docs/api/Brut/BackEnd.html +1 -1
  42. data/docs/api/Brut/CLI/App.html +38 -13
  43. data/docs/api/Brut/CLI/AppRunner.html +1 -1
  44. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +2 -2
  45. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +2 -2
  46. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +2 -2
  47. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +2 -2
  48. data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
  49. data/docs/api/Brut/CLI/Apps/DB/Create.html +2 -2
  50. data/docs/api/Brut/CLI/Apps/DB/Drop.html +2 -2
  51. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +9 -3
  52. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +11 -11
  53. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +2 -2
  54. data/docs/api/Brut/CLI/Apps/DB/Seed.html +2 -2
  55. data/docs/api/Brut/CLI/Apps/DB/Status.html +12 -12
  56. data/docs/api/Brut/CLI/Apps/DB.html +1 -1
  57. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +270 -0
  58. data/docs/api/Brut/CLI/Apps/DeployBase.html +257 -0
  59. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +585 -0
  60. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +196 -0
  61. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
  62. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +2 -2
  63. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +2 -2
  64. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +2 -2
  65. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +2 -2
  66. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +2 -2
  67. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
  68. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +2 -2
  69. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
  70. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +2 -2
  71. data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
  72. data/docs/api/Brut/CLI/Apps/Test/Audit.html +12 -10
  73. data/docs/api/Brut/CLI/Apps/Test/E2e.html +8 -8
  74. data/docs/api/Brut/CLI/Apps/Test/JS.html +9 -9
  75. data/docs/api/Brut/CLI/Apps/Test/Run.html +18 -18
  76. data/docs/api/Brut/CLI/Apps/Test.html +1 -1
  77. data/docs/api/Brut/CLI/Apps.html +2 -2
  78. data/docs/api/Brut/CLI/Command.html +113 -28
  79. data/docs/api/Brut/CLI/Error.html +1 -1
  80. data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
  81. data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
  82. data/docs/api/Brut/CLI/Executor.html +169 -38
  83. data/docs/api/Brut/CLI/InvalidOption.html +1 -1
  84. data/docs/api/Brut/CLI/Options.html +68 -19
  85. data/docs/api/Brut/CLI/Output.html +1 -1
  86. data/docs/api/Brut/CLI/SystemExecError.html +1 -1
  87. data/docs/api/Brut/CLI.html +1 -1
  88. data/docs/api/Brut/FactoryBot.html +1 -1
  89. data/docs/api/Brut/Framework/App.html +1 -1
  90. data/docs/api/Brut/Framework/Config.html +1 -1
  91. data/docs/api/Brut/Framework/Container.html +110 -29
  92. data/docs/api/Brut/Framework/Error.html +1 -1
  93. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +89 -1
  94. data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
  95. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
  96. data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
  97. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
  98. data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
  99. data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
  100. data/docs/api/Brut/Framework/Errors.html +31 -8
  101. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
  102. data/docs/api/Brut/Framework/MCP.html +1 -1
  103. data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
  104. data/docs/api/Brut/Framework.html +1 -1
  105. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
  106. data/docs/api/Brut/FrontEnd/Component/Helpers.html +36 -26
  107. data/docs/api/Brut/FrontEnd/Component.html +7 -7
  108. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
  109. data/docs/api/Brut/FrontEnd/Components/FormTag.html +37 -29
  110. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
  111. data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
  112. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
  113. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +20 -117
  114. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +25 -23
  115. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +73 -380
  116. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +22 -138
  117. data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
  118. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
  119. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
  120. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
  121. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
  122. data/docs/api/Brut/FrontEnd/Components.html +23 -2
  123. data/docs/api/Brut/FrontEnd/Download.html +1 -1
  124. data/docs/api/Brut/FrontEnd/Flash.html +1 -1
  125. data/docs/api/Brut/FrontEnd/Form.html +1 -1
  126. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +24 -68
  127. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +201 -0
  128. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +535 -0
  129. data/docs/api/Brut/FrontEnd/Forms/Input.html +983 -35
  130. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +4 -4
  131. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +29 -19
  132. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +9 -3
  133. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
  134. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +9 -3
  135. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
  136. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +72 -22
  137. data/docs/api/Brut/FrontEnd/Forms.html +1 -1
  138. data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
  139. data/docs/api/Brut/FrontEnd/Handler.html +1 -1
  140. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
  141. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
  142. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
  143. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
  144. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
  145. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
  146. data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
  147. data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
  148. data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
  149. data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
  150. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
  151. data/docs/api/Brut/FrontEnd/Layout.html +1 -1
  152. data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
  153. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
  154. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
  155. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
  156. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +6 -2
  157. data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
  158. data/docs/api/Brut/FrontEnd/Page.html +1 -1
  159. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
  160. data/docs/api/Brut/FrontEnd/Pages.html +1 -1
  161. data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
  162. data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
  163. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
  164. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
  165. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
  166. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
  167. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
  168. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
  169. data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
  170. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
  171. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
  172. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
  173. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
  174. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
  175. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
  176. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
  177. data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
  178. data/docs/api/Brut/FrontEnd/Routing.html +1 -1
  179. data/docs/api/Brut/FrontEnd/Session.html +1 -1
  180. data/docs/api/Brut/FrontEnd.html +1 -1
  181. data/docs/api/Brut/I18n/BaseMethods.html +1 -1
  182. data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
  183. data/docs/api/Brut/I18n/ForCLI.html +1 -1
  184. data/docs/api/Brut/I18n/ForHTML.html +1 -1
  185. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
  186. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
  187. data/docs/api/Brut/I18n.html +1 -1
  188. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
  189. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
  190. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
  191. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
  192. data/docs/api/Brut/Instrumentation.html +1 -1
  193. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
  194. data/docs/api/Brut/SinatraHelpers.html +1 -1
  195. data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
  196. data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
  197. data/docs/api/Brut/SpecSupport/E2ETestServer.html +20 -20
  198. data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
  199. data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
  200. data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
  201. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
  202. data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
  203. data/docs/api/Brut/SpecSupport/HandlerSupport.html +2 -2
  204. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +142 -0
  205. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +142 -0
  206. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +155 -0
  207. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +55 -25
  208. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +149 -0
  209. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +46 -19
  210. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +149 -0
  211. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +149 -0
  212. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +165 -0
  213. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +158 -0
  214. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +156 -0
  215. data/docs/api/Brut/SpecSupport/Matchers.html +2 -2
  216. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +24 -24
  217. data/docs/api/Brut/SpecSupport/RSpecSetup.html +55 -20
  218. data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
  219. data/docs/api/Brut/SpecSupport.html +1 -1
  220. data/docs/api/Brut.html +1 -1
  221. data/docs/api/Clock.html +1 -1
  222. data/docs/api/RichString.html +1 -1
  223. data/docs/api/SemanticLogger/Appender/Async.html +1 -1
  224. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +5 -1
  225. data/docs/api/Sequel/Extensions/BrutMigrations.html +36 -28
  226. data/docs/api/Sequel/Extensions.html +1 -1
  227. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
  228. data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
  229. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
  230. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
  231. data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
  232. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
  233. data/docs/api/Sequel/Plugins/FindBang.html +1 -1
  234. data/docs/api/Sequel/Plugins.html +1 -1
  235. data/docs/api/Sequel.html +1 -1
  236. data/docs/api/SpecSupport/Matchers/BeABug.html +143 -0
  237. data/docs/api/_index.html +106 -1
  238. data/docs/api/class_list.html +1 -1
  239. data/docs/api/css/full_list.css +2 -1
  240. data/docs/api/css/style.css +14 -13
  241. data/docs/api/file.README.html +1 -1
  242. data/docs/api/index.html +1 -1
  243. data/docs/api/method_list.html +530 -330
  244. data/docs/api/top-level-namespace.html +1 -1
  245. data/docs/assets/LogoStop.X8x-4riz.png +0 -0
  246. data/docs/assets/OverviewMetro.DUS-5fUZ.png +0 -0
  247. data/docs/assets/{ai.md.tZrjP9im.js → ai.md._6HCDL6d.js} +1 -1
  248. data/docs/assets/ai.md._6HCDL6d.lean.js +1 -0
  249. data/docs/assets/{app.D_yaTITQ.js → app.BhrfSt68.js} +1 -1
  250. data/docs/assets/chunks/@localSearchIndexroot.CeRAdP1K.js +1 -0
  251. data/docs/assets/chunks/{VPLocalSearchBox.B2-ZzyTY.js → VPLocalSearchBox.Dpot_2H4.js} +1 -1
  252. data/docs/assets/chunks/{theme.CfGFVRvE.js → theme.N2SNVLgU.js} +2 -2
  253. data/docs/assets/{components.md.eCttGlN-.js → components.md.CRUMdRoN.js} +1 -1
  254. data/docs/assets/{configuration.md.BRriU0cL.js → configuration.md.LG-zIBww.js} +1 -1
  255. data/docs/assets/deployment.md.BLseERGV.js +48 -0
  256. data/docs/assets/deployment.md.BLseERGV.lean.js +1 -0
  257. data/docs/assets/{dev-environment.md.BNc8AYiK.js → dev-environment.md.GZv6xvi9.js} +1 -1
  258. data/docs/assets/doc-conventions.md.-kN3Xo5C.js +1 -0
  259. data/docs/assets/{doc-conventions.md.DCfRXXi-.lean.js → doc-conventions.md.-kN3Xo5C.lean.js} +1 -1
  260. data/docs/assets/{forms.md.CBTYQ_Cz.js → forms.md.B-koVgyw.js} +23 -23
  261. data/docs/assets/{forms.md.CBTYQ_Cz.lean.js → forms.md.B-koVgyw.lean.js} +1 -1
  262. data/docs/assets/getting-started.md.Dj0qtZI2.js +25 -0
  263. data/docs/assets/getting-started.md.Dj0qtZI2.lean.js +1 -0
  264. data/docs/assets/index.md.CuBB-BdM.js +1 -0
  265. data/docs/assets/index.md.CuBB-BdM.lean.js +1 -0
  266. data/docs/assets/{instrumentation.md.CL6ax7nT.js → instrumentation.md.a9Pjps4P.js} +2 -2
  267. data/docs/assets/{instrumentation.md.CL6ax7nT.lean.js → instrumentation.md.a9Pjps4P.lean.js} +1 -1
  268. data/docs/assets/layouts.md.cPnh3NId.js +51 -0
  269. data/docs/assets/layouts.md.cPnh3NId.lean.js +1 -0
  270. data/docs/assets/lsp.md.Bsu-f6VU.js +1 -0
  271. data/docs/assets/lsp.md.Bsu-f6VU.lean.js +1 -0
  272. data/docs/assets/{overview.md.CDalkuxV.js → overview.md.DVKRM8zl.js} +4 -4
  273. data/docs/assets/overview.md.DVKRM8zl.lean.js +1 -0
  274. data/docs/assets/recipes_authentication.md.CAsXf7hk.js +1 -0
  275. data/docs/assets/recipes_authentication.md.CAsXf7hk.lean.js +1 -0
  276. data/docs/assets/{style.D73IYGCX.css → style.B2o1L9eN.css} +1 -1
  277. data/docs/assets.html +5 -5
  278. data/docs/brut-js/api/AjaxSubmit.html +1 -1
  279. data/docs/brut-js/api/AjaxSubmit.js.html +1 -1
  280. data/docs/brut-js/api/Autosubmit.html +1 -1
  281. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  282. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  283. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  284. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  285. data/docs/brut-js/api/BufferedLogger.html +1 -1
  286. data/docs/brut-js/api/ConfirmSubmit.html +1 -1
  287. data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
  288. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  289. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  290. data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
  291. data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
  292. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  293. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  294. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  295. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  296. data/docs/brut-js/api/Form.html +1 -1
  297. data/docs/brut-js/api/Form.js.html +1 -1
  298. data/docs/brut-js/api/I18nTranslation.html +1 -1
  299. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  300. data/docs/brut-js/api/LocaleDetection.html +1 -1
  301. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  302. data/docs/brut-js/api/Logger.html +1 -1
  303. data/docs/brut-js/api/Logger.js.html +1 -1
  304. data/docs/brut-js/api/Message.html +1 -1
  305. data/docs/brut-js/api/Message.js.html +1 -1
  306. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  307. data/docs/brut-js/api/RichString.html +1 -1
  308. data/docs/brut-js/api/RichString.js.html +1 -1
  309. data/docs/brut-js/api/Tabs.html +1 -1
  310. data/docs/brut-js/api/Tabs.js.html +1 -1
  311. data/docs/brut-js/api/Tracing.html +1 -1
  312. data/docs/brut-js/api/Tracing.js.html +1 -1
  313. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  314. data/docs/brut-js/api/external-Performance.html +1 -1
  315. data/docs/brut-js/api/external-Promise.html +1 -1
  316. data/docs/brut-js/api/external-ValidityState.html +1 -1
  317. data/docs/brut-js/api/external-Window.html +1 -1
  318. data/docs/brut-js/api/external-fetch.html +1 -1
  319. data/docs/brut-js/api/global.html +1 -1
  320. data/docs/brut-js/api/index.html +1 -1
  321. data/docs/brut-js/api/index.js.html +1 -1
  322. data/docs/brut-js/api/module-testing.html +1 -1
  323. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  324. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  325. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  326. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  327. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  328. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  329. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  330. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  331. data/docs/brut-js/api/testing_index.js.html +1 -1
  332. data/docs/brut-js.html +5 -5
  333. data/docs/business-logic.html +5 -5
  334. data/docs/cli.html +5 -5
  335. data/docs/components.html +7 -7
  336. data/docs/configuration.html +6 -6
  337. data/docs/css.html +5 -5
  338. data/docs/custom-element-tests.html +5 -5
  339. data/docs/database-access.html +5 -5
  340. data/docs/database-schema.html +5 -5
  341. data/docs/deployment.html +53 -6
  342. data/docs/dev-environment.html +6 -6
  343. data/docs/doc-conventions.html +6 -6
  344. data/docs/end-to-end-tests.html +5 -5
  345. data/docs/flash-and-session.html +5 -5
  346. data/docs/forms.html +28 -28
  347. data/docs/getting-started.html +30 -7
  348. data/docs/handlers.html +5 -5
  349. data/docs/hashmap.json +1 -1
  350. data/docs/hooks.html +5 -5
  351. data/docs/i18n.html +5 -5
  352. data/docs/index.html +6 -6
  353. data/docs/instrumentation.html +6 -6
  354. data/docs/javascript.html +5 -5
  355. data/docs/jobs.html +5 -5
  356. data/docs/keyword-injection.html +5 -5
  357. data/docs/layouts.html +74 -0
  358. data/docs/lsp.html +24 -0
  359. data/docs/markdown-examples.html +5 -5
  360. data/docs/middleware.html +5 -5
  361. data/docs/not-released.html +5 -5
  362. data/docs/overview.html +9 -9
  363. data/docs/pages.html +6 -6
  364. data/docs/recipes/authentication.html +24 -0
  365. data/docs/routes.html +5 -5
  366. data/docs/security.html +5 -5
  367. data/docs/seed-data.html +5 -5
  368. data/docs/space-time-continuum.html +5 -5
  369. data/docs/tutorial.html +5 -5
  370. data/docs/unit-tests.html +5 -5
  371. data/dx/bash_customizations +7 -0
  372. data/dx/build +13 -2
  373. data/dx/docker-compose.env +1 -1
  374. data/dx/exec +25 -8
  375. data/lib/brut/cli/app.rb +7 -2
  376. data/lib/brut/cli/apps/deploy_base.rb +86 -0
  377. data/lib/brut/cli/apps/heroku_container_based_deploy.rb +194 -0
  378. data/lib/brut/cli/command.rb +7 -13
  379. data/lib/brut/cli/executor.rb +31 -5
  380. data/lib/brut/cli/options.rb +4 -0
  381. data/lib/brut/cli.rb +4 -3
  382. data/lib/brut/framework/container.rb +25 -7
  383. data/lib/brut/framework/errors/abstract_method.rb +7 -0
  384. data/lib/brut/framework/errors.rb +4 -2
  385. data/lib/brut/front_end/forms/input.rb +253 -20
  386. data/lib/brut/front_end/forms/input_definition.rb +15 -12
  387. data/lib/brut/front_end/middlewares/reload_app.rb +2 -0
  388. data/lib/brut/front_end.rb +1 -0
  389. data/lib/brut/spec_support/rspec_setup.rb +42 -2
  390. data/lib/brut/version.rb +1 -1
  391. data/lib/sequel/extensions/brut_instrumentation.rb +4 -0
  392. data/specs/brut/front_end/forms/input.spec.rb +978 -0
  393. data/specs/spec_helper.rb +27 -0
  394. data/specs/support/matchers/have_constraint_violation.rb +23 -0
  395. data/specs/support/matchers.rb +5 -0
  396. data/specs/support.rb +3 -0
  397. metadata +77 -29
  398. data/docs/assets/ai.md.tZrjP9im.lean.js +0 -1
  399. data/docs/assets/chunks/@localSearchIndexroot.BsN5i0Fi.js +0 -1
  400. data/docs/assets/deployment.md.Dbka4OTr.js +0 -1
  401. data/docs/assets/deployment.md.Dbka4OTr.lean.js +0 -1
  402. data/docs/assets/doc-conventions.md.DCfRXXi-.js +0 -1
  403. data/docs/assets/getting-started.md.Bz2s1Vjb.js +0 -2
  404. data/docs/assets/getting-started.md.Bz2s1Vjb.lean.js +0 -1
  405. data/docs/assets/index.md.B28EwVpq.js +0 -1
  406. data/docs/assets/index.md.B28EwVpq.lean.js +0 -1
  407. data/docs/assets/overview.Da81cB9R.png +0 -0
  408. data/docs/assets/overview.md.CDalkuxV.lean.js +0 -1
  409. /data/docs/assets/{components.md.eCttGlN-.lean.js → components.md.CRUMdRoN.lean.js} +0 -0
  410. /data/docs/assets/{configuration.md.BRriU0cL.lean.js → configuration.md.LG-zIBww.lean.js} +0 -0
  411. /data/docs/assets/{dev-environment.md.BNc8AYiK.lean.js → dev-environment.md.GZv6xvi9.lean.js} +0 -0
@@ -107,7 +107,7 @@
107
107
 
108
108
  <h2>Overview</h2><div class="docstring">
109
109
  <div class="discussion">
110
- <p>Generates an HTML <code>&lt;textarea&gt;</code> field.</p>
110
+ <p>Generates an HTML <code>&lt;textarea&gt;</code> field based on a form input.</p>
111
111
 
112
112
 
113
113
  </div>
@@ -123,38 +123,6 @@
123
123
 
124
124
 
125
125
 
126
- <h2>
127
- Class Method Summary
128
- <small><a href="#" class="summary_toggle">collapse</a></small>
129
- </h2>
130
-
131
- <ul class="summary">
132
-
133
- <li class="public ">
134
- <span class="summary_signature">
135
-
136
- <a href="#for_form_input-class_method" title="for_form_input (class method)">.<strong>for_form_input</strong>(form:, input_name:, index: nil, html_attributes: {}) &#x21d2; Object </a>
137
-
138
-
139
-
140
- </span>
141
-
142
-
143
-
144
-
145
-
146
-
147
-
148
-
149
-
150
- <span class="summary_desc"><div class='inline'><p>Creates the appropriate textarea for the given <span class='object_link'><a href="../../Form.html" title="Brut::FrontEnd::Form (class)">Form</a></span> and input name.</p>
151
- </div></span>
152
-
153
- </li>
154
-
155
-
156
- </ul>
157
-
158
126
  <h2>
159
127
  Instance Method Summary
160
128
  <small><a href="#" class="summary_toggle">collapse</a></small>
@@ -165,7 +133,7 @@
165
133
  <li class="public ">
166
134
  <span class="summary_signature">
167
135
 
168
- <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(attributes, value) &#x21d2; TextareaTag </a>
136
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(form:, input_name:, index: nil, **html_attributes) &#x21d2; TextareaTag </a>
169
137
 
170
138
 
171
139
 
@@ -181,7 +149,7 @@
181
149
 
182
150
 
183
151
 
184
- <span class="summary_desc"><div class='inline'><p>Create an instance.</p>
152
+ <span class="summary_desc"><div class='inline'><p>Creates the appropriate textarea for the given <span class='object_link'><a href="../../Form.html" title="Brut::FrontEnd::Form (class)">Form</a></span> and input name.</p>
185
153
  </div></span>
186
154
 
187
155
  </li>
@@ -304,90 +272,7 @@
304
272
  <div class="method_details first">
305
273
  <h3 class="signature first" id="initialize-instance_method">
306
274
 
307
- #<strong>initialize</strong>(attributes, value) &#x21d2; <tt><span class='object_link'><a href="" title="Brut::FrontEnd::Components::Inputs::TextareaTag (class)">TextareaTag</a></span></tt>
308
-
309
-
310
-
311
-
312
-
313
- </h3><div class="docstring">
314
- <div class="discussion">
315
- <p>Create an instance</p>
316
-
317
-
318
- </div>
319
- </div>
320
- <div class="tags">
321
- <p class="tag_title">Parameters:</p>
322
- <ul class="param">
323
-
324
- <li>
325
-
326
- <span class='name'>attributes</span>
327
-
328
-
329
- <span class='type'>(<tt>Hash</tt>)</span>
330
-
331
-
332
-
333
- &mdash;
334
- <div class='inline'><p>HTML attributes to put on the element.</p>
335
- </div>
336
-
337
- </li>
338
-
339
- <li>
340
-
341
- <span class='name'>value</span>
342
-
343
-
344
- <span class='type'>(<tt>String</tt>)</span>
345
-
346
-
347
-
348
- &mdash;
349
- <div class='inline'><p>the value to place inside the text area</p>
350
- </div>
351
-
352
- </li>
353
-
354
- </ul>
355
-
356
-
357
- </div><table class="source_code">
358
- <tr>
359
- <td>
360
- <pre class="lines">
361
-
362
-
363
- 44
364
- 45
365
- 46
366
- 47</pre>
367
- </td>
368
- <td>
369
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 44</span>
370
-
371
- <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
372
- <span class='ivar'>@attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_attributes'>attributes</span>
373
- <span class='ivar'>@value</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
374
- <span class='kw'>end</span></pre>
375
- </td>
376
- </tr>
377
- </table>
378
- </div>
379
-
380
- </div>
381
-
382
-
383
- <div id="class_method_details" class="method_details_list">
384
- <h2>Class Method Details</h2>
385
-
386
-
387
- <div class="method_details first">
388
- <h3 class="signature first" id="for_form_input-class_method">
389
-
390
- .<strong>for_form_input</strong>(form:, input_name:, index: nil, html_attributes: {}) &#x21d2; <tt>Object</tt>
275
+ #<strong>initialize</strong>(form:, input_name:, index: nil, **html_attributes) &#x21d2; <tt><span class='object_link'><a href="" title="Brut::FrontEnd::Components::Inputs::TextareaTag (class)">TextareaTag</a></span></tt>
391
276
 
392
277
 
393
278
 
@@ -460,8 +345,6 @@ Generally, you want to use this method over the initializer.</p>
460
345
  <span class='type'>(<tt>Hash</tt>)</span>
461
346
 
462
347
 
463
- <em class="default">(defaults to: <tt>{}</tt>)</em>
464
-
465
348
 
466
349
  &mdash;
467
350
  <div class='inline'><p>any additional HTML attributes to include on the <code>&lt;textarea&gt;</code> element.</p>
@@ -478,7 +361,6 @@ Generally, you want to use this method over the initializer.</p>
478
361
  <pre class="lines">
479
362
 
480
363
 
481
- 10
482
364
  11
483
365
  12
484
366
  13
@@ -507,12 +389,13 @@ Generally, you want to use this method over the initializer.</p>
507
389
  36
508
390
  37
509
391
  38
510
- 39</pre>
392
+ 39
393
+ 40</pre>
511
394
  </td>
512
395
  <td>
513
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 10</span>
396
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 11</span>
514
397
 
515
- <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_for_form_input'>for_form_input</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'>html_attributes:</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
398
+ <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='op'>**</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span>
516
399
  <span class='id identifier rubyid_html_attributes'>html_attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_key'>key</span><span class='comma'>,</span><span class='id identifier rubyid_value'>value</span><span class='op'>|</span> <span class='lbracket'>[</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span> <span class='rbracket'>]</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span>
517
400
  <span class='id identifier rubyid_default_html_attributes'>default_html_attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
518
401
 
@@ -539,15 +422,16 @@ Generally, you want to use this method over the initializer.</p>
539
422
  <span class='kw'>end</span>
540
423
  <span class='kw'>end</span>
541
424
  <span class='kw'>end</span>
542
- <span class='id identifier rubyid_value'>value</span> <span class='op'>=</span> <span class='id identifier rubyid_input'>input</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
543
- <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="../../Components.html" title="Brut::FrontEnd::Components (module)">Components</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Inputs.html" title="Brut::FrontEnd::Components::Inputs (module)">Inputs</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="Brut::FrontEnd::Components::Inputs::TextareaTag (class)">TextareaTag</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="#initialize-instance_method" title="Brut::FrontEnd::Components::Inputs::TextareaTag#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_default_html_attributes'>default_html_attributes</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
425
+ <span class='ivar'>@value</span> <span class='op'>=</span> <span class='id identifier rubyid_input'>input</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span>
426
+ <span class='ivar'>@attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_default_html_attributes'>default_html_attributes</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span>
544
427
  <span class='kw'>end</span></pre>
545
428
  </td>
546
429
  </tr>
547
430
  </table>
548
431
  </div>
549
-
550
- </div>
432
+
433
+ </div>
434
+
551
435
 
552
436
  <div id="instance_method_details" class="method_details_list">
553
437
  <h2>Instance Method Details</h2>
@@ -591,10 +475,10 @@ Generally, you want to use this method over the initializer.</p>
591
475
  <pre class="lines">
592
476
 
593
477
 
594
- 49</pre>
478
+ 42</pre>
595
479
  </td>
596
480
  <td>
597
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 49</span>
481
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 42</span>
598
482
 
599
483
  <span class='kw'>def</span> <span class='id identifier rubyid_invalid?'>invalid?</span> <span class='op'>=</span> <span class='ivar'>@attributes</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>data-invalid</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>true</span></pre>
600
484
  </td>
@@ -617,14 +501,14 @@ Generally, you want to use this method over the initializer.</p>
617
501
  <pre class="lines">
618
502
 
619
503
 
620
- 51
621
- 52
622
- 53
623
- 54
624
- 55</pre>
504
+ 44
505
+ 45
506
+ 46
507
+ 47
508
+ 48</pre>
625
509
  </td>
626
510
  <td>
627
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 51</span>
511
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/textarea_tag.rb', line 44</span>
628
512
 
629
513
  <span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
630
514
  <span class='id identifier rubyid_textarea'>textarea</span><span class='lparen'>(</span><span class='op'>**</span><span class='ivar'>@attributes</span><span class='rparen'>)</span> <span class='lbrace'>{</span>
@@ -641,7 +525,7 @@ Generally, you want to use this method over the initializer.</p>
641
525
  </div>
642
526
 
643
527
  <div id="footer">
644
- Generated on Wed Jun 25 22:57:21 2025 by
528
+ Generated on Fri Jul 4 21:27:28 2025 by
645
529
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
646
530
  0.9.37 (ruby-3.4.4).
647
531
  </div>
@@ -115,7 +115,7 @@
115
115
  </div>
116
116
 
117
117
  <div id="footer">
118
- Generated on Wed Jun 25 22:57:19 2025 by
118
+ Generated on Fri Jul 4 21:27:27 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.4).
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 Wed Jun 25 22:57:21 2025 by
360
+ Generated on Fri Jul 4 21:27:28 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.4).
363
363
  </div>
@@ -326,7 +326,7 @@
326
326
  </div>
327
327
 
328
328
  <div id="footer">
329
- Generated on Wed Jun 25 22:57:21 2025 by
329
+ Generated on Fri Jul 4 21:27:28 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.4).
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 Wed Jun 25 22:57:21 2025 by
648
+ Generated on Fri Jul 4 21:27:28 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.4).
651
651
  </div>
@@ -342,7 +342,7 @@
342
342
  </div>
343
343
 
344
344
  <div id="footer">
345
- Generated on Wed Jun 25 22:57:21 2025 by
345
+ Generated on Fri Jul 4 21:27:28 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.4).
348
348
  </div>
@@ -92,13 +92,34 @@
92
92
 
93
93
  <h2>Overview</h2><div class="docstring">
94
94
  <div class="discussion">
95
- <p>Components holds Brut-provided components that are of general use to any web app</p>
95
+ <p>Namespace for Brut-provided components that are of general use to any web app.
96
+ Also extends <a href="https://www.phlex.fun/components/kits.html"><code>Phlex:::Kit</code></a>, meaning
97
+ you can include this module in your pages and components to be able to
98
+ create Brut's components without <code>.new</code> or without the full classname:</p>
96
99
 
97
100
 
98
101
  </div>
99
102
  </div>
100
103
  <div class="tags">
101
104
 
105
+ <div class="examples">
106
+ <h4 class="tag_title">Examples:</h4>
107
+
108
+
109
+ <pre class="example code"><code>class AppPage &lt; Brut::FrontEnd::Page
110
+ include Brut::FrontEnd::Components
111
+ end
112
+
113
+ class HomePage &lt; AppPage
114
+ def page_template
115
+ h1 do
116
+ span { &quot;It&#39;s }
117
+ TimeTag(timestamp: Time.now)
118
+ end
119
+ end</code></pre>
120
+
121
+ </div>
122
+
102
123
 
103
124
  </div><h2>Defined Under Namespace</h2>
104
125
  <p class="children">
@@ -125,7 +146,7 @@
125
146
  </div>
126
147
 
127
148
  <div id="footer">
128
- Generated on Wed Jun 25 22:57:19 2025 by
149
+ Generated on Fri Jul 4 21:27:27 2025 by
129
150
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
130
151
  0.9.37 (ruby-3.4.4).
131
152
  </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 Wed Jun 25 22:57:20 2025 by
460
+ Generated on Fri Jul 4 21:27:28 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.4).
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 Wed Jun 25 22:57:20 2025 by
1143
+ Generated on Fri Jul 4 21:27:28 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.4).
1146
1146
  </div>
@@ -1147,7 +1147,7 @@ will be represented as a key in the resulting hash—only those keys that were p
1147
1147
  </div>
1148
1148
 
1149
1149
  <div id="footer">
1150
- Generated on Wed Jun 25 22:57:20 2025 by
1150
+ Generated on Fri Jul 4 21:27:28 2025 by
1151
1151
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
1152
1152
  0.9.37 (ruby-3.4.4).
1153
1153
  </div>
@@ -111,50 +111,6 @@ form-related classes.</p>
111
111
 
112
112
 
113
113
  </div>
114
-
115
- <h2>
116
- Constant Summary
117
- <small><a href="#" class="constants_summary_toggle">collapse</a></small>
118
- </h2>
119
-
120
- <dl class="constants">
121
-
122
- <dt id="CLIENT_SIDE_KEYS-constant" class="">CLIENT_SIDE_KEYS =
123
- <div class="docstring">
124
- <div class="discussion">
125
- <p>These are underscorized versions of the attributes of the browser's <code>ValidityState</code>'s properties.</p>
126
-
127
-
128
- </div>
129
- </div>
130
- <div class="tags">
131
-
132
-
133
- <p class="tag_title">See Also:</p>
134
- <ul class="see">
135
-
136
- <li><a href="https://developer.mozilla.org/en-US/docs/Web/API/ValidityState" target="_parent" title="https://developer.mozilla.org/en-US/docs/Web/API/ValidityState">https://developer.mozilla.org/en-US/docs/Web/API/ValidityState</a></li>
137
-
138
- </ul>
139
-
140
- </div>
141
- </dt>
142
- <dd><pre class="code"><span class='lbracket'>[</span>
143
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>bad_input</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
144
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>custom_error</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
145
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>pattern_mismatch</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
146
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>range_overflow</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
147
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>range_underflow</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
148
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>step_mismatch</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
149
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>too_long</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
150
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>too_short</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
151
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>type_mismatch</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
152
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>value_missing</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
153
- <span class='rbracket'>]</span></pre></dd>
154
-
155
- </dl>
156
-
157
-
158
114
 
159
115
 
160
116
 
@@ -371,7 +327,7 @@ form-related classes.</p>
371
327
 
372
328
 
373
329
  &mdash;
374
- <div class='inline'><p>If <code>:based_on_key</code>, <span class='object_link'><a href="#client_side%3F-instance_method" title="Brut::FrontEnd::Forms::ConstraintViolation#client_side? (method)">#client_side?</a></span> will return true if <code>key</code> is in <span class='object_link'><a href="#CLIENT_SIDE_KEYS-constant" title="Brut::FrontEnd::Forms::ConstraintViolation::CLIENT_SIDE_KEYS (constant)">CLIENT_SIDE_KEYS</a></span>.</p>
330
+ <div class='inline'><p>If <code>:based_on_key</code>, <span class='object_link'><a href="#client_side%3F-instance_method" title="Brut::FrontEnd::Forms::ConstraintViolation#client_side? (method)">#client_side?</a></span> will return true if <code>key</code> is in <span class='object_link'><a href="ValidityState.html#KEYS-constant" title="Brut::FrontEnd::Forms::ValidityState::KEYS (constant)">ValidityState::KEYS</a></span>.</p>
375
331
  </div>
376
332
 
377
333
  </li>
@@ -385,21 +341,21 @@ form-related classes.</p>
385
341
  <pre class="lines">
386
342
 
387
343
 
388
- 32
389
- 33
390
- 34
391
- 35
392
- 36
393
- 37
394
- 38
395
- 39</pre>
344
+ 16
345
+ 17
346
+ 18
347
+ 19
348
+ 20
349
+ 21
350
+ 22
351
+ 23</pre>
396
352
  </td>
397
353
  <td>
398
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 32</span>
354
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 16</span>
399
355
 
400
356
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>key:</span><span class='comma'>,</span><span class='label'>context:</span><span class='comma'>,</span> <span class='label'>server_side:</span> <span class='symbol'>:based_on_key</span><span class='rparen'>)</span>
401
357
  <span class='ivar'>@key</span> <span class='op'>=</span> <span class='id identifier rubyid_key'>key</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
402
- <span class='ivar'>@client_side</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="#CLIENT_SIDE_KEYS-constant" title="Brut::FrontEnd::Forms::ConstraintViolation::CLIENT_SIDE_KEYS (constant)">CLIENT_SIDE_KEYS</a></span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@key</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_server_side'>server_side</span> <span class='op'>!=</span> <span class='kw'>true</span>
358
+ <span class='ivar'>@client_side</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='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="../Forms.html" title="Brut::FrontEnd::Forms (module)">Forms</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ValidityState.html" title="Brut::FrontEnd::Forms::ValidityState (class)">ValidityState</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="ValidityState.html#KEYS-constant" title="Brut::FrontEnd::Forms::ValidityState::KEYS (constant)">KEYS</a></span></span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='ivar'>@key</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_server_side'>server_side</span> <span class='op'>!=</span> <span class='kw'>true</span>
403
359
  <span class='ivar'>@context</span> <span class='op'>=</span> <span class='id identifier rubyid_context'>context</span> <span class='op'>||</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
404
360
  <span class='kw'>if</span> <span class='op'>!</span><span class='ivar'>@context</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
405
361
  <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</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_content'> created for key </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</span><span class='embexpr_end'>}</span><span class='tstring_content'> with an invalid context: &#39;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_context'>context</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_context'>context</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;. Context must be nil or a hash</span><span class='tstring_end'>&quot;</span></span>
@@ -459,12 +415,12 @@ form-related classes.</p>
459
415
  <pre class="lines">
460
416
 
461
417
 
462
- 24
463
- 25
464
- 26</pre>
418
+ 8
419
+ 9
420
+ 10</pre>
465
421
  </td>
466
422
  <td>
467
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 24</span>
423
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 8</span>
468
424
 
469
425
  <span class='kw'>def</span> <span class='id identifier rubyid_context'>context</span>
470
426
  <span class='ivar'>@context</span>
@@ -518,12 +474,12 @@ form-related classes.</p>
518
474
  <pre class="lines">
519
475
 
520
476
 
521
- 22
522
- 23
523
- 24</pre>
477
+ 6
478
+ 7
479
+ 8</pre>
524
480
  </td>
525
481
  <td>
526
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 22</span>
482
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 6</span>
527
483
 
528
484
  <span class='kw'>def</span> <span class='id identifier rubyid_key'>key</span>
529
485
  <span class='ivar'>@key</span>
@@ -582,10 +538,10 @@ form-related classes.</p>
582
538
  <pre class="lines">
583
539
 
584
540
 
585
- 42</pre>
541
+ 26</pre>
586
542
  </td>
587
543
  <td>
588
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 42</span>
544
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 26</span>
589
545
 
590
546
  <span class='kw'>def</span> <span class='id identifier rubyid_client_side?'>client_side?</span> <span class='op'>=</span> <span class='ivar'>@client_side</span></pre>
591
547
  </td>
@@ -608,10 +564,10 @@ form-related classes.</p>
608
564
  <pre class="lines">
609
565
 
610
566
 
611
- 43</pre>
567
+ 27</pre>
612
568
  </td>
613
569
  <td>
614
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 43</span>
570
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/forms/constraint_violation.rb', line 27</span>
615
571
 
616
572
  <span class='kw'>def</span> <span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=</span> <span class='ivar'>@key</span></pre>
617
573
  </td>
@@ -624,7 +580,7 @@ form-related classes.</p>
624
580
  </div>
625
581
 
626
582
  <div id="footer">
627
- Generated on Wed Jun 25 22:57:21 2025 by
583
+ Generated on Fri Jul 4 21:27:28 2025 by
628
584
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
629
585
  0.9.37 (ruby-3.4.4).
630
586
  </div>