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
@@ -139,9 +139,9 @@ like <code>[href="#{page_klass.routing(**args)}"]</code>.</p>
139
139
  </div>
140
140
 
141
141
  <div id="footer">
142
- Generated on Mon Jul 21 18:28:18 2025 by
142
+ Generated on Tue Aug 12 16:58:17 2025 by
143
143
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
144
- 0.9.37 (ruby-3.4.4).
144
+ 0.9.37 (ruby-3.4.5).
145
145
  </div>
146
146
 
147
147
  </div>
@@ -155,9 +155,9 @@ did what you expect</p>
155
155
  </div>
156
156
 
157
157
  <div id="footer">
158
- Generated on Mon Jul 21 18:28:18 2025 by
158
+ Generated on Tue Aug 12 16:58:18 2025 by
159
159
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
160
- 0.9.37 (ruby-3.4.4).
160
+ 0.9.37 (ruby-3.4.5).
161
161
  </div>
162
162
 
163
163
  </div>
@@ -148,9 +148,9 @@ did what you expect</p>
148
148
  </div>
149
149
 
150
150
  <div id="footer">
151
- Generated on Mon Jul 21 18:28:19 2025 by
151
+ Generated on Tue Aug 12 16:58:18 2025 by
152
152
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
153
- 0.9.37 (ruby-3.4.4).
153
+ 0.9.37 (ruby-3.4.5).
154
154
  </div>
155
155
 
156
156
  </div>
@@ -146,9 +146,9 @@ did what you expect</p>
146
146
  </div>
147
147
 
148
148
  <div id="footer">
149
- Generated on Mon Jul 21 18:28:19 2025 by
149
+ Generated on Tue Aug 12 16:58:18 2025 by
150
150
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
151
- 0.9.37 (ruby-3.4.4).
151
+ 0.9.37 (ruby-3.4.5).
152
152
  </div>
153
153
 
154
154
  </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>
@@ -325,9 +325,9 @@
325
325
  </div>
326
326
 
327
327
  <div id="footer">
328
- Generated on Mon Jul 21 18:28:18 2025 by
328
+ Generated on Tue Aug 12 16:58:17 2025 by
329
329
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
330
- 0.9.37 (ruby-3.4.4).
330
+ 0.9.37 (ruby-3.4.5).
331
331
  </div>
332
332
 
333
333
  </div>
@@ -550,10 +550,10 @@ re-run a test. But, it's still monkey-patching.</p>
550
550
  <span class='kw'>if</span> <span class='id identifier rubyid_needs_request_context'>needs_request_context</span>
551
551
  <span class='id identifier rubyid_session'>session</span> <span class='op'>=</span> <span class='lbrace'>{</span>
552
552
  <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>session_id</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>test-session-id</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
553
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>csrf</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>test-csrf-token</span><span class='tstring_end'>&quot;</span></span>
553
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>csrf</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>test-csrf-token</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
554
554
  <span class='rbrace'>}</span>
555
555
  <span class='id identifier rubyid_env'>env</span> <span class='op'>=</span> <span class='lbrace'>{</span>
556
- <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>rack.session</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_session'>session</span>
556
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>rack.session</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_session'>session</span><span class='comma'>,</span>
557
557
  <span class='rbrace'>}</span>
558
558
  <span class='id identifier rubyid_app_session'>app_session</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='period'>.</span><span class='id identifier rubyid_container'><span class='object_link'><a href="../../Brut.html#container-class_method" title="Brut.container (method)">container</a></span></span><span class='period'>.</span><span class='id identifier rubyid_session_class'>session_class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='label'>rack_session:</span> <span class='id identifier rubyid_session'>session</span><span class='rparen'>)</span>
559
559
  <span class='id identifier rubyid_request_context'>request_context</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd.html" title="Brut::FrontEnd (module)">FrontEnd</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../FrontEnd/RequestContext.html" title="Brut::FrontEnd::RequestContext (class)">RequestContext</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../FrontEnd/RequestContext.html#initialize-instance_method" title="Brut::FrontEnd::RequestContext#initialize (method)">new</a></span></span><span class='lparen'>(</span>
@@ -627,9 +627,9 @@ re-run a test. But, it's still monkey-patching.</p>
627
627
  </div>
628
628
 
629
629
  <div id="footer">
630
- Generated on Mon Jul 21 18:28:18 2025 by
630
+ Generated on Tue Aug 12 16:58:17 2025 by
631
631
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
632
- 0.9.37 (ruby-3.4.4).
632
+ 0.9.37 (ruby-3.4.5).
633
633
  </div>
634
634
 
635
635
  </div>
@@ -186,9 +186,9 @@
186
186
  </div>
187
187
 
188
188
  <div id="footer">
189
- Generated on Mon Jul 21 18:28:17 2025 by
189
+ Generated on Tue Aug 12 16:58:16 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>
@@ -119,9 +119,9 @@ Your app's <code>spec_helper.rb</code> should require these explicitly.</p>
119
119
  </div>
120
120
 
121
121
  <div id="footer">
122
- Generated on Mon Jul 21 18:28:17 2025 by
122
+ Generated on Tue Aug 12 16:58:16 2025 by
123
123
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
124
- 0.9.37 (ruby-3.4.4).
124
+ 0.9.37 (ruby-3.4.5).
125
125
  </div>
126
126
 
127
127
  </div>
data/docs/api/Brut.html CHANGED
@@ -79,7 +79,7 @@
79
79
  <dl>
80
80
  <dt>Defined in:</dt>
81
81
  <dd>lib/brut.rb<span class="defines">,<br />
82
- lib/brut/cli.rb,<br /> lib/brut/version.rb,<br /> lib/brut/framework.rb,<br /> lib/brut/spec_support.rb,<br /> lib/brut/cli/app_runner.rb,<br /> lib/brut/framework/errors.rb,<br /> lib/brut/back_end/seed_data.rb,<br /> lib/brut/framework/container.rb,<br /> lib/brut/cli/execution_results.rb</span>
82
+ lib/brut/cli.rb,<br /> lib/brut/version.rb,<br /> lib/brut/framework.rb,<br /> lib/brut/spec_support.rb,<br /> lib/brut/cli/app_runner.rb,<br /> lib/brut/rubocop_config.rb,<br /> lib/brut/framework/errors.rb,<br /> lib/brut/back_end/seed_data.rb,<br /> lib/brut/framework/container.rb,<br /> lib/brut/cli/execution_results.rb</span>
83
83
  </dd>
84
84
  </dl>
85
85
 
@@ -87,15 +87,10 @@
87
87
 
88
88
  <h2>Overview</h2><div class="docstring">
89
89
  <div class="discussion">
90
- <p>Brut is a way to make web apps with Ruby. It focuses on web standards, object-orientation, and other
91
- fundamentals. Brut seeks to minimize abstractions where possible.</p>
90
+ <ul>
91
+ <li>prevent use of postfix conditonals entirely</li>
92
+ </ul>
92
93
 
93
- <p>Brut encourages the use of the browser's technology and encourages you to build a web app based
94
- on good practices that are set up by default. Brut may not look easy, but it aims to be simple.
95
- It attempts to minimize dependencies and complexity, while leveraging
96
- common tested Ruby libraries related to web development.</p>
97
-
98
- <p>Have fun!</p>
99
94
 
100
95
 
101
96
  </div>
@@ -111,11 +106,132 @@ common tested Ruby libraries related to web development.</p>
111
106
 
112
107
 
113
108
 
114
- <strong class="classes">Classes:</strong> <span class='object_link'><a href="Brut/FactoryBot.html" title="Brut::FactoryBot (class)">FactoryBot</a></span>
109
+ <strong class="classes">Classes:</strong> <span class='object_link'><a href="Brut/FactoryBot.html" title="Brut::FactoryBot (class)">FactoryBot</a></span>, <span class='object_link'><a href="Brut/RubocopConfig.html" title="Brut::RubocopConfig (class)">RubocopConfig</a></span>
115
110
 
116
111
 
117
112
  </p>
118
113
 
