summaryrefslogtreecommitdiff
path: root/system/api/omit.go
diff options
context:
space:
mode:
authorSteve <nilslice@gmail.com>2017-02-13 11:06:14 -0800
committerGitHub <noreply@github.com>2017-02-13 11:06:14 -0800
commit4222b04d45b2932022c71eecf909e0e43f5f9d9d (patch)
treedf0a0cc191834d9220fe5a9f952ad61c9527a43e /system/api/omit.go
parent7a85b284dec2bbb462969fb7e9e949b1a2ae720a (diff)
parent46d7c021d8de124be803b5c10f157c132343ab4e (diff)
Merge pull request #73 from ponzu-cms/ponzu-dev
[core] Adding support to omit fields from json response, minor code reorganization
Diffstat (limited to 'system/api/omit.go')
-rw-r--r--system/api/omit.go37
1 files changed, 37 insertions, 0 deletions
diff --git a/system/api/omit.go b/system/api/omit.go
new file mode 100644
index 0000000..d907712
--- /dev/null
+++ b/system/api/omit.go
@@ -0,0 +1,37 @@
+package api
+
+import (
+ "log"
+
+ "github.com/ponzu-cms/ponzu/system/item"
+
+ "github.com/tidwall/sjson"
+)
+
+func omit(it interface{}, data []byte) ([]byte, error) {
+ // is it Omittable
+ om, ok := it.(item.Omittable)
+ if !ok {
+ 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 = data
+ for i := range fields {
+ var err error
+ omitted, err = sjson.DeleteBytes(omitted, pathPrefix+fields[i])
+ if err != nil {
+ log.Println("Erorr omitting field:", fields[i], "from item.Omittable:", om)
+ return nil, err
+ }
+ }
+
+ return omitted, nil
+}