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
@@ -133,7 +133,7 @@ from the various methods of the component.</p>
133
133
 
134
134
 
135
135
 
136
- <span class="summary_desc"><div class='inline'><p>Return a component that you would like Brut to instantiate.</p>
136
+ <span class="summary_desc"><div class='inline'><p>Render (in Phlex parlance) a component that you would like Brut to instantiate.</p>
137
137
  </div></span>
138
138
 
139
139
  </li>
@@ -182,51 +182,61 @@ from the various methods of the component.</p>
182
182
 
183
183
  </h3><div class="docstring">
184
184
  <div class="discussion">
185
- <p>Return a component that you would like Brut to instantiate.
186
- This will use keyword injection to create the component, which means that if the component
187
- doesn't require any data from this component, you do not need to pass through those values.
188
- For example, you may have a component that renders the flash message. To avoid requiring your component to
189
- be passed the flash, a global component can be injected with it from Brut.</p>
185
+ <p>Render (in Phlex parlance) a component that you would like Brut to
186
+ instantiate. This is useful when you want to use a component that
187
+ only requires values from the <span class='object_link'><a href="../RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span>. By
188
+ using this method, <em>this</em> component does not have to receive
189
+ data from the <span class='object_link'><a href="../RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span> that only serves to pass
190
+ to the component you use here.</p>
191
+
192
+ <p>For example, you may have a component that renders the flash message. To avoid requiring <em>this</em> component/page to be passed the flash, a global component can be injected with it from Brut.</p>
193
+
194
+ <p>This component <em>will</em> be rendered into the Phlex context. Do not call
195
+ <code>render</code> on the result, nor rely on the return value.</p>
190
196
 
191
197
 
192
198
  </div>
193
199
  </div>
194
200
  <div class="tags">
195
-
196
- <p class="tag_title">Returns:</p>
197
- <ul class="return">
201
+ <p class="tag_title">Parameters:</p>
202
+ <ul class="param">
198
203
 
199
204
  <li>
200
205
 
206
+ <span class='name'>component_klass</span>
207
+
201
208
 
202
- <span class='type'>(<tt>Object</tt>)</span>
209
+ <span class='type'>(<tt>Class</tt>)</span>
203
210
 
204
211
 
205
212
 
206
213
  &mdash;
207
- <div class='inline'><p>instance of <code>component_klass</code>, as created by Brut. This will
208
- not render the component.</p>
214
+ <div class='inline'><p>the component class to use in the view.
215
+ This class's
216
+ initializer must only require information available from the
217
+ <span class='object_link'><a href="../RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span>.</p>
209
218
  </div>
210
219
 
211
220
  </li>
212
221
 
213
222
  </ul>
214
223
 
224
+
215
225
  </div><table class="source_code">
216
226
  <tr>
217
227
  <td>
218
228
  <pre class="lines">
219
229
 
220
230
 
221
- 83
222
- 84
223
- 85</pre>
231
+ 107
232
+ 108
233
+ 109</pre>
224
234
  </td>
225
235
  <td>
226
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 83</span>
236
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 107</span>
227
237
 
228
238
  <span class='kw'>def</span> <span class='id identifier rubyid_global_component'>global_component</span><span class='lparen'>(</span><span class='id identifier rubyid_component_klass'>component_klass</span><span class='rparen'>)</span>
229
- <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="../RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span></span><span class='period'>.</span><span class='id identifier rubyid_inject'><span class='object_link'><a href="../RequestContext.html#inject-class_method" title="Brut::FrontEnd::RequestContext.inject (method)">inject</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_component_klass'>component_klass</span><span class='rparen'>)</span>
239
+ <span class='id identifier rubyid_render'>render</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="../RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span></span><span class='period'>.</span><span class='id identifier rubyid_inject'><span class='object_link'><a href="../RequestContext.html#inject-class_method" title="Brut::FrontEnd::RequestContext.inject (method)">inject</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_component_klass'>component_klass</span><span class='rparen'>)</span>
230
240
  <span class='kw'>end</span></pre>
231
241
  </td>
232
242
  </tr>
@@ -288,16 +298,16 @@ looking</p>
288
298
  <pre class="lines">
289
299
 
290
300
 
