brut 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +9 -0
  3. data/CHANGELOG.md +13 -0
  4. data/Dockerfile.dx +8 -1
  5. data/Gemfile.lock +101 -63
  6. data/bin/ci +9 -5
  7. data/bin/docs +1 -1
  8. data/bin/generate-and-run-rubocop +52 -0
  9. data/bin/rubocop +27 -0
  10. data/bin/setup +46 -0
  11. data/bin/test +18 -0
  12. data/brut-css/bin/publish +1 -1
  13. data/brut-css/package-lock.json +2 -2
  14. data/brut-css/package.json +1 -1
  15. data/brut-js/bin/publish +1 -1
  16. data/brut-js/package-lock.json +2 -2
  17. data/brut-js/package.json +1 -1
  18. data/brut-js/specs/ConfirmSubmit.spec.js +32 -1
  19. data/brut-js/src/ConfirmSubmit.js +28 -7
  20. data/brut.gemspec +32 -26
  21. data/brutrb.com/.vitepress/config.mjs +3 -0
  22. data/brutrb.com/database-schema.md +1 -1
  23. data/brutrb.com/images/tutorial/basic-form-with-violations.png +0 -0
  24. data/brutrb.com/images/tutorial/basic-form.png +0 -0
  25. data/brutrb.com/images/tutorial/initial-home-page.png +0 -0
  26. data/brutrb.com/images/tutorial/new-post-editor.png +0 -0
  27. data/brutrb.com/images/tutorial/new-post-home-page.png +0 -0
  28. data/brutrb.com/images/tutorial/styled-form-with-server-side-violations.png +0 -0
  29. data/brutrb.com/images/tutorial/styled-form-with-violations.png +0 -0
  30. data/brutrb.com/images/tutorial/styled-home-page-with-posts.png +0 -0
  31. data/brutrb.com/images/tutorial/styled-home-page.png +0 -0
  32. data/brutrb.com/images/tutorial/welcome-to-brut.png +0 -0
  33. data/brutrb.com/recipes/migrations.md +1 -1
  34. data/brutrb.com/tutorial.md +1728 -3
  35. data/docker-compose.dx.yml +3 -0
  36. data/docs/404.html +2 -2
  37. data/docs/adrs.html +3 -3
  38. data/docs/ai.html +3 -3
  39. data/docs/api/Brut/BackEnd/SeedData.html +2 -2
  40. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +2 -2
  41. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +2 -2
  42. data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +2 -2
  43. data/docs/api/Brut/BackEnd/Sidekiq.html +2 -2
  44. data/docs/api/Brut/BackEnd/Validators/FormValidator.html +2 -2
  45. data/docs/api/Brut/BackEnd/Validators.html +2 -2
  46. data/docs/api/Brut/BackEnd.html +2 -2
  47. data/docs/api/Brut/CLI/App.html +2 -2
  48. data/docs/api/Brut/CLI/AppRunner.html +2 -2
  49. data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +2 -2
  50. data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +2 -2
  51. data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +2 -2
  52. data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +2 -2
  53. data/docs/api/Brut/CLI/Apps/BuildAssets.html +2 -2
  54. data/docs/api/Brut/CLI/Apps/DB/Create.html +2 -2
  55. data/docs/api/Brut/CLI/Apps/DB/Drop.html +2 -2
  56. data/docs/api/Brut/CLI/Apps/DB/Migrate.html +2 -2
  57. data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +2 -2
  58. data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +2 -2
  59. data/docs/api/Brut/CLI/Apps/DB/Seed.html +2 -2
  60. data/docs/api/Brut/CLI/Apps/DB/Status.html +2 -2
  61. data/docs/api/Brut/CLI/Apps/DB.html +2 -2
  62. data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +2 -2
  63. data/docs/api/Brut/CLI/Apps/DeployBase.html +2 -2
  64. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +3 -3
  65. data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +2 -2
  66. data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +2 -2
  67. data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +2 -2
  68. data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +2 -2
  69. data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +2 -2
  70. data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +2 -2
  71. data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +2 -2
  72. data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +2 -2
  73. data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +2 -2
  74. data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +2 -2
  75. data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +2 -2
  76. data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +3 -3
  77. data/docs/api/Brut/CLI/Apps/Scaffold.html +2 -2
  78. data/docs/api/Brut/CLI/Apps/Test/Audit.html +2 -2
  79. data/docs/api/Brut/CLI/Apps/Test/E2e.html +2 -2
  80. data/docs/api/Brut/CLI/Apps/Test/JS.html +2 -2
  81. data/docs/api/Brut/CLI/Apps/Test/Run.html +2 -2
  82. data/docs/api/Brut/CLI/Apps/Test.html +2 -2
  83. data/docs/api/Brut/CLI/Apps.html +2 -2
  84. data/docs/api/Brut/CLI/Command.html +2 -2
  85. data/docs/api/Brut/CLI/Error.html +2 -2
  86. data/docs/api/Brut/CLI/ExecutionResults/Result.html +2 -2
  87. data/docs/api/Brut/CLI/ExecutionResults.html +2 -2
  88. data/docs/api/Brut/CLI/Executor.html +2 -2
  89. data/docs/api/Brut/CLI/InvalidOption.html +2 -2
  90. data/docs/api/Brut/CLI/Options.html +80 -2
  91. data/docs/api/Brut/CLI/Output.html +2 -2
  92. data/docs/api/Brut/CLI/SystemExecError.html +2 -2
  93. data/docs/api/Brut/CLI.html +2 -2
  94. data/docs/api/Brut/FactoryBot.html +3 -3
  95. data/docs/api/Brut/Framework/App.html +3 -3
  96. data/docs/api/Brut/Framework/Config.html +27 -15
  97. data/docs/api/Brut/Framework/Container.html +2 -2
  98. data/docs/api/Brut/Framework/Error.html +2 -2
  99. data/docs/api/Brut/Framework/Errors/AbstractMethod.html +2 -2
  100. data/docs/api/Brut/Framework/Errors/Bug.html +2 -2
  101. data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +2 -2
  102. data/docs/api/Brut/Framework/Errors/MissingParameter.html +2 -2
  103. data/docs/api/Brut/Framework/Errors/NoClassForPath.html +2 -2
  104. data/docs/api/Brut/Framework/Errors/NotFound.html +2 -2
  105. data/docs/api/Brut/Framework/Errors/NotImplemented.html +2 -2
  106. data/docs/api/Brut/Framework/Errors.html +2 -2
  107. data/docs/api/Brut/Framework/FussyTypeEnforcement.html +2 -2
  108. data/docs/api/Brut/Framework/MCP.html +21 -11
  109. data/docs/api/Brut/Framework/ProjectEnvironment.html +2 -2
  110. data/docs/api/Brut/Framework.html +2 -2
  111. data/docs/api/Brut/FrontEnd/AssetPathResolver.html +2 -2
  112. data/docs/api/Brut/FrontEnd/Component/Helpers.html +2 -2
  113. data/docs/api/Brut/FrontEnd/Component.html +2 -2
  114. data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +2 -2
  115. data/docs/api/Brut/FrontEnd/Components/FormTag.html +4 -4
  116. data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +2 -2
  117. data/docs/api/Brut/FrontEnd/Components/Input.html +2 -2
  118. data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +2 -2
  119. data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +2 -2
  120. data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +2 -2
  121. data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +2 -2
  122. data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +2 -2
  123. data/docs/api/Brut/FrontEnd/Components/Inputs.html +2 -2
  124. data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +2 -2
  125. data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +2 -2
  126. data/docs/api/Brut/FrontEnd/Components/TimeTag.html +2 -2
  127. data/docs/api/Brut/FrontEnd/Components/Traceparent.html +2 -2
  128. data/docs/api/Brut/FrontEnd/Components.html +2 -2
  129. data/docs/api/Brut/FrontEnd/CsrfProtector.html +250 -0
  130. data/docs/api/Brut/FrontEnd/Download.html +2 -2
  131. data/docs/api/Brut/FrontEnd/Flash.html +2 -2
  132. data/docs/api/Brut/FrontEnd/Form.html +6 -6
  133. data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +2 -2
  134. data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +2 -2
  135. data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +2 -2
  136. data/docs/api/Brut/FrontEnd/Forms/Input.html +2 -2
  137. data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +2 -2
  138. data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +2 -2
  139. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +2 -2
  140. data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +2 -2
  141. data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +2 -2
  142. data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +2 -2
  143. data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +2 -2
  144. data/docs/api/Brut/FrontEnd/Forms.html +2 -2
  145. data/docs/api/Brut/FrontEnd/GenericResponse.html +2 -2
  146. data/docs/api/Brut/FrontEnd/Handler.html +2 -2
  147. data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +2 -2
  148. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +2 -2
  149. data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +2 -2
  150. data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +2 -2
  151. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +2 -2
  152. data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +2 -2
  153. data/docs/api/Brut/FrontEnd/Handlers.html +2 -2
  154. data/docs/api/Brut/FrontEnd/HandlingResults.html +2 -2
  155. data/docs/api/Brut/FrontEnd/HttpMethod.html +2 -2
  156. data/docs/api/Brut/FrontEnd/HttpStatus.html +2 -2
  157. data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +2 -2
  158. data/docs/api/Brut/FrontEnd/Layout.html +2 -2
  159. data/docs/api/Brut/FrontEnd/Middleware.html +2 -2
  160. data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +2 -2
  161. data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +2 -2
  162. data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +2 -2
  163. data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +2 -2
  164. data/docs/api/Brut/FrontEnd/Middlewares.html +2 -2
  165. data/docs/api/Brut/FrontEnd/Page.html +2 -2
  166. data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +2 -2
  167. data/docs/api/Brut/FrontEnd/Pages.html +2 -2
  168. data/docs/api/Brut/FrontEnd/RequestContext.html +2 -2
  169. data/docs/api/Brut/FrontEnd/RouteHook.html +2 -2
  170. data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +2 -2
  171. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +2 -2
  172. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +2 -2
  173. data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +2 -2
  174. data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +2 -2
  175. data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +2 -2
  176. data/docs/api/Brut/FrontEnd/RouteHooks.html +2 -2
  177. data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +2 -2
  178. data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +2 -2
  179. data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +2 -2
  180. data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +2 -2
  181. data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +2 -2
  182. data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +2 -2
  183. data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +2 -2
  184. data/docs/api/Brut/FrontEnd/Routing/Route.html +2 -2
  185. data/docs/api/Brut/FrontEnd/Routing.html +2 -2
  186. data/docs/api/Brut/FrontEnd/Session.html +2 -2
  187. data/docs/api/Brut/FrontEnd.html +3 -3
  188. data/docs/api/Brut/I18n/BaseMethods.html +3 -3
  189. data/docs/api/Brut/I18n/ForBackEnd.html +2 -2
  190. data/docs/api/Brut/I18n/ForCLI.html +2 -2
  191. data/docs/api/Brut/I18n/ForHTML.html +2 -2
  192. data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +2 -2
  193. data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +2 -2
  194. data/docs/api/Brut/I18n.html +2 -2
  195. data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +2 -2
  196. data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +2 -2
  197. data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +2 -2
  198. data/docs/api/Brut/Instrumentation/OpenTelemetry.html +2 -2
  199. data/docs/api/Brut/Instrumentation.html +2 -2
  200. data/docs/api/Brut/RubocopConfig.html +237 -0
  201. data/docs/api/Brut/SinatraHelpers/ClassMethods.html +2 -2
  202. data/docs/api/Brut/SinatraHelpers.html +2 -2
  203. data/docs/api/Brut/SpecSupport/ClockSupport.html +2 -2
  204. data/docs/api/Brut/SpecSupport/ComponentSupport.html +7 -13
  205. data/docs/api/Brut/SpecSupport/E2ETestServer.html +2 -2
  206. data/docs/api/Brut/SpecSupport/E2eSupport.html +2 -2
  207. data/docs/api/Brut/SpecSupport/EnhancedNode.html +2 -2
  208. data/docs/api/Brut/SpecSupport/FlashSupport.html +2 -2
  209. data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +2 -2
  210. data/docs/api/Brut/SpecSupport/GeneralSupport.html +2 -2
  211. data/docs/api/Brut/SpecSupport/HandlerSupport.html +2 -2
  212. data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +2 -2
  213. data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +2 -2
  214. data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +2 -2
  215. data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +2 -2
  216. data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +2 -2
  217. data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +2 -2
  218. data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +2 -2
  219. data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +2 -2
  220. data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +2 -2
  221. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +2 -2
  222. data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +2 -2
  223. data/docs/api/Brut/SpecSupport/Matchers.html +2 -2
  224. data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +2 -2
  225. data/docs/api/Brut/SpecSupport/RSpecSetup.html +4 -4
  226. data/docs/api/Brut/SpecSupport/SessionSupport.html +2 -2
  227. data/docs/api/Brut/SpecSupport.html +2 -2
  228. data/docs/api/Brut.html +128 -12
  229. data/docs/api/Clock.html +2 -2
  230. data/docs/api/ModuleName.html +28 -28
  231. data/docs/api/RichString.html +22 -22
  232. data/docs/api/SemanticLogger/Appender/Async.html +2 -2
  233. data/docs/api/Sequel/Extensions/BrutInstrumentation.html +2 -2
  234. data/docs/api/Sequel/Extensions/BrutMigrations.html +2 -2
  235. data/docs/api/Sequel/Extensions.html +2 -2
  236. data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +2 -2
  237. data/docs/api/Sequel/Plugins/CreatedAt.html +2 -2
  238. data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +2 -2
  239. data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +2 -2
  240. data/docs/api/Sequel/Plugins/ExternalId.html +2 -2
  241. data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +2 -2
  242. data/docs/api/Sequel/Plugins/FindBang.html +2 -2
  243. data/docs/api/Sequel/Plugins.html +2 -2
  244. data/docs/api/Sequel.html +2 -2
  245. data/docs/api/_index.html +16 -2
  246. data/docs/api/class_list.html +1 -1
  247. data/docs/api/file.README.html +28 -2
  248. data/docs/api/index.html +28 -2
  249. data/docs/api/method_list.html +192 -168
  250. data/docs/api/top-level-namespace.html +2 -2
  251. data/docs/assets/{app.DyQLb4Ot.js → app.BuBdZoUg.js} +1 -1
  252. data/docs/assets/basic-form-with-violations.Cv6Y9-Q_.png +0 -0
  253. data/docs/assets/basic-form.DbHnu0oW.png +0 -0
  254. data/docs/assets/chunks/@localSearchIndexroot.BZ_a3X0T.js +1 -0
  255. data/docs/assets/chunks/{VPLocalSearchBox.T1iA-eJx.js → VPLocalSearchBox.UtnyvkX-.js} +1 -1
  256. data/docs/assets/chunks/{theme.ChwsbWjK.js → theme.DqwvuBEK.js} +2 -2
  257. data/docs/assets/{components.md.DHh-NwKs.js → components.md.Bu80E2Nr.js} +3 -3
  258. data/docs/assets/{configuration.md.D8Wz3oJU.js → configuration.md.CuIxVsSf.js} +1 -1
  259. data/docs/assets/{database-schema.md.C5gXexJi.js → database-schema.md.LpmBPVEU.js} +1 -1
  260. data/docs/assets/{forms.md.BRE85eju.js → forms.md.DnLbzVDa.js} +1 -1
  261. data/docs/assets/{getting-started.md.2ioiTe-B.js → getting-started.md.DdQLmU3C.js} +2 -2
  262. data/docs/assets/initial-home-page.DNIaYmgP.png +0 -0
  263. data/docs/assets/new-post-editor.DrHr-5oh.png +0 -0
  264. data/docs/assets/new-post-home-page.Bm34lyMg.png +0 -0
  265. data/docs/assets/{recipes_migrations.md.DPN3gQE3.js → recipes_migrations.md.CTcnWDJF.js} +1 -1
  266. data/docs/assets/styled-form-with-server-side-violations.Bjxd8Dpv.png +0 -0
  267. data/docs/assets/styled-form-with-violations.Bv_sa9tg.png +0 -0
  268. data/docs/assets/styled-home-page-with-posts.Dd4kG89D.png +0 -0
  269. data/docs/assets/styled-home-page.BzdI7dWz.png +0 -0
  270. data/docs/assets/tutorial.md.C4zR5XPG.js +728 -0
  271. data/docs/assets/tutorial.md.C4zR5XPG.lean.js +1 -0
  272. data/docs/assets/welcome-to-brut.VSWzl17-.png +0 -0
  273. data/docs/assets.html +3 -3
  274. data/docs/brut-js/api/AjaxSubmit.html +1 -1
  275. data/docs/brut-js/api/AjaxSubmit.js.html +1 -1
  276. data/docs/brut-js/api/Autosubmit.html +1 -1
  277. data/docs/brut-js/api/Autosubmit.js.html +1 -1
  278. data/docs/brut-js/api/BaseCustomElement.html +1 -1
  279. data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
  280. data/docs/brut-js/api/BrutCustomElements.html +1 -1
  281. data/docs/brut-js/api/BufferedLogger.html +1 -1
  282. data/docs/brut-js/api/ConfirmSubmit.html +18 -10
  283. data/docs/brut-js/api/ConfirmSubmit.js.html +29 -8
  284. data/docs/brut-js/api/ConfirmationDialog.html +1 -1
  285. data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
  286. data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
  287. data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
  288. data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
  289. data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
  290. data/docs/brut-js/api/CopyToClipboard.html +1 -1
  291. data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
  292. data/docs/brut-js/api/Form.html +1 -1
  293. data/docs/brut-js/api/Form.js.html +1 -1
  294. data/docs/brut-js/api/I18nTranslation.html +1 -1
  295. data/docs/brut-js/api/I18nTranslation.js.html +1 -1
  296. data/docs/brut-js/api/LocaleDetection.html +1 -1
  297. data/docs/brut-js/api/LocaleDetection.js.html +1 -1
  298. data/docs/brut-js/api/Logger.html +1 -1
  299. data/docs/brut-js/api/Logger.js.html +1 -1
  300. data/docs/brut-js/api/Message.html +1 -1
  301. data/docs/brut-js/api/Message.js.html +1 -1
  302. data/docs/brut-js/api/PrefixedLogger.html +1 -1
  303. data/docs/brut-js/api/RichString.html +1 -1
  304. data/docs/brut-js/api/RichString.js.html +1 -1
  305. data/docs/brut-js/api/Tabs.html +1 -1
  306. data/docs/brut-js/api/Tabs.js.html +1 -1
  307. data/docs/brut-js/api/Tracing.html +1 -1
  308. data/docs/brut-js/api/Tracing.js.html +1 -1
  309. data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
  310. data/docs/brut-js/api/external-Performance.html +1 -1
  311. data/docs/brut-js/api/external-Promise.html +1 -1
  312. data/docs/brut-js/api/external-ValidityState.html +1 -1
  313. data/docs/brut-js/api/external-Window.html +1 -1
  314. data/docs/brut-js/api/external-fetch.html +1 -1
  315. data/docs/brut-js/api/global.html +1 -1
  316. data/docs/brut-js/api/index.html +1 -1
  317. data/docs/brut-js/api/index.js.html +1 -1
  318. data/docs/brut-js/api/module-testing.html +1 -1
  319. data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
  320. data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
  321. data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
  322. data/docs/brut-js/api/testing.DOMCreator.html +1 -1
  323. data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
  324. data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
  325. data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
  326. data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
  327. data/docs/brut-js/api/testing_index.js.html +1 -1
  328. data/docs/brut-js.html +3 -3
  329. data/docs/business-logic.html +3 -3
  330. data/docs/cli.html +3 -3
  331. data/docs/components.html +7 -7
  332. data/docs/configuration.html +5 -5
  333. data/docs/css.html +3 -3
  334. data/docs/custom-element-tests.html +3 -3
  335. data/docs/database-access.html +3 -3
  336. data/docs/database-schema.html +5 -5
  337. data/docs/deployment.html +3 -3
  338. data/docs/dev-environment.html +3 -3
  339. data/docs/dir-structure.html +3 -3
  340. data/docs/doc-conventions.html +3 -3
  341. data/docs/end-to-end-tests.html +3 -3
  342. data/docs/features.html +3 -3
  343. data/docs/flash-and-session.html +3 -3
  344. data/docs/form-constraints.html +3 -3
  345. data/docs/forms.html +5 -5
  346. data/docs/getting-started.html +6 -6
  347. data/docs/handlers.html +3 -3
  348. data/docs/hashmap.json +1 -1
  349. data/docs/hooks.html +3 -3
  350. data/docs/i18n.html +3 -3
  351. data/docs/index.html +3 -3
  352. data/docs/instrumentation.html +3 -3
  353. data/docs/javascript.html +3 -3
  354. data/docs/jobs.html +3 -3
  355. data/docs/keyword-injection.html +3 -3
  356. data/docs/layouts.html +3 -3
  357. data/docs/lsp.html +3 -3
  358. data/docs/markdown-examples.html +3 -3
  359. data/docs/middleware.html +3 -3
  360. data/docs/overview.html +3 -3
  361. data/docs/pages.html +3 -3
  362. data/docs/recipes/alternate-layouts.html +3 -3
  363. data/docs/recipes/authentication.html +3 -3
  364. data/docs/recipes/blank-layouts.html +3 -3
  365. data/docs/recipes/custom-flash.html +3 -3
  366. data/docs/recipes/indexed-forms.html +3 -3
  367. data/docs/recipes/migrations.html +5 -5
  368. data/docs/recipes/text-field-component.html +3 -3
  369. data/docs/roadmap.html +3 -3
  370. data/docs/routes.html +3 -3
  371. data/docs/security.html +3 -3
  372. data/docs/seed-data.html +3 -3
  373. data/docs/space-time-continuum.html +3 -3
  374. data/docs/tutorial.html +732 -5
  375. data/docs/unit-tests.html +3 -3
  376. data/docs/why.html +3 -3
  377. data/dx/build +45 -9
  378. data/lib/brut/cli/app.rb +1 -1
  379. data/lib/brut/cli/apps/heroku_container_based_deploy.rb +1 -1
  380. data/lib/brut/cli/apps/scaffold.rb +1 -1
  381. data/lib/brut/cli/options.rb +4 -0
  382. data/lib/brut/factory_bot.rb +1 -1
  383. data/lib/brut/framework/app.rb +1 -1
  384. data/lib/brut/framework/config.rb +18 -12
  385. data/lib/brut/framework/mcp.rb +12 -7
  386. data/lib/brut/front_end/csrf_protector.rb +30 -0
  387. data/lib/brut/front_end/form.rb +4 -4
  388. data/lib/brut/front_end/page.rb +1 -1
  389. data/lib/brut/front_end/routing.rb +1 -1
  390. data/lib/brut/front_end.rb +1 -0
  391. data/lib/brut/i18n/base_methods.rb +1 -1
  392. data/lib/brut/instrumentation/logger_span_exporter.rb +1 -1
  393. data/lib/brut/junk_drawer.rb +3 -1
  394. data/lib/brut/rubocop_config.rb +123 -0
  395. data/lib/brut/spec_support/component_support.rb +0 -3
  396. data/lib/brut/spec_support/rspec_setup.rb +2 -2
  397. data/lib/brut/version.rb +1 -1
  398. data/mkbrut/Gemfile.lock +1 -1
  399. data/mkbrut/dx +1 -0
  400. data/mkbrut/lib/mkbrut/app.rb +1 -1
  401. data/mkbrut/lib/mkbrut/cli.rb +1 -1
  402. data/mkbrut/lib/mkbrut/segments/heroku.rb +1 -1
  403. data/mkbrut/lib/mkbrut/version.rb +1 -1
  404. data/mkbrut/mkbrut.gemspec +3 -1
  405. data/mkbrut/templates/Base/app/config/i18n/en/1_defaults.rb +2 -2
  406. data/mkbrut/templates/Base/app/config/i18n/en/2_app.rb +1 -1
  407. data/mkbrut/templates/Base/bin/setup +1 -1
  408. data/mkbrut/templates/segments/Demo/app/src/front_end/components/flash_component.rb +1 -1
  409. data/specs/brut/junk_drawer.spec.rb +4 -0
  410. metadata +92 -35
  411. data/.rspec +0 -3
  412. data/docs/assets/chunks/@localSearchIndexroot.CmtZyrFA.js +0 -1
  413. data/docs/assets/tutorial.md.BIb7XT6j.js +0 -1
  414. data/docs/assets/tutorial.md.BIb7XT6j.lean.js +0 -1
  415. /data/docs/assets/{components.md.DHh-NwKs.lean.js → components.md.Bu80E2Nr.lean.js} +0 -0
  416. /data/docs/assets/{configuration.md.D8Wz3oJU.lean.js → configuration.md.CuIxVsSf.lean.js} +0 -0
  417. /data/docs/assets/{database-schema.md.C5gXexJi.lean.js → database-schema.md.LpmBPVEU.lean.js} +0 -0
  418. /data/docs/assets/{forms.md.BRE85eju.lean.js → forms.md.DnLbzVDa.lean.js} +0 -0
  419. /data/docs/assets/{getting-started.md.2ioiTe-B.lean.js → getting-started.md.DdQLmU3C.lean.js} +0 -0
  420. /data/docs/assets/{recipes_migrations.md.DPN3gQE3.lean.js → recipes_migrations.md.CTcnWDJF.lean.js} +0 -0
