brut 0.3.1 → 0.5.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/CHANGELOG.md +46 -0
- data/Gemfile.lock +1 -1
- data/assets/MetroIcon.graffle +0 -0
- data/brut-css/package-lock.json +2 -2
- data/brut-css/package.json +1 -1
- data/brut-css/src/css/flex.css +1 -1
- data/brut-css/src/docs/includes/body-and-header.html.ejs +1 -1
- data/brut-js/package-lock.json +2 -2
- data/brut-js/package.json +1 -1
- data/brut-js/specs/AjaxSubmit.spec.js +100 -7
- data/brut-js/specs/ConstraintViolationMessage.spec.js +1 -1
- data/brut-js/specs/ConstraintViolationMessages.spec.js +2 -2
- data/brut-js/specs/Form.spec.js +5 -5
- data/brut-js/src/AjaxSubmit.js +76 -40
- data/brut-js/src/ConstraintViolationMessage.js +3 -3
- data/brut-js/src/ConstraintViolationMessages.js +2 -2
- data/brutrb.com/adrs.md +1 -0
- data/brutrb.com/database-schema.md +22 -2
- data/brutrb.com/dev-environment.md +1 -0
- data/brutrb.com/form-constraints.md +2 -2
- data/brutrb.com/handlers.md +1 -1
- data/brutrb.com/i18n.md +2 -2
- data/brutrb.com/layouts.md +1 -1
- data/docs/404.html +2 -2
- data/docs/adrs.html +5 -5
- data/docs/ai.html +3 -3
- 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 +2 -2
- data/docs/api/Brut/CLI/Apps/BuildAssets/CSS.html +6 -6
- data/docs/api/Brut/CLI/Apps/BuildAssets/Images.html +1 -1
- data/docs/api/Brut/CLI/Apps/BuildAssets/JS.html +6 -6
- data/docs/api/Brut/CLI/Apps/BuildAssets.html +2 -2
- 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 +6 -2
- 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 +9 -9
- 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 +8 -12
- data/docs/api/Brut/CLI/Apps/Scaffold/Component.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html +5 -5
- data/docs/api/Brut/CLI/Apps/Scaffold/DbModel.html +384 -0
- data/docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Form.html +5 -5
- 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 +36 -36
- data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold.html +2 -2
- 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 +29 -31
- 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 +16 -2
- 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 +86 -2
- data/docs/api/Brut/FrontEnd/Component.html +78 -9
- data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +5 -5
- data/docs/api/Brut/FrontEnd/Components/FormTag.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/I18nTranslations.html +12 -16
- data/docs/api/Brut/FrontEnd/Components/Input.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Inputs/CsrfToken.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Inputs/InputTag.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +5 -5
- data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Inputs.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/LocaleDetection.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/PageIdentifier.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/TimeTag.html +3 -3
- data/docs/api/Brut/FrontEnd/Components/Traceparent.html +3 -3
- 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 +92 -20
- data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input/Color.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input/TimeOfDay.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/InputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInput.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/RadioButtonGroupInputDefinition.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/SelectInput.html +1 -1
- 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 +2 -2
- 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 +3 -3
- 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 +31 -23
- data/docs/api/Brut/FrontEnd/Pages/MissingPage.html +3 -3
- 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 +13 -11
- 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/ModuleName.html +595 -0
- 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 +24 -12
- data/docs/api/class_list.html +1 -1
- data/docs/api/file.README.html +1 -1
- data/docs/api/index.html +1 -1
- data/docs/api/method_list.html +416 -328
- data/docs/api/top-level-namespace.html +2 -2
- data/docs/assets/{adrs.md.JRxZ5uYE.js → adrs.md.BxjHi9-8.js} +1 -1
- data/docs/assets/adrs.md.BxjHi9-8.lean.js +1 -0
- data/docs/assets/{app.C0n_5kBs.js → app.D6BuVHo9.js} +1 -1
- data/docs/assets/chunks/@localSearchIndexroot.COP2Bcmp.js +1 -0
- data/docs/assets/chunks/{VPLocalSearchBox.yICoU-Ly.js → VPLocalSearchBox.BpvHMbx6.js} +1 -1
- data/docs/assets/chunks/{theme.gMVDgzXI.js → theme.wlAOvi2f.js} +2 -2
- data/docs/assets/{components.md.DGVPNB9a.js → components.md.iLiv2E9X.js} +3 -3
- data/docs/assets/{configuration.md.DK3YrtYn.js → configuration.md.DmuAdsli.js} +1 -1
- data/docs/assets/{database-schema.md.CSYk6E6v.js → database-schema.md.C5gXexJi.js} +10 -3
- data/docs/assets/{database-schema.md.CSYk6E6v.lean.js → database-schema.md.C5gXexJi.lean.js} +1 -1
- data/docs/assets/{dev-environment.md.Dy6EldaM.js → dev-environment.md.DRH2D2-O.js} +3 -3
- data/docs/assets/dev-environment.md.DRH2D2-O.lean.js +1 -0
- data/docs/assets/{form-constraints.md.x5tNpTTI.js → form-constraints.md.DK5adCgM.js} +2 -2
- data/docs/assets/{forms.md.DwdQGwOK.js → forms.md.D8aa_qI-.js} +1 -1
- data/docs/assets/{getting-started.md.DuiTvmpG.js → getting-started.md.DLplsDUd.js} +3 -3
- data/docs/assets/{getting-started.md.DuiTvmpG.lean.js → getting-started.md.DLplsDUd.lean.js} +1 -1
- data/docs/assets/{handlers.md.Chyri6KA.js → handlers.md.h84MMB1R.js} +1 -1
- data/docs/assets/{i18n.md.xQhiGo1G.js → i18n.md.BAm9t9JJ.js} +1 -1
- data/docs/assets/{layouts.md.CJGDFY-m.js → layouts.md.CVGl9xIO.js} +1 -1
- data/docs/assets.html +3 -3
- data/docs/brut-css/brut.max.css +1 -1
- data/docs/brut-css/classes/appearances.html +1 -1
- data/docs/brut-css/classes/background-colors.html +1 -1
- data/docs/brut-css/classes/border-colors.html +1 -1
- data/docs/brut-css/classes/borders.html +1 -1
- data/docs/brut-css/classes/dimensions.html +1 -1
- data/docs/brut-css/classes/flex.html +3 -3
- data/docs/brut-css/classes/foreground-colors.html +1 -1
- data/docs/brut-css/classes/junk-drawer.html +1 -1
- data/docs/brut-css/classes/layout.html +1 -1
- data/docs/brut-css/classes/lists.html +1 -1
- data/docs/brut-css/classes/positioning.html +1 -1
- data/docs/brut-css/classes/spacings.html +1 -1
- data/docs/brut-css/classes/typography.html +1 -1
- data/docs/brut-css/customization/advanced-configuration.html +1 -1
- data/docs/brut-css/customization/breakpoints.html +1 -1
- data/docs/brut-css/customization/design-system.html +1 -1
- data/docs/brut-css/customization/pseudo-classes.html +1 -1
- data/docs/brut-css/getting-started/core-concepts.html +1 -1
- data/docs/brut-css/getting-started/installation.html +1 -1
- data/docs/brut-css/getting-started/overview.html +1 -1
- data/docs/brut-css/getting-started/simple-example.html +1 -1
- data/docs/brut-css/index.html +1 -1
- data/docs/brut-css/properties/colors.html +1 -1
- data/docs/brut-css/properties/spacings.html +1 -1
- data/docs/brut-css/properties/typography.html +1 -1
- data/docs/brut-js/api/AjaxSubmit.html +56 -7
- data/docs/brut-js/api/AjaxSubmit.js.html +77 -41
- 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 +2 -2
- data/docs/brut-js/api/ConstraintViolationMessage.js.html +4 -4
- data/docs/brut-js/api/ConstraintViolationMessages.html +3 -3
- data/docs/brut-js/api/ConstraintViolationMessages.js.html +3 -3
- 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 +12 -5
- data/docs/deployment.html +3 -3
- data/docs/dev-environment.html +5 -5
- 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 +6 -6
- data/docs/forms.html +5 -5
- data/docs/getting-started.html +6 -6
- data/docs/handlers.html +5 -5
- data/docs/hashmap.json +1 -1
- data/docs/hooks.html +3 -3
- data/docs/i18n.html +5 -5
- 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 +5 -5
- 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 +3 -3
- 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 +3 -3
- data/docs/unit-tests.html +3 -3
- data/docs/why.html +3 -3
- data/lib/brut/cli/apps/scaffold.rb +77 -0
- data/lib/brut/cli/command.rb +1 -2
- data/lib/brut/framework/config.rb +7 -0
- data/lib/brut/front_end/component.rb +19 -0
- data/lib/brut/front_end/components/constraint_violations.rb +2 -2
- data/lib/brut/front_end/components/i18n_translations.rb +6 -10
- data/lib/brut/front_end/form.rb +5 -2
- data/lib/brut/front_end/page.rb +11 -7
- data/lib/brut/junk_drawer.rb +53 -0
- data/lib/brut/sinatra_helpers.rb +1 -0
- data/lib/brut/version.rb +1 -1
- metadata +30 -27
- data/docs/assets/adrs.md.JRxZ5uYE.lean.js +0 -1
- data/docs/assets/chunks/@localSearchIndexroot.BF2caq1f.js +0 -1
- data/docs/assets/dev-environment.md.Dy6EldaM.lean.js +0 -1
- /data/docs/assets/{components.md.DGVPNB9a.lean.js → components.md.iLiv2E9X.lean.js} +0 -0
- /data/docs/assets/{configuration.md.DK3YrtYn.lean.js → configuration.md.DmuAdsli.lean.js} +0 -0
- /data/docs/assets/{form-constraints.md.x5tNpTTI.lean.js → form-constraints.md.DK5adCgM.lean.js} +0 -0
- /data/docs/assets/{forms.md.DwdQGwOK.lean.js → forms.md.D8aa_qI-.lean.js} +0 -0
- /data/docs/assets/{handlers.md.Chyri6KA.lean.js → handlers.md.h84MMB1R.lean.js} +0 -0
- /data/docs/assets/{i18n.md.xQhiGo1G.lean.js → i18n.md.BAm9t9JJ.lean.js} +0 -0
- /data/docs/assets/{layouts.md.CJGDFY-m.lean.js → layouts.md.CVGl9xIO.lean.js} +0 -0
data/lib/brut/front_end/form.rb
CHANGED
@@ -114,12 +114,15 @@ class Brut::FrontEnd::Form
|
|
114
114
|
end
|
115
115
|
|
116
116
|
# Returns true if this form has constraint violations.
|
117
|
-
def constraint_violations? =
|
117
|
+
def constraint_violations? = !self.valid?
|
118
|
+
|
119
|
+
# Returns true if this form has no constraint violations.
|
120
|
+
def valid? = @inputs.values.flatten.all?(&:valid?)
|
118
121
|
|
119
122
|
# Set a server-side constraint violation on a given input's name.
|
120
123
|
#
|
121
124
|
# @param [String|Symbol] input_name the name of the input, as passed to {Brut::FrontEnd::Forms::InputDeclarations#input} et. al.
|
122
|
-
# @param [String] key the i18n key fragment representing the constraint. Assume this will be appended to `cv.
|
125
|
+
# @param [String] key the i18n key fragment representing the constraint. Assume this will be appended to `cv.ss.` in order
|
123
126
|
# to form the entire key.
|
124
127
|
# @param [Hash] context additional information about the violation, typically interpolated values for the I18n message.
|
125
128
|
def server_side_constraint_violation(input_name:, key:, index: nil, context:{})
|
data/lib/brut/front_end/page.rb
CHANGED
@@ -40,13 +40,17 @@ class Brut::FrontEnd::Page < Brut::FrontEnd::Component
|
|
40
40
|
# Core method of this class. Do not override. This handles the use of {#before_generate} and is what Brut
|
41
41
|
# calls to possibly render the page.
|
42
42
|
def handle!
|
43
|
-
|
44
|
-
|
45
|
-
uri
|
46
|
-
|
47
|
-
http_status
|
48
|
-
|
49
|
-
|
43
|
+
Brut.container.instrumentation.span(self.class.name + "#handle!") do |span|
|
44
|
+
case before_generate
|
45
|
+
in URI => uri
|
46
|
+
uri
|
47
|
+
in Brut::FrontEnd::HttpStatus => http_status
|
48
|
+
http_status
|
49
|
+
else
|
50
|
+
Brut.container.instrumentation.span(self.class.name + "#handle") do |span|
|
51
|
+
self.call
|
52
|
+
end
|
53
|
+
end
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
data/lib/brut/junk_drawer.rb
CHANGED
@@ -175,3 +175,56 @@ class RichString
|
|
175
175
|
|
176
176
|
end
|
177
177
|
|
178
|
+
class ModuleName
|
179
|
+
def self.from_string(string)
|
180
|
+
string = RichString.from_string(string)
|
181
|
+
if string.nil?
|
182
|
+
raise ArgumentError, "ClassName cannot be initialized with a blank string"
|
183
|
+
end
|
184
|
+
self.new(string.camelize.split(/::/).map { RichString.new(it) })
|
185
|
+
end
|
186
|
+
|
187
|
+
attr_reader :parts_of_module
|
188
|
+
|
189
|
+
def initialize(parts_of_module)
|
190
|
+
@parts_of_module = parts_of_module
|
191
|
+
end
|
192
|
+
|
193
|
+
def in_module(module_name)
|
194
|
+
if in_module?(module_name)
|
195
|
+
return self
|
196
|
+
else
|
197
|
+
module_name.append(self)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def append(module_name)
|
202
|
+
self.class.new(@parts_of_module + module_name.parts_of_module)
|
203
|
+
end
|
204
|
+
|
205
|
+
def to_s = @parts_of_module.join("::")
|
206
|
+
|
207
|
+
def path_from(base_path, extname: ".rb")
|
208
|
+
parts_as_path_segment = @parts_of_module.map { |part|
|
209
|
+
if part.to_s == "DB"
|
210
|
+
"db"
|
211
|
+
else
|
212
|
+
part.underscorized.to_s
|
213
|
+
end
|
214
|
+
}
|
215
|
+
*subdir_parts,file_name_part = parts_as_path_segment
|
216
|
+
base_path.join(*subdir_parts,file_name_part + extname)
|
217
|
+
end
|
218
|
+
|
219
|
+
private
|
220
|
+
|
221
|
+
def in_module?(module_name)
|
222
|
+
if module_name.parts_of_module.length <= @parts_of_module.length
|
223
|
+
module_name.parts_of_module == @parts_of_module[0, module_name.parts_of_module.length]
|
224
|
+
else
|
225
|
+
false
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
230
|
+
|
data/lib/brut/sinatra_helpers.rb
CHANGED
@@ -85,6 +85,7 @@ module Brut::SinatraHelpers
|
|
85
85
|
)
|
86
86
|
span.add_prefixed_attributes("brut.initializer.args", constructor_args.map { |k,v| [k.to_s,v.class.name] }.to_h)
|
87
87
|
page_instance = page_class.new(**constructor_args)
|
88
|
+
span.add_event("page object initialized")
|
88
89
|
|
89
90
|
result = page_instance.handle!
|
90
91
|
|
data/lib/brut/version.rb
CHANGED
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Bryant Copeland
|
@@ -410,6 +410,7 @@ files:
|
|
410
410
|
- assets/LogoPylon.pxd
|
411
411
|
- assets/LogoStop.pxd
|
412
412
|
- assets/LogoTall.pxd
|
413
|
+
- assets/MetroIcon.graffle
|
413
414
|
- assets/MetroLogo.graffle
|
414
415
|
- assets/SocialImage.png
|
415
416
|
- assets/SocialImage.pxd
|
@@ -703,6 +704,7 @@ files:
|
|
703
704
|
- docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html
|
704
705
|
- docs/api/Brut/CLI/Apps/Scaffold/Component.html
|
705
706
|
- docs/api/Brut/CLI/Apps/Scaffold/CustomElementTest.html
|
707
|
+
- docs/api/Brut/CLI/Apps/Scaffold/DbModel.html
|
706
708
|
- docs/api/Brut/CLI/Apps/Scaffold/E2ETest.html
|
707
709
|
- docs/api/Brut/CLI/Apps/Scaffold/Form.html
|
708
710
|
- docs/api/Brut/CLI/Apps/Scaffold/Page.html
|
@@ -856,6 +858,7 @@ files:
|
|
856
858
|
- docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html
|
857
859
|
- docs/api/Brut/SpecSupport/SessionSupport.html
|
858
860
|
- docs/api/Clock.html
|
861
|
+
- docs/api/ModuleName.html
|
859
862
|
- docs/api/RichString.html
|
860
863
|
- docs/api/SemanticLogger/Appender/Async.html
|
861
864
|
- docs/api/Sequel.html
|
@@ -889,40 +892,40 @@ files:
|
|
889
892
|
- docs/assets/DevEnvironment.DaFcVfwP.png
|
890
893
|
- docs/assets/LogoStop.Gb3tDhL1.png
|
891
894
|
- docs/assets/OverviewMetro.DUS-5fUZ.png
|
892
|
-
- docs/assets/adrs.md.
|
893
|
-
- docs/assets/adrs.md.
|
895
|
+
- docs/assets/adrs.md.BxjHi9-8.js
|
896
|
+
- docs/assets/adrs.md.BxjHi9-8.lean.js
|
894
897
|
- docs/assets/ai.md.Cy9GWnER.js
|
895
898
|
- docs/assets/ai.md.Cy9GWnER.lean.js
|
896
|
-
- docs/assets/app.
|
899
|
+
- docs/assets/app.D6BuVHo9.js
|
897
900
|
- docs/assets/assets.md.7C3HWkga.js
|
898
901
|
- docs/assets/assets.md.7C3HWkga.lean.js
|
899
902
|
- docs/assets/brut-js.md.B4GYxQVw.js
|
900
903
|
- docs/assets/brut-js.md.B4GYxQVw.lean.js
|
901
904
|
- docs/assets/business-logic.md.BY4hGy0m.js
|
902
905
|
- docs/assets/business-logic.md.BY4hGy0m.lean.js
|
903
|
-
- docs/assets/chunks/@localSearchIndexroot.
|
904
|
-
- docs/assets/chunks/VPLocalSearchBox.
|
906
|
+
- docs/assets/chunks/@localSearchIndexroot.COP2Bcmp.js
|
907
|
+
- docs/assets/chunks/VPLocalSearchBox.BpvHMbx6.js
|
905
908
|
- docs/assets/chunks/framework.1L-BeKqY.js
|
906
|
-
- docs/assets/chunks/theme.
|
909
|
+
- docs/assets/chunks/theme.wlAOvi2f.js
|
907
910
|
- docs/assets/cli.md.CjsktgFz.js
|
908
911
|
- docs/assets/cli.md.CjsktgFz.lean.js
|
909
|
-
- docs/assets/components.md.
|
910
|
-
- docs/assets/components.md.
|
911
|
-
- docs/assets/configuration.md.
|
912
|
-
- docs/assets/configuration.md.
|
912
|
+
- docs/assets/components.md.iLiv2E9X.js
|
913
|
+
- docs/assets/components.md.iLiv2E9X.lean.js
|
914
|
+
- docs/assets/configuration.md.DmuAdsli.js
|
915
|
+
- docs/assets/configuration.md.DmuAdsli.lean.js
|
913
916
|
- docs/assets/css.md.CltvJqAa.js
|
914
917
|
- docs/assets/css.md.CltvJqAa.lean.js
|
915
918
|
- docs/assets/custom-element-tests.md.B_rbta32.js
|
916
919
|
- docs/assets/custom-element-tests.md.B_rbta32.lean.js
|
917
920
|
- docs/assets/database-access.md.gnluu54N.js
|
918
921
|
- docs/assets/database-access.md.gnluu54N.lean.js
|
919
|
-
- docs/assets/database-schema.md.
|
920
|
-
- docs/assets/database-schema.md.
|
922
|
+
- docs/assets/database-schema.md.C5gXexJi.js
|
923
|
+
- docs/assets/database-schema.md.C5gXexJi.lean.js
|
921
924
|
- docs/assets/deployment.md.BLseERGV.js
|
922
925
|
- docs/assets/deployment.md.BLseERGV.lean.js
|
923
926
|
- docs/assets/dev-env-protocol.DysDAtnz.png
|
924
|
-
- docs/assets/dev-environment.md.
|
925
|
-
- docs/assets/dev-environment.md.
|
927
|
+
- docs/assets/dev-environment.md.DRH2D2-O.js
|
928
|
+
- docs/assets/dev-environment.md.DRH2D2-O.lean.js
|
926
929
|
- docs/assets/dir-structure.md.CWir1pic.js
|
927
930
|
- docs/assets/dir-structure.md.CWir1pic.lean.js
|
928
931
|
- docs/assets/doc-conventions.md.DOkAuXlt.js
|
@@ -933,18 +936,18 @@ files:
|
|
933
936
|
- docs/assets/features.md.DPFXsy0z.lean.js
|
934
937
|
- docs/assets/flash-and-session.md.nPvUpnUx.js
|
935
938
|
- docs/assets/flash-and-session.md.nPvUpnUx.lean.js
|
936
|
-
- docs/assets/form-constraints.md.
|
937
|
-
- docs/assets/form-constraints.md.
|
938
|
-
- docs/assets/forms.md.
|
939
|
-
- docs/assets/forms.md.
|
940
|
-
- docs/assets/getting-started.md.
|
941
|
-
- docs/assets/getting-started.md.
|
942
|
-
- docs/assets/handlers.md.
|
943
|
-
- docs/assets/handlers.md.
|
939
|
+
- docs/assets/form-constraints.md.DK5adCgM.js
|
940
|
+
- docs/assets/form-constraints.md.DK5adCgM.lean.js
|
941
|
+
- docs/assets/forms.md.D8aa_qI-.js
|
942
|
+
- docs/assets/forms.md.D8aa_qI-.lean.js
|
943
|
+
- docs/assets/getting-started.md.DLplsDUd.js
|
944
|
+
- docs/assets/getting-started.md.DLplsDUd.lean.js
|
945
|
+
- docs/assets/handlers.md.h84MMB1R.js
|
946
|
+
- docs/assets/handlers.md.h84MMB1R.lean.js
|
944
947
|
- docs/assets/hooks.md.Jmb5VOLA.js
|
945
948
|
- docs/assets/hooks.md.Jmb5VOLA.lean.js
|
946
|
-
- docs/assets/i18n.md.
|
947
|
-
- docs/assets/i18n.md.
|
949
|
+
- docs/assets/i18n.md.BAm9t9JJ.js
|
950
|
+
- docs/assets/i18n.md.BAm9t9JJ.lean.js
|
948
951
|
- docs/assets/index.md.Bn9e0sRJ.js
|
949
952
|
- docs/assets/index.md.Bn9e0sRJ.lean.js
|
950
953
|
- docs/assets/instrumentation.md.BgcaGVYH.js
|
@@ -955,8 +958,8 @@ files:
|
|
955
958
|
- docs/assets/jobs.md.S-2amAYp.lean.js
|
956
959
|
- docs/assets/keyword-injection.md.95Zgh2eN.js
|
957
960
|
- docs/assets/keyword-injection.md.95Zgh2eN.lean.js
|
958
|
-
- docs/assets/layouts.md.
|
959
|
-
- docs/assets/layouts.md.
|
961
|
+
- docs/assets/layouts.md.CVGl9xIO.js
|
962
|
+
- docs/assets/layouts.md.CVGl9xIO.lean.js
|
960
963
|
- docs/assets/lsp.md.Dn1rIiW0.js
|
961
964
|
- docs/assets/lsp.md.Dn1rIiW0.lean.js
|
962
965
|
- docs/assets/markdown-examples.md.CCFEQO44.js
|
@@ -1 +0,0 @@
|
|
1
|
-
import{_ as r,c as a,o as d,ag as t}from"./chunks/framework.1L-BeKqY.js";const f=JSON.parse('{"title":"Architecture Decision Records","description":"","frontmatter":{},"headers":[],"relativePath":"adrs.md","filePath":"adrs.md"}'),s={name:"adrs.md"};function l(o,e,i,c,n,h){return d(),a("div",null,e[0]||(e[0]=[t("",4)]))}const p=r(s,[["render",l]]);export{f as __pageData,p as default};
|