291
- 67
292
- 68
293
- 69
294
- 70
295
- 71
296
- 72
297
- 73</pre>
301
+ 83
302
+ 84
303
+ 85
304
+ 86
305
+ 87
306
+ 88
307
+ 89</pre>
298
308
  </td>
299
309
  <td>
300
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 67</span>
310
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 83</span>
301
311
 
302
312
  <span class='kw'>def</span> <span class='id identifier rubyid_inline_svg'>inline_svg</span><span class='lparen'>(</span><span class='id identifier rubyid_svg'>svg</span><span class='rparen'>)</span>
303
313
  <span class='const'><span class='object_link'><a href="../../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_svg_locator'>svg_locator</span><span class='period'>.</span><span class='id identifier rubyid_locate'>locate</span><span class='lparen'>(</span><span class='id identifier rubyid_svg'>svg</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_then'>then</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_svg_file'>svg_file</span><span class='op'>|</span>
@@ -316,7 +326,7 @@ looking</p>
316
326
  </div>
317
327
 
318
328
  <div id="footer">
319
- Generated on Wed Jun 25 22:57:19 2025 by
329
+ Generated on Fri Jul 4 21:27:27 2025 by
320
330
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
321
331
  0.9.37 (ruby-3.4.4).
322
332
  </div>
@@ -292,12 +292,12 @@ override this.</p>
292
292
  <pre class="lines">
293
293
 
294
294
 
295
- 91
296
- 92
297
- 93</pre>
295
+ 115
296
+ 116
297
+ 117</pre>
298
298
  </td>
299
299
  <td>
300
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 91</span>
300
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 115</span>
301
301
 
302
302
  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_component_name'>component_name</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span>
303
303
  <span class='comment'># Convenience method to get the component name. This just calls the class
@@ -339,10 +339,10 @@ method <span class='object_link'><a href="#component_name-class_method" title="B
339
339
  <pre class="lines">
340
340
 
341
341
 
342
- 94</pre>
342
+ 118</pre>
343
343
  </td>
344
344
  <td>
345
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 94</span>
345
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/component.rb', line 118</span>
346
346
 
347
347
  <span class='kw'>def</span> <span class='id identifier rubyid_component_name'>component_name</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_component_name'>component_name</span></pre>
348
348
  </td>
@@ -355,7 +355,7 @@ method <span class='object_link'><a href="#component_name-class_method" title="B
355
355
  </div>
356
356
 
357
357
  <div id="footer">
358
- Generated on Wed Jun 25 22:57:20 2025 by
358
+ Generated on Fri Jul 4 21:27:28 2025 by
359
359
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
360
360
  0.9.37 (ruby-3.4.4).
361
361
  </div>
@@ -460,7 +460,7 @@
460
460
  </div>
461
461
 
462
462
  <div id="footer">
463
- Generated on Wed Jun 25 22:57:21 2025 by
463
+ Generated on Fri Jul 4 21:27:29 2025 by
464
464
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
465
465
  0.9.37 (ruby-3.4.4).
466
466
  </div>
@@ -266,19 +266,27 @@ If the form's action is GET, it will not.</p>
266
266
  <h5 class="example_title"><div class='inline'><p>Route without parameters</p>
267
267
  </div></h5>
268
268
 