@@ -304,9 +304,9 @@
304
304
  </div>
305
305
 
306
306
  <div id="footer">
307
- Generated on Mon Jul 21 18:28:18 2025 by
307
+ Generated on Tue Aug 12 16:58:17 2025 by
308
308
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
309
- 0.9.37 (ruby-3.4.4).
309
+ 0.9.37 (ruby-3.4.5).
310
310
  </div>
311
311
 
312
312
  </div>
@@ -173,9 +173,9 @@
173
173
  </div>
174
174
 
175
175
  <div id="footer">
176
- Generated on Mon Jul 21 18:28:18 2025 by
176
+ Generated on Tue Aug 12 16:58:17 2025 by
177
177
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
178
- 0.9.37 (ruby-3.4.4).
178
+ 0.9.37 (ruby-3.4.5).
179
179
  </div>
180
180
 
181
181
  </div>
@@ -355,9 +355,9 @@
355
355
  </div>
356
356
 
357
357
  <div id="footer">
358
- Generated on Mon Jul 21 18:28:17 2025 by
358
+ Generated on Tue Aug 12 16:58:16 2025 by
359
359
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
360
- 0.9.37 (ruby-3.4.4).
360
+ 0.9.37 (ruby-3.4.5).
361
361
  </div>
362
362
 