114
+
115
+ <h2>
116
+ Constant Summary
117
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
118
+ </h2>
119
+
120
+ <dl class="constants">
121
+
122
+ <dt id="IM_NOT_CALLING_THEM_COPS-constant" class="">IM_NOT_CALLING_THEM_COPS =
123
+
124
+ </dt>
125
+ <dd><pre class="code"><span class='lbrace'>{</span>
126
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Gemspec/AddRuntimeDependency</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
127
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AmbiguousAssignment</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
128
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AmbiguousOperator</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
129
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AmbiguousOperatorPrecedence</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
130
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AmbiguousRange</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
131
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AmbiguousRegexpLiteral</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
132
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/DuplicateCaseCondition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
133
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/DuplicateElsifCondition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
134
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/Loop</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
135
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/RedundantSplatExpansion</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
136
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/RedundantStringCoercion</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
137
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/RedundantTypeConversion</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
138
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/ToJSON</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
139
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/ColonMethodDefinition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
140
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/DefWithParentheses</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
141
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/InvertibleUnlessCondition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
142
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/KeywordArgumentsMerging</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
143
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/MethodDefParentheses</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
144
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/MissingRespondToMissing</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
145
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/MultilineTernaryOperator</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
146
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/NegatedUnless</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
147
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/NestedTernaryOperator</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
148
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/PreferredHashMethods</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
149
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/UnlessElse</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
150
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/UnlessLogicalOperators</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
151
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Layout/DotPosition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
152
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyle</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>trailing</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
153
+ <span class='rbrace'>}</span><span class='comma'>,</span>
154
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lint/AssignmentInCondition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
155
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>AllowSafeAssignment</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>false</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
156
+ <span class='rbrace'>}</span><span class='comma'>,</span>
157
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/ClassMethodsDefinitions</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
158
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyle</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>def_self</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
159
+ <span class='rbrace'>}</span><span class='comma'>,</span>
160
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/CollectionMethods</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
161
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>PreferredMethods</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
162
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>find</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>detect</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
163
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>collect</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>map</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
164
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>find_all</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>select</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
165
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>member?</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>include?</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
166
+ <span class='rbrace'>}</span><span class='comma'>,</span>
167
+ <span class='rbrace'>}</span><span class='comma'>,</span>
168
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/EndlessMethod</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
169
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyle</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>allow_single_line</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
170
+ <span class='rbrace'>}</span><span class='comma'>,</span>
171
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/For</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
172
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyle</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>each</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
173
+ <span class='rbrace'>}</span><span class='comma'>,</span>
174
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/YodaCondition</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
175
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyle</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>forbid_for_all_comparison_operators</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
176
+ <span class='rbrace'>}</span><span class='comma'>,</span>
177
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/DisableSyntax</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
178
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>DisableSyntax</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span>
179
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>unless</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
180
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>and_or_not</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
181
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>until</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
182
+ <span class='rbracket'>]</span><span class='comma'>,</span>
183
+ <span class='rbrace'>}</span><span class='comma'>,</span>
184
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/TrailingCommaInArrayLiteral</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
185
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyleForMultiline</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>consistent_comma</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
186
+ <span class='rbrace'>}</span><span class='comma'>,</span>
187
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Style/TrailingCommaInHashLiteral</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
188
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>EnforcedStyleForMultiline</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>consistent_comma</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
189
+ <span class='rbrace'>}</span><span class='comma'>,</span>
190
+ <span class='comment'># Documented, but nonexistent
191
+ </span> <span class='comment'>#&quot;Style/ItBlockParameter&quot; =&gt; {
192
+ </span> <span class='comment'># &quot;EnforcedStyle&quot; =&gt; &quot;allow_single_line&quot;,
193
+ </span> <span class='comment'>#},
194
+ </span><span class='rbrace'>}</span></pre></dd>
195
+
196
+ <dt id="PREAMBLE-constant" class="">PREAMBLE =
197
+ <div class="docstring">
198
+ <div class="discussion">
199
+ <p>Documented, but nonexistent
200
+ "Style/ItBlockParameter" => {
201
+ "EnforcedStyle" => "allow_single_line",
202
+ },</p>
203
+
204
+
205
+ </div>
206
+ </div>
207
+ <div class="tags">
208
+
209
+
210
+ </div>
211
+ </dt>
212
+ <dd><pre class="code"><span class='lbrace'>{</span>
213
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>inherit_mode</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
214
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>merge</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Exclude</span><span class='tstring_end'>&quot;</span></span> <span class='rbracket'>]</span><span class='comma'>,</span>
215
+ <span class='rbrace'>}</span><span class='comma'>,</span>
216
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>plugins</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span>
217
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>rubocop-disable_syntax</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
218
+ <span class='rbracket'>]</span><span class='comma'>,</span>
219
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>AllCops</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span>
220
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>DisabledByDefault</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>true</span><span class='comma'>,</span>
221
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>TargetRubyVersion</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='const'>RUBY_VERSION</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='lbracket'>[</span><span class='int'>0</span><span class='op'>..</span><span class='int'>1</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span><span class='comma'>,</span>
222
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>SuggestExtensions</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='kw'>false</span><span class='comma'>,</span>
223
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Exclude</span><span class='tstring_end'>&quot;</span></span> <span class='op'>=&gt;</span> <span class='lbracket'>[</span>
224
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>local-gems/**/*</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
225
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>**/local-gems/**/*</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
226
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>node_modules/**/*</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
227
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>**/node_modules/**/*</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
228
+ <span class='rbracket'>]</span><span class='comma'>,</span>
229
+ <span class='rbrace'>}</span><span class='comma'>,</span>
230
+ <span class='rbrace'>}</span></pre></dd>
231
+
232
+ </dl>
233
+
234
+
119
235
 