269
- <pre class="example code"><code>&lt;%= form_tag(for: NewWidgetForm, class: &quot;new-form&quot;) do %&gt;
270
- &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;
271
- &lt;button&gt;Create&lt;/button&gt;
272
- &lt;% end %&gt;</code></pre>
269
+ <pre class="example code"><code><span class='comment'># assumes you have included Brut::FrontEnd::Components
270
+ </span><span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
271
+ <span class='const'><span class='object_link'><a href="" title="Brut::FrontEnd::Components::FormTag (class)">FormTag</a></span></span><span class='lparen'>(</span><span class='label'>for:</span> <span class='const'>NewWidgetForm</span><span class='comma'>,</span> <span class='label'>class:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>new-form</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
272
+ <span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>name</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
273
+ <span class='id identifier rubyid_button'>button</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Create</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span>
274
+ <span class='kw'>end</span>
275
+ <span class='kw'>end</span></code></pre>
273
276
 
274
277
 
275
278
  <h5 class="example_title"><div class='inline'><p>Route with parameters</p>
276
279
  </div></h5>
277
280
 
278
- <pre class="example code"><code>&lt;%= form_tag(for: SaveWidgetWithIdForm, route_params: { id: widget.external_id }, class: &quot;new-form&quot;) do %&gt;
279
- &lt;input type=&quot;text&quot; name=&quot;name&quot;&gt;
280
- &lt;button&gt;Save&lt;/button&gt;
281
- &lt;% end %&gt;</code></pre>
281
+ <pre class="example code"><code><span class='comment'># assumes you have included Brut::FrontEnd::Components
282
+ </span><span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
283
+ <span class='const'><span class='object_link'><a href="" title="Brut::FrontEnd::Components::FormTag (class)">FormTag</a></span></span><span class='lparen'>(</span><span class='label'>for:</span> <span class='const'>SaveWidgetWithIdForm</span><span class='comma'>,</span>
284
+ <span class='label'>route_params:</span> <span class='lbrace'>{</span> <span class='label'>id:</span> <span class='id identifier rubyid_widget'>widget</span><span class='period'>.</span><span class='id identifier rubyid_external_id'>external_id</span> <span class='rbrace'>}</span><span class='comma'>,</span>
285
+ <span class='label'>class:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>new-form</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>do</span>
286
+ <span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='label'>type:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>text</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>name</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
287
+ <span class='id identifier rubyid_button'>button</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Save</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span>
288
+ <span class='kw'>end</span>
289
+ <span class='kw'>end</span></code></pre>
282
290
 
283
291
  </div>
284
292
  <p class="tag_title">Parameters:</p>
@@ -377,14 +385,6 @@ If the form's action is GET, it will not.</p>
377
385
  <pre class="lines">
378
386
 
379
387
 
380
- 24
381
- 25
382
- 26
383
- 27
384
- 28
385
- 29
386
- 30
387
- 31
388
388
  32
389
389
  33
390
390
  34
@@ -405,10 +405,18 @@ If the form's action is GET, it will not.</p>
405
405
  49
406
406
  50
407
407
  51
408
- 52</pre>
408
+ 52
409
+ 53
410
+ 54
411
+ 55
412
+ 56
413
+ 57
414
+ 58
415
+ 59
416
+ 60</pre>
409
417
  </td>
410
418
  <td>
411
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/form_tag.rb', line 24</span>
419
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/form_tag.rb', line 32</span>
412
420
 
413
421
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>route_params:</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>
414
422
  <span class='id identifier rubyid_form_class'>form_class</span> <span class='op'>=</span> <span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='symbol'>:for</span><span class='rparen'>)</span> <span class='comment'># Cannot be a keyword arg, since for is a reserved word
@@ -466,23 +474,23 @@ If the form's action is GET, it will not.</p>
466
474
  <pre class="lines">
467
475
 
468
476
 
469
- 54
470
- 55
471
- 56
472
- 57
473
- 58
474
- 59
475
- 60
476
- 61
477
477
  62
478
478
  63
479
479
  64
480
480
  65
481
481
  66
482
- 67</pre>
482
+ 67
483
+ 68
484
+ 69
485
+ 70
486
+ 71
487
+ 72
488
+ 73
489
+ 74
490
+ 75</pre>
483
491
  </td>
484
492
  <td>
485
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/form_tag.rb', line 54</span>
493
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/form_tag.rb', line 62</span>
486
494
 
487
495
  <span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
488
496
  <span class='id identifier rubyid_form'>form</span><span class='lparen'>(</span><span class='op'>**</span><span class='ivar'>@attributes</span><span class='rparen'>)</span> <span class='kw'>do</span>
@@ -508,7 +516,7 @@ If the form's action is GET, it will not.</p>
508
516
  </div>
509
517
 
510
518
  <div id="footer">
511
- Generated on Wed Jun 25 22:57:21 2025 by
519
+ Generated on Fri Jul 4 21:27:28 2025 by
512
520
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
513
521
  0.9.37 (ruby-3.4.4).
514
522
  </div>
@@ -307,7 +307,7 @@ client side <code>ValidityState</code> returns true for, say, <code>badInput</co
307
307
  </div>
308
308
 
309
309
  <div id="footer">
310
- Generated on Wed Jun 25 22:57:21 2025 by
310
+ Generated on Fri Jul 4 21:27:28 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.4).
313
313
  </div>
