brut 0.0.26 → 0.0.28
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/Gemfile.lock +1 -1
- data/brutrb.com/.vitepress/config.mjs +2 -0
- data/brutrb.com/ai.md +6 -1
- data/brutrb.com/components.md +1 -1
- data/brutrb.com/dev-environment.md +6 -5
- data/brutrb.com/doc-conventions.md +1 -1
- data/brutrb.com/forms.md +22 -26
- data/brutrb.com/getting-started.md +94 -23
- data/brutrb.com/instrumentation.md +12 -0
- data/brutrb.com/layouts.md +130 -0
- data/brutrb.com/lsp.md +23 -0
- data/docs/404.html +2 -2
- data/docs/ai.html +5 -5
- 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 +38 -13
- 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 +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 +1 -1
- 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 +9 -3
- data/docs/api/Brut/CLI/Apps/DB/NewMigration.html +11 -11
- 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 +12 -12
- data/docs/api/Brut/CLI/Apps/DB.html +1 -1
- data/docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html +270 -0
- data/docs/api/Brut/CLI/Apps/DeployBase.html +257 -0
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html +585 -0
- data/docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html +196 -0
- data/docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html +1 -1
- 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/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 +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Page.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold/RoutesEditor.html +1 -1
- data/docs/api/Brut/CLI/Apps/Scaffold/Test.html +2 -2
- data/docs/api/Brut/CLI/Apps/Scaffold.html +1 -1
- data/docs/api/Brut/CLI/Apps/Test/Audit.html +12 -10
- data/docs/api/Brut/CLI/Apps/Test/E2e.html +8 -8
- data/docs/api/Brut/CLI/Apps/Test/JS.html +9 -9
- data/docs/api/Brut/CLI/Apps/Test/Run.html +18 -18
- data/docs/api/Brut/CLI/Apps/Test.html +1 -1
- data/docs/api/Brut/CLI/Apps.html +2 -2
- data/docs/api/Brut/CLI/Command.html +113 -28
- 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 +169 -38
- data/docs/api/Brut/CLI/InvalidOption.html +1 -1
- data/docs/api/Brut/CLI/Options.html +68 -19
- 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 +110 -29
- data/docs/api/Brut/Framework/Error.html +1 -1
- data/docs/api/Brut/Framework/Errors/AbstractMethod.html +89 -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 +31 -8
- 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 +36 -26
- data/docs/api/Brut/FrontEnd/Component.html +7 -7
- data/docs/api/Brut/FrontEnd/Components/ConstraintViolations.html +1 -1
- data/docs/api/Brut/FrontEnd/Components/FormTag.html +37 -29
- 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 +20 -117
- data/docs/api/Brut/FrontEnd/Components/Inputs/RadioButton.html +25 -23
- data/docs/api/Brut/FrontEnd/Components/Inputs/SelectTagWithOptions.html +73 -380
- data/docs/api/Brut/FrontEnd/Components/Inputs/TextareaTag.html +22 -138
- 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 +23 -2
- 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 +1 -1
- data/docs/api/Brut/FrontEnd/Forms/ConstraintViolation.html +24 -68
- data/docs/api/Brut/FrontEnd/Forms/Input.html +1 -1
- data/docs/api/Brut/FrontEnd/Forms/InputDeclarations.html +4 -4
- 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 +72 -22
- 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 +6 -2
- 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 +20 -20
- 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 +2 -2
- data/docs/api/Brut/SpecSupport/Matchers/BeABug.html +142 -0
- data/docs/api/Brut/SpecSupport/Matchers/BePageFor.html +142 -0
- data/docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html +155 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html +55 -25
- data/docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html +149 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html +46 -19
- data/docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html +149 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html +149 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html +165 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html +158 -0
- data/docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html +156 -0
- data/docs/api/Brut/SpecSupport/Matchers.html +2 -2
- data/docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html +24 -24
- data/docs/api/Brut/SpecSupport/RSpecSetup.html +55 -20
- 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 +5 -1
- data/docs/api/Sequel/Extensions/BrutMigrations.html +36 -28
- 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/SpecSupport/Matchers/BeABug.html +143 -0
- data/docs/api/_index.html +92 -1
- 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 +392 -336
- data/docs/api/top-level-namespace.html +1 -1
- data/docs/assets/{ai.md.tZrjP9im.js → ai.md._6HCDL6d.js} +1 -1
- data/docs/assets/ai.md._6HCDL6d.lean.js +1 -0
- data/docs/assets/{app.D_yaTITQ.js → app.BX81XO4N.js} +1 -1
- data/docs/assets/chunks/@localSearchIndexroot.CoYzciVi.js +1 -0
- data/docs/assets/chunks/{VPLocalSearchBox.B2-ZzyTY.js → VPLocalSearchBox.gABXcTWp.js} +1 -1
- data/docs/assets/chunks/{theme.CfGFVRvE.js → theme.DwUXXAL3.js} +2 -2
- data/docs/assets/{components.md.eCttGlN-.js → components.md.CRUMdRoN.js} +1 -1
- data/docs/assets/{configuration.md.BRriU0cL.js → configuration.md.BGHl8oRC.js} +1 -1
- data/docs/assets/{dev-environment.md.BNc8AYiK.js → dev-environment.md.GZv6xvi9.js} +1 -1
- data/docs/assets/doc-conventions.md.-kN3Xo5C.js +1 -0
- data/docs/assets/{doc-conventions.md.DCfRXXi-.lean.js → doc-conventions.md.-kN3Xo5C.lean.js} +1 -1
- data/docs/assets/{forms.md.CBTYQ_Cz.js → forms.md.B-koVgyw.js} +23 -23
- data/docs/assets/{forms.md.CBTYQ_Cz.lean.js → forms.md.B-koVgyw.lean.js} +1 -1
- data/docs/assets/getting-started.md.Ciz82L0m.js +25 -0
- data/docs/assets/getting-started.md.Ciz82L0m.lean.js +1 -0
- data/docs/assets/{instrumentation.md.CL6ax7nT.js → instrumentation.md.a9Pjps4P.js} +2 -2
- data/docs/assets/{instrumentation.md.CL6ax7nT.lean.js → instrumentation.md.a9Pjps4P.lean.js} +1 -1
- data/docs/assets/layouts.md.cPnh3NId.js +51 -0
- data/docs/assets/layouts.md.cPnh3NId.lean.js +1 -0
- data/docs/assets/lsp.md.Bsu-f6VU.js +1 -0
- data/docs/assets/lsp.md.Bsu-f6VU.lean.js +1 -0
- data/docs/assets/{overview.md.CDalkuxV.js → overview.md.C5wlBcR5.js} +3 -3
- data/docs/assets/recipes_authentication.md.CAsXf7hk.js +1 -0
- data/docs/assets/recipes_authentication.md.CAsXf7hk.lean.js +1 -0
- data/docs/assets.html +4 -4
- 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 +4 -4
- data/docs/business-logic.html +4 -4
- data/docs/cli.html +4 -4
- data/docs/components.html +6 -6
- data/docs/configuration.html +5 -5
- data/docs/css.html +4 -4
- data/docs/custom-element-tests.html +4 -4
- data/docs/database-access.html +4 -4
- data/docs/database-schema.html +4 -4
- data/docs/deployment.html +4 -4
- data/docs/dev-environment.html +5 -5
- data/docs/doc-conventions.html +5 -5
- data/docs/end-to-end-tests.html +4 -4
- data/docs/flash-and-session.html +4 -4
- data/docs/forms.html +27 -27
- data/docs/getting-started.html +29 -6
- data/docs/handlers.html +4 -4
- data/docs/hashmap.json +1 -1
- data/docs/hooks.html +4 -4
- data/docs/i18n.html +4 -4
- data/docs/index.html +3 -3
- data/docs/instrumentation.html +5 -5
- data/docs/javascript.html +4 -4
- data/docs/jobs.html +4 -4
- data/docs/keyword-injection.html +4 -4
- data/docs/layouts.html +74 -0
- data/docs/lsp.html +24 -0
- data/docs/markdown-examples.html +4 -4
- data/docs/middleware.html +4 -4
- data/docs/not-released.html +4 -4
- data/docs/overview.html +8 -8
- data/docs/pages.html +5 -5
- data/docs/recipes/authentication.html +24 -0
- data/docs/routes.html +4 -4
- data/docs/security.html +4 -4
- data/docs/seed-data.html +4 -4
- data/docs/space-time-continuum.html +4 -4
- data/docs/tutorial.html +4 -4
- data/docs/unit-tests.html +4 -4
- data/lib/brut/cli/app.rb +7 -2
- data/lib/brut/cli/apps/deploy_base.rb +86 -0
- data/lib/brut/cli/apps/heroku_container_based_deploy.rb +194 -0
- data/lib/brut/cli/apps/test.rb +2 -1
- data/lib/brut/cli/command.rb +7 -13
- data/lib/brut/cli/executor.rb +31 -5
- data/lib/brut/cli/options.rb +4 -0
- data/lib/brut/cli.rb +4 -3
- data/lib/brut/framework/container.rb +25 -7
- data/lib/brut/framework/errors/abstract_method.rb +7 -0
- data/lib/brut/framework/errors.rb +4 -2
- data/lib/brut/front_end/component.rb +33 -9
- data/lib/brut/front_end/components/inputs/select_tag_with_options.rb +16 -74
- data/lib/brut/front_end/forms/constraint_violation.rb +2 -18
- data/lib/brut/front_end/forms/input.rb +8 -8
- data/lib/brut/front_end/forms/input_declarations.rb +3 -3
- data/lib/brut/front_end/forms/radio_button_group_input.rb +1 -1
- data/lib/brut/front_end/forms/select_input.rb +1 -1
- data/lib/brut/front_end/forms/validity_state.rb +23 -0
- data/lib/brut/front_end/middlewares/reload_app.rb +2 -0
- data/lib/brut/spec_support/handler_support.rb +1 -1
- data/lib/brut/spec_support/matcher.rb +1 -1
- data/lib/brut/spec_support/matchers/be_a_bug.rb +11 -0
- data/lib/brut/spec_support/matchers/be_page_for.rb +10 -0
- data/lib/brut/spec_support/matchers/be_routing_for.rb +18 -0
- data/lib/brut/spec_support/matchers/have_constraint_violation.rb +10 -0
- data/lib/brut/spec_support/matchers/have_generated.rb +28 -0
- data/lib/brut/spec_support/matchers/have_html_attribute.rb +10 -0
- data/lib/brut/spec_support/matchers/have_i18n_string.rb +13 -0
- data/lib/brut/spec_support/matchers/have_link_to.rb +15 -0
- data/lib/brut/spec_support/matchers/have_redirected_to.rb +23 -0
- data/lib/brut/spec_support/matchers/have_returned_http_status.rb +20 -0
- data/lib/brut/spec_support/matchers/have_returned_rack_response.rb +22 -0
- data/lib/brut/spec_support/rspec_setup.rb +42 -2
- data/lib/brut/version.rb +1 -1
- data/lib/sequel/extensions/brut_instrumentation.rb +4 -0
- metadata +51 -24
- data/docs/assets/ai.md.tZrjP9im.lean.js +0 -1
- data/docs/assets/chunks/@localSearchIndexroot.BsN5i0Fi.js +0 -1
- data/docs/assets/doc-conventions.md.DCfRXXi-.js +0 -1
- data/docs/assets/getting-started.md.Bz2s1Vjb.js +0 -2
- data/docs/assets/getting-started.md.Bz2s1Vjb.lean.js +0 -1
- data/lib/brut/spec_support/matchers/have_rendered.rb +0 -14
- /data/docs/assets/{components.md.eCttGlN-.lean.js → components.md.CRUMdRoN.lean.js} +0 -0
- /data/docs/assets/{configuration.md.BRriU0cL.lean.js → configuration.md.BGHl8oRC.lean.js} +0 -0
- /data/docs/assets/{dev-environment.md.BNc8AYiK.lean.js → dev-environment.md.GZv6xvi9.lean.js} +0 -0
- /data/docs/assets/{overview.md.CDalkuxV.lean.js → overview.md.C5wlBcR5.lean.js} +0 -0
@@ -3,6 +3,11 @@
|
|
3
3
|
# In a sense, this is a wrapper for one or more {Brut::FrontEnd::Forms::ConstraintViolation} instances in the
|
4
4
|
# context of an input.
|
5
5
|
#
|
6
|
+
# This class also holds the logic related to client- vs. server-side constraint
|
7
|
+
# violations. As such, {.KEYS} is the list of known client-side
|
8
|
+
# constraint violation keys, as defined by browser's `ValidityState` class. These
|
9
|
+
# are left as camel-case to make this clear.
|
10
|
+
#
|
6
11
|
# @see https://developer.mozilla.org/en-US/docs/Web/API/ValidityState
|
7
12
|
class Brut::FrontEnd::Forms::ValidityState
|
8
13
|
include Enumerable
|
@@ -46,5 +51,23 @@ class Brut::FrontEnd::Forms::ValidityState
|
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
54
|
+
|
55
|
+
# These are the attributes of the browser's `ValidityState`'s properties.
|
56
|
+
# They are left as camel-case to clearly indicate they come from the browser.
|
57
|
+
#
|
58
|
+
# @see https://developer.mozilla.org/en-US/docs/Web/API/ValidityState
|
59
|
+
KEYS = [
|
60
|
+
"badInput",
|
61
|
+
"customError",
|
62
|
+
"patternMismatch",
|
63
|
+
"rangeOverflow",
|
64
|
+
"rangeUnderflow",
|
65
|
+
"stepMismatch",
|
66
|
+
"tooLong",
|
67
|
+
"tooShort",
|
68
|
+
"typeMismatch",
|
69
|
+
"valueMissing",
|
70
|
+
]
|
71
|
+
|
49
72
|
end
|
50
73
|
|
@@ -28,6 +28,8 @@ class Brut::FrontEnd::Middlewares::ReloadApp < Brut::FrontEnd::Middleware
|
|
28
28
|
span.add_event("Routing reloaded")
|
29
29
|
Brut.container.asset_path_resolver.reload
|
30
30
|
span.add_event("Asset Path Resolver reloaded")
|
31
|
+
Brut.container.reload
|
32
|
+
span.add_event("Brut.container reloaded")
|
31
33
|
::I18n.reload!
|
32
34
|
span.add_event("I18n reloaded")
|
33
35
|
rescue => ex
|
@@ -6,7 +6,7 @@ require_relative "session_support"
|
|
6
6
|
#
|
7
7
|
#
|
8
8
|
# * `have_redirected_to` to check that the handler redirected to a give URI
|
9
|
-
# * `
|
9
|
+
# * `have_generated` to check that the handler rendered a specific page
|
10
10
|
# * `have_returned_http_status` to check that the handler returned an HTTP status
|
11
11
|
module Brut::SpecSupport::HandlerSupport
|
12
12
|
include Brut::SpecSupport::FlashSupport
|
@@ -8,7 +8,7 @@ require_relative "matchers/have_constraint_violation"
|
|
8
8
|
require_relative "matchers/have_html_attribute"
|
9
9
|
require_relative "matchers/have_i18n_string"
|
10
10
|
require_relative "matchers/have_redirected_to"
|
11
|
-
require_relative "matchers/
|
11
|
+
require_relative "matchers/have_generated"
|
12
12
|
require_relative "matchers/have_returned_http_status"
|
13
13
|
require_relative "matchers/have_returned_rack_response"
|
14
14
|
require_relative "matchers/have_link_to"
|
@@ -12,3 +12,14 @@ RSpec::Matchers.define :be_a_bug do
|
|
12
12
|
|
13
13
|
supports_block_expectations
|
14
14
|
end
|
15
|
+
|
16
|
+
# Block-based matcher that expects the blog to
|
17
|
+
# raise a {Brut::Framework::Errors::Bug}.
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
# expect {
|
21
|
+
# SomeClass.new(value: :invalid)
|
22
|
+
# }.to be_a_bug
|
23
|
+
#
|
24
|
+
class Brut::SpecSupport::Matchers::BeABug
|
25
|
+
end
|
@@ -14,3 +14,13 @@ RSpec::Matchers.define :be_page_for do |klass|
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
end
|
17
|
+
|
18
|
+
# Matcher for end-to-end tests to assert that the current page
|
19
|
+
# is the page you expect it to be. This is based on the
|
20
|
+
# {Brut::FrontEnd::Components::PageIdentifier} component, which must
|
21
|
+
# be included on the page for this matcher to work.
|
22
|
+
#
|
23
|
+
# @example
|
24
|
+
# expect(page).to be_page_for(HomePage)
|
25
|
+
class Brut::SpecSupport::Matchers::BePageFor
|
26
|
+
end
|
@@ -9,3 +9,21 @@ RSpec::Matchers.define :be_routing_for do |klass,**args|
|
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
12
|
+
|
13
|
+
# Matcher used for handlers (or any code that returns a `URI`)
|
14
|
+
# to assert that the URI is for a given page with the given set of parameters
|
15
|
+
#
|
16
|
+
# @example
|
17
|
+
# result = handler.handle
|
18
|
+
# expect(result).to be_routing_for(HomePage)
|
19
|
+
#
|
20
|
+
# @example with parameters
|
21
|
+
# result = handler.handle
|
22
|
+
# expect(result).to be_routing_for(WidgetsByWidgetIdPage, id: widget.external_id)
|
23
|
+
#
|
24
|
+
# @example with anchor
|
25
|
+
# result = handler.handle
|
26
|
+
# expect(result).to be_routing_for(MessagesPage, anchor: "latest_message")
|
27
|
+
#
|
28
|
+
class Brut::SpecSupport::Matchers::BeRoutingFor
|
29
|
+
end
|
@@ -29,6 +29,16 @@ RSpec::Matchers.define :have_constraint_violation do |field,key:,index:nil|
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
# Matcher to check that a from has a specific constraint violation.
|
33
|
+
#
|
34
|
+
# @example
|
35
|
+
# expect(form).to have_constraint_violation(:email, key: :required)
|
36
|
+
#
|
37
|
+
# @example Index fields (requires that the third email field have a constraint violation)
|
38
|
+
# expect(form).to have_constraint_violation(:email, key: :required, index: 2)
|
39
|
+
#
|
40
|
+
# @example Negated
|
41
|
+
# expect(form).not_to have_constraint_violation(:email, key: :required)
|
32
42
|
class Brut::SpecSupport::Matchers::HaveConstraintViolation
|
33
43
|
attr_reader :fields_found
|
34
44
|
attr_reader :keys_on_field_found
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Handler
|
2
|
+
RSpec::Matchers.define :have_generated do |component_or_page|
|
3
|
+
match do |result|
|
4
|
+
result.class.ancestors.include?(component_or_page)
|
5
|
+
end
|
6
|
+
|
7
|
+
failure_message do |result|
|
8
|
+
"Expected a #{component_or_page} to be generated, but got #{result}"
|
9
|
+
end
|
10
|
+
failure_message_when_negated do |result|
|
11
|
+
"Got #{component_or_page} when not expected"
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
# Matcher to check that a handler generated a specific page
|
17
|
+
# (as opposed to redirected to a page). This works for components
|
18
|
+
# as well, in the case of Ajax requests.
|
19
|
+
#
|
20
|
+
# @example
|
21
|
+
# result = handler.handle(form:)
|
22
|
+
# expect(result).to have_generated(NewWidgetPage)
|
23
|
+
#
|
24
|
+
# @example Ajax request
|
25
|
+
# result = handler.handle(form:, xhr: true)
|
26
|
+
# expect(result).to have_generated(WidgetResponseComponent)
|
27
|
+
class Brut::SpecSupport::Matchers::HaveGenerated
|
28
|
+
end
|
@@ -25,6 +25,16 @@ RSpec::Matchers.define :have_html_attribute do |attribute|
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
# Used in component or page specs to check that a given node
|
29
|
+
# has a particular HTML attribnute, or an attribute with a speecific value.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# result = generate_and_parse(page)
|
33
|
+
# expect(result.e!("blockquote")).to have_html_attribute(:id)
|
34
|
+
#
|
35
|
+
# @example Expecting a value as well
|
36
|
+
# result = generate_and_parse(page)
|
37
|
+
# expect(result.e!("blockquote")).to have_html_attribute(id: "foo")
|
28
38
|
class Brut::SpecSupport::Matchers::HaveHTMLAttribute
|
29
39
|
|
30
40
|
attr_reader :error
|
@@ -24,3 +24,16 @@ RSpec::Matchers.define :have_i18n_string do |key,**args|
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
# Used in component or page specs to check if a Nokogiri node's
|
28
|
+
# text contains a specific i18n string, without you having
|
29
|
+
# to use `t` to look it up.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# result = generate_and_parse(page)
|
33
|
+
# expect(result.e!("h3")).to have_i18n_string(:greeting)
|
34
|
+
#
|
35
|
+
# @example I18n string with parameters
|
36
|
+
# result = generate_and_parse(page)
|
37
|
+
# expect(result.e!("h3")).to have_i18n_string(:user_greeting, email: account.email)
|
38
|
+
class Brut::SpecSupport::Matchers::HaveI18nString
|
39
|
+
end
|
@@ -13,3 +13,18 @@ RSpec::Matchers.define :have_link_to do |page_klass,**args|
|
|
13
13
|
"Did not expect to find link to #{page_klass.routing(**args)}."
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
# Used on a component/page spec to check that there is a link
|
18
|
+
# to a specific routing. This handles creating a CSS selector
|
19
|
+
# like `[href="#{page_klass.routing(**args)}"]`.
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# result = generate_and_parse(page)
|
23
|
+
# expect(result.e!("nav")).to have_link_to(HomePage)
|
24
|
+
#
|
25
|
+
# @example link with parameters
|
26
|
+
# result = generate_and_parse(page)
|
27
|
+
# expect(result.e!("nav")).to have_link_to(WidgetsByWidgetIdPage, id: widget.id)
|
28
|
+
#
|
29
|
+
class Brut::SpecSupport::Matchers::HaveLinkTo
|
30
|
+
end
|
@@ -37,5 +37,28 @@ RSpec::Matchers.define :have_redirected_to do |page_or_uri,**page_params|
|
|
37
37
|
failure_message_when_negated do |result|
|
38
38
|
"Got a redirect when it wasn't expected"
|
39
39
|
end
|
40
|
+
end
|
40
41
|
|
42
|
+
# Used on handler specs to check that a response has
|
43
|
+
# redirected to a page or URI. Can also be used
|
44
|
+
# with {Brut::SpecSupport::ComponentSupport#generate_result} to
|
45
|
+
# check that a Page's {Brut::FrontEnd::Page#before_generate} method
|
46
|
+
# did what you expect
|
47
|
+
#
|
48
|
+
# @example
|
49
|
+
# result = handler.handle
|
50
|
+
# expect(result).to have_redirected_to(HomePage)
|
51
|
+
#
|
52
|
+
# @example with parameters
|
53
|
+
# result = handler.handle
|
54
|
+
# expect(result).to have_redirected_to(WidgetsByWidgetIdPage, id: widget.id)
|
55
|
+
#
|
56
|
+
# @example arbitrary URI
|
57
|
+
# result = handler.handle
|
58
|
+
# expect(result).to have_redirected_to("http://kagi.com")
|
59
|
+
#
|
60
|
+
# @example testing a `before_generate` method
|
61
|
+
# result = generate_result(page)
|
62
|
+
# expect(result).to have_redirected_to(LoginPage)
|
63
|
+
class Brut::SpecSupport::Matchers::HaveRedirectedTo
|
41
64
|
end
|
@@ -31,5 +31,25 @@ RSpec::Matchers.define :have_returned_http_status do |http_status=nil|
|
|
31
31
|
"Got #{http_status} when not expected (#{result.class} was returned)"
|
32
32
|
end
|
33
33
|
end
|
34
|
+
end
|
34
35
|
|
36
|
+
# Used on handler specs to check that a response returned
|
37
|
+
# a particular HTTP status code. Can also be used
|
38
|
+
# with {Brut::SpecSupport::ComponentSupport#generate_result} to
|
39
|
+
# check that a Page's {Brut::FrontEnd::Page#before_generate} method
|
40
|
+
# did what you expect
|
41
|
+
#
|
42
|
+
# @example
|
43
|
+
# result = handler.handle
|
44
|
+
# expect(result).to have_returned_http_status(404)
|
45
|
+
#
|
46
|
+
# @example dont' care what status, just that one was returned instead of a page generation
|
47
|
+
# result = handler.handle
|
48
|
+
# expect(result).to have_returned_http_status
|
49
|
+
#
|
50
|
+
#
|
51
|
+
# @example testing a `before_generate` method
|
52
|
+
# result = generate_result(page)
|
53
|
+
# expect(result).to have_returned_http_status(403)
|
54
|
+
class Brut::SpecSupport::Matchers::HaveReturnedHttpStatus
|
35
55
|
end
|
@@ -42,3 +42,25 @@ RSpec::Matchers.define :have_returned_rack_response do |http_status: :any, heade
|
|
42
42
|
end
|
43
43
|
|
44
44
|
end
|
45
|
+
|
46
|
+
# Used on handler specs to check that a response returned
|
47
|
+
# a Rack response. Can also be used
|
48
|
+
# with {Brut::SpecSupport::ComponentSupport#generate_result} to
|
49
|
+
# check that a Page's {Brut::FrontEnd::Page#before_generate} method
|
50
|
+
# did what you expect
|
51
|
+
#
|
52
|
+
# The matcher expects these keyword arguments:
|
53
|
+
#
|
54
|
+
# * `http_status:` - the expected HTTP status code as a number, or `:any` (the default), if it's not relevant to the test.
|
55
|
+
# * `headers:` - the expected headers as a Hash of Strings to Strings, or `:any` (the default), if they are not relevant to the test.
|
56
|
+
# * `body:` - the expected body, or `:any` (the default), if it is not relevant to the test.
|
57
|
+
#
|
58
|
+
# @example
|
59
|
+
# result = handler.handle
|
60
|
+
# expect(result).to have_returned_rack_response(
|
61
|
+
# http_status: 200,
|
62
|
+
# headers: { "Content-Type" => "text/html" }
|
63
|
+
# )
|
64
|
+
#
|
65
|
+
class Brut::SpecSupport::Matchers::HaveReturnedRackResponse
|
66
|
+
end
|
@@ -43,8 +43,16 @@ class Brut::SpecSupport::RSpecSetup
|
|
43
43
|
# Create the setup with the given RSpec configuration.
|
44
44
|
#
|
45
45
|
# @param [RSpec::Core::Configuration] rspec_config yielded from `RSpec.configure`
|
46
|
-
|
47
|
-
|
46
|
+
# @param [boolean] monkey_patch_summary_notification if true (the default),
|
47
|
+
# RSpec's Notifications::SumaryNotification will be monkey-patched to show
|
48
|
+
# `bin/test` in the summary instead of `./rspec`, as that is how you would
|
49
|
+
# re-run a test. But, it's still monkey-patching.
|
50
|
+
def initialize(rspec_config:,
|
51
|
+
monkey_patch_summary_notification: true)
|
52
|
+
|
53
|
+
@config = rspec_config
|
54
|
+
@monkey_patch_summary_notification = monkey_patch_summary_notification
|
55
|
+
|
48
56
|
SemanticLogger.default_level = ENV.fetch("LOGGER_LEVEL_FOR_TESTS","warn")
|
49
57
|
end
|
50
58
|
|
@@ -155,6 +163,9 @@ class Brut::SpecSupport::RSpecSetup
|
|
155
163
|
@config.after(:suite) do
|
156
164
|
Brut::SpecSupport::E2ETestServer.instance.stop
|
157
165
|
end
|
166
|
+
if @monkey_patch_summary_notification
|
167
|
+
monkey_patch_summary_notification!
|
168
|
+
end
|
158
169
|
end
|
159
170
|
|
160
171
|
class OptionalSidekiqSupport
|
@@ -181,4 +192,33 @@ class Brut::SpecSupport::RSpecSetup
|
|
181
192
|
end
|
182
193
|
end
|
183
194
|
|
195
|
+
private
|
196
|
+
|
197
|
+
def monkey_patch_summary_notification!
|
198
|
+
require "rspec/core/notifications"
|
199
|
+
klass = RSpec::Core::Notifications::SummaryNotification
|
200
|
+
if !klass.instance_variable_get("@_brut_has_monkeypatched")
|
201
|
+
klass.class_eval do
|
202
|
+
# Slightly reformatted, but the only line that's different
|
203
|
+
# is the one that said to use './rspec'. Now it says 'bin/test run'
|
204
|
+
def colorized_rerun_commands(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
|
205
|
+
"\nFailed examples:\n\n" +
|
206
|
+
failed_examples.map do |example|
|
207
|
+
rerun_argument = rerun_argument_for(example)
|
208
|
+
colorizer.wrap(
|
209
|
+
"bin/test run #{rerun_argument}", # <--- this is the only difference
|
210
|
+
RSpec.configuration.failure_color
|
211
|
+
) +
|
212
|
+
" " +
|
213
|
+
colorizer.wrap(
|
214
|
+
"# #{example.full_description}",
|
215
|
+
RSpec.configuration.detail_color
|
216
|
+
)
|
217
|
+
end.join("\n")
|
218
|
+
end
|
219
|
+
end
|
220
|
+
klass.instance_variable_set("@_brut_has_monkeypatched",true)
|
221
|
+
end
|
222
|
+
end
|
184
223
|
end
|
224
|
+
|
data/lib/brut/version.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
module Sequel
|
2
2
|
module Extensions
|
3
3
|
# Instruments all SQL executions.
|
4
|
+
#
|
5
|
+
# *NOTE* this will include the actual SQL query text in the
|
6
|
+
# span, so any literal values in the query will be in the observability
|
7
|
+
# platforms.
|
4
8
|
module BrutInstrumentation
|
5
9
|
# @!visibility private
|
6
10
|
def log_connection_yield(sql,conn,args=nil)
|
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.0.28
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Bryant Copeland
|
@@ -614,6 +614,8 @@ files:
|
|
614
614
|
- brutrb.com/javascript.md
|
615
615
|
- brutrb.com/jobs.md
|
616
616
|
- brutrb.com/keyword-injection.md
|
617
|
+
- brutrb.com/layouts.md
|
618
|
+
- brutrb.com/lsp.md
|
617
619
|
- brutrb.com/markdown-examples.md
|
618
620
|
- brutrb.com/middleware.md
|
619
621
|
- brutrb.com/not-released.md
|
@@ -661,6 +663,10 @@ files:
|
|
661
663
|
- docs/api/Brut/CLI/Apps/DB/Rebuild.html
|
662
664
|
- docs/api/Brut/CLI/Apps/DB/Seed.html
|
663
665
|
- docs/api/Brut/CLI/Apps/DB/Status.html
|
666
|
+
- docs/api/Brut/CLI/Apps/DeployBase.html
|
667
|
+
- docs/api/Brut/CLI/Apps/DeployBase/GitChecks.html
|
668
|
+
- docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy.html
|
669
|
+
- docs/api/Brut/CLI/Apps/HerokuContainerBasedDeploy/Deploy.html
|
664
670
|
- docs/api/Brut/CLI/Apps/Scaffold.html
|
665
671
|
- docs/api/Brut/CLI/Apps/Scaffold/Action.html
|
666
672
|
- docs/api/Brut/CLI/Apps/Scaffold/Action/Route.html
|
@@ -802,8 +808,17 @@ files:
|
|
802
808
|
- docs/api/Brut/SpecSupport/GeneralSupport/ClassMethods.html
|
803
809
|
- docs/api/Brut/SpecSupport/HandlerSupport.html
|
804
810
|
- docs/api/Brut/SpecSupport/Matchers.html
|
811
|
+
- docs/api/Brut/SpecSupport/Matchers/BeABug.html
|
812
|
+
- docs/api/Brut/SpecSupport/Matchers/BePageFor.html
|
813
|
+
- docs/api/Brut/SpecSupport/Matchers/BeRoutingFor.html
|
805
814
|
- docs/api/Brut/SpecSupport/Matchers/HaveConstraintViolation.html
|
815
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveGenerated.html
|
806
816
|
- docs/api/Brut/SpecSupport/Matchers/HaveHTMLAttribute.html
|
817
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveI18nString.html
|
818
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveLinkTo.html
|
819
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveRedirectedTo.html
|
820
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveReturnedHttpStatus.html
|
821
|
+
- docs/api/Brut/SpecSupport/Matchers/HaveReturnedRackResponse.html
|
807
822
|
- docs/api/Brut/SpecSupport/RSpecSetup.html
|
808
823
|
- docs/api/Brut/SpecSupport/RSpecSetup/OptionalSidekiqSupport.html
|
809
824
|
- docs/api/Brut/SpecSupport/SessionSupport.html
|
@@ -822,6 +837,7 @@ files:
|
|
822
837
|
- docs/api/Sequel/Plugins/ExternalId/InstanceMethods.html
|
823
838
|
- docs/api/Sequel/Plugins/FindBang.html
|
824
839
|
- docs/api/Sequel/Plugins/FindBang/ClassMethods.html
|
840
|
+
- docs/api/SpecSupport/Matchers/BeABug.html
|
825
841
|
- docs/api/_index.html
|
826
842
|
- docs/api/class_list.html
|
827
843
|
- docs/api/css/common.css
|
@@ -837,25 +853,25 @@ files:
|
|
837
853
|
- docs/api/method_list.html
|
838
854
|
- docs/api/top-level-namespace.html
|
839
855
|
- docs/assets.html
|
840
|
-
- docs/assets/ai.md.
|
841
|
-
- docs/assets/ai.md.
|
842
|
-
- docs/assets/app.
|
856
|
+
- docs/assets/ai.md._6HCDL6d.js
|
857
|
+
- docs/assets/ai.md._6HCDL6d.lean.js
|
858
|
+
- docs/assets/app.BX81XO4N.js
|
843
859
|
- docs/assets/assets.md.D3wunzLx.js
|
844
860
|
- docs/assets/assets.md.D3wunzLx.lean.js
|
845
861
|
- docs/assets/brut-js.md.o2DAO2s2.js
|
846
862
|
- docs/assets/brut-js.md.o2DAO2s2.lean.js
|
847
863
|
- docs/assets/business-logic.md.BY4hGy0m.js
|
848
864
|
- docs/assets/business-logic.md.BY4hGy0m.lean.js
|
849
|
-
- docs/assets/chunks/@localSearchIndexroot.
|
850
|
-
- docs/assets/chunks/VPLocalSearchBox.
|
865
|
+
- docs/assets/chunks/@localSearchIndexroot.CoYzciVi.js
|
866
|
+
- docs/assets/chunks/VPLocalSearchBox.gABXcTWp.js
|
851
867
|
- docs/assets/chunks/framework.1L-BeKqY.js
|
852
|
-
- docs/assets/chunks/theme.
|
868
|
+
- docs/assets/chunks/theme.DwUXXAL3.js
|
853
869
|
- docs/assets/cli.md.RmeA2b0i.js
|
854
870
|
- docs/assets/cli.md.RmeA2b0i.lean.js
|
855
|
-
- docs/assets/components.md.
|
856
|
-
- docs/assets/components.md.
|
857
|
-
- docs/assets/configuration.md.
|
858
|
-
- docs/assets/configuration.md.
|
871
|
+
- docs/assets/components.md.CRUMdRoN.js
|
872
|
+
- docs/assets/components.md.CRUMdRoN.lean.js
|
873
|
+
- docs/assets/configuration.md.BGHl8oRC.js
|
874
|
+
- docs/assets/configuration.md.BGHl8oRC.lean.js
|
859
875
|
- docs/assets/css.md.DJgj2clw.js
|
860
876
|
- docs/assets/css.md.DJgj2clw.lean.js
|
861
877
|
- docs/assets/custom-element-tests.md.BrYJQEl3.js
|
@@ -868,18 +884,18 @@ files:
|
|
868
884
|
- docs/assets/deployment.md.Dbka4OTr.lean.js
|
869
885
|
- docs/assets/dev-env-overview.Gj7NWM8-.png
|
870
886
|
- docs/assets/dev-env-protocol.DysDAtnz.png
|
871
|
-
- docs/assets/dev-environment.md.
|
872
|
-
- docs/assets/dev-environment.md.
|
873
|
-
- docs/assets/doc-conventions.md.
|
874
|
-
- docs/assets/doc-conventions.md.
|
887
|
+
- docs/assets/dev-environment.md.GZv6xvi9.js
|
888
|
+
- docs/assets/dev-environment.md.GZv6xvi9.lean.js
|
889
|
+
- docs/assets/doc-conventions.md.-kN3Xo5C.js
|
890
|
+
- docs/assets/doc-conventions.md.-kN3Xo5C.lean.js
|
875
891
|
- docs/assets/end-to-end-tests.md.yfQHC0b5.js
|
876
892
|
- docs/assets/end-to-end-tests.md.yfQHC0b5.lean.js
|
877
893
|
- docs/assets/flash-and-session.md.BXY8RvT0.js
|
878
894
|
- docs/assets/flash-and-session.md.BXY8RvT0.lean.js
|
879
|
-
- docs/assets/forms.md.
|
880
|
-
- docs/assets/forms.md.
|
881
|
-
- docs/assets/getting-started.md.
|
882
|
-
- docs/assets/getting-started.md.
|
895
|
+
- docs/assets/forms.md.B-koVgyw.js
|
896
|
+
- docs/assets/forms.md.B-koVgyw.lean.js
|
897
|
+
- docs/assets/getting-started.md.Ciz82L0m.js
|
898
|
+
- docs/assets/getting-started.md.Ciz82L0m.lean.js
|
883
899
|
- docs/assets/handlers.md.089DVD3v.js
|
884
900
|
- docs/assets/handlers.md.089DVD3v.lean.js
|
885
901
|
- docs/assets/hooks.md.C4-moMny.js
|
@@ -888,14 +904,18 @@ files:
|
|
888
904
|
- docs/assets/i18n.md.Do9i1qWl.lean.js
|
889
905
|
- docs/assets/index.md.B28EwVpq.js
|
890
906
|
- docs/assets/index.md.B28EwVpq.lean.js
|
891
|
-
- docs/assets/instrumentation.md.
|
892
|
-
- docs/assets/instrumentation.md.
|
907
|
+
- docs/assets/instrumentation.md.a9Pjps4P.js
|
908
|
+
- docs/assets/instrumentation.md.a9Pjps4P.lean.js
|
893
909
|
- docs/assets/javascript.md.GWbhRS51.js
|
894
910
|
- docs/assets/javascript.md.GWbhRS51.lean.js
|
895
911
|
- docs/assets/jobs.md.S-2amAYp.js
|
896
912
|
- docs/assets/jobs.md.S-2amAYp.lean.js
|
897
913
|
- docs/assets/keyword-injection.md.Dt2tKREs.js
|
898
914
|
- docs/assets/keyword-injection.md.Dt2tKREs.lean.js
|
915
|
+
- docs/assets/layouts.md.cPnh3NId.js
|
916
|
+
- docs/assets/layouts.md.cPnh3NId.lean.js
|
917
|
+
- docs/assets/lsp.md.Bsu-f6VU.js
|
918
|
+
- docs/assets/lsp.md.Bsu-f6VU.lean.js
|
899
919
|
- docs/assets/markdown-examples.md.CCFEQO44.js
|
900
920
|
- docs/assets/markdown-examples.md.CCFEQO44.lean.js
|
901
921
|
- docs/assets/middleware.md.Czz_UlJN.js
|
@@ -903,10 +923,12 @@ files:
|
|
903
923
|
- docs/assets/not-released.md.BBy28McC.js
|
904
924
|
- docs/assets/not-released.md.BBy28McC.lean.js
|
905
925
|
- docs/assets/overview.Da81cB9R.png
|
906
|
-
- docs/assets/overview.md.
|
907
|
-
- docs/assets/overview.md.
|
926
|
+
- docs/assets/overview.md.C5wlBcR5.js
|
927
|
+
- docs/assets/overview.md.C5wlBcR5.lean.js
|
908
928
|
- docs/assets/pages.md.BE3kfOc5.js
|
909
929
|
- docs/assets/pages.md.BE3kfOc5.lean.js
|
930
|
+
- docs/assets/recipes_authentication.md.CAsXf7hk.js
|
931
|
+
- docs/assets/recipes_authentication.md.CAsXf7hk.lean.js
|
910
932
|
- docs/assets/routes.md.BMM7peut.js
|
911
933
|
- docs/assets/routes.md.BMM7peut.lean.js
|
912
934
|
- docs/assets/security.md.C668yXCi.js
|
@@ -1039,11 +1061,14 @@ files:
|
|
1039
1061
|
- docs/javascript.html
|
1040
1062
|
- docs/jobs.html
|
1041
1063
|
- docs/keyword-injection.html
|
1064
|
+
- docs/layouts.html
|
1065
|
+
- docs/lsp.html
|
1042
1066
|
- docs/markdown-examples.html
|
1043
1067
|
- docs/middleware.html
|
1044
1068
|
- docs/not-released.html
|
1045
1069
|
- docs/overview.html
|
1046
1070
|
- docs/pages.html
|
1071
|
+
- docs/recipes/authentication.html
|
1047
1072
|
- docs/routes.html
|
1048
1073
|
- docs/security.html
|
1049
1074
|
- docs/seed-data.html
|
@@ -1074,6 +1099,8 @@ files:
|
|
1074
1099
|
- lib/brut/cli/app_runner.rb
|
1075
1100
|
- lib/brut/cli/apps/build_assets.rb
|
1076
1101
|
- lib/brut/cli/apps/db.rb
|
1102
|
+
- lib/brut/cli/apps/deploy_base.rb
|
1103
|
+
- lib/brut/cli/apps/heroku_container_based_deploy.rb
|
1077
1104
|
- lib/brut/cli/apps/scaffold.rb
|
1078
1105
|
- lib/brut/cli/apps/test.rb
|
1079
1106
|
- lib/brut/cli/command.rb
|
@@ -1182,11 +1209,11 @@ files:
|
|
1182
1209
|
- lib/brut/spec_support/matchers/be_page_for.rb
|
1183
1210
|
- lib/brut/spec_support/matchers/be_routing_for.rb
|
1184
1211
|
- lib/brut/spec_support/matchers/have_constraint_violation.rb
|
1212
|
+
- lib/brut/spec_support/matchers/have_generated.rb
|
1185
1213
|
- lib/brut/spec_support/matchers/have_html_attribute.rb
|
1186
1214
|
- lib/brut/spec_support/matchers/have_i18n_string.rb
|
1187
1215
|
- lib/brut/spec_support/matchers/have_link_to.rb
|
1188
1216
|
- lib/brut/spec_support/matchers/have_redirected_to.rb
|
1189
|
-
- lib/brut/spec_support/matchers/have_rendered.rb
|
1190
1217
|
- lib/brut/spec_support/matchers/have_returned_http_status.rb
|
1191
1218
|
- lib/brut/spec_support/matchers/have_returned_rack_response.rb
|
1192
1219
|
- lib/brut/spec_support/rspec_setup.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
import{_ as t,c as o,o as a,ag as s}from"./chunks/framework.1L-BeKqY.js";const b=JSON.parse('{"title":"AI Declaration and Notes","description":"","frontmatter":{},"headers":[],"relativePath":"ai.md","filePath":"ai.md"}'),r={name:"ai.md"};function n(i,e,l,d,h,u){return a(),o("div",null,e[0]||(e[0]=[s("",26)]))}const p=t(r,[["render",n]]);export{b as __pageData,p as default};
|