clean tdd
parent
9f8614d032
commit
e7a1626bba
|
|
@ -1,6 +1,12 @@
|
||||||
package ledger
|
package ledger
|
||||||
|
|
||||||
import "io"
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
var filesAppendDelim = "\t"
|
||||||
|
|
||||||
type Files []string
|
type Files []string
|
||||||
|
|
||||||
|
|
@ -11,7 +17,42 @@ func NewFiles(p string, q ...string) (Files, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (files Files) Add(payee string, delta Delta) error {
|
func (files Files) Add(payee string, delta Delta) error {
|
||||||
// TODO
|
currencyValue := fmt.Sprintf("%s%.2f", delta.Currency, delta.Value)
|
||||||
|
if delta.Currency != USD {
|
||||||
|
currencyValue = fmt.Sprintf("%.2f %s", delta.Value, delta.Currency)
|
||||||
|
}
|
||||||
|
return files.append(fmt.Sprintf("%s %s\n%s%s%s%s\n%s%s",
|
||||||
|
delta.Date, delta.Description,
|
||||||
|
filesAppendDelim, delta.Name, filesAppendDelim+filesAppendDelim+filesAppendDelim, currencyValue,
|
||||||
|
filesAppendDelim, payee,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (files Files) append(s string) error {
|
||||||
|
if err := files.trimTrainlingWhitespace(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.OpenFile(string(files[0]), os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
fmt.Fprintf(f, "\n%s", s)
|
||||||
|
return f.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (files Files) trimTrainlingWhitespace() error {
|
||||||
|
f, err := os.Open(string(files[0]))
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
return io.EOF
|
return io.EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFileAdd(t *testing.T) {
|
func TestFileAdd(t *testing.T) {
|
||||||
|
filesAppendDelim = " "
|
||||||
payee := "name:3"
|
payee := "name:3"
|
||||||
delta := Delta{
|
delta := Delta{
|
||||||
Date: "2999-88-77",
|
Date: "2999-88-77",
|
||||||
|
|
@ -22,15 +23,17 @@ func TestFileAdd(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
"no file": {
|
"no file": {
|
||||||
given: nil,
|
given: nil,
|
||||||
want: `2999-88-77 66
|
want: `
|
||||||
name:1 $2.00
|
2999-88-77 66
|
||||||
name:3`,
|
name:1 $2.00
|
||||||
|
name:3`,
|
||||||
},
|
},
|
||||||
"empty file": {
|
"empty file": {
|
||||||
given: []byte{},
|
given: []byte{},
|
||||||
want: `2999-88-77 66
|
want: `
|
||||||
name:1 $2.00
|
2999-88-77 66
|
||||||
name:3`,
|
name:1 $2.00
|
||||||
|
name:3`,
|
||||||
},
|
},
|
||||||
"happy without trailing whitespace": {
|
"happy without trailing whitespace": {
|
||||||
given: []byte(`
|
given: []byte(`
|
||||||
|
|
@ -41,9 +44,9 @@ func TestFileAdd(t *testing.T) {
|
||||||
2000-01-02 desc
|
2000-01-02 desc
|
||||||
name:1 $1.00
|
name:1 $1.00
|
||||||
name:2 $-1.00
|
name:2 $-1.00
|
||||||
2999-88-77 66
|
2999-88-77 66
|
||||||
name:1 $2.00
|
name:1 $2.00
|
||||||
name:3`,
|
name:3`,
|
||||||
},
|
},
|
||||||
"happy with trailing newline": {
|
"happy with trailing newline": {
|
||||||
given: []byte(`
|
given: []byte(`
|
||||||
|
|
@ -55,9 +58,9 @@ func TestFileAdd(t *testing.T) {
|
||||||
2000-01-02 desc
|
2000-01-02 desc
|
||||||
name:1 $1.00
|
name:1 $1.00
|
||||||
name:2 $-1.00
|
name:2 $-1.00
|
||||||
2999-88-77 66
|
2999-88-77 66
|
||||||
name:1 $2.00
|
name:1 $2.00
|
||||||
name:3`,
|
name:3`,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue