mirror of
https://github.com/simonmichael/hledger.git
synced 2024-09-18 17:57:11 +03:00
move commands to their own subpackage
This commit is contained in:
parent
71e7f2b293
commit
d35792bf3f
@ -4,12 +4,12 @@ An add command to help with data entry.
|
||||
|
||||
-}
|
||||
|
||||
module AddCommand
|
||||
module Commands.Add
|
||||
where
|
||||
import Prelude hiding (putStr, putStrLn, getLine, appendFile)
|
||||
import Ledger
|
||||
import Options
|
||||
import RegisterCommand (showRegisterReport)
|
||||
import Commands.Register (showRegisterReport)
|
||||
import System.IO.UTF8
|
||||
import System.IO (stderr, hFlush)
|
||||
import System.IO.Error
|
37
Commands/All.hs
Normal file
37
Commands/All.hs
Normal file
@ -0,0 +1,37 @@
|
||||
{-# OPTIONS_GHC -cpp #-}
|
||||
{-|
|
||||
|
||||
This module re-exports all the Commands modules. It's just a convenience,
|
||||
you can import individual modules if you prefer.
|
||||
|
||||
-}
|
||||
|
||||
module Commands.All (
|
||||
module Commands.Add,
|
||||
module Commands.Balance,
|
||||
module Commands.Convert,
|
||||
module Commands.Histogram,
|
||||
module Commands.Print,
|
||||
module Commands.Register,
|
||||
module Commands.Stats,
|
||||
#ifdef VTY
|
||||
module Commands.UI,
|
||||
#endif
|
||||
#ifdef HAPPS
|
||||
module Commands.Web,
|
||||
#endif
|
||||
)
|
||||
where
|
||||
import Commands.Add
|
||||
import Commands.Balance
|
||||
import Commands.Convert
|
||||
import Commands.Histogram
|
||||
import Commands.Print
|
||||
import Commands.Register
|
||||
import Commands.Stats
|
||||
#ifdef VTY
|
||||
import Commands.UI
|
||||
#endif
|
||||
#ifdef HAPPS
|
||||
import Commands.Web
|
||||
#endif
|
@ -94,7 +94,7 @@ balance report:
|
||||
|
||||
-}
|
||||
|
||||
module BalanceCommand
|
||||
module Commands.Balance
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import Ledger.Utils
|
@ -36,7 +36,7 @@ optional rule saving.
|
||||
|
||||
-}
|
||||
|
||||
module ConvertCommand where
|
||||
module Commands.Convert where
|
||||
import Data.Maybe (isJust)
|
||||
import Data.List.Split (splitOn)
|
||||
import Options -- (Opt,Debug)
|
@ -4,7 +4,7 @@ Print a histogram report.
|
||||
|
||||
-}
|
||||
|
||||
module HistogramCommand
|
||||
module Commands.Histogram
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import qualified Data.Map as Map
|
||||
@ -30,7 +30,7 @@ showHistogram opts args l = concatMap (printDayWith countBar) daytxns
|
||||
fullspan = rawLedgerDateSpan $ rawledger l
|
||||
days = filter (DateSpan Nothing Nothing /=) $ splitSpan interval fullspan
|
||||
daytxns = [(s, filter (isTransactionInDateSpan s) ts) | s <- days]
|
||||
-- same as RegisterCommand
|
||||
-- same as Register
|
||||
ts = sortBy (comparing tdate) $ filterempties $ filter matchapats $ filterdepth $ ledgerTransactions l
|
||||
filterempties
|
||||
| Empty `elem` opts = id
|
@ -4,7 +4,7 @@ A ledger-compatible @print@ command.
|
||||
|
||||
-}
|
||||
|
||||
module PrintCommand
|
||||
module Commands.Print
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import Ledger
|
@ -4,7 +4,7 @@ A ledger-compatible @register@ command.
|
||||
|
||||
-}
|
||||
|
||||
module RegisterCommand
|
||||
module Commands.Register
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import qualified Data.Map as Map
|
@ -4,7 +4,7 @@ Print some statistics for the ledger.
|
||||
|
||||
-}
|
||||
|
||||
module StatsCommand
|
||||
module Commands.Stats
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import qualified Data.Map as Map
|
@ -4,7 +4,7 @@ A simple text UI for hledger, based on the vty library.
|
||||
|
||||
-}
|
||||
|
||||
module UICommand
|
||||
module Commands.UI
|
||||
where
|
||||
import qualified Data.Map as Map
|
||||
import Data.Map ((!))
|
||||
@ -12,9 +12,9 @@ import Graphics.Vty
|
||||
import qualified Data.ByteString.Char8 as B
|
||||
import Ledger
|
||||
import Options
|
||||
import BalanceCommand
|
||||
import RegisterCommand
|
||||
import PrintCommand
|
||||
import Commands.Balance
|
||||
import Commands.Register
|
||||
import Commands.Print
|
||||
|
||||
|
||||
helpmsg = "(b)alance, (r)egister, (p)rint, (right) to drill down, (left) to back up, (q)uit"
|
@ -2,7 +2,7 @@
|
||||
A happs-based web UI for hledger.
|
||||
-}
|
||||
|
||||
module WebCommand
|
||||
module Commands.Web
|
||||
where
|
||||
import Control.Monad.Trans (liftIO)
|
||||
import Data.ByteString.Lazy.UTF8 (toString)
|
||||
@ -21,13 +21,14 @@ import System.Cmd (system)
|
||||
import System.Info (os)
|
||||
import System.Exit
|
||||
import Network.HTTP (urlEncode, urlDecode, urlEncodeVars)
|
||||
import Text.XHtml hiding (dir)
|
||||
|
||||
import Ledger
|
||||
import Options
|
||||
import BalanceCommand
|
||||
import RegisterCommand
|
||||
import PrintCommand
|
||||
import HistogramCommand
|
||||
import Commands.Balance
|
||||
import Commands.Register
|
||||
import Commands.Print
|
||||
import Commands.Histogram
|
||||
import Utils (filterAndCacheLedgerWithOpts)
|
||||
|
||||
|
||||
@ -55,10 +56,10 @@ web opts args l = do
|
||||
webHandlers :: [Opt] -> [String] -> Ledger -> LocalTime -> ServerPartT IO Response
|
||||
webHandlers opts args l t = msum
|
||||
[
|
||||
methodSP GET $ view showBalanceReport
|
||||
,dir "balance" $ view showBalanceReport
|
||||
,dir "register" $ view showRegisterReport
|
||||
,dir "print" $ view showLedgerTransactions
|
||||
methodSP GET $ view showBalanceReport
|
||||
,dir "balance" $ view showBalanceReport
|
||||
,dir "register" $ view showRegisterReport
|
||||
,dir "print" $ view showLedgerTransactions
|
||||
,dir "histogram" $ view showHistogram
|
||||
]
|
||||
where
|
||||
@ -67,7 +68,7 @@ webHandlers opts args l t = msum
|
||||
where
|
||||
opts' = opts ++ [Period p]
|
||||
args' = args ++ (map urlDecode $ words a)
|
||||
-- re-filter the full ledger
|
||||
-- re-filter the full ledger with the new opts
|
||||
l' = filterAndCacheLedgerWithOpts opts' args' t (rawledgertext l) (rawledger l)
|
||||
|
||||
rqdata = do
|
||||
@ -78,7 +79,7 @@ rqdata = do
|
||||
layout :: (String, String) -> String -> ServerPartT IO Response
|
||||
layout (a,p) s = do
|
||||
r <- askRq
|
||||
return $ setHeader "Content-Type" "text/html" $ toResponse $ maintemplate (a,p) r s
|
||||
return $ setHeader "Content-Type" "text/html" $ toResponse $ maintemplate' (a,p) r s
|
||||
|
||||
maintemplate :: (String, String) -> Request -> String -> String
|
||||
maintemplate (a,p) r = printf (unlines
|
||||
@ -110,6 +111,44 @@ maintemplate (a,p) r = printf (unlines
|
||||
resetlink | null a && null p = ""
|
||||
| otherwise = printf " <a href=%s>reset</a>" u
|
||||
|
||||
maintemplate' :: (String, String) -> Request -> String -> String
|
||||
maintemplate' (a,period) r s = renderHtml $
|
||||
body << concatHtml [
|
||||
(thediv Text.XHtml.! [thestyle "float:right; text-align:right;"]) << noHtml,
|
||||
pre << s
|
||||
]
|
||||
|
||||
-- printf (unlines
|
||||
-- ["<div style=\"float:right;text-align:right;\">"
|
||||
-- ,"<form action=%s>"
|
||||
-- ," filter by: <input name=a size=30 value=\"%s\">"
|
||||
-- ," reporting period: <input name=p size=30 value=\"%s\">"
|
||||
-- ,resetlink
|
||||
-- ,"</form>"
|
||||
-- ,"</div>"
|
||||
-- ,"<div style=\"width:100%%; font-weight:bold;\">"
|
||||
-- ," <a href=balance%s>balance</a>"
|
||||
-- ,"|"
|
||||
-- ," <a href=register%s>register</a>"
|
||||
-- ,"|"
|
||||
-- ," <a href=print%s>print</a>"
|
||||
-- ,"|"
|
||||
-- ," <a href=histogram%s>histogram</a>"
|
||||
-- ,"</div>"
|
||||
-- ,"<pre>%s</pre>"
|
||||
-- ]) u a p q q q q
|
||||
-- where
|
||||
-- u = dropWhile (=='/') $ rqUri r
|
||||
-- -- another way to get them
|
||||
-- -- a = fromMaybe "" $ queryValue "a" r
|
||||
-- -- p = fromMaybe "" $ queryValue "p" r
|
||||
-- q' = intercalate "&" $
|
||||
-- (if null a then [] else [(("a="++).urlEncode) a]) ++
|
||||
-- (if null p then [] else [(("p="++).urlEncode) p])
|
||||
-- q = if null q' then "" else '?':q'
|
||||
-- resetlink | null a && null p = ""
|
||||
-- | otherwise = printf " <a href=%s>reset</a>" u
|
||||
|
||||
queryValues :: String -> Request -> [String]
|
||||
queryValues q r = map (B.unpack . inputValue . snd) $ filter ((==q).fst) $ rqInputs r
|
||||
|
19
Makefile
19
Makefile
@ -1,5 +1,7 @@
|
||||
# hledger project makefile
|
||||
|
||||
SOURCEFILES:=*hs Commands/*hs Ledger/*hs
|
||||
DOCFILES=HOME README NEWS CONTRIBUTORS SCREENSHOTS
|
||||
TIME:=`date +"%Y%m%d%H%M"`
|
||||
|
||||
# patches since last release tag (as a haskell string literal)
|
||||
@ -14,6 +16,9 @@ BUILDFLAGS=-DPATCHES=$(PATCHES) $(OPTFLAGS)
|
||||
#CICMD=web --debug -BE
|
||||
CICMD=test
|
||||
|
||||
# executables to benchtest, prepend ./ if not in $PATH.
|
||||
BENCHEXES=hledger-0.4 hledger-0.5 ledger
|
||||
|
||||
# command to run during profiling
|
||||
PROFCMD=-f 1000x1000x10.ledger balance
|
||||
|
||||
@ -88,9 +93,7 @@ haddocktest:
|
||||
@make --quiet haddock
|
||||
|
||||
# run performance tests and save results in profs/.
|
||||
# Requires some tests defined in bench.tests and some executables defined below.
|
||||
# Prepend ./ to these if not in $PATH.
|
||||
BENCHEXES=hledger-0.4 hledger-0.5 ledger
|
||||
# Requires some tests defined in bench.tests and some executables defined above.
|
||||
benchtest: sampleledgers bench.tests bench
|
||||
tools/bench -fbench.tests $(BENCHEXES) | tee profs/$(TIME).bench
|
||||
@(cd profs; rm -f latest.bench; ln -s $(TIME).bench latest.bench)
|
||||
@ -127,19 +130,17 @@ sample.ledger:
|
||||
######################################################################
|
||||
# DOCS
|
||||
|
||||
DOCS=HOME README NEWS CONTRIBUTORS SCREENSHOTS
|
||||
|
||||
# rebuild all docs
|
||||
docs: buildwebsite pdf api-docs
|
||||
|
||||
buildwebsite: website
|
||||
-cp doc/*.css website
|
||||
-cp doc/*.png website
|
||||
for d in $(DOCS); do pandoc -s -H doc/header.html -A doc/footer.html -r rst $$d >website/$$d.html; done
|
||||
for d in $(DOCFILES); do pandoc -s -H doc/header.html -A doc/footer.html -r rst $$d >website/$$d.html; done
|
||||
(cd website; rm -f index.html; ln -s HOME.html index.html)
|
||||
|
||||
pdf: website
|
||||
for d in $(DOCS); do rst2pdf $$d -o website/$$d.pdf; done
|
||||
for d in $(DOCFILES); do rst2pdf $$d -o website/$$d.pdf; done
|
||||
|
||||
website:
|
||||
mkdir -p website
|
||||
@ -173,7 +174,7 @@ haddock: api-doc-dir hscolour $(MAIN)
|
||||
HSCOLOUR=HsColour -css
|
||||
hscolour: api-doc-dir
|
||||
echo "Generating colourised source" ; \
|
||||
for f in *hs Ledger/*hs; do \
|
||||
for f in $(SOURCEFILES); do \
|
||||
$(HSCOLOUR) -anchor $$f -oapi-doc/`echo "src/"$$f | sed -e's%/%-%g' | sed -e's%\.hs$$%.html%'` ; \
|
||||
done ; \
|
||||
cp api-doc/src-hledger.html api-doc/src-Main.html ; \
|
||||
@ -355,7 +356,7 @@ showreleasechanges:
|
||||
tag: emacstags
|
||||
|
||||
emacstags:
|
||||
@rm -f TAGS; hasktags -e *hs Ledger/*hs hledger.cabal
|
||||
@rm -f TAGS; hasktags -e $(SOURCEFILES) hledger.cabal
|
||||
|
||||
clean:
|
||||
rm -f `find . -name "*.o" -o -name "*.hi" -o -name "*~" -o -name "darcs-amend-record*"`
|
||||
|
7
Tests.hs
7
Tests.hs
@ -154,12 +154,11 @@ import System.Locale (defaultTimeLocale)
|
||||
import Text.ParserCombinators.Parsec
|
||||
import Test.HUnit
|
||||
import Test.HUnit.Tools (assertRaises, runVerboseTests)
|
||||
|
||||
import Commands.All
|
||||
import Ledger
|
||||
import Utils
|
||||
import Options
|
||||
import BalanceCommand
|
||||
import PrintCommand
|
||||
import RegisterCommand
|
||||
import Utils
|
||||
|
||||
|
||||
runtests opts args = runner flattests
|
||||
|
@ -56,17 +56,14 @@ Executable hledger
|
||||
regex-pcre, csv, split, utf8-string, http
|
||||
|
||||
Other-Modules:
|
||||
AddCommand
|
||||
BalanceCommand
|
||||
ConvertCommand
|
||||
HistogramCommand
|
||||
Options
|
||||
PrintCommand
|
||||
RegisterCommand
|
||||
Setup
|
||||
Tests
|
||||
Utils
|
||||
Version
|
||||
Commands.Add
|
||||
Commands.All
|
||||
Commands.Balance
|
||||
Commands.Convert
|
||||
Commands.Histogram
|
||||
Commands.Print
|
||||
Commands.Register
|
||||
Commands.Stats
|
||||
Ledger
|
||||
Ledger.Account
|
||||
Ledger.AccountName
|
||||
@ -83,6 +80,11 @@ Executable hledger
|
||||
Ledger.Transaction
|
||||
Ledger.Types
|
||||
Ledger.Utils
|
||||
Options
|
||||
Setup
|
||||
Tests
|
||||
Utils
|
||||
Version
|
||||
|
||||
-- need to set patchlevel here (darcs changes --from-tag=. --count)
|
||||
cpp-options: -DPATCHES=0
|
||||
@ -90,7 +92,7 @@ Executable hledger
|
||||
if flag(vty)
|
||||
cpp-options: -DVTY
|
||||
Build-Depends:vty >= 3.1.8.2 && < 3.2
|
||||
Other-Modules:UICommand
|
||||
Other-Modules:Commands.UI
|
||||
|
||||
if flag(happs)
|
||||
cpp-options: -DHAPPS
|
||||
@ -99,5 +101,5 @@ Executable hledger
|
||||
,happstack-server >= 0.2 && < 0.3
|
||||
,happstack-state >= 0.2 && < 0.3
|
||||
,utf8-string >= 0.3 && < 0.4
|
||||
Other-Modules:WebCommand
|
||||
Other-Modules:Commands.Web
|
||||
|
||||
|
43
hledger.hs
43
hledger.hs
@ -35,50 +35,25 @@ or ghci:
|
||||
See "Ledger.Ledger" for more examples.
|
||||
-}
|
||||
|
||||
module Main (
|
||||
-- for easy ghci access
|
||||
module Main (-- export for easy ghci access:
|
||||
module Main,
|
||||
module Utils,
|
||||
module Options,
|
||||
module BalanceCommand,
|
||||
module ConvertCommand,
|
||||
module PrintCommand,
|
||||
module RegisterCommand,
|
||||
module HistogramCommand,
|
||||
module AddCommand,
|
||||
module StatsCommand,
|
||||
#ifdef VTY
|
||||
module UICommand,
|
||||
#endif
|
||||
#ifdef HAPPS
|
||||
module WebCommand,
|
||||
#endif
|
||||
)
|
||||
module Commands.All,
|
||||
)
|
||||
where
|
||||
import Prelude hiding (putStr)
|
||||
import Control.Monad.Error
|
||||
import qualified Data.Map as Map (lookup)
|
||||
import System.IO.UTF8
|
||||
import Prelude hiding (putStr)
|
||||
import System.IO (stderr)
|
||||
import System.IO.UTF8
|
||||
import qualified Data.Map as Map (lookup)
|
||||
|
||||
import Version (versionmsg)
|
||||
import Commands.All
|
||||
import Ledger
|
||||
import Utils (withLedgerDo)
|
||||
import Options
|
||||
import Tests
|
||||
import BalanceCommand
|
||||
import ConvertCommand
|
||||
import PrintCommand
|
||||
import RegisterCommand
|
||||
import HistogramCommand
|
||||
import AddCommand
|
||||
import StatsCommand
|
||||
#ifdef VTY
|
||||
import UICommand
|
||||
#endif
|
||||
#ifdef HAPPS
|
||||
import WebCommand
|
||||
#endif
|
||||
import Utils (withLedgerDo)
|
||||
import Version (versionmsg)
|
||||
|
||||
|
||||
main :: IO ()
|
||||
|
Loading…
Reference in New Issue
Block a user