Skip to content

Commit

Permalink
2 allocs
Browse files Browse the repository at this point in the history
  • Loading branch information
nbari committed Sep 28, 2017
1 parent 24a6631 commit 810d70b
Show file tree
Hide file tree
Showing 6 changed files with 145 additions and 128 deletions.
29 changes: 28 additions & 1 deletion params.go
@@ -1,7 +1,33 @@
package violetear

import "net/http"
// Params string/interface map used with context
type Params []param

func (p *Params) Set(name, value string) {
for _, param := range *p {
if param.name == name {
switch param.value.(type) {
case string:
param.value = []string{param.value.(string), value}
case []string:
param.value = append(param.value.([]string), value)
}
return
}
}
*p = append(*p, param{name, value})
}

func (p *Params) Get(name string) *param {
return nil
}

type param struct {
name string
value interface{}
}

/*
// GetParam returns a value for the parameter set in path
// When having duplicate params pass the index as the last argument to
// retrieve the desired value.
Expand Down Expand Up @@ -37,3 +63,4 @@ func GetParams(name string, r *http.Request) []string {
}
return []string{}
}
*/
11 changes: 3 additions & 8 deletions params_test.go
@@ -1,13 +1,6 @@
package violetear

import (
"fmt"
"net/http"
"net/http/httptest"
"reflect"
"testing"
)

/*
func TestGetParam(t *testing.T) {
testCases := []struct {
path string
Expand Down Expand Up @@ -330,3 +323,5 @@ func TestGetParamsDuplicatesNonExistent(t *testing.T) {
router.ServeHTTP(w, req)
expect(t, w.Code, 200)
}
*/
32 changes: 22 additions & 10 deletions responsewriter.go
Expand Up @@ -5,18 +5,25 @@ import (
"time"
)

// ResponseWriter wraps the standard http.ResponseWriter allowing for more
// verbose logging
// ResponseWriter wraps the standard http.ResponseWriter
type ResponseWriter struct {
http.ResponseWriter
status int
size int
start time.Time
requestID string
size, status int
start time.Time
}

// NewResponseWriter returns ResponseWriter
func NewResponseWriter(w http.ResponseWriter) *ResponseWriter {
return &ResponseWriter{w, 0, 0, time.Now()}
func NewResponseWriter(w http.ResponseWriter, rid string) *ResponseWriter {
rw := &ResponseWriter{
ResponseWriter: w,
start: time.Now(),
}
if rid != "" {
rw.requestID = w.Header().Get(rid)
rw.Header().Set(rid, rw.requestID)
}
return rw
}

// Status provides an easy way to retrieve the status code
Expand All @@ -30,8 +37,13 @@ func (w *ResponseWriter) Size() int {
}

// Start retrieve the start time
func (w *ResponseWriter) Start() time.Time {
return w.start
func (w *ResponseWriter) RequestTime() string {
return time.Since(w.start).String()
}

// RequestID retrieve the Request ID
func (w *ResponseWriter) RequestID() string {
return w.requestID
}

// Write satisfies the http.ResponseWriter interface and
Expand All @@ -46,7 +58,7 @@ func (w *ResponseWriter) Write(data []byte) (int, error) {
}

// WriteHeader satisfies the http.ResponseWriter interface and
// allows us to cach the status code
// allows us to catch the status code
func (w *ResponseWriter) WriteHeader(statusCode int) {
w.status = statusCode
w.ResponseWriter.WriteHeader(statusCode)
Expand Down
10 changes: 5 additions & 5 deletions responsewriter_test.go
Expand Up @@ -8,7 +8,7 @@ import (

func TestResponseWriterStatus(t *testing.T) {
rec := httptest.NewRecorder()
rw := NewResponseWriter(rec)
rw := NewResponseWriter(rec, "")

expect(t, rw.Status(), 0)

Expand All @@ -19,7 +19,7 @@ func TestResponseWriterStatus(t *testing.T) {

func TestResponseWriterSize(t *testing.T) {
rec := httptest.NewRecorder()
rw := NewResponseWriter(rec)
rw := NewResponseWriter(rec, "")

rw.Write([]byte("日本語"))
expect(t, rw.Size(), 9)
Expand All @@ -30,14 +30,14 @@ func TestResponseWriterSize(t *testing.T) {

func TestResponseWriterHeader(t *testing.T) {
rec := httptest.NewRecorder()
rw := NewResponseWriter(rec)
rw := NewResponseWriter(rec, "")

expect(t, len(rec.Header()), len(rw.Header()))
}

func TestResponseWriterWrite(t *testing.T) {
rec := httptest.NewRecorder()
rw := NewResponseWriter(rec)
rw := NewResponseWriter(rec, "")

rw.Write([]byte("Hello world"))
rw.Write([]byte(". !"))
Expand All @@ -50,7 +50,7 @@ func TestResponseWriterWrite(t *testing.T) {

func TestResponseWriterWriteHeader(t *testing.T) {
rec := httptest.NewRecorder()
rw := NewResponseWriter(rec)
rw := NewResponseWriter(rec, "")

rw.WriteHeader(http.StatusNotFound)

Expand Down

0 comments on commit 810d70b

Please sign in to comment.