@@ -185,7 +185,7 @@
185
185
  </div>
186
186
 
187
187
  <div id="footer">
188
- Generated on Wed Jun 25 22:57:20 2025 by
188
+ Generated on Fri Jul 4 21:27:28 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.4).
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 Wed Jun 25 22:57:21 2025 by
332
+ Generated on Fri Jul 4 21:27:28 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.4).
335
335
  </div>
@@ -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;input&gt;</code> field.</p>
110
+ <p>Generates an HTML <code>&lt;input&gt;</code> field based on a form input.</p>
111
111
 
112
112
 
113
113
  </div>
@@ -127,38 +127,6 @@
127
127
 
128
128
 
129
129
 
130
- <h2>
131
- Class Method Summary
132
- <small><a href="#" class="summary_toggle">collapse</a></small>
133
- </h2>
134
-
135
- <ul class="summary">
136
-
137
- <li class="public ">
138
- <span class="summary_signature">
139
-
140
- <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>
141
-
142
-
143
-
144
- </span>
145
-
146
-
147
-
148
-
149
-
150
-
151
-
152
-
153
-
154
- <span class="summary_desc"><div class='inline'><p>Creates the appropriate input for the given <span class='object_link'><a href="../../Form.html" title="Brut::FrontEnd::Form (class)">Form</a></span> and input name.</p>
155
- </div></span>
156
-
157
- </li>
158
-
159
-
160
- </ul>
161
-
162
130
  <h2>
163
131
  Instance Method Summary
164
132
  <small><a href="#" class="summary_toggle">collapse</a></small>
@@ -169,7 +137,7 @@
169
137
  <li class="public ">
170
138
  <span class="summary_signature">
171
139
 
172
- <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(attributes) &#x21d2; InputTag </a>
140
+ <a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(form:, input_name:, index: nil, **html_attributes) &#x21d2; InputTag </a>
173
141
 
174
142
 
175
143
 
@@ -185,7 +153,7 @@
185
153
 
186
154
 
187
155
 
188
- <span class="summary_desc"><div class='inline'><p>Create an instance.</p>
156
+ <span class="summary_desc"><div class='inline'><p>Creates the appropriate input for the given <span class='object_link'><a href="../../Form.html" title="Brut::FrontEnd::Form (class)">Form</a></span> and input name.</p>
189
157
  </div></span>
190
158
 
191
159
  </li>
@@ -308,73 +276,7 @@
308
276
  <div class="method_details first">
309
277
  <h3 class="signature first" id="initialize-instance_method">
310
278
 
311
- #<strong>initialize</strong>(attributes) &#x21d2; <tt><span class='object_link'><a href="" title="Brut::FrontEnd::Components::Inputs::InputTag (class)">InputTag</a></span></tt>
312
-
313
-
314
-
315
-
316
-
317
- </h3><div class="docstring">
318
- <div class="discussion">
319
- <p>Create an instance</p>
320
-
321
-
322
- </div>
323
- </div>
324
- <div class="tags">
325
- <p class="tag_title">Parameters:</p>
326
- <ul class="param">
327
-
328
- <li>
329
-
330
- <span class='name'>attributes</span>
331
-
332
-
333
- <span class='type'>(<tt>Hash</tt>)</span>
334
-
335
-
336
-
337
- &mdash;
338
- <div class='inline'><p>HTML attributes to put on the element.</p>
339
- </div>
340
-
341
- </li>
342
-
343
- </ul>
344
-
345
-
346
- </div><table class="source_code">
347
- <tr>
348
- <td>
349
- <pre class="lines">
350
-
351
-
352
- 60
353
- 61
354
- 62</pre>
355
- </td>
356
- <td>
357
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 60</span>
358
-
359
- <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='rparen'>)</span>
360
- <span class='ivar'>@attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_attributes'>attributes</span>
361
- <span class='kw'>end</span></pre>
362
- </td>
363
- </tr>
364
- </table>
365
- </div>
366
-
367
- </div>
368
-
369
-
370
- <div id="class_method_details" class="method_details_list">
371
- <h2>Class Method Details</h2>
372
-
373
-
374
- <div class="method_details first">
375
- <h3 class="signature first" id="for_form_input-class_method">
376
-
377
- .<strong>for_form_input</strong>(form:, input_name:, index: nil, **html_attributes) &#x21d2; <tt>Object</tt>
279
+ #<strong>initialize</strong>(form:, input_name:, index: nil, **html_attributes) &#x21d2; <tt><span class='object_link'><a href="" title="Brut::FrontEnd::Components::Inputs::InputTag (class)">InputTag</a></span></tt>
378
280
 