363
363
  </div>
@@ -347,9 +347,9 @@
347
347
  </div>
348
348
 
349
349
  <div id="footer">
350
- Generated on Mon Jul 21 18:28:17 2025 by
350
+ Generated on Tue Aug 12 16:58:16 2025 by
351
351
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
352
- 0.9.37 (ruby-3.4.4).
352
+ 0.9.37 (ruby-3.4.5).
353
353
  </div>
354
354
 
355
355
  </div>
@@ -379,9 +379,9 @@
379
379
  </div>
380
380
 
381
381
  <div id="footer">
382
- Generated on Mon Jul 21 18:28:17 2025 by
382
+ Generated on Tue Aug 12 16:58:16 2025 by
383
383
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
384
- 0.9.37 (ruby-3.4.4).
384
+ 0.9.37 (ruby-3.4.5).
385
385
  </div>
386
386
 
387
387
  </div>
@@ -329,9 +329,9 @@
329
329
  </div>
330
330
 
331
331
  <div id="footer">
332
- Generated on Mon Jul 21 18:28:17 2025 by
332
+ Generated on Tue Aug 12 16:58:16 2025 by
333
333
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
334
- 0.9.37 (ruby-3.4.4).
334
+ 0.9.37 (ruby-3.4.5).
335
335
  </div>
