summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Manuel <nilslice@gmail.com>2017-02-13 09:44:32 -0800
committerSteve Manuel <nilslice@gmail.com>2017-02-13 09:44:32 -0800
commitd2240b2ea40a3073e12c4c4ab529d486fa2b99d9 (patch)
tree64aa401aa47bff06279e4bc79569f048c1c8cd24
parentf47826071f1e6d7b048d1304d8435a347f9b412a (diff)
updating omit implementation
-rw-r--r--system/api/handlers.go6
-rw-r--r--system/api/omit.go15
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
}
}