120
236
 
121
237
 
@@ -215,9 +331,9 @@ common tested Ruby libraries related to web development.</p>
215
331
  </div>
216
332
 
217
333
  <div id="footer">
218
- Generated on Mon Jul 21 18:28:17 2025 by
334
+ Generated on Tue Aug 12 16:58:16 2025 by
219
335
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
220
- 0.9.37 (ruby-3.4.4).
336
+ 0.9.37 (ruby-3.4.5).
221
337
  </div>
222
338
 
223
339
  </div>
data/docs/api/Clock.html CHANGED
@@ -593,9 +593,9 @@ returned in the configured time zone.</p>
593
593
  </div>
594
594
 
595
595
  <div id="footer">
596
- Generated on Mon Jul 21 18:28:17 2025 by
596
+ Generated on Tue Aug 12 16:58:16 2025 by
597
597
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
598
- 0.9.37 (ruby-3.4.4).
598
+ 0.9.37 (ruby-3.4.5).
599
599
  </div>
600
600
 
601
601
  </div>
@@ -327,12 +327,12 @@
327
327
  <pre class="lines">
328
328
 
329
329
 
330
- 189
331
- 190
332
- 191</pre>
330
+ 191
331
+ 192
332
+ 193</pre>
333
333
  </td>
334
334
  <td>
335
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 189</span>
335
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 191</span>
336
336
 
337
337
  <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_parts_of_module'>parts_of_module</span><span class='rparen'>)</span>
338
338
  <span class='ivar'>@parts_of_module</span> <span class='op'>=</span> <span class='id identifier rubyid_parts_of_module'>parts_of_module</span>
@@ -374,12 +374,12 @@
374
374
  <pre class="lines">
375
375
 
376
376
 
377
- 187
378
- 188
379
- 189</pre>
377
+ 189
378
+ 190
379
+ 191</pre>
380
380
  </td>
381
381
  <td>
382
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 187</span>
382
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 189</span>
383
383
 
384
384
  <span class='kw'>def</span> <span class='id identifier rubyid_parts_of_module'>parts_of_module</span>
385
385
  <span class='ivar'>@parts_of_module</span>
@@ -411,16 +411,16 @@
411
411
  <pre class="lines">
412
412
 
413
413
 
414
- 179
415
- 180
416
414
  181
417
415
  182
418
416
  183
419
417
  184
420
- 185</pre>
418
+ 185
419
+ 186
420
+ 187</pre>
421
421
  </td>
422
422
  <td>
423
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 179</span>
423
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 181</span>
424
424
 
