keera-hails-mvc-view 0.0.3.3 → 0.8.0
raw patch · 5 files changed
+221/−47 lines, 5 filesdep +directorydep +filepathdep +hlintnew-uploaderPVP ok
version bump matches the API change (PVP)
Dependencies added: directory, filepath, hlint, process, regex-posix
API changes (from Hackage documentation)
- Hails.MVC.View: type ViewElementAccessor a b = a -> b
+ Hails.MVC.View: type ViewElementAccessor a b = (a -> b)
Files
- LICENSE +5/−4
- keera-hails-mvc-view.cabal +98/−42
- src/Hails/MVC/View.hs +4/−1
- tests/HLintMain.hs +23/−0
- tests/HaddockCoverage.hs +91/−0
LICENSE view
@@ -1,4 +1,5 @@-Copyright (c)2012, Ivan Perez+Copyright (c) 2013-2020, Keera Studios Ltd+Copyright (c) 2010-2012, Ivan Perez All rights reserved. @@ -13,9 +14,9 @@ disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Ivan Perez nor the names of other- contributors may be used to endorse or promote products derived- from this software without specific prior written permission.+ * Neither the name of Ivan Perez, nor the name of Keera Studios, nor the+ names of other contributors may be used to endorse or promote products+ derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
keera-hails-mvc-view.cabal view
@@ -1,57 +1,113 @@--- hails.cabal auto-generated by cabal init. For additional options,--- see--- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.--- The name of the package.-Name: keera-hails-mvc-view+-- Copyright : (C) Keera Studios Ltd, 2013+-- License : All Rights Reserved+-- Maintainer : support@keera.co.uk+--+cabal-version: >= 1.10+build-type: Simple --- The package version. See the Haskell package versioning policy--- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for--- standards guiding when and how versions should be incremented.-Version: 0.0.3.3+name: keera-hails-mvc-view+version: 0.8.0+author: Ivan Perez+maintainer: support@keera.co.uk+homepage: http://www.keera.co.uk/blog/community/+license: BSD3+license-file: LICENSE+copyright: (C) 2013 Keera Studios Ltd+category: Development+synopsis: Haskell on Gtk rails - Generic View for MVC applications+description:+ Keera Hails is a rapid application development system.+ .+ The idea behind Hails is that you should be able to build cross platform+ applications with minimal effort, very quickly, and the result should be easy+ to maintain.+ .+ Large Hails applications are structured following an optimized MVC+ architecture. Values are updated either from the view to the model, or from+ the model to the view. Internally, rules use a notion of direction in the+ update to determine how different components must be updated.+ .+ This library provides a generic interface that can be used by applications to+ abstract details about views needed to synchronize the view with the model. --- A short (one-line) description of the package.-Synopsis: Haskell on Gtk rails - Generic View for MVC applications+source-repository head+ type: git+ location: git://github.com/keera-studios/keera-hails+ subdir: keera-hails-mvc-view --- A longer description of the package.--- Description: +-- You can disable the hlint test suite with -f-test-hlint+flag test-hlint+ default: False+ manual: True --- URL for the project homepage or repository.-Homepage: http://www.keera.es/blog/community/+-- You can disable the haddock coverage test suite with -f-test-doc-coverage+flag test-doc-coverage+ default: False+ manual: True --- The license under which the package is released.-License: BSD3+library --- The file containing the license text.-License-file: LICENSE+ exposed-modules:+ Hails.MVC.View --- The package author(s).-Author: Ivan Perez+ build-depends:+ base >= 4 && < 5 --- An email address to which users can send suggestions, bug reports,--- and patches.-Maintainer: ivan.perez@keera.es+ default-language:+ Haskell2010 --- A copyright notice.--- Copyright: + hs-source-dirs:+ src/ -Category: Development+ ghc-options:+ -Wall -fno-warn-unused-do-bind -O2 -Build-type: Simple --- Extra files to be distributed with the package, such as examples or--- a README.--- Extra-source-files: +test-suite hlint --- Constraint on the version of Cabal needed to build this package.-Cabal-version: >=1.2+ type:+ exitcode-stdio-1.0 -Library- hs-source-dirs: src/- - ghc-options: -Wall -fno-warn-unused-do-bind -O2+ main-is:+ HLintMain.hs - -- Modules exported by the library.- Exposed-modules: Hails.MVC.View- - -- Packages needed in order to build this package.- Build-depends: base >= 4 && < 5+ default-language:+ Haskell2010++ hs-source-dirs:+ tests++ if !flag(test-hlint)+ buildable: False+ else+ build-depends:+ base >= 4 && < 5+ , hlint >= 1.7++-- Verify that the code is thoroughly documented+test-suite haddock-coverage++ type:+ exitcode-stdio-1.0++ main-is:+ HaddockCoverage.hs++ default-language:+ Haskell2010++ hs-source-dirs:+ tests++ ghc-options:+ -Wall++ if !flag(test-doc-coverage)+ buildable: False+ else+ build-depends:+ base >= 4 && < 5+ , directory+ , filepath+ , process+ , regex-posix
src/Hails/MVC/View.hs view
@@ -1,11 +1,14 @@ -- | This class encapsulates GUI apis with some basic common operations: -- initialise the GUI, destroy the GUI, execute in the GUI Thread, etc.+--+-- Copyright : (C) Keera Studios Ltd, 2013+-- License : BSD3+-- Maintainer : support@keera.co.uk -- NOTE: This code is stable, but the design is experimental. -- It works fine, but I doubt it's a good solution in the long term. In -- particular, I do not like having to use the dummy type Null to define the -- Class.- module Hails.MVC.View where -- | Null is a parametric datatype with a non-parametric constructor.
+ tests/HLintMain.hs view
@@ -0,0 +1,23 @@+-----------------------------------------------------------------------------+-- |+-- Module : Main (hlint)+-- Copyright : (C) 2013 Edward Kmett+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Edward Kmett <ekmett@gmail.com>+-- Stability : provisional+-- Portability : portable+--+-- This module runs HLint on the lens source tree.+-----------------------------------------------------------------------------+module Main where++import Control.Monad+import Language.Haskell.HLint+import System.Environment+import System.Exit++main :: IO ()+main = do+ args <- getArgs+ hints <- hlint $ ["src", "--cross", "--hint=tests/HLint.hs" ] ++ args+ unless (null hints) exitFailure
+ tests/HaddockCoverage.hs view
@@ -0,0 +1,91 @@+-----------------------------------------------------------------------------+-- |+-- Module : Main (HaddockCoverage)+-- Copyright : (C) 2015 Ivan Perez+-- License : BSD-style (see the file LICENSE)+-- Maintainer : Ivan Perez <ivan.perez@keera.co.uk>+-- Stability : provisional+-- Portability : portable+--+-- Copyright notice: This file borrows code+-- https://hackage.haskell.org/package/lens-4.7/src/tests/doctests.hsc+-- which is itself licensed BSD-style as well.+--+-- Run haddock on a source tree and report if anything in any+-- module is not documented.+-----------------------------------------------------------------------------+module Main where++import Control.Applicative+import Control.Monad+import Data.List+import System.Directory+import System.Exit+import System.FilePath+import System.IO+import System.Process+import Text.Regex.Posix++main :: IO ()+main = do+ -- Find haskell modules+ -- TODO: Ideally cabal should do this (provide us with the+ -- list of modules). An alternative would be to use cabal haddock+ -- but that would need a --no-html argument or something like that.+ -- Alternatively, we could use cabal haddock with additional arguments.+ --+ -- See:+ -- https://github.com/keera-studios/haddock/commit/d5d752943c4e5c6c9ffcdde4dc136fcee967c495+ -- https://github.com/haskell/haddock/issues/309#issuecomment-150811929+ files <- getSources++ let haddockArgs = [ "--no-warnings", "--ignore-all-exports" ] ++ files+ let cabalArgs = [ "exec", "--", "haddock" ] ++ haddockArgs+ (code, out, _err) <- readProcessWithExitCode "cabal" cabalArgs ""++ -- Filter out coverage lines, and find those that denote undocumented+ -- modules.+ --+ -- TODO: is there a way to annotate a function as self-documenting,+ -- in the same way we do with ANN for hlint?+ let isIncompleteModule :: String -> Bool+ isIncompleteModule line = isCoverageLine line && not (line =~ "^ *100%")+ where isCoverageLine :: String -> Bool+ isCoverageLine line = line =~ "^ *[0-9]+%"++ let incompleteModules :: [String]+ incompleteModules = filter isIncompleteModule $ lines out++ -- Based on the result of haddock, report errors and exit.+ -- Note that, unline haddock, this script does not+ -- output anything to stdout. It uses stderr instead+ -- (as it should).+ case (code, incompleteModules) of+ (ExitSuccess , []) -> return ()+ -- (ExitFailure _, _) -> exitFailure+ (_ , _) -> do+ hPutStrLn stderr "The following modules are not fully documented:"+ mapM_ (hPutStrLn stderr) incompleteModules+ exitFailure++getSources :: IO [FilePath]+getSources = filter isHaskellFile <$> go "src"+ where+ go dir = do+ (dirs, files) <- getFilesAndDirectories dir+ (files ++) . concat <$> mapM go dirs++ isHaskellFile fp = (isSuffixOf ".hs" fp || isSuffixOf ".lhs" fp)+ && not (any (`isSuffixOf` fp) excludedFiles)++ excludedFiles = [ ]++getFilesAndDirectories :: FilePath -> IO ([FilePath], [FilePath])+getFilesAndDirectories dir = do+ c <- map (dir </>) . filter (`notElem` ["..", "."]) <$> getDirectoryContents dir+ (,) <$> filterM doesDirectoryExist c <*> filterM doesFileExist c++-- find-based implementation (not portable)+--+-- getSources :: IO [FilePath]+-- getSources = fmap lines $ readProcess "find" ["src/", "-iname", "*hs"] ""