336
336
 
337
337
  </div>
@@ -319,9 +319,9 @@
319
319
  </div>
320
320
 
321
321
  <div id="footer">
322
- Generated on Mon Jul 21 18:28:17 2025 by
322
+ Generated on Tue Aug 12 16:58:16 2025 by
323
323
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
324
- 0.9.37 (ruby-3.4.4).
324
+ 0.9.37 (ruby-3.4.5).
325
325
  </div>
326
326
 
327
327
  </div>
@@ -337,9 +337,9 @@
337
337
  </div>
338
338
 
339
339
  <div id="footer">
340
- Generated on Mon Jul 21 18:28:17 2025 by
340
+ Generated on Tue Aug 12 16:58:16 2025 by
341
341
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
342
- 0.9.37 (ruby-3.4.4).
342
+ 0.9.37 (ruby-3.4.5).
343
343
  </div>
344
344
 
345
345
  </div>
@@ -373,9 +373,9 @@
373
373
  </div>
374
374
 
375
375
  <div id="footer">
376
- Generated on Mon Jul 21 18:28:17 2025 by
376
+ Generated on Tue Aug 12 16:58:16 2025 by
377
377
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
378
- 0.9.37 (ruby-3.4.4).
378
+ 0.9.37 (ruby-3.4.5).
379
379
  </div>