425
425
  <span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_from_string'>from_string</span><span class='lparen'>(</span><span class='id identifier rubyid_string'>string</span><span class='rparen'>)</span>
426
426
  <span class='id identifier rubyid_string'>string</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="RichString.html" title="RichString (class)">RichString</a></span></span><span class='period'>.</span><span class='id identifier rubyid_from_string'><span class='object_link'><a href="RichString.html#from_string-class_method" title="RichString.from_string (method)">from_string</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_string'>string</span><span class='rparen'>)</span>
@@ -455,12 +455,12 @@
455
455
  <pre class="lines">
456
456
 
457
457
 
458
- 201
459
- 202
460
- 203</pre>
458
+ 203
459
+ 204
460
+ 205</pre>
461
461
  </td>
462
462
  <td>
463
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 201</span>
463
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 203</span>
464
464
 
465
465
  <span class='kw'>def</span> <span class='id identifier rubyid_append'>append</span><span class='lparen'>(</span><span class='id identifier rubyid_module_name'>module_name</span><span class='rparen'>)</span>
466
466
  <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_new'>new</span><span class='lparen'>(</span><span class='ivar'>@parts_of_module</span> <span class='op'>+</span> <span class='id identifier rubyid_module_name'>module_name</span><span class='period'>.</span><span class='id identifier rubyid_parts_of_module'>parts_of_module</span><span class='rparen'>)</span>
@@ -485,16 +485,16 @@
485
485
  <pre class="lines">
486
486
 
487
487
 
488
- 193
489
- 194
490
488
  195
491
489
  196
492
490
  197
493
491
  198
494
- 199</pre>
492
+ 199
493
+ 200
494
+ 201</pre>
495
495
  </td>
496
496
  <td>
497
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 193</span>
497
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 195</span>
498
498
 
499
499
  <span class='kw'>def</span> <span class='id identifier rubyid_in_module'>in_module</span><span class='lparen'>(</span><span class='id identifier rubyid_module_name'>module_name</span><span class='rparen'>)</span>
500
500
  <span class='kw'>if</span> <span class='id identifier rubyid_in_module?'>in_module?</span><span class='lparen'>(</span><span class='id identifier rubyid_module_name'>module_name</span><span class='rparen'>)</span>
@@ -523,8 +523,6 @@
523
523
  <pre class="lines">
524
524
 
525
525
 
526
- 207
527
- 208
528
526
  209
529
527
  210
530
528
  211
@@ -533,10 +531,12 @@
533
531
  214
534
532
  215
535
533
  216
536
- 217</pre>
534
+ 217
535
+ 218
536
+ 219</pre>
537
537
  </td>
538
538
  <td>
539
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 207</span>
539
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 209</span>
540
540
 
541
541
  <span class='kw'>def</span> <span class='id identifier rubyid_path_from'>path_from</span><span class='lparen'>(</span><span class='id identifier rubyid_base_path'>base_path</span><span class='comma'>,</span> <span class='label'>extname:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>.rb</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
542
542
  <span class='id identifier rubyid_parts_as_path_segment'>parts_as_path_segment</span> <span class='op'>=</span> <span class='ivar'>@parts_of_module</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_part'>part</span><span class='op'>|</span>
@@ -569,10 +569,10 @@
569
569
  <pre class="lines">
570
570
 
571
571
 
572
- 205</pre>
572
+ 207</pre>
573
573
  </td>
574
574
  <td>
575
- <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 205</span>
575
+ <pre class="code"><span class="info file"># File 'lib/brut/junk_drawer.rb', line 207</span>
576
576
 
577
577
  <span class='kw'>def</span> <span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=</span> <span class='ivar'>@parts_of_module</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></pre>
578
578
  </td>
@@ -585,9 +585,9 @@
585
585
  </div>
586
586
 
587
587
  <div id="footer">
588
- Generated on Mon Jul 21 18:28:17 2025 by
588
+ Generated on Tue Aug 12 16:58:16 2025 by
589
589
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
590
- 0.9.37 (ruby-3.4.4).
590
+ 0.9.37 (ruby-3.4.5).
591
591
  </div>
592
592
 
593
593
  </div>