ronn-envparse (empty) → 1.0.0.0
raw patch · 6 files changed
+205/−0 lines, 6 filesdep +basedep +envparsedep +filepath
Dependencies added: base, envparse, filepath, hspec, hspec-golden, ronn, ronn-envparse, text
Files
- CHANGELOG.md +5/−0
- README.md +18/−0
- ronn-envparse.cabal +83/−0
- src/Ronn/Env.hs +33/−0
- tests/Main.hs +9/−0
- tests/Ronn/EnvSpec.hs +57/−0
+ CHANGELOG.md view
@@ -0,0 +1,5 @@+## [_Unreleased_](https://github.com/pbrisbin/ronn/compare/ronn-envparse-v1.0.0.0...main)++## [v1.0.0.0](https://github.com/pbrisbin/ronn/tree/ronn-envparse-v1.0.0.0)++First tagged pre-release.
+ README.md view
@@ -0,0 +1,18 @@+# `ronn-envparse`++[](https://hackage.haskell.org/package/ronn-envparse)+[](http://stackage.org/nightly/package/ronn-envparse)+[](http://stackage.org/lts/package/ronn-envparse)++Automatically create a `Ronn` value from `Env.Parser`.++## Usage++See [the test][test] and [the result][golden].++[test]: ./ronn-envparse/tests/Ronn/EnvSpec.hs+[golden]: ./doc/ronn-envparse.1.ronn++---++[CHANGELOG](./ronn-envparse/CHANGELOG.md)
+ ronn-envparse.cabal view
@@ -0,0 +1,83 @@+cabal-version: 1.18+name: ronn-envparse+version: 1.0.0.0+license: AGPL-3+maintainer: Pat Brisbin+homepage: https://github.com/pbrisbin/ronn#readme+bug-reports: https://github.com/pbrisbin/ronn/issues+synopsis: Produce Ronn from OptEnvConf+description: Please see README.md+category: Documentation+build-type: Simple+extra-doc-files:+ README.md+ CHANGELOG.md++source-repository head+ type: git+ location: https://github.com/pbrisbin/ronn++library+ exposed-modules: Ronn.Env+ hs-source-dirs: src+ other-modules: Paths_ronn_envparse+ default-language: GHC2021+ default-extensions:+ DataKinds DeriveAnyClass DerivingStrategies DerivingVia+ DuplicateRecordFields GADTs LambdaCase NoFieldSelectors+ NoImplicitPrelude NoMonomorphismRestriction OverloadedRecordDot+ OverloadedStrings RecordWildCards TypeFamilies++ ghc-options:+ -fignore-optim-changes -fwrite-ide-info -Weverything+ -Wno-all-missed-specialisations -Wno-missing-exported-signatures+ -Wno-missing-import-lists -Wno-missing-kind-signatures+ -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode+ -Wno-monomorphism-restriction -Wno-prepositive-qualified-module+ -Wno-safe -Wno-unsafe++ build-depends:+ base >=4.16.4.0 && <5,+ envparse >=0.5.0,+ ronn >=1.1.0.0++ if impl(ghc >=9.8)+ ghc-options:+ -Wno-missing-role-annotations -Wno-missing-poly-kind-signatures++test-suite spec+ type: exitcode-stdio-1.0+ main-is: Main.hs+ hs-source-dirs: tests+ other-modules:+ Ronn.EnvSpec+ Paths_ronn_envparse++ default-language: GHC2021+ default-extensions:+ DataKinds DeriveAnyClass DerivingStrategies DerivingVia+ DuplicateRecordFields GADTs LambdaCase NoFieldSelectors+ NoImplicitPrelude NoMonomorphismRestriction OverloadedRecordDot+ OverloadedStrings RecordWildCards TypeFamilies++ ghc-options:+ -fignore-optim-changes -fwrite-ide-info -Weverything+ -Wno-all-missed-specialisations -Wno-missing-exported-signatures+ -Wno-missing-import-lists -Wno-missing-kind-signatures+ -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode+ -Wno-monomorphism-restriction -Wno-prepositive-qualified-module+ -Wno-safe -Wno-unsafe -threaded -rtsopts -with-rtsopts=-N++ build-depends:+ base >=4.16.4.0 && <5,+ envparse >=0.5.0,+ filepath >=1.4.2.2,+ hspec >=2.9.7,+ hspec-golden >=0.2.1.0,+ ronn >=1.1.0.0,+ ronn-envparse,+ text >=1.2.5.0++ if impl(ghc >=9.8)+ ghc-options:+ -Wno-missing-role-annotations -Wno-missing-poly-kind-signatures
+ src/Ronn/Env.hs view
@@ -0,0 +1,33 @@+-- |+--+-- Module : Ronn.Env+-- Copyright : (c) 2024 Patrick Brisbin+-- License : AGPL-3+-- Maintainer : pbrisbin@gmail.com+-- Stability : experimental+-- Portability : POSIX+module Ronn.Env+ ( envDefinitions+ ) where++import Prelude++import Data.String (IsString (..))+import Env (Parser)+import Env.Internal.Help (helpDoc)+import Ronn.AST++envDefinitions :: Parser e a -> [Definition]+envDefinitions = map fromHelpLine . drop 2 . lines . helpDoc++fromHelpLine :: String -> Definition+fromHelpLine x =+ Definition+ { name+ , description = Line [help]+ , content = Nothing+ }+ where+ (name, help) = case words x of+ (y : ys) -> (fromString y, fromString $ unwords ys)+ _ -> ("", "(error: envparse helpline was empty)")
+ tests/Main.hs view
@@ -0,0 +1,9 @@+-- |+--+-- Module : Main+-- Copyright : (c) 2024 Patrick Brisbin+-- License : AGPL-3+-- Maintainer : pbrisbin@gmail.com+-- Stability : experimental+-- Portability : POSIX+{-# OPTIONS_GHC -F -pgmF hspec-discover -Wno-missing-export-lists #-}
+ tests/Ronn/EnvSpec.hs view
@@ -0,0 +1,57 @@+-- |+--+-- Module : Ronn.EnvSpec+-- Copyright : (c) 2024 Patrick Brisbin+-- License : AGPL-3+-- Maintainer : pbrisbin@gmail.com+-- Stability : experimental+-- Portability : POSIX+module Ronn.EnvSpec+ ( spec+ ) where++import Prelude++import Data.Text (Text, unpack)+import Data.Text.IO qualified as T+import Env+import Ronn+import Ronn.Env+import System.FilePath ((</>))+import Test.Hspec+import Test.Hspec.Golden++spec :: Spec+spec = do+ specify "complete example" $+ let+ p :: Parser Error (Maybe Bool, FilePath, FilePath)+ p =+ (,,)+ <$> optional (switch "DEBUG" $ help "Enable debug")+ <*> var nonempty "OUTPUT" (help "Output file" <> def "-")+ <*> var nonempty "INPUT" (help "Input file")+ in+ ronnGolden $+ Ronn+ { name = ManRef "ronn-envparse" ManSection1+ , description = ["example Ronn from envparse"]+ , sections =+ [ Section+ { name = "ENVIRONMENT"+ , content = [Definitions $ envDefinitions p]+ }+ ]+ }++ronnGolden :: Ronn -> Golden Text+ronnGolden ronn =+ Golden+ { output = ronnToText ronn+ , encodePretty = unpack+ , writeToFile = T.writeFile+ , readFromFile = T.readFile+ , goldenFile = "../doc" </> ronnFilePath ronn+ , actualFile = Nothing+ , failFirstTime = False+ }