380
380
 
381
381
  </div>
@@ -173,9 +173,9 @@
173
173
  </div>
174
174
 
175
175
  <div id="footer">
176
- Generated on Mon Jul 21 18:28:17 2025 by
176
+ Generated on Tue Aug 12 16:58:16 2025 by
177
177
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
178
- 0.9.37 (ruby-3.4.4).
178
+ 0.9.37 (ruby-3.4.5).
179
179
  </div>
180
180
 
181
181
  </div>
@@ -260,9 +260,9 @@
260
260
  </div>
261
261
 
262
262
  <div id="footer">
263
- Generated on Mon Jul 21 18:28:18 2025 by
263
+ Generated on Tue Aug 12 16:58:17 2025 by
264
264
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
265
- 0.9.37 (ruby-3.4.4).
265
+ 0.9.37 (ruby-3.4.5).
266
266
  </div>
267
267
 
268
268
  </div>
@@ -247,9 +247,9 @@
247
247
  </div>
248
248
 
249
249
  <div id="footer">
250
- Generated on Mon Jul 21 18:28:18 2025 by
250
+ Generated on Tue Aug 12 16:58:17 2025 by
251
251
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
252
- 0.9.37 (ruby-3.4.4).
252
+ 0.9.37 (ruby-3.4.5).
253
253
  </div>