379
281
 
380
282
 
@@ -463,8 +365,6 @@ Generally, you want to use this method over the initializer.</p>
463
365
  <pre class="lines">
464
366
 
465
367
 
466
- 10
467
- 11
468
368
  12
469
369
  13
470
370
  14
@@ -506,12 +406,14 @@ Generally, you want to use this method over the initializer.</p>
506
406
  50
507
407
  51
508
408
  52
509
- 53</pre>
409
+ 53
410
+ 54
411
+ 55</pre>
510
412
  </td>
511
413
  <td>
512
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 10</span>
414
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 12</span>
513
415
 
514
- <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='op'>**</span><span class='id identifier rubyid_html_attributes'>html_attributes</span><span class='rparen'>)</span>
416
+ <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>
515
417
  <span class='id identifier rubyid_input'>input</span> <span class='op'>=</span> <span class='id identifier rubyid_form'>form</span><span class='period'>.</span><span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='id identifier rubyid_input_name'>input_name</span><span class='comma'>,</span> <span class='label'>index:</span><span class='rparen'>)</span>
516
418
  <span class='id identifier rubyid_default_html_attributes'>default_html_attributes</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
517
419
  <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>
@@ -553,14 +455,15 @@ Generally, you want to use this method over the initializer.</p>
553
455
  <span class='id identifier rubyid_default_html_attributes'>default_html_attributes</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>data-</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='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>true</span>
554
456
  <span class='kw'>end</span>
555
457
  <span class='kw'>end</span>
556
- <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::InputTag (class)">InputTag</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::InputTag#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='rparen'>)</span>
458
+ <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>
557
459
  <span class='kw'>end</span></pre>
558
460
  </td>
559
461
  </tr>
560
462
  </table>
561
463
  </div>
562
-
563
- </div>
464
+
465
+ </div>
466
+
564
467
 
565
468
  <div id="instance_method_details" class="method_details_list">
566
469
  <h2>Instance Method Details</h2>
@@ -604,10 +507,10 @@ Generally, you want to use this method over the initializer.</p>
604
507
  <pre class="lines">
605
508
 
606
509
 
607
- 55</pre>
510
+ 3</pre>
608
511
  </td>
609
512
  <td>
610
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 55</span>
513
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 3</span>
611
514
 
612
515
  <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>
613
516
  </td>
@@ -630,12 +533,12 @@ Generally, you want to use this method over the initializer.</p>
630
533
  <pre class="lines">
631
534
 
632
535
 
633
- 64
634
- 65
635
- 66</pre>
536
+ 57
537
+ 58
538
+ 59</pre>
636
539
  </td>
637
540
  <td>
638
- <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 64</span>
541
+ <pre class="code"><span class="info file"># File 'lib/brut/front_end/components/inputs/input_tag.rb', line 57</span>
639
542
 
640
543
  <span class='kw'>def</span> <span class='id identifier rubyid_view_template'>view_template</span>
641
544
  <span class='id identifier rubyid_input'>input</span><span class='lparen'>(</span><span class='op'>**</span><span class='ivar'>@attributes</span><span class='rparen'>)</span>
@@ -650,7 +553,7 @@ Generally, you want to use this method over the initializer.</p>
650
553
  </div>
651
554
 
652
555
  <div id="footer">
653
- Generated on Wed Jun 25 22:57:21 2025 by
556
+ Generated on Fri Jul 4 21:27:28 2025 by
654
557
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
655
558
  0.9.37 (ruby-3.4.4).
656
559
  </div>