Skip to content

Commit

Permalink
Rebase gzip patch on top of master
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomas Edwardsson committed Nov 10, 2016
1 parent 73e1914 commit 29822d1
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
28 changes: 28 additions & 0 deletions config/interpolate_funcs.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package config

import (
"compress/gzip"
"crypto/md5"
"crypto/sha1"
"crypto/sha256"
Expand Down Expand Up @@ -67,6 +68,7 @@ func Funcs() map[string]ast.Function {
"floor": interpolationFuncFloor(),
"format": interpolationFuncFormat(),
"formatlist": interpolationFuncFormatList(),
"gzip": interpolationFuncGzip(),
"index": interpolationFuncIndex(),
"join": interpolationFuncJoin(),
"jsonencode": interpolationFuncJSONEncode(),
Expand Down Expand Up @@ -565,6 +567,32 @@ func interpolationFuncFormatList() ast.Function {
}
}

// interpolationFuncGzip implements the "gzip" function that allows gzip compression.
func interpolationFuncGzip() ast.Function {
return ast.Function{
ArgTypes: []ast.Type{ast.TypeString},
ReturnType: ast.TypeString,
Callback: func(args []interface{}) (interface{}, error) {
s := args[0].(string)

var b bytes.Buffer
gz := gzip.NewWriter(&b)
if _, err := gz.Write([]byte(s)); err != nil {
return "", fmt.Errorf("failed to gzip raw data: '%s'", s)
}
if err := gz.Flush(); err != nil {
return "", fmt.Errorf("failed to gzip raw data: '%s'", s)
}
if err := gz.Close(); err != nil {
return "", fmt.Errorf("failed to gzip raw data: '%s'", s)
}

return b.String(), nil
},
}
}


// interpolationFuncIndex implements the "index" function that allows one to
// find the index of a specific element in a list
func interpolationFuncIndex() ast.Function {
Expand Down
12 changes: 12 additions & 0 deletions config/interpolate_funcs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1010,6 +1010,18 @@ func TestInterpolateFuncFormatList(t *testing.T) {
})
}

func TestInterpolateFuncGzip(t *testing.T) {
testFunction(t, testFunctionConfig{
Cases: []testFunctionCase{
{
`${base64encode(gzip("test"))}`,
"H4sIAAAJbogA/ypJLS4BAAAA//8BAAD//wx+f9gEAAAA",
false,
},
},
})
}

func TestInterpolateFuncIndex(t *testing.T) {
testFunction(t, testFunctionConfig{
Vars: map[string]ast.Variable{
Expand Down

0 comments on commit 29822d1

Please sign in to comment.