254
254
 
255
255
  </div>
@@ -470,7 +470,7 @@
470
470
  <span class='label'>image_name:</span><span class='comma'>,</span>
471
471
  <span class='label'>dockerfile:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>deploy/Dockerfile.</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
472
472
  <span class='label'>heroku_image_name:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>registry.heroku.com/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_heroku_app_name'>heroku_app_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
473
- <span class='rbrace'>}</span>
473
+ <span class='rbrace'>}</span><span class='comma'>,</span>
474
474
  <span class='rbracket'>]</span>
475
475
  <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span>
476
476
 
@@ -575,9 +575,9 @@
575
575
  </div>
576
576
 
577
577
  <div id="footer">
578
- Generated on Mon Jul 21 18:28:18 2025 by
578
+ Generated on Tue Aug 12 16:58:17 2025 by
579
579
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
580
- 0.9.37 (ruby-3.4.4).
580
+ 0.9.37 (ruby-3.4.5).
581
581
  </div>
582
582
 
583
583
  </div>
@@ -186,9 +186,9 @@
186
186
  </div>
187
187
 
188
188
  <div id="footer">
189
- Generated on Mon Jul 21 18:28:18 2025 by
189
+ Generated on Tue Aug 12 16:58:17 2025 by
190
190
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
191
- 0.9.37 (ruby-3.4.4).
191
+ 0.9.37 (ruby-3.4.5).
192
192
  </div>
193
193
 
194
194
  </div>
@@ -293,9 +293,9 @@
293
293
  </div>
294
294
 
295
295
  <div id="footer">
296
- Generated on Mon Jul 21 18:28:18 2025 by
296
+ Generated on Tue Aug 12 16:58:17 2025 by
297
297
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
298
- 0.9.37 (ruby-3.4.4).
298
+ 0.9.37 (ruby-3.4.5).
299
299
  </div>
300
300
 
301
301
  </div>
@@ -498,9 +498,9 @@ end</span><span class='tstring_end'>}</span></span>
498
498
  </div>
499
499
 
500
500
  <div id="footer">
501
- Generated on Mon Jul 21 18:28:18 2025 by
501
+ Generated on Tue Aug 12 16:58:17 2025 by
502
502
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
503
- 0.9.37 (ruby-3.4.4).
503
+ 0.9.37 (ruby-3.4.5).
504
504
  </div>
505
505
 
506
506
  </div>
@@ -388,9 +388,9 @@ end</span><span class='tstring_end'>}</span></span>
388
388
  </div>
389
389
 
390
390
  <div id="footer">
391
- Generated on Mon Jul 21 18:28:17 2025 by
391
+ Generated on Tue Aug 12 16:58:17 2025 by
392
392
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
393
- 0.9.37 (ruby-3.4.4).
393
+ 0.9.37 (ruby-3.4.5).
394
394
  </div>
395
395
 
396
396
  </div>
@@ -364,9 +364,9 @@ assert.fail(&quot;test goes here&quot;)
364
364
  </div>
365
365
 
366
366
  <div id="footer">
367
- Generated on Mon Jul 21 18:28:18 2025 by
367
+ Generated on Tue Aug 12 16:58:17 2025 by
368
368
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
369
- 0.9.37 (ruby-3.4.4).
369
+ 0.9.37 (ruby-3.4.5).
370
370
  </div>
371
371
 
372
372
  </div>
@@ -374,9 +374,9 @@ end
374
374
  </div>
375
375
 
376
376
  <div id="footer">
377
- Generated on Mon Jul 21 18:28:18 2025 by
377
+ Generated on Tue Aug 12 16:58:17 2025 by
378
378
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
379
- 0.9.37 (ruby-3.4.4).
379
+ 0.9.37 (ruby-3.4.5).
380
380
  </div>
381
381
 
382
382
  </div>
@@ -400,9 +400,9 @@ end</span><span class='tstring_end'>}</span></span>
400
400
  </div>
401
401
 
402
402
  <div id="footer">
403
- Generated on Mon Jul 21 18:28:17 2025 by
403
+ Generated on Tue Aug 12 16:58:17 2025 by
404
404
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
405
- 0.9.37 (ruby-3.4.4).
405
+ 0.9.37 (ruby-3.4.5).
406
406
  </div>
407
407
 
408
408
  </div>
@@ -252,9 +252,9 @@
252
252
  </div>
253
253
 
254
254
  <div id="footer">
255
- Generated on Mon Jul 21 18:28:18 2025 by
255
+ Generated on Tue Aug 12 16:58:17 2025 by
256
256
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
257
- 0.9.37 (ruby-3.4.4).
257
+ 0.9.37 (ruby-3.4.5).
258
258
  </div>
259
259
 
260
260
  </div>
@@ -293,9 +293,9 @@
293
293
  </div>
294
294
 
295
295
  <div id="footer">
296
- Generated on Mon Jul 21 18:28:18 2025 by
296
+ Generated on Tue Aug 12 16:58:17 2025 by
297
297
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
298
- 0.9.37 (ruby-3.4.4).
298
+ 0.9.37 (ruby-3.4.5).
299
299
  </div>
