diff --git a/hledger-lib/Hledger/Data.hs b/hledger-lib/Hledger/Data.hs index f55b28a96..4f3e83696 100644 --- a/hledger-lib/Hledger/Data.hs +++ b/hledger-lib/Hledger/Data.hs @@ -15,6 +15,7 @@ module Hledger.Data ( module Hledger.Data.Dates, module Hledger.Data.Journal, module Hledger.Data.Ledger, + module Hledger.Data.MarketPrice, module Hledger.Data.Period, module Hledger.Data.Posting, module Hledger.Data.RawOptions, @@ -34,6 +35,7 @@ import Hledger.Data.Commodity import Hledger.Data.Dates import Hledger.Data.Journal import Hledger.Data.Ledger +import Hledger.Data.MarketPrice import Hledger.Data.Period import Hledger.Data.Posting import Hledger.Data.RawOptions @@ -50,6 +52,7 @@ tests_Hledger_Data = TestList ,tests_Hledger_Data_Amount ,tests_Hledger_Data_Commodity ,tests_Hledger_Data_Journal + ,tests_Hledger_Data_MarketPrice ,tests_Hledger_Data_Ledger ,tests_Hledger_Data_Posting -- ,tests_Hledger_Data_RawOptions diff --git a/hledger-lib/Hledger/Data/MarketPrice.hs b/hledger-lib/Hledger/Data/MarketPrice.hs new file mode 100644 index 000000000..9a73c2aae --- /dev/null +++ b/hledger-lib/Hledger/Data/MarketPrice.hs @@ -0,0 +1,32 @@ +{-| + +A 'MarketPrice' represents a historical exchange rate between two +commodities. (Ledger calls them historical prices.) For example, prices +published by a stock exchange or the foreign exchange market. Some +commands (balance, currently) can use this information to show the market +value of things at a given date. + +-} + +{-# LANGUAGE OverloadedStrings, LambdaCase #-} + +module Hledger.Data.MarketPrice +where +import qualified Data.Text as T +import Test.HUnit + +import Hledger.Data.Amount +import Hledger.Data.Dates +import Hledger.Data.Types + +-- | Get the string representation of an market price, based on its +-- commodity's display settings. +showMarketPrice :: MarketPrice -> String +showMarketPrice mp = unwords + [ "P" + , showDate (mpdate mp) + , T.unpack (mpcommodity mp) + , (showAmount . setAmountPrecision maxprecision) (mpamount mp) + ] + +tests_Hledger_Data_MarketPrice = TestList [] diff --git a/hledger-lib/Hledger/Read/JournalReader.hs b/hledger-lib/Hledger/Read/JournalReader.hs index e76f53f3c..86865e15e 100644 --- a/hledger-lib/Hledger/Read/JournalReader.hs +++ b/hledger-lib/Hledger/Read/JournalReader.hs @@ -624,6 +624,12 @@ test_postingp = do tests_Hledger_Read_JournalReader = TestList $ concat [ -- test_numberp + [ + "showParsedMarketPrice" ~: do + let mp = parseWithState mempty marketpricedirectivep "P 2017/01/30 BTC $922.83\n" + mpString = (fmap . fmap) showMarketPrice mp + mpString `is` (Just (Right "P 2017/01/30 BTC $922.83")) + ] ] {- old hunit tests diff --git a/hledger-lib/hledger-lib.cabal b/hledger-lib/hledger-lib.cabal index f8b8d44a2..7c06922bc 100644 --- a/hledger-lib/hledger-lib.cabal +++ b/hledger-lib/hledger-lib.cabal @@ -110,6 +110,7 @@ library Hledger.Data.Dates Hledger.Data.Journal Hledger.Data.Ledger + Hledger.Data.MarketPrice Hledger.Data.Period Hledger.Data.StringFormat Hledger.Data.Posting diff --git a/hledger-lib/package.yaml b/hledger-lib/package.yaml index 82d0091f8..80756e323 100644 --- a/hledger-lib/package.yaml +++ b/hledger-lib/package.yaml @@ -91,6 +91,7 @@ library: - Hledger.Data.Dates - Hledger.Data.Journal - Hledger.Data.Ledger + - Hledger.Data.MarketPrice - Hledger.Data.Period - Hledger.Data.StringFormat - Hledger.Data.Posting