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.
- checksums.yaml +4 -4
- data/.gitignore +9 -0
- data/CHANGELOG.md +13 -0
- data/Dockerfile.dx +8 -1
- data/Gemfile.lock +101 -63
- data/bin/ci +9 -5
- data/bin/docs +1 -1
- data/bin/generate-and-run-rubocop +52 -0
- data/bin/rubocop +27 -0
- data/bin/setup +46 -0
- data/bin/test +18 -0
- data/brut-css/bin/publish +1 -1
- data/brut-css/package-lock.json +2 -2
- data/brut-css/package.json +1 -1
- data/brut-js/bin/publish +1 -1
- data/brut-js/package-lock.json +2 -2
- data/brut-js/package.json +1 -1
- data/brut-js/specs/ConfirmSubmit.spec.js +32 -1
- data/brut-js/src/ConfirmSubmit.js +28 -7
- data/brut.gemspec +32 -26
- data/brutrb.com/.vitepress/config.mjs +3 -0
- data/brutrb.com/database-schema.md +1 -1
- data/brutrb.com/images/tutorial/basic-form-with-violations.png +0 -0
- data/brutrb.com/images/tutorial/basic-form.png +0 -0
- data/brutrb.com/images/tutorial/initial-home-page.png +0 -0
- data/brutrb.com/images/tutorial/new-post-editor.png +0 -0
- data/brutrb.com/images/tutorial/new-post-home-page.png +0 -0
- data/brutrb.com/images/tutorial/styled-form-with-server-side-violations.png +0 -0
- data/brutrb.com/images/tutorial/styled-form-with-violations.png +0 -0
- data/brutrb.com/images/tutorial/styled-home-page-with-posts.png +0 -0
- data/brutrb.com/images/tutorial/styled-home-page.png +0 -0
- data/brutrb.com/images/tutorial/welcome-to-brut.png +0 -0
- data/brutrb.com/recipes/migrations.md +1 -1
- data/brutrb.com/tutorial.md +1728 -3
- data/docker-compose.dx.yml +3 -0
- data/docs/404.html +2 -2
- data/docs/adrs.html +3 -3
- data/docs/ai.html +3 -3
- data/docs/api/Brut/BackEnd/SeedData.html +2 -2
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +2 -2
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +2 -2
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +2 -2
- data/docs/api/Brut/BackEnd/Sidekiq.html +2 -2
- data/docs/api/Brut/BackEnd/Validators/FormValidator.html +2 -2
- data/docs/api/Brut/BackEnd/Validators.html +2 -2
- data/docs/api/Brut/BackEnd.html +2 -2
- data/docs/api/Brut/CLI/App.html +2 -2
- data/docs/api/Brut/CLI/AppRunner.html +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Create.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Drop.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Migrate.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Seed.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB/Status.html +2 -2
- data/docs/api/Brut/CLI/Apps/DB.html +2 -2
- data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +2 -2
- data/docs/api/Brut/CLI/Apps/DeployBase.html +2 -2
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +3 -3
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +3 -3
- data/docs/api/Brut/CLI/Apps/Scaffold.html +2 -2
- data/docs/api/Brut/CLI/Apps/Test/Audit.html +2 -2
- data/docs/api/Brut/CLI/Apps/Test/E2e.html +2 -2
- data/docs/api/Brut/CLI/Apps/Test/JS.html +2 -2
- data/docs/api/Brut/CLI/Apps/Test/Run.html +2 -2
- data/docs/api/Brut/CLI/Apps/Test.html +2 -2
- data/docs/api/Brut/CLI/Apps.html +2 -2
- data/docs/api/Brut/CLI/Command.html +2 -2
- data/docs/api/Brut/CLI/Error.html +2 -2
- data/docs/api/Brut/CLI/ExecutionResults/Result.html +2 -2
- data/docs/api/Brut/CLI/ExecutionResults.html +2 -2
- data/docs/api/Brut/CLI/Executor.html +2 -2
- data/docs/api/Brut/CLI/InvalidOption.html +2 -2
- data/docs/api/Brut/CLI/Options.html +80 -2
- data/docs/api/Brut/CLI/Output.html +2 -2
- data/docs/api/Brut/CLI/SystemExecError.html +2 -2
- data/docs/api/Brut/CLI.html +2 -2
- data/docs/api/Brut/FactoryBot.html +3 -3
- data/docs/api/Brut/Framework/App.html +3 -3
- data/docs/api/Brut/Framework/Config.html +27 -15
- data/docs/api/Brut/Framework/Container.html +2 -2
- data/docs/api/Brut/Framework/Error.html +2 -2
- data/docs/api/Brut/Framework/Errors/AbstractMethod.html +2 -2
- data/docs/api/Brut/Framework/Errors/Bug.html +2 -2
- data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +2 -2
- data/docs/api/Brut/Framework/Errors/MissingParameter.html +2 -2
- data/docs/api/Brut/Framework/Errors/NoClassForPath.html +2 -2
- data/docs/api/Brut/Framework/Errors/NotFound.html +2 -2
- data/docs/api/Brut/Framework/Errors/NotImplemented.html +2 -2
- data/docs/api/Brut/Framework/Errors.html +2 -2
- data/docs/api/Brut/Framework/FussyTypeEnforcement.html +2 -2
- data/docs/api/Brut/Framework/MCP.html +21 -11
- data/docs/api/Brut/Framework/ProjectEnvironment.html +2 -2
- data/docs/api/Brut/Framework.html +2 -2
- data/docs/api/Brut/FrontEnd/AssetPathResolver.html +2 -2
- data/docs/api/Brut/FrontEnd/Component/Helpers.html +2 -2
- data/docs/api/Brut/FrontEnd/Component.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/FormTag.html +4 -4
- data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Input.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Inputs.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/TimeTag.html +2 -2
- data/docs/api/Brut/FrontEnd/Components/Traceparent.html +2 -2
- data/docs/api/Brut/FrontEnd/Components.html +2 -2
- data/docs/api/Brut/FrontEnd/CsrfProtector.html +250 -0
- data/docs/api/Brut/FrontEnd/Download.html +2 -2
- data/docs/api/Brut/FrontEnd/Flash.html +2 -2
- data/docs/api/Brut/FrontEnd/Form.html +6 -6
- data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/Input.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +2 -2
- data/docs/api/Brut/FrontEnd/Forms.html +2 -2
- data/docs/api/Brut/FrontEnd/GenericResponse.html +2 -2
- data/docs/api/Brut/FrontEnd/Handler.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +2 -2
- data/docs/api/Brut/FrontEnd/Handlers.html +2 -2
- data/docs/api/Brut/FrontEnd/HandlingResults.html +2 -2
- data/docs/api/Brut/FrontEnd/HttpMethod.html +2 -2
- data/docs/api/Brut/FrontEnd/HttpStatus.html +2 -2
- data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +2 -2
- data/docs/api/Brut/FrontEnd/Layout.html +2 -2
- data/docs/api/Brut/FrontEnd/Middleware.html +2 -2
- data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +2 -2
- data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +2 -2
- data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +2 -2
- data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +2 -2
- data/docs/api/Brut/FrontEnd/Middlewares.html +2 -2
- data/docs/api/Brut/FrontEnd/Page.html +2 -2
- data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +2 -2
- data/docs/api/Brut/FrontEnd/Pages.html +2 -2
- data/docs/api/Brut/FrontEnd/RequestContext.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHook.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +2 -2
- data/docs/api/Brut/FrontEnd/RouteHooks.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing/Route.html +2 -2
- data/docs/api/Brut/FrontEnd/Routing.html +2 -2
- data/docs/api/Brut/FrontEnd/Session.html +2 -2
- data/docs/api/Brut/FrontEnd.html +3 -3
- data/docs/api/Brut/I18n/BaseMethods.html +3 -3
- data/docs/api/Brut/I18n/ForBackEnd.html +2 -2
- data/docs/api/Brut/I18n/ForCLI.html +2 -2
- data/docs/api/Brut/I18n/ForHTML.html +2 -2
- data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +2 -2
- data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +2 -2
- data/docs/api/Brut/I18n.html +2 -2
- data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +2 -2
- data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +2 -2
- data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +2 -2
- data/docs/api/Brut/Instrumentation/OpenTelemetry.html +2 -2
- data/docs/api/Brut/Instrumentation.html +2 -2
- data/docs/api/Brut/RubocopConfig.html +237 -0
- data/docs/api/Brut/SinatraHelpers/ClassMethods.html +2 -2
- data/docs/api/Brut/SinatraHelpers.html +2 -2
- data/docs/api/Brut/SpecSupport/ClockSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/ComponentSupport.html +7 -13
- data/docs/api/Brut/SpecSupport/E2ETestServer.html +2 -2
- data/docs/api/Brut/SpecSupport/E2eSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/EnhancedNode.html +2 -2
- data/docs/api/Brut/SpecSupport/FlashSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +2 -2
- data/docs/api/Brut/SpecSupport/GeneralSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/HandlerSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +2 -2
- data/docs/api/Brut/SpecSupport/Matchers.html +2 -2
- data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +2 -2
- data/docs/api/Brut/SpecSupport/RSpecSetup.html +4 -4
- data/docs/api/Brut/SpecSupport/SessionSupport.html +2 -2
- data/docs/api/Brut/SpecSupport.html +2 -2
- data/docs/api/Brut.html +128 -12
- data/docs/api/Clock.html +2 -2
- data/docs/api/ModuleName.html +28 -28
- data/docs/api/RichString.html +22 -22
- data/docs/api/SemanticLogger/Appender/Async.html +2 -2
- data/docs/api/Sequel/Extensions/BrutInstrumentation.html +2 -2
- data/docs/api/Sequel/Extensions/BrutMigrations.html +2 -2
- data/docs/api/Sequel/Extensions.html +2 -2
- data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +2 -2
- data/docs/api/Sequel/Plugins/CreatedAt.html +2 -2
- data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +2 -2
- data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +2 -2
- data/docs/api/Sequel/Plugins/ExternalId.html +2 -2
- data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +2 -2
- data/docs/api/Sequel/Plugins/FindBang.html +2 -2
- data/docs/api/Sequel/Plugins.html +2 -2
- data/docs/api/Sequel.html +2 -2
- data/docs/api/_index.html +16 -2
- data/docs/api/class_list.html +1 -1
- data/docs/api/file.README.html +28 -2
- data/docs/api/index.html +28 -2
- data/docs/api/method_list.html +192 -168
- data/docs/api/top-level-namespace.html +2 -2
- data/docs/assets/{app.DyQLb4Ot.js → app.BuBdZoUg.js} +1 -1
- data/docs/assets/basic-form-with-violations.Cv6Y9-Q_.png +0 -0
- data/docs/assets/basic-form.DbHnu0oW.png +0 -0
- data/docs/assets/chunks/@localSearchIndexroot.BZ_a3X0T.js +1 -0
- data/docs/assets/chunks/{VPLocalSearchBox.T1iA-eJx.js → VPLocalSearchBox.UtnyvkX-.js} +1 -1
- data/docs/assets/chunks/{theme.ChwsbWjK.js → theme.DqwvuBEK.js} +2 -2
- data/docs/assets/{components.md.DHh-NwKs.js → components.md.Bu80E2Nr.js} +3 -3
- data/docs/assets/{configuration.md.D8Wz3oJU.js → configuration.md.CuIxVsSf.js} +1 -1
- data/docs/assets/{database-schema.md.C5gXexJi.js → database-schema.md.LpmBPVEU.js} +1 -1
- data/docs/assets/{forms.md.BRE85eju.js → forms.md.DnLbzVDa.js} +1 -1
- data/docs/assets/{getting-started.md.2ioiTe-B.js → getting-started.md.DdQLmU3C.js} +2 -2
- data/docs/assets/initial-home-page.DNIaYmgP.png +0 -0
- data/docs/assets/new-post-editor.DrHr-5oh.png +0 -0
- data/docs/assets/new-post-home-page.Bm34lyMg.png +0 -0
- data/docs/assets/{recipes_migrations.md.DPN3gQE3.js → recipes_migrations.md.CTcnWDJF.js} +1 -1
- data/docs/assets/styled-form-with-server-side-violations.Bjxd8Dpv.png +0 -0
- data/docs/assets/styled-form-with-violations.Bv_sa9tg.png +0 -0
- data/docs/assets/styled-home-page-with-posts.Dd4kG89D.png +0 -0
- data/docs/assets/styled-home-page.BzdI7dWz.png +0 -0
- data/docs/assets/tutorial.md.C4zR5XPG.js +728 -0
- data/docs/assets/tutorial.md.C4zR5XPG.lean.js +1 -0
- data/docs/assets/welcome-to-brut.VSWzl17-.png +0 -0
- data/docs/assets.html +3 -3
- data/docs/brut-js/api/AjaxSubmit.html +1 -1
- data/docs/brut-js/api/AjaxSubmit.js.html +1 -1
- data/docs/brut-js/api/Autosubmit.html +1 -1
- data/docs/brut-js/api/Autosubmit.js.html +1 -1
- data/docs/brut-js/api/BaseCustomElement.html +1 -1
- data/docs/brut-js/api/BaseCustomElement.js.html +1 -1
- data/docs/brut-js/api/BrutCustomElements.html +1 -1
- data/docs/brut-js/api/BufferedLogger.html +1 -1
- data/docs/brut-js/api/ConfirmSubmit.html +18 -10
- data/docs/brut-js/api/ConfirmSubmit.js.html +29 -8
- data/docs/brut-js/api/ConfirmationDialog.html +1 -1
- data/docs/brut-js/api/ConfirmationDialog.js.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessage.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessage.js.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessages.html +1 -1
- data/docs/brut-js/api/ConstraintViolationMessages.js.html +1 -1
- data/docs/brut-js/api/CopyToClipboard.html +1 -1
- data/docs/brut-js/api/CopyToClipboard.js.html +1 -1
- data/docs/brut-js/api/Form.html +1 -1
- data/docs/brut-js/api/Form.js.html +1 -1
- data/docs/brut-js/api/I18nTranslation.html +1 -1
- data/docs/brut-js/api/I18nTranslation.js.html +1 -1
- data/docs/brut-js/api/LocaleDetection.html +1 -1
- data/docs/brut-js/api/LocaleDetection.js.html +1 -1
- data/docs/brut-js/api/Logger.html +1 -1
- data/docs/brut-js/api/Logger.js.html +1 -1
- data/docs/brut-js/api/Message.html +1 -1
- data/docs/brut-js/api/Message.js.html +1 -1
- data/docs/brut-js/api/PrefixedLogger.html +1 -1
- data/docs/brut-js/api/RichString.html +1 -1
- data/docs/brut-js/api/RichString.js.html +1 -1
- data/docs/brut-js/api/Tabs.html +1 -1
- data/docs/brut-js/api/Tabs.js.html +1 -1
- data/docs/brut-js/api/Tracing.html +1 -1
- data/docs/brut-js/api/Tracing.js.html +1 -1
- data/docs/brut-js/api/external-CustomElementRegistry.html +1 -1
- data/docs/brut-js/api/external-Performance.html +1 -1
- data/docs/brut-js/api/external-Promise.html +1 -1
- data/docs/brut-js/api/external-ValidityState.html +1 -1
- data/docs/brut-js/api/external-Window.html +1 -1
- data/docs/brut-js/api/external-fetch.html +1 -1
- data/docs/brut-js/api/global.html +1 -1
- data/docs/brut-js/api/index.html +1 -1
- data/docs/brut-js/api/index.js.html +1 -1
- data/docs/brut-js/api/module-testing.html +1 -1
- data/docs/brut-js/api/testing.AssetMetadata.html +1 -1
- data/docs/brut-js/api/testing.AssetMetadataLoader.html +1 -1
- data/docs/brut-js/api/testing.CustomElementTest.html +1 -1
- data/docs/brut-js/api/testing.DOMCreator.html +1 -1
- data/docs/brut-js/api/testing_AssetMetadata.js.html +1 -1
- data/docs/brut-js/api/testing_AssetMetadataLoader.js.html +1 -1
- data/docs/brut-js/api/testing_CustomElementTest.js.html +1 -1
- data/docs/brut-js/api/testing_DOMCreator.js.html +1 -1
- data/docs/brut-js/api/testing_index.js.html +1 -1
- data/docs/brut-js.html +3 -3
- data/docs/business-logic.html +3 -3
- data/docs/cli.html +3 -3
- data/docs/components.html +7 -7
- data/docs/configuration.html +5 -5
- data/docs/css.html +3 -3
- data/docs/custom-element-tests.html +3 -3
- data/docs/database-access.html +3 -3
- data/docs/database-schema.html +5 -5
- data/docs/deployment.html +3 -3
- data/docs/dev-environment.html +3 -3
- data/docs/dir-structure.html +3 -3
- data/docs/doc-conventions.html +3 -3
- data/docs/end-to-end-tests.html +3 -3
- data/docs/features.html +3 -3
- data/docs/flash-and-session.html +3 -3
- data/docs/form-constraints.html +3 -3
- data/docs/forms.html +5 -5
- data/docs/getting-started.html +6 -6
- data/docs/handlers.html +3 -3
- data/docs/hashmap.json +1 -1
- data/docs/hooks.html +3 -3
- data/docs/i18n.html +3 -3
- data/docs/index.html +3 -3
- data/docs/instrumentation.html +3 -3
- data/docs/javascript.html +3 -3
- data/docs/jobs.html +3 -3
- data/docs/keyword-injection.html +3 -3
- data/docs/layouts.html +3 -3
- data/docs/lsp.html +3 -3
- data/docs/markdown-examples.html +3 -3
- data/docs/middleware.html +3 -3
- data/docs/overview.html +3 -3
- data/docs/pages.html +3 -3
- data/docs/recipes/alternate-layouts.html +3 -3
- data/docs/recipes/authentication.html +3 -3
- data/docs/recipes/blank-layouts.html +3 -3
- data/docs/recipes/custom-flash.html +3 -3
- data/docs/recipes/indexed-forms.html +3 -3
- data/docs/recipes/migrations.html +5 -5
- data/docs/recipes/text-field-component.html +3 -3
- data/docs/roadmap.html +3 -3
- data/docs/routes.html +3 -3
- data/docs/security.html +3 -3
- data/docs/seed-data.html +3 -3
- data/docs/space-time-continuum.html +3 -3
- data/docs/tutorial.html +732 -5
- data/docs/unit-tests.html +3 -3
- data/docs/why.html +3 -3
- data/dx/build +45 -9
- data/lib/brut/cli/app.rb +1 -1
- data/lib/brut/cli/apps/heroku_container_based_deploy.rb +1 -1
- data/lib/brut/cli/apps/scaffold.rb +1 -1
- data/lib/brut/cli/options.rb +4 -0
- data/lib/brut/factory_bot.rb +1 -1
- data/lib/brut/framework/app.rb +1 -1
- data/lib/brut/framework/config.rb +18 -12
- data/lib/brut/framework/mcp.rb +12 -7
- data/lib/brut/front_end/csrf_protector.rb +30 -0
- data/lib/brut/front_end/form.rb +4 -4
- data/lib/brut/front_end/page.rb +1 -1
- data/lib/brut/front_end/routing.rb +1 -1
- data/lib/brut/front_end.rb +1 -0
- data/lib/brut/i18n/base_methods.rb +1 -1
- data/lib/brut/instrumentation/logger_span_exporter.rb +1 -1
- data/lib/brut/junk_drawer.rb +3 -1
- data/lib/brut/rubocop_config.rb +123 -0
- data/lib/brut/spec_support/component_support.rb +0 -3
- data/lib/brut/spec_support/rspec_setup.rb +2 -2
- data/lib/brut/version.rb +1 -1
- data/mkbrut/Gemfile.lock +1 -1
- data/mkbrut/dx +1 -0
- data/mkbrut/lib/mkbrut/app.rb +1 -1
- data/mkbrut/lib/mkbrut/cli.rb +1 -1
- data/mkbrut/lib/mkbrut/segments/heroku.rb +1 -1
- data/mkbrut/lib/mkbrut/version.rb +1 -1
- data/mkbrut/mkbrut.gemspec +3 -1
- data/mkbrut/templates/Base/app/config/i18n/en/1_defaults.rb +2 -2
- data/mkbrut/templates/Base/app/config/i18n/en/2_app.rb +1 -1
- data/mkbrut/templates/Base/bin/setup +1 -1
- data/mkbrut/templates/segments/Demo/app/src/front_end/components/flash_component.rb +1 -1
- data/specs/brut/junk_drawer.spec.rb +4 -0
- metadata +92 -35
- data/.rspec +0 -3
- data/docs/assets/chunks/@localSearchIndexroot.CmtZyrFA.js +0 -1
- data/docs/assets/tutorial.md.BIb7XT6j.js +0 -1
- data/docs/assets/tutorial.md.BIb7XT6j.lean.js +0 -1
- /data/docs/assets/{components.md.DHh-NwKs.lean.js → components.md.Bu80E2Nr.lean.js} +0 -0
- /data/docs/assets/{configuration.md.D8Wz3oJU.lean.js → configuration.md.CuIxVsSf.lean.js} +0 -0
- /data/docs/assets/{database-schema.md.C5gXexJi.lean.js → database-schema.md.LpmBPVEU.lean.js} +0 -0
- /data/docs/assets/{forms.md.BRE85eju.lean.js → forms.md.DnLbzVDa.lean.js} +0 -0
- /data/docs/assets/{getting-started.md.2ioiTe-B.lean.js → getting-started.md.DdQLmU3C.lean.js} +0 -0
- /data/docs/assets/{recipes_migrations.md.DPN3gQE3.lean.js → recipes_migrations.md.CTcnWDJF.lean.js} +0 -0
@@ -553,9 +553,9 @@ Generally, you want to use this method over the initializer.</p>
|
|
553
553
|
</div>
|
554
554
|
|
555
555
|
<div id="footer">
|
556
|
-
Generated on
|
556
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
557
557
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
558
|
-
0.9.37 (ruby-3.4.
|
558
|
+
0.9.37 (ruby-3.4.5).
|
559
559
|
</div>
|
560
560
|
|
561
561
|
</div>
|
@@ -409,9 +409,9 @@ method once for each radio button in the group.</p>
|
|
409
409
|
</div>
|
410
410
|
|
411
411
|
<div id="footer">
|
412
|
-
Generated on
|
412
|
+
Generated on Tue Aug 12 16:58:18 2025 by
|
413
413
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
414
|
-
0.9.37 (ruby-3.4.
|
414
|
+
0.9.37 (ruby-3.4.5).
|
415
415
|
</div>
|
416
416
|
|
417
417
|
</div>
|
@@ -601,9 +601,9 @@ to be used as the <code>value</code> attribute and option text content, respecti
|
|
601
601
|
</div>
|
602
602
|
|
603
603
|
<div id="footer">
|
604
|
-
Generated on
|
604
|
+
Generated on Tue Aug 12 16:58:18 2025 by
|
605
605
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
606
|
-
0.9.37 (ruby-3.4.
|
606
|
+
0.9.37 (ruby-3.4.5).
|
607
607
|
</div>
|
608
608
|
|
609
609
|
</div>
|
@@ -525,9 +525,9 @@ Generally, you want to use this method over the initializer.</p>
|
|
525
525
|
</div>
|
526
526
|
|
527
527
|
<div id="footer">
|
528
|
-
Generated on
|
528
|
+
Generated on Tue Aug 12 16:58:18 2025 by
|
529
529
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
530
|
-
0.9.37 (ruby-3.4.
|
530
|
+
0.9.37 (ruby-3.4.5).
|
531
531
|
</div>
|
532
532
|
|
533
533
|
</div>
|
@@ -115,9 +115,9 @@
|
|
115
115
|
</div>
|
116
116
|
|
117
117
|
<div id="footer">
|
118
|
-
Generated on
|
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.
|
120
|
+
0.9.37 (ruby-3.4.5).
|
121
121
|
</div>
|
122
122
|
|
123
123
|
</div>
|
@@ -357,9 +357,9 @@ ask the browser to send it, or not.</p>
|
|
357
357
|
</div>
|
358
358
|
|
359
359
|
<div id="footer">
|
360
|
-
Generated on
|
360
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
361
361
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
362
|
-
0.9.37 (ruby-3.4.
|
362
|
+
0.9.37 (ruby-3.4.5).
|
363
363
|
</div>
|
364
364
|
|
365
365
|
</div>
|
@@ -326,9 +326,9 @@
|
|
326
326
|
</div>
|
327
327
|
|
328
328
|
<div id="footer">
|
329
|
-
Generated on
|
329
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
330
330
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
331
|
-
0.9.37 (ruby-3.4.
|
331
|
+
0.9.37 (ruby-3.4.5).
|
332
332
|
</div>
|
333
333
|
|
334
334
|
</div>
|
@@ -645,9 +645,9 @@ you would like to be accessible. If omitted, the tag's contents will be the for
|
|
645
645
|
</div>
|
646
646
|
|
647
647
|
<div id="footer">
|
648
|
-
Generated on
|
648
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
649
649
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
650
|
-
0.9.37 (ruby-3.4.
|
650
|
+
0.9.37 (ruby-3.4.5).
|
651
651
|
</div>
|
652
652
|
|
653
653
|
</div>
|
@@ -342,9 +342,9 @@
|
|
342
342
|
</div>
|
343
343
|
|
344
344
|
<div id="footer">
|
345
|
-
Generated on
|
345
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
346
346
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
347
|
-
0.9.37 (ruby-3.4.
|
347
|
+
0.9.37 (ruby-3.4.5).
|
348
348
|
</div>
|
349
349
|
|
350
350
|
</div>
|
@@ -146,9 +146,9 @@ end</code></pre>
|
|
146
146
|
</div>
|
147
147
|
|
148
148
|
<div id="footer">
|
149
|
-
Generated on
|
149
|
+
Generated on Tue Aug 12 16:58:16 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.
|
151
|
+
0.9.37 (ruby-3.4.5).
|
152
152
|
</div>
|
153
153
|
|
154
154
|
</div>
|
@@ -0,0 +1,250 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>
|
7
|
+
Class: Brut::FrontEnd::CsrfProtector
|
8
|
+
|
9
|
+
— Documentation by YARD 0.9.37
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="../../css/style.css" type="text/css" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="../../css/common.css" type="text/css" />
|
16
|
+
|
17
|
+
<script type="text/javascript">
|
18
|
+
pathId = "Brut::FrontEnd::CsrfProtector";
|
19
|
+
relpath = '../../';
|
20
|
+
</script>
|
21
|
+
|
22
|
+
|
23
|
+
<script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
|
24
|
+
|
25
|
+
<script type="text/javascript" charset="utf-8" src="../../js/app.js"></script>
|
26
|
+
|
27
|
+
|
28
|
+
</head>
|
29
|
+
<body>
|
30
|
+
<div class="nav_wrap">
|
31
|
+
<iframe id="nav" src="../../class_list.html?1"></iframe>
|
32
|
+
<div id="resizer"></div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
<div id="main" tabindex="-1">
|
36
|
+
<div id="header">
|
37
|
+
<div id="menu">
|
38
|
+
|
39
|
+
<a href="../../_index.html">Index (C)</a> »
|
40
|
+
<span class='title'><span class='object_link'><a href="../../Brut.html" title="Brut (module)">Brut</a></span></span> » <span class='title'><span class='object_link'><a href="../FrontEnd.html" title="Brut::FrontEnd (module)">FrontEnd</a></span></span>
|
41
|
+
»
|
42
|
+
<span class="title">CsrfProtector</span>
|
43
|
+
|
44
|
+
</div>
|
45
|
+
|
46
|
+
<div id="search">
|
47
|
+
|
48
|
+
<a class="full_list_link" id="class_list_link"
|
49
|
+
href="../../class_list.html">
|
50
|
+
|
51
|
+
<svg width="24" height="24">
|
52
|
+
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
|
53
|
+
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
|
54
|
+
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
|
55
|
+
</svg>
|
56
|
+
</a>
|
57
|
+
|
58
|
+
</div>
|
59
|
+
<div class="clear"></div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<div id="content"><h1>Class: Brut::FrontEnd::CsrfProtector
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
</h1>
|
67
|
+
<div class="box_info">
|
68
|
+
|
69
|
+
<dl>
|
70
|
+
<dt>Inherits:</dt>
|
71
|
+
<dd>
|
72
|
+
<span class="inheritName">Object</span>
|
73
|
+
|
74
|
+
<ul class="fullTree">
|
75
|
+
<li>Object</li>
|
76
|
+
|
77
|
+
<li class="next">Brut::FrontEnd::CsrfProtector</li>
|
78
|
+
|
79
|
+
</ul>
|
80
|
+
<a href="#" class="inheritanceTree">show all</a>
|
81
|
+
|
82
|
+
</dd>
|
83
|
+
</dl>
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
<dl>
|
96
|
+
<dt>Defined in:</dt>
|
97
|
+
<dd>lib/brut/front_end/csrf_protector.rb</dd>
|
98
|
+
</dl>
|
99
|
+
|
100
|
+
</div>
|
101
|
+
|
102
|
+
<h2>Overview</h2><div class="docstring">
|
103
|
+
<div class="discussion">
|
104
|
+
<p>Base for custom logic around CSRF protection. Brut configures <code>Rack::Protection::AuthenticityToken</code> for all requests, and
|
105
|
+
this happens early in the request. The idea is that no real POST should be missing a CSRF token. That said, there are times
|
106
|
+
when it must be skipped, such as for webhooks. In that case, you can extend this class and configure it via
|
107
|
+
<code>Brut.container.override("csrf_protector", YourCustomCsrfProtector.new)</code> in your <code>App</code> class' initializer.</p>
|
108
|
+
|
109
|
+
|
110
|
+
</div>
|
111
|
+
</div>
|
112
|
+
<div class="tags">
|
113
|
+
|
114
|
+
<div class="examples">
|
115
|
+
<h4 class="tag_title">Examples:</h4>
|
116
|
+
|
117
|
+
|
118
|
+
<pre class="example code"><code>class CsrfProtector < Brut::FrontEnd::CsrfProtector
|
119
|
+
def allowed?(env)
|
120
|
+
!!env["PATH_INFO"].to_s.match?(/^\/webhooks\//)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
# Then, in app.rb
|
124
|
+
class App < Brut::Framework::App
|
125
|
+
def id = "some-id"
|
126
|
+
def organization = "some-org"
|
127
|
+
|
128
|
+
def initialize
|
129
|
+
Brut.container.override("csrf_protector") do
|
130
|
+
CsrfProtector.new
|
131
|
+
end
|
132
|
+
|
133
|
+
# ...</code></pre>
|
134
|
+
|
135
|
+
</div>
|
136
|
+
|
137
|
+
|
138
|
+
</div>
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
|
146
|
+
<h2>
|
147
|
+
Instance Method Summary
|
148
|
+
<small><a href="#" class="summary_toggle">collapse</a></small>
|
149
|
+
</h2>
|
150
|
+
|
151
|
+
<ul class="summary">
|
152
|
+
|
153
|
+
<li class="public ">
|
154
|
+
<span class="summary_signature">
|
155
|
+
|
156
|
+
<a href="#allowed%3F-instance_method" title="#allowed? (instance method)">#<strong>allowed?</strong>(env) ⇒ Boolean </a>
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
</span>
|
161
|
+
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
|
170
|
+
<span class="summary_desc"><div class='inline'><p>Return true if the request should be allowed without a CSRF token.</p>
|
171
|
+
</div></span>
|
172
|
+
|
173
|
+
</li>
|
174
|
+
|
175
|
+
|
176
|
+
</ul>
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
|
181
|
+
<div id="instance_method_details" class="method_details_list">
|
182
|
+
<h2>Instance Method Details</h2>
|
183
|
+
|
184
|
+
|
185
|
+
<div class="method_details first">
|
186
|
+
<h3 class="signature first" id="allowed?-instance_method">
|
187
|
+
|
188
|
+
#<strong>allowed?</strong>(env) ⇒ <tt>Boolean</tt>
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
</h3><div class="docstring">
|
195
|
+
<div class="discussion">
|
196
|
+
<p>Return true if the request should be allowed without a CSRF token. This implementation returns false.</p>
|
197
|
+
|
198
|
+
|
199
|
+
</div>
|
200
|
+
</div>
|
201
|
+
<div class="tags">
|
202
|
+
|
203
|
+
<p class="tag_title">Returns:</p>
|
204
|
+
<ul class="return">
|
205
|
+
|
206
|
+
<li>
|
207
|
+
|
208
|
+
|
209
|
+
<span class='type'>(<tt>Boolean</tt>)</span>
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
</li>
|
214
|
+
|
215
|
+
</ul>
|
216
|
+
|
217
|
+
</div><table class="source_code">
|
218
|
+
<tr>
|
219
|
+
<td>
|
220
|
+
<pre class="lines">
|
221
|
+
|
222
|
+
|
223
|
+
27
|
224
|
+
28
|
225
|
+
29</pre>
|
226
|
+
</td>
|
227
|
+
<td>
|
228
|
+
<pre class="code"><span class="info file"># File 'lib/brut/front_end/csrf_protector.rb', line 27</span>
|
229
|
+
|
230
|
+
<span class='kw'>def</span> <span class='id identifier rubyid_allowed?'>allowed?</span><span class='lparen'>(</span><span class='id identifier rubyid_env'>env</span><span class='rparen'>)</span>
|
231
|
+
<span class='kw'>false</span>
|
232
|
+
<span class='kw'>end</span></pre>
|
233
|
+
</td>
|
234
|
+
</tr>
|
235
|
+
</table>
|
236
|
+
</div>
|
237
|
+
|
238
|
+
</div>
|
239
|
+
|
240
|
+
</div>
|
241
|
+
|
242
|
+
<div id="footer">
|
243
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
244
|
+
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
245
|
+
0.9.37 (ruby-3.4.5).
|
246
|
+
</div>
|
247
|
+
|
248
|
+
</div>
|
249
|
+
</body>
|
250
|
+
</html>
|
@@ -457,9 +457,9 @@ download the same file mulitple times but you want to make each name different a
|
|
457
457
|
</div>
|
458
458
|
|
459
459
|
<div id="footer">
|
460
|
-
Generated on
|
460
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
461
461
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
462
|
-
0.9.37 (ruby-3.4.
|
462
|
+
0.9.37 (ruby-3.4.5).
|
463
463
|
</div>
|
464
464
|
|
465
465
|
</div>
|
@@ -1140,9 +1140,9 @@ flash from being more than 1 request old. This is usually sufficient for a hand
|
|
1140
1140
|
</div>
|
1141
1141
|
|
1142
1142
|
<div id="footer">
|
1143
|
-
Generated on
|
1143
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
1144
1144
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1145
|
-
0.9.37 (ruby-3.4.
|
1145
|
+
0.9.37 (ruby-3.4.5).
|
1146
1146
|
</div>
|
1147
1147
|
|
1148
1148
|
</div>
|
@@ -511,7 +511,7 @@ defined.</p>
|
|
511
511
|
<span class='rbrace'>}</span>
|
512
512
|
<span class='kw'>else</span>
|
513
513
|
<span class='lbracket'>[</span>
|
514
|
-
<span class='id identifier rubyid_input_definition'>input_definition</span><span class='period'>.</span><span class='id identifier rubyid_make_input'>make_input</span><span class='lparen'>(</span><span class='label'>value:</span><span class='comma'>,</span> <span class='label'>index:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
|
514
|
+
<span class='id identifier rubyid_input_definition'>input_definition</span><span class='period'>.</span><span class='id identifier rubyid_make_input'>make_input</span><span class='lparen'>(</span><span class='label'>value:</span><span class='comma'>,</span> <span class='label'>index:</span> <span class='kw'>nil</span><span class='rparen'>)</span><span class='comma'>,</span>
|
515
515
|
<span class='rbracket'>]</span>
|
516
516
|
<span class='kw'>end</span>
|
517
517
|
|
@@ -657,8 +657,8 @@ name.</p>
|
|
657
657
|
<span class='kw'>true</span>
|
658
658
|
<span class='kw'>end</span>
|
659
659
|
<span class='rbrace'>}</span><span class='comma'>,</span>
|
660
|
-
<span class='id identifier rubyid_index'>index</span>
|
661
|
-
|
660
|
+
<span class='id identifier rubyid_index'>index</span><span class='comma'>,</span>
|
661
|
+
<span class='rbracket'>]</span><span class='comma'>,</span>
|
662
662
|
<span class='rbracket'>]</span>
|
663
663
|
<span class='kw'>end</span>
|
664
664
|
<span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span>
|
@@ -891,7 +891,7 @@ name.</p>
|
|
891
891
|
|
892
892
|
<span class='kw'>def</span> <span class='id identifier rubyid_inputs'>inputs</span><span class='lparen'>(</span><span class='id identifier rubyid_input_name'>input_name</span><span class='rparen'>)</span>
|
893
893
|
<span class='ivar'>@inputs</span><span class='period'>.</span><span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_input_name'>input_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
|
894
|
-
<span class='kw'>rescue</span> <span class='const'>KeyError</span>
|
894
|
+
<span class='kw'>rescue</span> <span class='const'>KeyError</span>
|
895
895
|
<span class='id identifier rubyid_raise'>raise</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="../Framework.html" title="Brut::Framework (module)">Framework</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Framework/Errors.html" title="Brut::Framework::Errors (module)">Errors</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Framework/Errors/Bug.html" title="Brut::Framework::Errors::Bug (class)">Bug</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>Form does not define the input '</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_input_name'>input_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>'. You must add this to your form. Found these inputs: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@inputs</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>, </span><span class='tstring_end'>'</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>"</span></span>
|
896
896
|
<span class='kw'>end</span></pre>
|
897
897
|
</td>
|
@@ -1217,9 +1217,9 @@ will be represented as a key in the resulting hash—only those keys that were p
|
|
1217
1217
|
</div>
|
1218
1218
|
|
1219
1219
|
<div id="footer">
|
1220
|
-
Generated on
|
1220
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
1221
1221
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1222
|
-
0.9.37 (ruby-3.4.
|
1222
|
+
0.9.37 (ruby-3.4.5).
|
1223
1223
|
</div>
|
1224
1224
|
|
1225
1225
|
</div>
|
@@ -580,9 +580,9 @@ form-related classes.</p>
|
|
580
580
|
</div>
|
581
581
|
|
582
582
|
<div id="footer">
|
583
|
-
Generated on
|
583
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
584
584
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
585
|
-
0.9.37 (ruby-3.4.
|
585
|
+
0.9.37 (ruby-3.4.5).
|
586
586
|
</div>
|
587
587
|
|
588
588
|
</div>
|
@@ -191,9 +191,9 @@
|
|
191
191
|
</div>
|
192
192
|
|
193
193
|
<div id="footer">
|
194
|
-
Generated on
|
194
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
195
195
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
196
|
-
0.9.37 (ruby-3.4.
|
196
|
+
0.9.37 (ruby-3.4.5).
|
197
197
|
</div>
|
198
198
|
|
199
199
|
</div>
|
@@ -525,9 +525,9 @@
|
|
525
525
|
</div>
|
526
526
|
|
527
527
|
<div id="footer">
|
528
|
-
Generated on
|
528
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
529
529
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
530
|
-
0.9.37 (ruby-3.4.
|
530
|
+
0.9.37 (ruby-3.4.5).
|
531
531
|
</div>
|
532
532
|
|
533
533
|
</div>
|
@@ -1553,9 +1553,9 @@ initializer</p>
|
|
1553
1553
|
</div>
|
1554
1554
|
|
1555
1555
|
<div id="footer">
|
1556
|
-
Generated on
|
1556
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
1557
1557
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1558
|
-
0.9.37 (ruby-3.4.
|
1558
|
+
0.9.37 (ruby-3.4.5).
|
1559
1559
|
</div>
|
1560
1560
|
|
1561
1561
|
</div>
|
@@ -537,9 +537,9 @@ Components::Inputs::Select</p>
|
|
537
537
|
</div>
|
538
538
|
|
539
539
|
<div id="footer">
|
540
|
-
Generated on
|
540
|
+
Generated on Tue Aug 12 16:58:16 2025 by
|
541
541
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
542
|
-
0.9.37 (ruby-3.4.
|
542
|
+
0.9.37 (ruby-3.4.5).
|
543
543
|
</div>
|
544
544
|
|
545
545
|
</div>
|
@@ -1318,9 +1318,9 @@ inputs. <code>nil</code> is allowed only if the input definition is not for an a
|
|
1318
1318
|
</div>
|
1319
1319
|
|
1320
1320
|
<div id="footer">
|
1321
|
-
Generated on
|
1321
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
1322
1322
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
1323
|
-
0.9.37 (ruby-3.4.
|
1323
|
+
0.9.37 (ruby-3.4.5).
|
1324
1324
|
</div>
|
1325
1325
|
|
1326
1326
|
</div>
|
@@ -720,9 +720,9 @@ that <code>key</code> should not be a key used for client-side validations.</p>
|
|
720
720
|
</div>
|
721
721
|
|
722
722
|
<div id="footer">
|
723
|
-
Generated on
|
723
|
+
Generated on Tue Aug 12 16:58:18 2025 by
|
724
724
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
725
|
-
0.9.37 (ruby-3.4.
|
725
|
+
0.9.37 (ruby-3.4.5).
|
726
726
|
</div>
|
727
727
|
|
728
728
|
</div>
|
@@ -577,9 +577,9 @@ supported by the browser. Also note that arrays of radio button groups are not
|
|
577
577
|
</div>
|
578
578
|
|
579
579
|
<div id="footer">
|
580
|
-
Generated on
|
580
|
+
Generated on Tue Aug 12 16:58:18 2025 by
|
581
581
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
582
|
-
0.9.37 (ruby-3.4.
|
582
|
+
0.9.37 (ruby-3.4.5).
|
583
583
|
</div>
|
584
584
|
|
585
585
|
</div>
|
@@ -724,9 +724,9 @@ that <code>key</code> should not be a key used for client-side validations.</p>
|
|
724
724
|
</div>
|
725
725
|
|
726
726
|
<div id="footer">
|
727
|
-
Generated on
|
727
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
728
728
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
729
|
-
0.9.37 (ruby-3.4.
|
729
|
+
0.9.37 (ruby-3.4.5).
|
730
730
|
</div>
|
731
731
|
|
732
732
|
</div>
|
@@ -572,9 +572,9 @@ such as implementing a <span class='object_link'><a href="../../BackEnd/Validato
|
|
572
572
|
</div>
|
573
573
|
|
574
574
|
<div id="footer">
|
575
|
-
Generated on
|
575
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
576
576
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
577
|
-
0.9.37 (ruby-3.4.
|
577
|
+
0.9.37 (ruby-3.4.5).
|
578
578
|
</div>
|
579
579
|
|
580
580
|
</div>
|
@@ -649,9 +649,9 @@ on your use-case.</p>
|
|
649
649
|
</div>
|
650
650
|
|
651
651
|
<div id="footer">
|
652
|
-
Generated on
|
652
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
653
653
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
654
|
-
0.9.37 (ruby-3.4.
|
654
|
+
0.9.37 (ruby-3.4.5).
|
655
655
|
</div>
|
656
656
|
|
657
657
|
</div>
|
@@ -117,9 +117,9 @@
|
|
117
117
|
</div>
|
118
118
|
|
119
119
|
<div id="footer">
|
120
|
-
Generated on
|
120
|
+
Generated on Tue Aug 12 16:58:16 2025 by
|
121
121
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
122
|
-
0.9.37 (ruby-3.4.
|
122
|
+
0.9.37 (ruby-3.4.5).
|
123
123
|
</div>
|
124
124
|
|
125
125
|
</div>
|
@@ -367,9 +367,9 @@ something that responds to <code>each</code>.</p>
|
|
367
367
|
</div>
|
368
368
|
|
369
369
|
<div id="footer">
|
370
|
-
Generated on
|
370
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
371
371
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
372
|
-
0.9.37 (ruby-3.4.
|
372
|
+
0.9.37 (ruby-3.4.5).
|
373
373
|
</div>
|
374
374
|
|
375
375
|
</div>
|
@@ -432,9 +432,9 @@ returns is returned here.</p>
|
|
432
432
|
</div>
|
433
433
|
|
434
434
|
<div id="footer">
|
435
|
-
Generated on
|
435
|
+
Generated on Tue Aug 12 16:58:17 2025 by
|
436
436
|
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
437
|
-
0.9.37 (ruby-3.4.
|
437
|
+
0.9.37 (ruby-3.4.5).
|
438
438
|
</div>
|
439
439
|
|
440
440
|
</div>
|