From e2af41261df408d03e7b830769843c7fcf07a833 Mon Sep 17 00:00:00 2001 From: Sean Darcy Date: Sun, 9 Jan 2022 18:27:28 +1100 Subject: [PATCH] Add flag to ledger-cli file to change currency --- .gitignore | 1 - ledger-cli/file.go | 11 +++++++++-- ledger-cli/parse.go | 8 ++++---- utils/ledgercli-files/transaction-codes-1.test | 3 +++ utils/ledgercli-files/transaction-codes-2.test | 15 +++++++++++++++ 5 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 utils/ledgercli-files/transaction-codes-1.test create mode 100644 utils/ledgercli-files/transaction-codes-2.test diff --git a/.gitignore b/.gitignore index 197f912..3cbb892 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ bazel-* /tmp */**/*un~ -*/**/*.test *un~ .DS_Store */**/.DS_Store diff --git a/ledger-cli/file.go b/ledger-cli/file.go index 1ab86c8..d69f0f1 100644 --- a/ledger-cli/file.go +++ b/ledger-cli/file.go @@ -38,7 +38,14 @@ var commandFile = &cli.Command{ Description: ` Loads a file in the ledger cli format `, - Flags: []cli.Flag{}, + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "currency", + Aliases: []string{"c"}, + Value: "USD", + Usage: "Specify the currency that the ledger file will be in, default to USD", + }, + }, Action: func(ctx *cli.Context) error { err, cfg := cmd.MakeConfig(ctx) if err != nil { @@ -60,7 +67,7 @@ var commandFile = &cli.Command{ return fmt.Errorf("Could not read file %s (%v)", ledgerFileName, err) } - generalLedger, parseError := ParseLedger(ledgerFileReader) + generalLedger, parseError := ParseLedger(ledgerFileReader, ctx.String("currency")) if parseError != nil { return fmt.Errorf("Could not parse file (%v)", parseError) } diff --git a/ledger-cli/parse.go b/ledger-cli/parse.go index 2d83132..84362db 100644 --- a/ledger-cli/parse.go +++ b/ledger-cli/parse.go @@ -34,8 +34,8 @@ const ( // ParseLedger parses a ledger file and returns a list of Transactions. // // Transactions are sorted by date. -func ParseLedger(ledgerReader io.Reader) (generalLedger []*Transaction, err error) { - parseLedger(ledgerReader, func(t *Transaction, e error) (stop bool) { +func ParseLedger(ledgerReader io.Reader, currency string) (generalLedger []*Transaction, err error) { + parseLedger(ledgerReader, currency, func(t *Transaction, e error) (stop bool) { if e != nil { err = e stop = true @@ -55,7 +55,7 @@ func ParseLedger(ledgerReader io.Reader) (generalLedger []*Transaction, err erro var accountToAmountSpace = regexp.MustCompile(" {2,}|\t+") -func parseLedger(ledgerReader io.Reader, callback func(t *Transaction, err error) (stop bool)) { +func parseLedger(ledgerReader io.Reader, currency string, callback func(t *Transaction, err error) (stop bool)) { var trans *Transaction scanner := bufio.NewScanner(ledgerReader) var line string @@ -122,7 +122,7 @@ func parseLedger(ledgerReader io.Reader, callback func(t *Transaction, err error } lastIndex := len(nonEmptyWords) - 1 balErr, rationalNum := getBalance(strings.Trim(nonEmptyWords[lastIndex], whitespace)) - accChange.Currency = "USD" + accChange.Currency = currency if !balErr { // Assuming no balance and whole line is account name accChange.Name = strings.Join(nonEmptyWords, " ") diff --git a/utils/ledgercli-files/transaction-codes-1.test b/utils/ledgercli-files/transaction-codes-1.test new file mode 100644 index 0000000..48f1b11 --- /dev/null +++ b/utils/ledgercli-files/transaction-codes-1.test @@ -0,0 +1,3 @@ +2009/10/29 (XFER) Panera Bread + Expenses:Food 4.50 + Assets:Checking diff --git a/utils/ledgercli-files/transaction-codes-2.test b/utils/ledgercli-files/transaction-codes-2.test new file mode 100644 index 0000000..bdddb72 --- /dev/null +++ b/utils/ledgercli-files/transaction-codes-2.test @@ -0,0 +1,15 @@ +2009/10/29 (XFER) Panera Bread + Expenses:Food 4.50 + Assets:Checking + +2009/10/30 (DEP) Pay day! + Assets:Checking 20.00 + Income + +2009/10/30 (XFER) Panera Bread + Expenses:Food 4.50 + Assets:Checking + +2009/10/31 (559385768438A8D7) Panera Bread + Expenses:Food 4.50 + Liabilities:Credit Card