diff options
author | Steve Manuel <nilslice@gmail.com> | 2017-02-13 09:44:32 -0800 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2017-02-13 09:44:32 -0800 |
commit | d2240b2ea40a3073e12c4c4ab529d486fa2b99d9 (patch) | |
tree | 64aa401aa47bff06279e4bc79569f048c1c8cd24 | |
parent | f47826071f1e6d7b048d1304d8435a347f9b412a (diff) |
updating omit implementation
-rw-r--r-- | system/api/handlers.go | 6 | ||||
-rw-r--r-- | system/api/omit.go | 15 |
2 files changed, 12 insertions, 9 deletions
diff --git a/system/api/handlers.go b/system/api/handlers.go index 2c234ed..4a9eaff 100644 --- a/system/api/handlers.go +++ b/system/api/handlers.go @@ -90,7 +90,7 @@ func contentsHandler(res http.ResponseWriter, req *http.Request) { return } - j, err = omit(it(), res, req, &j) + j, err = omit(it(), j) if err != nil { res.WriteHeader(http.StatusInternalServerError) return @@ -139,7 +139,7 @@ func contentHandler(res http.ResponseWriter, req *http.Request) { return } - j, err = omit(pt(), res, req, &j) + j, err = omit(pt(), j) if err != nil { res.WriteHeader(http.StatusInternalServerError) return @@ -182,7 +182,7 @@ func contentHandlerBySlug(res http.ResponseWriter, req *http.Request) { return } - j, err = omit(it(), res, req, &j) + j, err = omit(it(), j) if err != nil { res.WriteHeader(http.StatusInternalServerError) return diff --git a/system/api/omit.go b/system/api/omit.go index 46e172c..d907712 100644 --- a/system/api/omit.go +++ b/system/api/omit.go @@ -2,30 +2,33 @@ package api import ( "log" - "net/http" "github.com/ponzu-cms/ponzu/system/item" "github.com/tidwall/sjson" ) -func omit(it interface{}, res http.ResponseWriter, req *http.Request, data *[]byte) ([]byte, error) { +func omit(it interface{}, data []byte) ([]byte, error) { // is it Omittable om, ok := it.(item.Omittable) if !ok { - return *data, nil + return data, nil } + return omitFields(om, data, "data.0.") +} + +func omitFields(om item.Omittable, data []byte, pathPrefix string) ([]byte, error) { // get fields to omit from json data fields := om.Omit() // remove each field from json, all responses contain json object(s) in top-level "data" array - var omitted []byte + var omitted = data for i := range fields { var err error - omitted, err = sjson.DeleteBytes(*data, "data."+fields[i]) + omitted, err = sjson.DeleteBytes(omitted, pathPrefix+fields[i]) if err != nil { - log.Println("Erorr omitting field:", fields[i], "from item.Omittable:", it) + log.Println("Erorr omitting field:", fields[i], "from item.Omittable:", om) return nil, err } } |