brut 0.0.28 → 0.1.0
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 +6 -0
- data/.projections.json +10 -0
- data/.rspec +3 -0
- data/Dockerfile.dx +32 -14
- data/Gemfile.lock +1 -1
- data/README.md +23 -2
- data/assets/Logo-Square.pxd +0 -0
- data/assets/LogoPylon.pxd +0 -0
- data/assets/LogoStop.pxd +0 -0
- data/assets/LogoTall.pxd +0 -0
- data/assets/MetroLogo.graffle +0 -0
- data/assets/SocialImage.png +0 -0
- data/assets/SocialImage.pxd +0 -0
- data/bin/docs +24 -2
- data/bin/rspec +27 -0
- data/bin/setup +3 -3
- data/brutrb.com/.vitepress/config.mjs +45 -8
- data/brutrb.com/.vitepress/theme/custom.css +7 -0
- data/brutrb.com/.vitepress/theme/style.css +29 -17
- data/brutrb.com/ai.md +10 -15
- data/brutrb.com/assets.md +2 -9
- data/brutrb.com/brut-js.md +12 -2
- data/brutrb.com/cli.md +9 -13
- data/brutrb.com/components.md +118 -96
- data/brutrb.com/configuration.md +3 -4
- data/brutrb.com/css.md +2 -2
- data/brutrb.com/custom-element-tests.md +3 -4
- data/brutrb.com/database-access.md +1 -1
- data/brutrb.com/database-schema.md +29 -41
- data/brutrb.com/deployment.md +123 -45
- data/brutrb.com/dev-environment.md +7 -7
- data/brutrb.com/dir-structure.md +120 -0
- data/brutrb.com/doc-conventions.md +18 -15
- data/brutrb.com/dx +1 -0
- data/brutrb.com/end-to-end-tests.md +12 -10
- data/brutrb.com/features.md +373 -0
- data/brutrb.com/flash-and-session.md +115 -131
- data/brutrb.com/form-constraints.md +266 -0
- data/brutrb.com/forms.md +140 -765
- data/brutrb.com/getting-started.md +10 -11
- data/brutrb.com/handlers.md +119 -95
- data/brutrb.com/hooks.md +18 -20
- data/brutrb.com/i18n.md +6 -4
- data/brutrb.com/images/LogoPylon.png +0 -0
- data/brutrb.com/images/LogoSquare.png +0 -0
- data/brutrb.com/images/LogoStop.png +0 -0
- data/brutrb.com/images/LogoTall.png +0 -0
- data/brutrb.com/images/OverviewMetro.graffle +0 -0
- data/brutrb.com/images/OverviewMetro.png +0 -0
- data/brutrb.com/index.md +4 -3
- data/brutrb.com/instrumentation.md +7 -10
- data/brutrb.com/javascript.md +14 -14
- data/brutrb.com/keyword-injection.md +72 -114
- data/brutrb.com/layouts.md +20 -52
- data/brutrb.com/lsp.md +1 -1
- data/brutrb.com/overview.md +35 -377
- data/brutrb.com/pages.md +119 -207
- data/brutrb.com/public/SocialImage.png +0 -0
- data/brutrb.com/public/favicon.ico +0 -0
- data/brutrb.com/recipes/alternate-layouts.md +32 -0
- data/brutrb.com/recipes/authentication.md +315 -6
- data/brutrb.com/recipes/blank-layouts.md +22 -0
- data/brutrb.com/recipes/custom-flash.md +51 -0
- data/brutrb.com/recipes/indexed-forms.md +149 -0
- data/brutrb.com/recipes/text-field-component.md +182 -0
- data/brutrb.com/routes.md +56 -82
- data/brutrb.com/security.md +0 -3
- data/brutrb.com/space-time-continuum.md +8 -12
- data/brutrb.com/tutorial.md +1 -1
- data/brutrb.com/why.md +19 -0
- data/docker-compose.dx.yml +5 -2
- data/docs/404.html +8 -3
- data/docs/SocialImage.png +0 -0
- data/docs/ai.html +11 -6
- data/docs/api/Brut/BackEnd/SeedData.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server/FlushSpans.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares/Server.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq/Middlewares.html +1 -1
- data/docs/api/Brut/BackEnd/Sidekiq.html +1 -1
- data/docs/api/Brut/BackEnd/Validators/FormValidator.html +1 -1
- data/docs/api/Brut/BackEnd/Validators.html +1 -1
- data/docs/api/Brut/BackEnd.html +1 -1
- data/docs/api/Brut/CLI/App.html +1 -1
- data/docs/api/Brut/CLI/AppRunner.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/All.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Create.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Drop.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Migrate.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Rebuild.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Seed.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB/Status.html +1 -1
- data/docs/api/Brut/CLI/Apps/DB.html +1 -1
- data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +1 -1
- data/docs/api/Brut/CLI/Apps/DeployBase.html +1 -1
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +1 -1
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Action.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Page/Route.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/Audit.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/E2e.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/JS.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/Run.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps.html +1 -1
- data/docs/api/Brut/CLI/Command.html +1 -1
- data/docs/api/Brut/CLI/Error.html +1 -1
- data/docs/api/Brut/CLI/ExecutionResults/Result.html +1 -1
- data/docs/api/Brut/CLI/ExecutionResults.html +1 -1
- data/docs/api/Brut/CLI/Executor.html +1 -1
- data/docs/api/Brut/CLI/InvalidOption.html +1 -1
- data/docs/api/Brut/CLI/Options.html +1 -1
- data/docs/api/Brut/CLI/Output.html +1 -1
- data/docs/api/Brut/CLI/SystemExecError.html +1 -1
- data/docs/api/Brut/CLI.html +1 -1
- data/docs/api/Brut/FactoryBot.html +1 -1
- data/docs/api/Brut/Framework/App.html +1 -1
- data/docs/api/Brut/Framework/Config.html +1 -1
- data/docs/api/Brut/Framework/Container.html +1 -1
- data/docs/api/Brut/Framework/Error.html +1 -1
- data/docs/api/Brut/Framework/Errors/AbstractMethod.html +1 -1
- data/docs/api/Brut/Framework/Errors/Bug.html +1 -1
- data/docs/api/Brut/Framework/Errors/MissingConfiguration.html +1 -1
- data/docs/api/Brut/Framework/Errors/MissingParameter.html +1 -1
- data/docs/api/Brut/Framework/Errors/NoClassForPath.html +1 -1
- data/docs/api/Brut/Framework/Errors/NotFound.html +1 -1
- data/docs/api/Brut/Framework/Errors/NotImplemented.html +1 -1
- data/docs/api/Brut/Framework/Errors.html +1 -1
- data/docs/api/Brut/Framework/FussyTypeEnforcement.html +1 -1
- data/docs/api/Brut/Framework/MCP.html +1 -1
- data/docs/api/Brut/Framework/ProjectEnvironment.html +1 -1
- data/docs/api/Brut/Framework.html +1 -1
- data/docs/api/Brut/FrontEnd/AssetPathResolver.html +1 -1
- data/docs/api/Brut/FrontEnd/Component/Helpers.html +1 -1
- data/docs/api/Brut/FrontEnd/Component.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/FormTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Input.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/TimeTag.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/Traceparent.html +1 -1
- data/docs/api/Brut/FrontEnd/Components.html +1 -1
- data/docs/api/Brut/FrontEnd/Download.html +1 -1
- data/docs/api/Brut/FrontEnd/Flash.html +1 -1
- data/docs/api/Brut/FrontEnd/Form.html +9 -11
- data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +201 -0
- data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +535 -0
- data/docs/api/Brut/FrontEnd/Forms/Input.html +983 -35
- data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +29 -19
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +141 -20
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +141 -20
- data/docs/api/Brut/FrontEnd/Forms/SelectInputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/ValidityState.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms.html +1 -1
- data/docs/api/Brut/FrontEnd/GenericResponse.html +1 -1
- data/docs/api/Brut/FrontEnd/Handler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/CspReportingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler/TraceParent.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/InstrumentationHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/LocaleDetectionHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler/Form.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers/MissingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Handlers.html +1 -1
- data/docs/api/Brut/FrontEnd/HandlingResults.html +1 -1
- data/docs/api/Brut/FrontEnd/HttpMethod.html +1 -1
- data/docs/api/Brut/FrontEnd/HttpStatus.html +1 -1
- data/docs/api/Brut/FrontEnd/InlineSvgLocator.html +1 -1
- data/docs/api/Brut/FrontEnd/Layout.html +1 -1
- data/docs/api/Brut/FrontEnd/Middleware.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/AnnotateBrutOwnedPaths.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/Favicon.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/OpenTelemetrySpan.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares/ReloadApp.html +1 -1
- data/docs/api/Brut/FrontEnd/Middlewares.html +1 -1
- data/docs/api/Brut/FrontEnd/Page.html +1 -1
- data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +1 -1
- data/docs/api/Brut/FrontEnd/Pages.html +1 -1
- data/docs/api/Brut/FrontEnd/RequestContext.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHook.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/AgeFlash.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineScripts.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts/ReportOnly.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/CSPNoInlineStylesOrScripts.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/LocaleDetection.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks/SetupRequestContext.html +1 -1
- data/docs/api/Brut/FrontEnd/RouteHooks.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/FormHandlerRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/FormRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingForm.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingHandler.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingPage.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/MissingPath.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/PageRoute.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing/Route.html +1 -1
- data/docs/api/Brut/FrontEnd/Routing.html +1 -1
- data/docs/api/Brut/FrontEnd/Session.html +1 -1
- data/docs/api/Brut/FrontEnd.html +1 -1
- data/docs/api/Brut/I18n/BaseMethods.html +1 -1
- data/docs/api/Brut/I18n/ForBackEnd.html +1 -1
- data/docs/api/Brut/I18n/ForCLI.html +1 -1
- data/docs/api/Brut/I18n/ForHTML.html +1 -1
- data/docs/api/Brut/I18n/HTTPAcceptLanguage/AlwaysEnglish.html +1 -1
- data/docs/api/Brut/I18n/HTTPAcceptLanguage.html +1 -1
- data/docs/api/Brut/I18n.html +1 -1
- data/docs/api/Brut/Instrumentation/LoggerSpanExporter.html +1 -1
- data/docs/api/Brut/Instrumentation/OpenTelemetry/NormalizedAttributes.html +1 -1
- data/docs/api/Brut/Instrumentation/OpenTelemetry/Span.html +1 -1
- data/docs/api/Brut/Instrumentation/OpenTelemetry.html +1 -1
- data/docs/api/Brut/Instrumentation.html +1 -1
- data/docs/api/Brut/SinatraHelpers/ClassMethods.html +1 -1
- data/docs/api/Brut/SinatraHelpers.html +1 -1
- data/docs/api/Brut/SpecSupport/ClockSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/ComponentSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/E2ETestServer.html +1 -1
- data/docs/api/Brut/SpecSupport/E2eSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/EnhancedNode.html +1 -1
- data/docs/api/Brut/SpecSupport/FlashSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html +1 -1
- data/docs/api/Brut/SpecSupport/GeneralSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/HandlerSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +1 -1
- data/docs/api/Brut/SpecSupport/Matchers.html +1 -1
- data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +1 -1
- data/docs/api/Brut/SpecSupport/RSpecSetup.html +1 -1
- data/docs/api/Brut/SpecSupport/SessionSupport.html +1 -1
- data/docs/api/Brut/SpecSupport.html +1 -1
- data/docs/api/Brut.html +1 -1
- data/docs/api/Clock.html +1 -1
- data/docs/api/RichString.html +1 -1
- data/docs/api/SemanticLogger/Appender/Async.html +1 -1
- data/docs/api/Sequel/Extensions/BrutInstrumentation.html +1 -1
- data/docs/api/Sequel/Extensions/BrutMigrations.html +1 -1
- data/docs/api/Sequel/Extensions.html +1 -1
- data/docs/api/Sequel/Plugins/CreatedAt/InstanceMethods.html +1 -1
- data/docs/api/Sequel/Plugins/CreatedAt.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId/ClassMethods.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html +1 -1
- data/docs/api/Sequel/Plugins/ExternalId.html +1 -1
- data/docs/api/Sequel/Plugins/FindBang/ClassMethods.html +1 -1
- data/docs/api/Sequel/Plugins/FindBang.html +1 -1
- data/docs/api/Sequel/Plugins.html +1 -1
- data/docs/api/Sequel.html +1 -1
- data/docs/api/_index.html +15 -1
- data/docs/api/class_list.html +1 -1
- data/docs/api/css/full_list.css +2 -1
- data/docs/api/css/style.css +14 -13
- data/docs/api/file.README.html +22 -3
- data/docs/api/index.html +22 -3
- data/docs/api/method_list.html +435 -275
- data/docs/api/top-level-namespace.html +1 -1
- data/docs/assets/LogoStop.Gb3tDhL1.png +0 -0
- data/docs/assets/OverviewMetro.DUS-5fUZ.png +0 -0
- data/docs/assets/{ai.md._6HCDL6d.js → ai.md.Cy9GWnER.js} +1 -1
- data/docs/assets/ai.md.Cy9GWnER.lean.js +1 -0
- data/docs/assets/{app.BX81XO4N.js → app.ClaS47Ru.js} +1 -1
- data/docs/assets/{assets.md.D3wunzLx.js → assets.md.7C3HWkga.js} +3 -3
- data/docs/assets/{assets.md.D3wunzLx.lean.js → assets.md.7C3HWkga.lean.js} +1 -1
- data/docs/assets/{brut-js.md.o2DAO2s2.js → brut-js.md.B4GYxQVw.js} +1 -1
- data/docs/assets/{brut-js.md.o2DAO2s2.lean.js → brut-js.md.B4GYxQVw.lean.js} +1 -1
- data/docs/assets/chunks/@localSearchIndexroot.Biqy1A4t.js +1 -0
- data/docs/assets/chunks/{VPLocalSearchBox.gABXcTWp.js → VPLocalSearchBox.DtgDfde2.js} +1 -1
- data/docs/assets/chunks/{theme.DwUXXAL3.js → theme.B45bvibT.js} +2 -2
- data/docs/assets/{cli.md.RmeA2b0i.js → cli.md.CjsktgFz.js} +15 -20
- data/docs/assets/components.md.DatoNgFo.js +96 -0
- data/docs/assets/{components.md.CRUMdRoN.lean.js → components.md.DatoNgFo.lean.js} +1 -1
- data/docs/assets/{configuration.md.BGHl8oRC.js → configuration.md.DeyhpqEx.js} +3 -3
- data/docs/assets/{css.md.DJgj2clw.js → css.md.CltvJqAa.js} +3 -3
- data/docs/assets/{custom-element-tests.md.BrYJQEl3.js → custom-element-tests.md.B_rbta32.js} +3 -3
- data/docs/assets/{database-access.md.C7l-Vuvb.js → database-access.md.gnluu54N.js} +1 -1
- data/docs/assets/{database-schema.md.BUjR0VS1.js → database-schema.md.CSYk6E6v.js} +6 -6
- data/docs/assets/{database-schema.md.BUjR0VS1.lean.js → database-schema.md.CSYk6E6v.lean.js} +1 -1
- data/docs/assets/deployment.md.BLseERGV.js +48 -0
- data/docs/assets/deployment.md.BLseERGV.lean.js +1 -0
- data/docs/assets/dev-environment.md.BroAOLhF.js +11 -0
- data/docs/assets/dir-structure.md.CWir1pic.js +46 -0
- data/docs/assets/dir-structure.md.CWir1pic.lean.js +1 -0
- data/docs/assets/doc-conventions.md.BzmSrTEW.js +1 -0
- data/docs/assets/doc-conventions.md.BzmSrTEW.lean.js +1 -0
- data/docs/assets/{end-to-end-tests.md.yfQHC0b5.js → end-to-end-tests.md.DzqRpZ43.js} +5 -3
- data/docs/assets/end-to-end-tests.md.DzqRpZ43.lean.js +1 -0
- data/docs/assets/features.md.DPFXsy0z.js +154 -0
- data/docs/assets/features.md.DPFXsy0z.lean.js +1 -0
- data/docs/assets/flash-and-session.md.nPvUpnUx.js +79 -0
- data/docs/assets/{flash-and-session.md.BXY8RvT0.lean.js → flash-and-session.md.nPvUpnUx.lean.js} +1 -1
- data/docs/assets/form-constraints.md.x5tNpTTI.js +90 -0
- data/docs/assets/form-constraints.md.x5tNpTTI.lean.js +1 -0
- data/docs/assets/forms.md.C2Dizvzq.js +64 -0
- data/docs/assets/forms.md.C2Dizvzq.lean.js +1 -0
- data/docs/assets/{getting-started.md.Ciz82L0m.js → getting-started.md.C93e0odB.js} +5 -5
- data/docs/assets/{getting-started.md.Ciz82L0m.lean.js → getting-started.md.C93e0odB.lean.js} +1 -1
- data/docs/assets/handlers.md.Chyri6KA.js +54 -0
- data/docs/assets/handlers.md.Chyri6KA.lean.js +1 -0
- data/docs/assets/{hooks.md.C4-moMny.js → hooks.md.Jmb5VOLA.js} +4 -4
- data/docs/assets/{hooks.md.C4-moMny.lean.js → hooks.md.Jmb5VOLA.lean.js} +1 -1
- data/docs/assets/{i18n.md.Do9i1qWl.js → i18n.md.xQhiGo1G.js} +2 -2
- data/docs/assets/{i18n.md.Do9i1qWl.lean.js → i18n.md.xQhiGo1G.lean.js} +1 -1
- data/docs/assets/index.md.CAMqGBJE.js +1 -0
- data/docs/assets/index.md.CAMqGBJE.lean.js +1 -0
- data/docs/assets/{instrumentation.md.a9Pjps4P.js → instrumentation.md.BgcaGVYH.js} +2 -2
- data/docs/assets/{instrumentation.md.a9Pjps4P.lean.js → instrumentation.md.BgcaGVYH.lean.js} +1 -1
- data/docs/assets/{javascript.md.GWbhRS51.js → javascript.md.DzrMxUmI.js} +7 -7
- data/docs/assets/{javascript.md.GWbhRS51.lean.js → javascript.md.DzrMxUmI.lean.js} +1 -1
- data/docs/assets/keyword-injection.md.95Zgh2eN.js +21 -0
- data/docs/assets/{keyword-injection.md.Dt2tKREs.lean.js → keyword-injection.md.95Zgh2eN.lean.js} +1 -1
- data/docs/assets/{layouts.md.cPnh3NId.js → layouts.md.CJGDFY-m.js} +2 -15
- data/docs/assets/layouts.md.CJGDFY-m.lean.js +1 -0
- data/docs/assets/{lsp.md.Bsu-f6VU.js → lsp.md.Dn1rIiW0.js} +1 -1
- data/docs/assets/{lsp.md.Bsu-f6VU.lean.js → lsp.md.Dn1rIiW0.lean.js} +1 -1
- data/docs/assets/overview.md.Bdq4qt3L.js +1 -0
- data/docs/assets/overview.md.Bdq4qt3L.lean.js +1 -0
- data/docs/assets/pages.md.B7Hc-i6H.js +45 -0
- data/docs/assets/pages.md.B7Hc-i6H.lean.js +1 -0
- data/docs/assets/recipes_alternate-layouts.md.BwEytl59.js +22 -0
- data/docs/assets/recipes_alternate-layouts.md.BwEytl59.lean.js +1 -0
- data/docs/assets/recipes_authentication.md.Dzvi_g69.js +156 -0
- data/docs/assets/recipes_authentication.md.Dzvi_g69.lean.js +1 -0
- data/docs/assets/recipes_blank-layouts.md.fyAUJyJR.js +15 -0
- data/docs/assets/recipes_blank-layouts.md.fyAUJyJR.lean.js +1 -0
- data/docs/assets/recipes_custom-flash.md.CrQbI5eH.js +26 -0
- data/docs/assets/recipes_custom-flash.md.CrQbI5eH.lean.js +1 -0
- data/docs/assets/recipes_indexed-forms.md.CstYyOSo.js +74 -0
- data/docs/assets/recipes_indexed-forms.md.CstYyOSo.lean.js +1 -0
- data/docs/assets/recipes_text-field-component.md.H4wLAK0Z.js +101 -0
- data/docs/assets/recipes_text-field-component.md.H4wLAK0Z.lean.js +1 -0
- data/docs/assets/routes.md.B8kfUPHU.js +21 -0
- data/docs/assets/{routes.md.BMM7peut.lean.js → routes.md.B8kfUPHU.lean.js} +1 -1
- data/docs/assets/{security.md.C668yXCi.js → security.md.C0G_AZR-.js} +1 -1
- data/docs/assets/{security.md.C668yXCi.lean.js → security.md.C0G_AZR-.lean.js} +1 -1
- data/docs/assets/space-time-continuum.md.xl44xDos.js +1 -0
- data/docs/assets/{space-time-continuum.md.KPUIKysQ.lean.js → space-time-continuum.md.xl44xDos.lean.js} +1 -1
- data/docs/assets/{style.D73IYGCX.css → style.prAgp4yQ.css} +1 -1
- data/docs/assets/tutorial.md.a4a0eVOy.js +1 -0
- data/docs/assets/tutorial.md.a4a0eVOy.lean.js +1 -0
- data/docs/assets/why.md.C-hk5xgJ.js +1 -0
- data/docs/assets/why.md.C-hk5xgJ.lean.js +1 -0
- data/docs/assets.html +12 -7
- 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 +1 -1
- data/docs/brut-js/api/ConfirmSubmit.js.html +1 -1
- 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 +12 -7
- data/docs/business-logic.html +10 -5
- data/docs/cli.html +26 -26
- data/docs/components.html +61 -64
- data/docs/configuration.html +13 -8
- data/docs/css.html +14 -9
- data/docs/custom-element-tests.html +14 -9
- data/docs/database-access.html +12 -7
- data/docs/database-schema.html +15 -10
- data/docs/deployment.html +58 -6
- data/docs/dev-environment.html +12 -7
- data/docs/dir-structure.html +74 -0
- data/docs/doc-conventions.html +11 -6
- data/docs/end-to-end-tests.html +15 -8
- data/docs/favicon.ico +0 -0
- data/docs/features.html +182 -0
- data/docs/flash-and-session.html +73 -82
- data/docs/form-constraints.html +118 -0
- data/docs/forms.html +57 -367
- data/docs/getting-started.html +15 -10
- data/docs/handlers.html +51 -61
- data/docs/hashmap.json +1 -1
- data/docs/hooks.html +14 -9
- data/docs/i18n.html +12 -7
- data/docs/index.html +11 -6
- data/docs/instrumentation.html +12 -7
- data/docs/javascript.html +17 -12
- data/docs/jobs.html +10 -5
- data/docs/keyword-injection.html +22 -21
- data/docs/layouts.html +12 -20
- data/docs/lsp.html +11 -6
- data/docs/markdown-examples.html +10 -5
- data/docs/middleware.html +10 -5
- data/docs/not-released.html +10 -5
- data/docs/overview.html +11 -138
- data/docs/pages.html +49 -121
- data/docs/recipes/alternate-layouts.html +50 -0
- data/docs/recipes/authentication.html +166 -6
- data/docs/recipes/blank-layouts.html +43 -0
- data/docs/recipes/custom-flash.html +54 -0
- data/docs/recipes/indexed-forms.html +102 -0
- data/docs/recipes/text-field-component.html +129 -0
- data/docs/routes.html +16 -19
- data/docs/security.html +11 -6
- data/docs/seed-data.html +10 -5
- data/docs/space-time-continuum.html +11 -6
- data/docs/tutorial.html +11 -6
- data/docs/unit-tests.html +10 -5
- data/docs/why.html +29 -0
- data/dx/bash_customizations +7 -0
- data/dx/build +13 -2
- data/dx/docker-compose.env +1 -1
- data/dx/exec +25 -8
- data/lib/brut/front_end/form.rb +8 -8
- data/lib/brut/front_end/forms/input.rb +253 -20
- data/lib/brut/front_end/forms/input_definition.rb +15 -12
- data/lib/brut/front_end/forms/radio_button_group_input.rb +8 -1
- data/lib/brut/front_end/forms/select_input.rb +8 -1
- data/lib/brut/front_end.rb +1 -0
- data/lib/brut/version.rb +1 -1
- data/specs/brut/front_end/forms/input.spec.rb +978 -0
- data/specs/brut/front_end/forms/radio_button_group_input.spec.rb +54 -0
- data/specs/brut/front_end/forms/select_input.spec.rb +54 -0
- data/specs/spec_helper.rb +27 -0
- data/specs/support/matchers/have_constraint_violation.rb +23 -0
- data/specs/support/matchers.rb +5 -0
- data/specs/support.rb +3 -0
- metadata +141 -77
- data/brutrb.com/public/images/logo-300.png +0 -0
- data/brutrb.com/public/images/logo.png +0 -0
- data/docs/assets/ai.md._6HCDL6d.lean.js +0 -1
- data/docs/assets/chunks/@localSearchIndexroot.CoYzciVi.js +0 -1
- data/docs/assets/components.md.CRUMdRoN.js +0 -104
- data/docs/assets/deployment.md.Dbka4OTr.js +0 -1
- data/docs/assets/deployment.md.Dbka4OTr.lean.js +0 -1
- data/docs/assets/dev-environment.md.GZv6xvi9.js +0 -11
- data/docs/assets/doc-conventions.md.-kN3Xo5C.js +0 -1
- data/docs/assets/doc-conventions.md.-kN3Xo5C.lean.js +0 -1
- data/docs/assets/end-to-end-tests.md.yfQHC0b5.lean.js +0 -1
- data/docs/assets/flash-and-session.md.BXY8RvT0.js +0 -93
- data/docs/assets/forms.md.B-koVgyw.js +0 -379
- data/docs/assets/forms.md.B-koVgyw.lean.js +0 -1
- data/docs/assets/handlers.md.089DVD3v.js +0 -69
- data/docs/assets/handlers.md.089DVD3v.lean.js +0 -1
- data/docs/assets/index.md.B28EwVpq.js +0 -1
- data/docs/assets/index.md.B28EwVpq.lean.js +0 -1
- data/docs/assets/keyword-injection.md.Dt2tKREs.js +0 -25
- data/docs/assets/layouts.md.cPnh3NId.lean.js +0 -1
- data/docs/assets/overview.Da81cB9R.png +0 -0
- data/docs/assets/overview.md.C5wlBcR5.js +0 -133
- data/docs/assets/overview.md.C5wlBcR5.lean.js +0 -1
- data/docs/assets/pages.md.BE3kfOc5.js +0 -122
- data/docs/assets/pages.md.BE3kfOc5.lean.js +0 -1
- data/docs/assets/recipes_authentication.md.CAsXf7hk.js +0 -1
- data/docs/assets/recipes_authentication.md.CAsXf7hk.lean.js +0 -1
- data/docs/assets/routes.md.BMM7peut.js +0 -29
- data/docs/assets/space-time-continuum.md.KPUIKysQ.js +0 -1
- data/docs/assets/tutorial.md.BnoGjrdK.js +0 -1
- data/docs/assets/tutorial.md.BnoGjrdK.lean.js +0 -1
- data/docs/images/logo-300.png +0 -0
- data/docs/images/logo.png +0 -0
- /data/docs/assets/{cli.md.RmeA2b0i.lean.js → cli.md.CjsktgFz.lean.js} +0 -0
- /data/docs/assets/{configuration.md.BGHl8oRC.lean.js → configuration.md.DeyhpqEx.lean.js} +0 -0
- /data/docs/assets/{css.md.DJgj2clw.lean.js → css.md.CltvJqAa.lean.js} +0 -0
- /data/docs/assets/{custom-element-tests.md.BrYJQEl3.lean.js → custom-element-tests.md.B_rbta32.lean.js} +0 -0
- /data/docs/assets/{database-access.md.C7l-Vuvb.lean.js → database-access.md.gnluu54N.lean.js} +0 -0
- /data/docs/assets/{dev-environment.md.GZv6xvi9.lean.js → dev-environment.md.BroAOLhF.lean.js} +0 -0
@@ -0,0 +1,54 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Brut::FrontEnd::Forms::RadioButtonGroupInput do
|
4
|
+
describe "#value=" do
|
5
|
+
let(:name) { "test-input" }
|
6
|
+
context "value is present" do
|
7
|
+
it "does not set any violations" do
|
8
|
+
input = described_class.new(
|
9
|
+
input_definition: Brut::FrontEnd::Forms::RadioButtonGroupInputDefinition.new(
|
10
|
+
name:,
|
11
|
+
required: true,
|
12
|
+
),
|
13
|
+
index: 0,
|
14
|
+
value: "DC"
|
15
|
+
)
|
16
|
+
expect(input.valid?).to eq(true)
|
17
|
+
expect(input.value).to eq("DC")
|
18
|
+
expect(input.typed_value).to eq("DC")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
context "value is not present" do
|
22
|
+
context "required" do
|
23
|
+
it "sets valueMissing violation" do
|
24
|
+
input = described_class.new(
|
25
|
+
input_definition: Brut::FrontEnd::Forms::RadioButtonGroupInputDefinition.new(
|
26
|
+
name:,
|
27
|
+
required: true,
|
28
|
+
),
|
29
|
+
index: 0,
|
30
|
+
value: ""
|
31
|
+
)
|
32
|
+
expect(input.validity_state).to have_constraint_violation(:valueMissing)
|
33
|
+
expect(input.value).to eq("")
|
34
|
+
expect(input.typed_value).to eq(nil)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
context "not required" do
|
38
|
+
it "does not set any violations" do
|
39
|
+
input = described_class.new(
|
40
|
+
input_definition: Brut::FrontEnd::Forms::RadioButtonGroupInputDefinition.new(
|
41
|
+
name:,
|
42
|
+
required: false,
|
43
|
+
),
|
44
|
+
index: 0,
|
45
|
+
value: ""
|
46
|
+
)
|
47
|
+
expect(input.valid?).to eq(true)
|
48
|
+
expect(input.value).to eq("")
|
49
|
+
expect(input.typed_value).to eq(nil)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe Brut::FrontEnd::Forms::SelectInput do
|
4
|
+
describe "#value=" do
|
5
|
+
let(:name) { "test-input" }
|
6
|
+
context "value is present" do
|
7
|
+
it "does not set any violations" do
|
8
|
+
input = described_class.new(
|
9
|
+
input_definition: Brut::FrontEnd::Forms::SelectInputDefinition.new(
|
10
|
+
name:,
|
11
|
+
required: true,
|
12
|
+
),
|
13
|
+
index: 0,
|
14
|
+
value: "DC"
|
15
|
+
)
|
16
|
+
expect(input.valid?).to eq(true)
|
17
|
+
expect(input.value).to eq("DC")
|
18
|
+
expect(input.typed_value).to eq("DC")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
context "value is not present" do
|
22
|
+
context "required" do
|
23
|
+
it "sets valueMissing violation" do
|
24
|
+
input = described_class.new(
|
25
|
+
input_definition: Brut::FrontEnd::Forms::SelectInputDefinition.new(
|
26
|
+
name:,
|
27
|
+
required: true,
|
28
|
+
),
|
29
|
+
index: 0,
|
30
|
+
value: ""
|
31
|
+
)
|
32
|
+
expect(input.validity_state).to have_constraint_violation(:valueMissing)
|
33
|
+
expect(input.value).to eq("")
|
34
|
+
expect(input.typed_value).to eq(nil)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
context "not required" do
|
38
|
+
it "does not set any violations" do
|
39
|
+
input = described_class.new(
|
40
|
+
input_definition: Brut::FrontEnd::Forms::SelectInputDefinition.new(
|
41
|
+
name:,
|
42
|
+
required: false,
|
43
|
+
),
|
44
|
+
index: 0,
|
45
|
+
value: ""
|
46
|
+
)
|
47
|
+
expect(input.valid?).to eq(true)
|
48
|
+
expect(input.value).to eq("")
|
49
|
+
expect(input.typed_value).to eq(nil)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "brut"
|
2
|
+
require_relative "support"
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.expect_with :rspec do |expectations|
|
6
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
7
|
+
end
|
8
|
+
|
9
|
+
config.mock_with :rspec do |mocks|
|
10
|
+
mocks.verify_partial_doubles = true
|
11
|
+
end
|
12
|
+
|
13
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
14
|
+
|
15
|
+
config.filter_run_when_matching :focus
|
16
|
+
config.disable_monkey_patching!
|
17
|
+
config.warnings = ENV["RSPEC_WARNINGS"] == "true"
|
18
|
+
|
19
|
+
if config.files_to_run.one?
|
20
|
+
config.default_formatter = "doc"
|
21
|
+
end
|
22
|
+
|
23
|
+
config.profile_examples = (ENV["RSPEC_PROFILE_EXAMPLES"] || "0").to_i
|
24
|
+
|
25
|
+
config.order = :random
|
26
|
+
Kernel.srand config.seed
|
27
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
RSpec::Matchers.define :have_constraint_violation do |key|
|
2
|
+
match do |validity_state|
|
3
|
+
key = key.to_s
|
4
|
+
validity_state.any? do |constraint_violation|
|
5
|
+
constraint_violation.key == key
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
failure_message do |validity_state|
|
10
|
+
keys_with_violations = validity_state.map { it.key }
|
11
|
+
|
12
|
+
if keys_with_violations.any?
|
13
|
+
"Did not find a violation for '#{key}', but found these keys with violations: #{keys_with_violations.join(", ")}"
|
14
|
+
else
|
15
|
+
"Did not find any constraint violations"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
failure_message_when_negated do |validity_state|
|
20
|
+
"Found #{key} as a violation when not expecting it"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
data/specs/support.rb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Bryant Copeland
|
@@ -396,6 +396,8 @@ extra_rdoc_files: []
|
|
396
396
|
files:
|
397
397
|
- ".gitignore"
|
398
398
|
- ".nvim.lua"
|
399
|
+
- ".projections.json"
|
400
|
+
- ".rspec"
|
399
401
|
- CODE_OF_CONDUCT.txt
|
400
402
|
- Dockerfile.dx
|
401
403
|
- Gemfile
|
@@ -403,10 +405,18 @@ files:
|
|
403
405
|
- LICENSE.txt
|
404
406
|
- README.md
|
405
407
|
- Rakefile
|
408
|
+
- assets/Logo-Square.pxd
|
409
|
+
- assets/LogoPylon.pxd
|
410
|
+
- assets/LogoStop.pxd
|
411
|
+
- assets/LogoTall.pxd
|
412
|
+
- assets/MetroLogo.graffle
|
413
|
+
- assets/SocialImage.png
|
414
|
+
- assets/SocialImage.pxd
|
406
415
|
- bin/bin_kit.rb
|
407
416
|
- bin/dev
|
408
417
|
- bin/docs
|
409
418
|
- bin/rake
|
419
|
+
- bin/rspec
|
410
420
|
- bin/setup
|
411
421
|
- brut-css/.nvim.lua
|
412
422
|
- brut-css/README.md
|
@@ -588,15 +598,25 @@ files:
|
|
588
598
|
- brutrb.com/database-schema.md
|
589
599
|
- brutrb.com/deployment.md
|
590
600
|
- brutrb.com/dev-environment.md
|
601
|
+
- brutrb.com/dir-structure.md
|
591
602
|
- brutrb.com/doc-conventions.md
|
603
|
+
- brutrb.com/dx
|
592
604
|
- brutrb.com/end-to-end-tests.md
|
605
|
+
- brutrb.com/features.md
|
593
606
|
- brutrb.com/flash-and-session.md
|
607
|
+
- brutrb.com/form-constraints.md
|
594
608
|
- brutrb.com/forms.md
|
595
609
|
- brutrb.com/getting-started.md
|
596
610
|
- brutrb.com/handlers.md
|
597
611
|
- brutrb.com/hooks.md
|
598
612
|
- brutrb.com/i18n.md
|
613
|
+
- brutrb.com/images/LogoPylon.png
|
614
|
+
- brutrb.com/images/LogoSquare.png
|
615
|
+
- brutrb.com/images/LogoStop.png
|
616
|
+
- brutrb.com/images/LogoTall.png
|
599
617
|
- brutrb.com/images/Makefile
|
618
|
+
- brutrb.com/images/OverviewMetro.graffle
|
619
|
+
- brutrb.com/images/OverviewMetro.png
|
600
620
|
- brutrb.com/images/dev-env-overview.dot
|
601
621
|
- brutrb.com/images/dev-env-overview.png
|
602
622
|
- brutrb.com/images/dev-env-protocol.dot
|
@@ -623,19 +643,26 @@ files:
|
|
623
643
|
- brutrb.com/package-lock.json
|
624
644
|
- brutrb.com/package.json
|
625
645
|
- brutrb.com/pages.md
|
626
|
-
- brutrb.com/public/
|
627
|
-
- brutrb.com/public/
|
646
|
+
- brutrb.com/public/SocialImage.png
|
647
|
+
- brutrb.com/public/favicon.ico
|
648
|
+
- brutrb.com/recipes/alternate-layouts.md
|
628
649
|
- brutrb.com/recipes/authentication.md
|
650
|
+
- brutrb.com/recipes/blank-layouts.md
|
651
|
+
- brutrb.com/recipes/custom-flash.md
|
652
|
+
- brutrb.com/recipes/indexed-forms.md
|
653
|
+
- brutrb.com/recipes/text-field-component.md
|
629
654
|
- brutrb.com/routes.md
|
630
655
|
- brutrb.com/security.md
|
631
656
|
- brutrb.com/seed-data.md
|
632
657
|
- brutrb.com/space-time-continuum.md
|
633
658
|
- brutrb.com/tutorial.md
|
634
659
|
- brutrb.com/unit-tests.md
|
660
|
+
- brutrb.com/why.md
|
635
661
|
- docker-compose.dx.yml
|
636
662
|
- docs-todo.md
|
637
663
|
- docs/404.html
|
638
664
|
- docs/CNAME
|
665
|
+
- docs/SocialImage.png
|
639
666
|
- docs/ai.html
|
640
667
|
- docs/api/Brut.html
|
641
668
|
- docs/api/Brut/BackEnd.html
|
@@ -734,6 +761,8 @@ files:
|
|
734
761
|
- docs/api/Brut/FrontEnd/Forms.html
|
735
762
|
- docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html
|
736
763
|
- docs/api/Brut/FrontEnd/Forms/Input.html
|
764
|
+
- docs/api/Brut/FrontEnd/Forms/Input/Color.html
|
765
|
+
- docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html
|
737
766
|
- docs/api/Brut/FrontEnd/Forms/InputDeclarations.html
|
738
767
|
- docs/api/Brut/FrontEnd/Forms/InputDefinition.html
|
739
768
|
- docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html
|
@@ -853,96 +882,115 @@ files:
|
|
853
882
|
- docs/api/method_list.html
|
854
883
|
- docs/api/top-level-namespace.html
|
855
884
|
- docs/assets.html
|
856
|
-
- docs/assets/
|
857
|
-
- docs/assets/
|
858
|
-
- docs/assets/
|
859
|
-
- docs/assets/
|
860
|
-
- docs/assets/
|
861
|
-
- docs/assets/
|
862
|
-
- docs/assets/
|
885
|
+
- docs/assets/LogoStop.Gb3tDhL1.png
|
886
|
+
- docs/assets/OverviewMetro.DUS-5fUZ.png
|
887
|
+
- docs/assets/ai.md.Cy9GWnER.js
|
888
|
+
- docs/assets/ai.md.Cy9GWnER.lean.js
|
889
|
+
- docs/assets/app.ClaS47Ru.js
|
890
|
+
- docs/assets/assets.md.7C3HWkga.js
|
891
|
+
- docs/assets/assets.md.7C3HWkga.lean.js
|
892
|
+
- docs/assets/brut-js.md.B4GYxQVw.js
|
893
|
+
- docs/assets/brut-js.md.B4GYxQVw.lean.js
|
863
894
|
- docs/assets/business-logic.md.BY4hGy0m.js
|
864
895
|
- docs/assets/business-logic.md.BY4hGy0m.lean.js
|
865
|
-
- docs/assets/chunks/@localSearchIndexroot.
|
866
|
-
- docs/assets/chunks/VPLocalSearchBox.
|
896
|
+
- docs/assets/chunks/@localSearchIndexroot.Biqy1A4t.js
|
897
|
+
- docs/assets/chunks/VPLocalSearchBox.DtgDfde2.js
|
867
898
|
- docs/assets/chunks/framework.1L-BeKqY.js
|
868
|
-
- docs/assets/chunks/theme.
|
869
|
-
- docs/assets/cli.md.
|
870
|
-
- docs/assets/cli.md.
|
871
|
-
- docs/assets/components.md.
|
872
|
-
- docs/assets/components.md.
|
873
|
-
- docs/assets/configuration.md.
|
874
|
-
- docs/assets/configuration.md.
|
875
|
-
- docs/assets/css.md.
|
876
|
-
- docs/assets/css.md.
|
877
|
-
- docs/assets/custom-element-tests.md.
|
878
|
-
- docs/assets/custom-element-tests.md.
|
879
|
-
- docs/assets/database-access.md.
|
880
|
-
- docs/assets/database-access.md.
|
881
|
-
- docs/assets/database-schema.md.
|
882
|
-
- docs/assets/database-schema.md.
|
883
|
-
- docs/assets/deployment.md.
|
884
|
-
- docs/assets/deployment.md.
|
899
|
+
- docs/assets/chunks/theme.B45bvibT.js
|
900
|
+
- docs/assets/cli.md.CjsktgFz.js
|
901
|
+
- docs/assets/cli.md.CjsktgFz.lean.js
|
902
|
+
- docs/assets/components.md.DatoNgFo.js
|
903
|
+
- docs/assets/components.md.DatoNgFo.lean.js
|
904
|
+
- docs/assets/configuration.md.DeyhpqEx.js
|
905
|
+
- docs/assets/configuration.md.DeyhpqEx.lean.js
|
906
|
+
- docs/assets/css.md.CltvJqAa.js
|
907
|
+
- docs/assets/css.md.CltvJqAa.lean.js
|
908
|
+
- docs/assets/custom-element-tests.md.B_rbta32.js
|
909
|
+
- docs/assets/custom-element-tests.md.B_rbta32.lean.js
|
910
|
+
- docs/assets/database-access.md.gnluu54N.js
|
911
|
+
- docs/assets/database-access.md.gnluu54N.lean.js
|
912
|
+
- docs/assets/database-schema.md.CSYk6E6v.js
|
913
|
+
- docs/assets/database-schema.md.CSYk6E6v.lean.js
|
914
|
+
- docs/assets/deployment.md.BLseERGV.js
|
915
|
+
- docs/assets/deployment.md.BLseERGV.lean.js
|
885
916
|
- docs/assets/dev-env-overview.Gj7NWM8-.png
|
886
917
|
- docs/assets/dev-env-protocol.DysDAtnz.png
|
887
|
-
- docs/assets/dev-environment.md.
|
888
|
-
- docs/assets/dev-environment.md.
|
889
|
-
- docs/assets/
|
890
|
-
- docs/assets/
|
891
|
-
- docs/assets/
|
892
|
-
- docs/assets/
|
893
|
-
- docs/assets/
|
894
|
-
- docs/assets/
|
895
|
-
- docs/assets/
|
896
|
-
- docs/assets/
|
897
|
-
- docs/assets/
|
898
|
-
- docs/assets/
|
899
|
-
- docs/assets/
|
900
|
-
- docs/assets/
|
901
|
-
- docs/assets/
|
902
|
-
- docs/assets/
|
903
|
-
- docs/assets/
|
904
|
-
- docs/assets/
|
905
|
-
- docs/assets/
|
906
|
-
- docs/assets/
|
907
|
-
- docs/assets/
|
908
|
-
- docs/assets/
|
909
|
-
- docs/assets/
|
910
|
-
- docs/assets/
|
918
|
+
- docs/assets/dev-environment.md.BroAOLhF.js
|
919
|
+
- docs/assets/dev-environment.md.BroAOLhF.lean.js
|
920
|
+
- docs/assets/dir-structure.md.CWir1pic.js
|
921
|
+
- docs/assets/dir-structure.md.CWir1pic.lean.js
|
922
|
+
- docs/assets/doc-conventions.md.BzmSrTEW.js
|
923
|
+
- docs/assets/doc-conventions.md.BzmSrTEW.lean.js
|
924
|
+
- docs/assets/end-to-end-tests.md.DzqRpZ43.js
|
925
|
+
- docs/assets/end-to-end-tests.md.DzqRpZ43.lean.js
|
926
|
+
- docs/assets/features.md.DPFXsy0z.js
|
927
|
+
- docs/assets/features.md.DPFXsy0z.lean.js
|
928
|
+
- docs/assets/flash-and-session.md.nPvUpnUx.js
|
929
|
+
- docs/assets/flash-and-session.md.nPvUpnUx.lean.js
|
930
|
+
- docs/assets/form-constraints.md.x5tNpTTI.js
|
931
|
+
- docs/assets/form-constraints.md.x5tNpTTI.lean.js
|
932
|
+
- docs/assets/forms.md.C2Dizvzq.js
|
933
|
+
- docs/assets/forms.md.C2Dizvzq.lean.js
|
934
|
+
- docs/assets/getting-started.md.C93e0odB.js
|
935
|
+
- docs/assets/getting-started.md.C93e0odB.lean.js
|
936
|
+
- docs/assets/handlers.md.Chyri6KA.js
|
937
|
+
- docs/assets/handlers.md.Chyri6KA.lean.js
|
938
|
+
- docs/assets/hooks.md.Jmb5VOLA.js
|
939
|
+
- docs/assets/hooks.md.Jmb5VOLA.lean.js
|
940
|
+
- docs/assets/i18n.md.xQhiGo1G.js
|
941
|
+
- docs/assets/i18n.md.xQhiGo1G.lean.js
|
942
|
+
- docs/assets/index.md.CAMqGBJE.js
|
943
|
+
- docs/assets/index.md.CAMqGBJE.lean.js
|
944
|
+
- docs/assets/instrumentation.md.BgcaGVYH.js
|
945
|
+
- docs/assets/instrumentation.md.BgcaGVYH.lean.js
|
946
|
+
- docs/assets/javascript.md.DzrMxUmI.js
|
947
|
+
- docs/assets/javascript.md.DzrMxUmI.lean.js
|
911
948
|
- docs/assets/jobs.md.S-2amAYp.js
|
912
949
|
- docs/assets/jobs.md.S-2amAYp.lean.js
|
913
|
-
- docs/assets/keyword-injection.md.
|
914
|
-
- docs/assets/keyword-injection.md.
|
915
|
-
- docs/assets/layouts.md.
|
916
|
-
- docs/assets/layouts.md.
|
917
|
-
- docs/assets/lsp.md.
|
918
|
-
- docs/assets/lsp.md.
|
950
|
+
- docs/assets/keyword-injection.md.95Zgh2eN.js
|
951
|
+
- docs/assets/keyword-injection.md.95Zgh2eN.lean.js
|
952
|
+
- docs/assets/layouts.md.CJGDFY-m.js
|
953
|
+
- docs/assets/layouts.md.CJGDFY-m.lean.js
|
954
|
+
- docs/assets/lsp.md.Dn1rIiW0.js
|
955
|
+
- docs/assets/lsp.md.Dn1rIiW0.lean.js
|
919
956
|
- docs/assets/markdown-examples.md.CCFEQO44.js
|
920
957
|
- docs/assets/markdown-examples.md.CCFEQO44.lean.js
|
921
958
|
- docs/assets/middleware.md.Czz_UlJN.js
|
922
959
|
- docs/assets/middleware.md.Czz_UlJN.lean.js
|
923
960
|
- docs/assets/not-released.md.BBy28McC.js
|
924
961
|
- docs/assets/not-released.md.BBy28McC.lean.js
|
925
|
-
- docs/assets/overview.
|
926
|
-
- docs/assets/overview.md.
|
927
|
-
- docs/assets/
|
928
|
-
- docs/assets/pages.md.
|
929
|
-
- docs/assets/
|
930
|
-
- docs/assets/
|
931
|
-
- docs/assets/recipes_authentication.md.
|
932
|
-
- docs/assets/
|
933
|
-
- docs/assets/
|
934
|
-
- docs/assets/
|
935
|
-
- docs/assets/
|
962
|
+
- docs/assets/overview.md.Bdq4qt3L.js
|
963
|
+
- docs/assets/overview.md.Bdq4qt3L.lean.js
|
964
|
+
- docs/assets/pages.md.B7Hc-i6H.js
|
965
|
+
- docs/assets/pages.md.B7Hc-i6H.lean.js
|
966
|
+
- docs/assets/recipes_alternate-layouts.md.BwEytl59.js
|
967
|
+
- docs/assets/recipes_alternate-layouts.md.BwEytl59.lean.js
|
968
|
+
- docs/assets/recipes_authentication.md.Dzvi_g69.js
|
969
|
+
- docs/assets/recipes_authentication.md.Dzvi_g69.lean.js
|
970
|
+
- docs/assets/recipes_blank-layouts.md.fyAUJyJR.js
|
971
|
+
- docs/assets/recipes_blank-layouts.md.fyAUJyJR.lean.js
|
972
|
+
- docs/assets/recipes_custom-flash.md.CrQbI5eH.js
|
973
|
+
- docs/assets/recipes_custom-flash.md.CrQbI5eH.lean.js
|
974
|
+
- docs/assets/recipes_indexed-forms.md.CstYyOSo.js
|
975
|
+
- docs/assets/recipes_indexed-forms.md.CstYyOSo.lean.js
|
976
|
+
- docs/assets/recipes_text-field-component.md.H4wLAK0Z.js
|
977
|
+
- docs/assets/recipes_text-field-component.md.H4wLAK0Z.lean.js
|
978
|
+
- docs/assets/routes.md.B8kfUPHU.js
|
979
|
+
- docs/assets/routes.md.B8kfUPHU.lean.js
|
980
|
+
- docs/assets/security.md.C0G_AZR-.js
|
981
|
+
- docs/assets/security.md.C0G_AZR-.lean.js
|
936
982
|
- docs/assets/seed-data.md.BvFZlqIk.js
|
937
983
|
- docs/assets/seed-data.md.BvFZlqIk.lean.js
|
938
984
|
- docs/assets/spa.qejUdp-5.png
|
939
|
-
- docs/assets/space-time-continuum.md.
|
940
|
-
- docs/assets/space-time-continuum.md.
|
941
|
-
- docs/assets/style.
|
942
|
-
- docs/assets/tutorial.md.
|
943
|
-
- docs/assets/tutorial.md.
|
985
|
+
- docs/assets/space-time-continuum.md.xl44xDos.js
|
986
|
+
- docs/assets/space-time-continuum.md.xl44xDos.lean.js
|
987
|
+
- docs/assets/style.prAgp4yQ.css
|
988
|
+
- docs/assets/tutorial.md.a4a0eVOy.js
|
989
|
+
- docs/assets/tutorial.md.a4a0eVOy.lean.js
|
944
990
|
- docs/assets/unit-tests.md.DUGrnLj5.js
|
945
991
|
- docs/assets/unit-tests.md.DUGrnLj5.lean.js
|
992
|
+
- docs/assets/why.md.C-hk5xgJ.js
|
993
|
+
- docs/assets/why.md.C-hk5xgJ.lean.js
|
946
994
|
- docs/assets/workspace-protocol.C0gXsoDb.png
|
947
995
|
- docs/brut-css/brut.css
|
948
996
|
- docs/brut-css/brut.max.css
|
@@ -1045,17 +1093,19 @@ files:
|
|
1045
1093
|
- docs/database-schema.html
|
1046
1094
|
- docs/deployment.html
|
1047
1095
|
- docs/dev-environment.html
|
1096
|
+
- docs/dir-structure.html
|
1048
1097
|
- docs/doc-conventions.html
|
1049
1098
|
- docs/end-to-end-tests.html
|
1099
|
+
- docs/favicon.ico
|
1100
|
+
- docs/features.html
|
1050
1101
|
- docs/flash-and-session.html
|
1102
|
+
- docs/form-constraints.html
|
1051
1103
|
- docs/forms.html
|
1052
1104
|
- docs/getting-started.html
|
1053
1105
|
- docs/handlers.html
|
1054
1106
|
- docs/hashmap.json
|
1055
1107
|
- docs/hooks.html
|
1056
1108
|
- docs/i18n.html
|
1057
|
-
- docs/images/logo-300.png
|
1058
|
-
- docs/images/logo.png
|
1059
1109
|
- docs/index.html
|
1060
1110
|
- docs/instrumentation.html
|
1061
1111
|
- docs/javascript.html
|
@@ -1068,7 +1118,12 @@ files:
|
|
1068
1118
|
- docs/not-released.html
|
1069
1119
|
- docs/overview.html
|
1070
1120
|
- docs/pages.html
|
1121
|
+
- docs/recipes/alternate-layouts.html
|
1071
1122
|
- docs/recipes/authentication.html
|
1123
|
+
- docs/recipes/blank-layouts.html
|
1124
|
+
- docs/recipes/custom-flash.html
|
1125
|
+
- docs/recipes/indexed-forms.html
|
1126
|
+
- docs/recipes/text-field-component.html
|
1072
1127
|
- docs/routes.html
|
1073
1128
|
- docs/security.html
|
1074
1129
|
- docs/seed-data.html
|
@@ -1076,6 +1131,8 @@ files:
|
|
1076
1131
|
- docs/tutorial.html
|
1077
1132
|
- docs/unit-tests.html
|
1078
1133
|
- docs/vp-icons.css
|
1134
|
+
- docs/why.html
|
1135
|
+
- dx/bash_customizations
|
1079
1136
|
- dx/build
|
1080
1137
|
- dx/docker-compose.env
|
1081
1138
|
- dx/dx.sh.lib
|
@@ -1225,6 +1282,13 @@ files:
|
|
1225
1282
|
- lib/sequel/plugins/created_at.rb
|
1226
1283
|
- lib/sequel/plugins/external_id.rb
|
1227
1284
|
- lib/sequel/plugins/find_bang.rb
|
1285
|
+
- specs/brut/front_end/forms/input.spec.rb
|
1286
|
+
- specs/brut/front_end/forms/radio_button_group_input.spec.rb
|
1287
|
+
- specs/brut/front_end/forms/select_input.spec.rb
|
1288
|
+
- specs/spec_helper.rb
|
1289
|
+
- specs/support.rb
|
1290
|
+
- specs/support/matchers.rb
|
1291
|
+
- specs/support/matchers/have_constraint_violation.rb
|
1228
1292
|
homepage: https://naildrivin5.com
|
1229
1293
|
licenses: []
|
1230
1294
|
metadata:
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{_ as t,c as o,o as a,ag as i}from"./chunks/framework.1L-BeKqY.js";const p=JSON.parse('{"title":"AI Declaration and Notes","description":"","frontmatter":{},"headers":[],"relativePath":"ai.md","filePath":"ai.md"}'),s={name:"ai.md"};function n(r,e,l,d,h,c){return a(),o("div",null,e[0]||(e[0]=[i("",27)]))}const b=t(s,[["render",n]]);export{p as __pageData,b as default};
|