Skip to content

Commit 3d6c434

Browse files
authored
Merge pull request #7 from gochore/dev
2 parents dbcf902 + 86ee479 commit 3d6c434

19 files changed

+1031
-411
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ before_install:
77
- go get -t -v ./...
88

99
script:
10-
- go test -race -coverprofile=coverage.txt -covermode=atomic
10+
- go test -race -coverprofile=coverage.txt -covermode=atomic -v ./...
1111
- go vet -v ./...
1212
- gofmt -l . && test -z $(gofmt -l .)
1313

element.go

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,36 @@ package emailt
33
import (
44
"bytes"
55
"fmt"
6-
"html/template"
76
"io"
8-
"strings"
7+
"text/template"
8+
9+
"github.com/gochore/emailt/internal/rend"
10+
"github.com/gochore/emailt/style"
911
)
1012

1113
type Element interface {
12-
Render(writer io.Writer, themes ...Theme) error
13-
}
14-
15-
type StringElement string
16-
17-
func NewStringElement(format string, a ...interface{}) StringElement {
18-
return StringElement(fmt.Sprintf(format, a...))
19-
}
20-
21-
func (e StringElement) Render(writer io.Writer, themes ...Theme) error {
22-
return htmlRender(strings.NewReader(string(e)), writer, mergeThemes(themes))
14+
Render(writer io.Writer, themes ...style.Theme) error
2315
}
2416

2517
type TemplateElement struct {
2618
Data interface{}
2719
Template string
20+
Funcs template.FuncMap
2821
}
2922

30-
func (e TemplateElement) Render(writer io.Writer, themes ...Theme) error {
31-
t, err := template.New("").Parse(e.Template)
23+
func (e TemplateElement) Render(writer io.Writer, themes ...style.Theme) error {
24+
errPrefix := "TemplateElement.Render: "
25+
26+
t, err := template.New("").Funcs(e.Funcs).Parse(e.Template)
3227
if err != nil {
33-
return fmt.Errorf("parse template: %w", err)
28+
return fmt.Errorf(errPrefix+"parse template: %w", err)
3429
}
3530
buffer := &bytes.Buffer{}
3631
if err := t.Execute(buffer, e.Data); err != nil {
37-
return fmt.Errorf("template execute: %w", err)
32+
return fmt.Errorf(errPrefix+"template execute: %w", err)
33+
}
34+
if err := rend.RenderTheme(buffer, writer, rend.MergeThemes(themes)); err != nil {
35+
return fmt.Errorf(errPrefix+"%w", err)
3836
}
39-
return htmlRender(buffer, writer, mergeThemes(themes))
37+
return nil
4038
}

element_test.go

Lines changed: 22 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,16 @@ package emailt
22

33
import (
44
"bytes"
5+
"strings"
56
"testing"
6-
"time"
7+
"text/template"
78
)
89

9-
func TestStringElement_Render(t *testing.T) {
10-
tests := []struct {
11-
name string
12-
e StringElement
13-
style Theme
14-
wantWriter string
15-
wantErr bool
16-
}{
17-
{
18-
name: "regular",
19-
e: "<p>test</p>",
20-
wantWriter: "<p>test</p>",
21-
wantErr: false,
22-
},
23-
{
24-
name: "with_style",
25-
e: "<p>test</p>",
26-
style: MapTheme{
27-
"p": Attributes{
28-
{
29-
Name: "style",
30-
Value: "background-color:#dedede;",
31-
},
32-
},
33-
},
34-
wantWriter: `<p style="background-color:#dedede;">test</p>`,
35-
wantErr: false,
36-
},
37-
}
38-
for _, tt := range tests {
39-
t.Run(tt.name, func(t *testing.T) {
40-
writer := &bytes.Buffer{}
41-
err := tt.e.Render(writer, tt.style)
42-
if (err != nil) != tt.wantErr {
43-
t.Errorf("Render() error = %v, wantErr %v", err, tt.wantErr)
44-
return
45-
}
46-
if gotWriter := writer.String(); gotWriter != tt.wantWriter {
47-
t.Errorf("Render() gotWriter = %v, want %v", gotWriter, tt.wantWriter)
48-
}
49-
})
50-
}
51-
}
52-
5310
func TestTemplateElement_Render(t *testing.T) {
5411
type fields struct {
5512
Data interface{}
5613
Template string
14+
Funcs template.FuncMap
5715
}
5816
tests := []struct {
5917
name string
@@ -100,12 +58,31 @@ func TestTemplateElement_Render(t *testing.T) {
10058
wantWriter: "",
10159
wantErr: true,
10260
},
61+
{
62+
name: "with_funcs",
63+
fields: fields{
64+
Data: struct {
65+
A string
66+
B int
67+
}{
68+
A: "hello",
69+
B: 1,
70+
},
71+
Template: "A:{{title .A}}, B:{{.B}}",
72+
Funcs: template.FuncMap{
73+
"title": strings.Title,
74+
},
75+
},
76+
wantWriter: "A:Hello, B:1",
77+
wantErr: false,
78+
},
10379
}
10480
for _, tt := range tests {
10581
t.Run(tt.name, func(t *testing.T) {
10682
e := TemplateElement{
10783
Data: tt.fields.Data,
10884
Template: tt.fields.Template,
85+
Funcs: tt.fields.Funcs,
10986
}
11087
writer := &bytes.Buffer{}
11188
err := e.Render(writer)
@@ -119,31 +96,3 @@ func TestTemplateElement_Render(t *testing.T) {
11996
})
12097
}
12198
}
122-
123-
func TestNewStringElement(t *testing.T) {
124-
type args struct {
125-
format string
126-
a []interface{}
127-
}
128-
tests := []struct {
129-
name string
130-
args args
131-
want StringElement
132-
}{
133-
{
134-
name: "regular",
135-
args: args{
136-
format: "%v %v",
137-
a: []interface{}{1, time.Minute},
138-
},
139-
want: "1 1m0s",
140-
},
141-
}
142-
for _, tt := range tests {
143-
t.Run(tt.name, func(t *testing.T) {
144-
if got := NewStringElement(tt.args.format, tt.args.a...); got != tt.want {
145-
t.Errorf("NewStringElement() = %v, want %v", got, tt.want)
146-
}
147-
})
148-
}
149-
}

email.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,19 @@ package emailt
33
import (
44
"fmt"
55
"io"
6+
7+
"github.com/gochore/emailt/internal/rend"
8+
"github.com/gochore/emailt/style"
69
)
710

811
type Email struct {
912
elements []Element
10-
theme Theme
13+
theme style.Theme
1114
}
1215

1316
type Option func(email *Email)
1417

15-
func WithTheme(theme Theme) Option {
18+
func WithTheme(theme style.Theme) Option {
1619
return func(email *Email) {
1720
email.theme = theme
1821
}
@@ -34,7 +37,7 @@ func (e *Email) AddElements(element ...Element) *Email {
3437
}
3538

3639
func (e *Email) Render(writer io.Writer) error {
37-
render := newFmtWriter(writer)
40+
render := rend.NewFmtWriter(writer)
3841
render.Print(`
3942
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4043
<html xmlns="http://www.w3.org/1999/xhtml">

headline.go

Lines changed: 0 additions & 18 deletions
This file was deleted.

headline_test.go

Lines changed: 0 additions & 53 deletions
This file was deleted.

0 commit comments

Comments
 (0)