From 320b4a6ccac258cfc2479ef91a27505d98c96949 Mon Sep 17 00:00:00 2001 From: Manu Mtz-Almeida Date: Mon, 18 May 2015 15:44:06 +0200 Subject: [PATCH] sse conforms to the gin.render.Render interface --- sse-encoder.go | 11 +++++++++++ sse_test.go | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/sse-encoder.go b/sse-encoder.go index 4905525..7f489df 100644 --- a/sse-encoder.go +++ b/sse-encoder.go @@ -4,6 +4,7 @@ import ( "encoding/json" "fmt" "io" + "net/http" "reflect" "strings" ) @@ -21,6 +22,16 @@ type Event struct { Data interface{} } +func (r Event) Write(w http.ResponseWriter) error { + header := w.Header() + header.Set("Content-Type", ContentType) + + if _, exist := header["Cache-Control"]; !exist { + header.Set("Cache-Control", "no-cache") + } + return Encode(w, r) +} + func Encode(w io.Writer, event Event) error { writeId(w, event.Id) writeEvent(w, event.Event) diff --git a/sse_test.go b/sse_test.go index 4421a8f..61354b9 100644 --- a/sse_test.go +++ b/sse_test.go @@ -2,6 +2,7 @@ package sse import ( "bytes" + "net/http/httptest" "testing" "github.com/stretchr/testify/assert" @@ -144,3 +145,17 @@ func TestEncodeStream(t *testing.T) { }) assert.Equal(t, w.String(), "event: float\ndata: 1.5\n\nid: 123\ndata: {\"bar\":\"foo\",\"foo\":\"bar\"}\n\nid: 124\nevent: chat\ndata: hi! dude\n\n") } + +func TestRenderSSE(t *testing.T) { + w := httptest.NewRecorder() + + err := (Event{ + Event: "msg", + Data: "hi! how are you?", + }).Write(w) + + assert.NoError(t, err) + assert.Equal(t, w.Body.String(), "event: msg\ndata: hi! how are you?\n\n") + assert.Equal(t, w.Header().Get("Content-Type"), "text/event-stream") + assert.Equal(t, w.Header().Get("Cache-Control"), "no-cache") +}