300
300
 
301
301
  </div>
@@ -470,9 +470,9 @@ end</span><span class='tstring_end'>}</span></span>
470
470
  </div>
471
471
 
472
472
  <div id="footer">
473
- Generated on Mon Jul 21 18:28:18 2025 by
473
+ Generated on Tue Aug 12 16:58:17 2025 by
474
474
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
475
- 0.9.37 (ruby-3.4.4).
475
+ 0.9.37 (ruby-3.4.5).
476
476
  </div>
477
477
 
478
478
  </div>
@@ -440,9 +440,9 @@
440
440
  </div>
441
441
 
442
442
  <div id="footer">
443
- Generated on Mon Jul 21 18:28:18 2025 by
443
+ Generated on Tue Aug 12 16:58:17 2025 by
444
444
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
445
- 0.9.37 (ruby-3.4.4).
445
+ 0.9.37 (ruby-3.4.5).
446
446
  </div>
447
447
 
448
448
  </div>
@@ -331,7 +331,7 @@
331
331
  <span class='id identifier rubyid_files_to_test_files'>files_to_test_files</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_source'>source</span><span class='comma'>,</span><span class='id identifier rubyid_destination'>destination</span><span class='op'>|</span>
332
332
  <span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='const'>Prism</span><span class='period'>.</span><span class='id identifier rubyid_parse_file'>parse_file</span><span class='lparen'>(</span><span class='id identifier rubyid_source'>source</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
333
333
  <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_result'>result</span>
334
- <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>For some reason Prism did not parse </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_source'>source</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
334
+ <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>For some reason Prism did not parse </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_source'>source</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
335
335
  <span class='kw'>end</span>
336
336
  <span class='id identifier rubyid_classes'>classes</span> <span class='op'>=</span> <span class='id identifier rubyid_find_classes'>find_classes</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='lparen'>(</span><span class='id identifier rubyid_module_nodes'>module_nodes</span><span class='comma'>,</span><span class='id identifier rubyid_class_node'>class_node</span><span class='rparen'>)</span><span class='op'>|</span>
337
337
  <span class='lparen'>(</span><span class='id identifier rubyid_module_nodes'>module_nodes</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:constant_path</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:full_name</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:to_s</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='lbracket'>[</span><span class='id identifier rubyid_class_node'>class_node</span><span class='period'>.</span><span class='id identifier rubyid_constant_path'>constant_path</span><span class='period'>.</span><span class='id identifier rubyid_full_name'>full_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>::</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
@@ -370,9 +370,9 @@ end</span><span class='tstring_end'>}</span></span>
370
370
  </div>
371
371
 
372
372
  <div id="footer">
373
- Generated on Mon Jul 21 18:28:17 2025 by
373
+ Generated on Tue Aug 12 16:58:17 2025 by
374
374
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
375
- 0.9.37 (ruby-3.4.4).
375
+ 0.9.37 (ruby-3.4.5).
376
376
  </div>
377
377
 
378
378
  </div>
@@ -243,9 +243,9 @@
243
243
  </div>
244
244
 
245
245
  <div id="footer">
246
- Generated on Mon Jul 21 18:28:17 2025 by
246
+ Generated on Tue Aug 12 16:58:17 2025 by
247
247
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
248
- 0.9.37 (ruby-3.4.4).
248
+ 0.9.37 (ruby-3.4.5).
249
249
  </div>
250
250
 
251
251
  </div>
@@ -456,9 +456,9 @@
456
456
  </div>
457
457
 
458
458
  <div id="footer">
459
- Generated on Mon Jul 21 18:28:17 2025 by
459
+ Generated on Tue Aug 12 16:58:16 2025 by
460
460
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
461
- 0.9.37 (ruby-3.4.4).
461
+ 0.9.37 (ruby-3.4.5).
462
462
  </div>
463
463
 
464
464
  </div>
@@ -397,9 +397,9 @@
397
397
  </div>
398
398
 
399
399
  <div id="footer">
400
- Generated on Mon Jul 21 18:28:17 2025 by
400
+ Generated on Tue Aug 12 16:58:16 2025 by
401
401
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
402
- 0.9.37 (ruby-3.4.4).
402
+ 0.9.37 (ruby-3.4.5).
403
403
  </div>
404
404
 
405
405
  </div>
@@ -252,9 +252,9 @@
252
252
  </div>
253
253
 
254
254
  <div id="footer">
255
- Generated on Mon Jul 21 18:28:17 2025 by
255
+ Generated on Tue Aug 12 16:58:16 2025 by
256
256
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
257
- 0.9.37 (ruby-3.4.4).
257
+ 0.9.37 (ruby-3.4.5).
258
258
  </div>
259
259
 
260
260
  </div>
@@ -568,9 +568,9 @@
568
568
  </div>
569
569
 
570
570
  <div id="footer">
571
- Generated on Mon Jul 21 18:28:17 2025 by
571
+ Generated on Tue Aug 12 16:58:16 2025 by
572
572
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
573
- 0.9.37 (ruby-3.4.4).
573
+ 0.9.37 (ruby-3.4.5).
574
574
  </div>
575
575
 
576
576
  </div>
@@ -243,9 +243,9 @@
243
243
  </div>
244
244
 
245
245
  <div id="footer">
246
- Generated on Mon Jul 21 18:28:17 2025 by
246
+ Generated on Tue Aug 12 16:58:16 2025 by
247
247
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
248
- 0.9.37 (ruby-3.4.4).
248
+ 0.9.37 (ruby-3.4.5).
249
249
  </div>
250
250
 
251
251
  </div>
@@ -115,9 +115,9 @@
115
115
  </div>
116
116
 
117
117
  <div id="footer">
118
- Generated on Mon Jul 21 18:28:17 2025 by
118
+ Generated on Tue Aug 12 16:58:16 2025 by
119
119
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
120
- 0.9.37 (ruby-3.4.4).
120
+ 0.9.37 (ruby-3.4.5).
121
121
  </div>
122
122
 
123
123
  </div>
@@ -2415,9 +2415,9 @@ the built-in <span class='object_link'><a href="Apps/DB.html" title="Brut::CLI::
2415
2415
  </div>
2416
2416
 
2417
2417
  <div id="footer">
2418
- Generated on Mon Jul 21 18:28:17 2025 by
2418
+ Generated on Tue Aug 12 16:58:16 2025 by
2419
2419
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
2420
- 0.9.37 (ruby-3.4.4).
2420
+ 0.9.37 (ruby-3.4.5).
2421
2421
  </div>
2422
2422
 
2423
2423
  </div>
@@ -129,9 +129,9 @@ trace.</p>
129
129
  </div>
130
130
 
131
131
  <div id="footer">
132
- Generated on Mon Jul 21 18:28:17 2025 by
132
+ Generated on Tue Aug 12 16:58:16 2025 by
133
133
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
134
- 0.9.37 (ruby-3.4.4).
134
+ 0.9.37 (ruby-3.4.5).
135
135
  </div>
136
136
 
137
137
  </div>
@@ -654,9 +654,9 @@
654
654
  </div>
655
655
 
656
656
  <div id="footer">
657
- Generated on Mon Jul 21 18:28:18 2025 by
657
+ Generated on Tue Aug 12 16:58:17 2025 by
658
658
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
659
- 0.9.37 (ruby-3.4.4).
659
+ 0.9.37 (ruby-3.4.5).
660
660
  </div>
661
661
 
662
662
  </div>
@@ -665,9 +665,9 @@ command.</p>
665
665
  </div>
666
666
 
667
667
  <div id="footer">
668
- Generated on Mon Jul 21 18:28:17 2025 by
668
+ Generated on Tue Aug 12 16:58:16 2025 by
669
669
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
670
- 0.9.37 (ruby-3.4.4).
670
+ 0.9.37 (ruby-3.4.5).
671
671
  </div>
672
672
 
673
673
  </div>
@@ -551,9 +551,9 @@ instead, as it will not raise an exception.</p>
551
551
  </div>
552
552
 
553
553
  <div id="footer">
554
- Generated on Mon Jul 21 18:28:17 2025 by
554
+ Generated on Tue Aug 12 16:58:16 2025 by
555
555
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
556
- 0.9.37 (ruby-3.4.4).
556
+ 0.9.37 (ruby-3.4.5).
557
557
  </div>
558
558
 
559
559
  </div>
@@ -235,9 +235,9 @@ error message given the global/command optiona dichotomy.</p>
235
235
  </div>
236
236
 
237
237
  <div id="footer">
238
- Generated on Mon Jul 21 18:28:17 2025 by
238
+ Generated on Tue Aug 12 16:58:16 2025 by
239
239
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
240
- 0.9.37 (ruby-3.4.4).
240
+ 0.9.37 (ruby-3.4.5).
241
241
  </div>
242
242
 
243
243
  </div>
@@ -238,6 +238,29 @@
238
238
  <span class="summary_desc"><div class='inline'><p>Dynamically creates methods for each command-line option.</p>
239
239
  </div></span>
240
240
 
241
+ </li>
242
+
243
+
244
+ <li class="public ">
245
+ <span class="summary_signature">
246
+
247
+ <a href="#respond_to_missing%3F-instance_method" title="#respond_to_missing? (instance method)">#<strong>respond_to_missing?</strong>(sym, include_private = false) &#x21d2; Boolean </a>
248
+
249
+
250
+
251
+ </span>
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+ <span class="summary_desc"><div class='inline'>
262
+ </div></span>
263
+
241
264
  </li>
242
265
 
243
266
 
@@ -661,6 +684,61 @@ will respond to any method that either takes no arguments or where the only argu
661
684
  </td>
662
685
  </tr>
663
686
  </table>
687
+ </div>
688
+
689
+ <div class="method_details ">
690
+ <h3 class="signature " id="respond_to_missing?-instance_method">
691
+
692
+ #<strong>respond_to_missing?</strong>(sym, include_private = false) &#x21d2; <tt>Boolean</tt>
693
+
694
+
695
+
696
+
697
+
698
+ </h3><div class="docstring">
699
+ <div class="discussion">
700
+
701
+
702
+
703
+ </div>
704
+ </div>
705
+ <div class="tags">
706
+
707
+ <p class="tag_title">Returns:</p>
708
+ <ul class="return">
709
+
710
+ <li>
711
+
712
+
713
+ <span class='type'>(<tt>Boolean</tt>)</span>
714
+
715
+
716
+
717
+ </li>
718
+
719
+ </ul>
720
+
721
+ </div><table class="source_code">
722
+ <tr>
723
+ <td>
724
+ <pre class="lines">
725
+
726
+
727
+ 77
728
+ 78
729
+ 79
730
+ 80</pre>
731
+ </td>
732
+ <td>
733
+ <pre class="code"><span class="info file"># File 'lib/brut/cli/options.rb', line 77</span>
734
+
735
+ <span class='kw'>def</span> <span class='id identifier rubyid_respond_to_missing?'>respond_to_missing?</span><span class='lparen'>(</span><span class='id identifier rubyid_sym'>sym</span><span class='comma'>,</span> <span class='id identifier rubyid_include_private'>include_private</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
736
+ <span class='comment'># XXX: Maybe this should not
737
+ </span> <span class='kw'>true</span>
738
+ <span class='kw'>end</span></pre>
739
+ </td>
740
+ </tr>
741
+ </table>
664
742
  </div>
665
743
 
666
744
  <div class="method_details ">
@@ -792,9 +870,9 @@ line.</p>
792
870
  </div>
793
871
 
794
872
  <div id="footer">
795
- Generated on Mon Jul 21 18:28:17 2025 by
873
+ Generated on Tue Aug 12 16:58:16 2025 by
796
874
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
797
- 0.9.37 (ruby-3.4.4).
875
+ 0.9.37 (ruby-3.4.5).
798
876
  </div>
799
877
 
800
878
  </div>