Commit Graph

42 Commits

Author SHA1 Message Date
Aren Patel cf9619af15
Moved all embeded struct tests into its own test file; added 3 more failing tests that are related to the handling of duplicate embedded struct fields. 2017-08-01 17:42:38 -07:00
Aren Patel 003d45f589 Added another failing test; this time for the marshalling of duplicate primary annotation fields. 2017-07-27 17:42:37 -07:00
skimata a6ac768a27 Embedded structs v3 (#100)
* working version

* fix text

* combine test files

* move private funcs to bottom

* ErrInvalidType should ignore interfaces

* replace MarshalOnePayload w/ MarshalPayload; fix bug w/ node merge()

* minor tweaks; address a couple comments

* decompose unmarshalNode() to smaller funcs; unmarshal should go from top-level to embedded

* deep copy the node when passing relation/sideloaded notes to unmarshal()

* add some comments and do some additional cleanup

* add test uses annotationIgnore

* implement support for struct fields that implement json.Marshaler/Unmarshaler

* add additional test that compares marshal/unmarshal behavior w/ standard json library

* add support for pointer embedded structs

* Revert "implement support for struct fields that implement json.Marshaler/Unmarshaler"

This reverts commit deeffb78df.
2017-07-27 11:16:00 -07:00
Aren Patel cf83b97b3d Public Marshal API Simplification (#90)
* Used to have 6 functions: MarshalOnePayload, MarshalOnePayloadWithoutIncluded, MarshalOne, MarshalManyPayload, MarshalManyPayloadWithoutIncluded, MarshalMany - now there are only 3: MarshalPayload, MarshalPayloadWithoutIncluded, Marshal. This simplifies the public API; will be easier to explain and document while still providing the existing support for struct ptrs (&Blog{}) and slices of struct ptrs ([]*Blog{}).

* Correcting all code occurrences leftover.

* Updating README to reflect Marshal API changes.

* Omit the mention of One vs Many
2017-06-28 17:30:09 -07:00
Stratos Neiros ebb7923313 Add omitempty to Node.ID (#89)
This commit adds omitempty to the field ID of type Node. This is needed
when constructing an entity client-side and sending it to the server for
creation. Without omitempty, the constructed entity will contain an
empty "id": "", which is not sensible to transmit.

This change addresses #83.
2017-05-23 20:17:04 -07:00
Aren Patel 0a2decba43 Make the Meta test also check for the value of the detail key. Moving all testing models to their own file. Updated the readme to include a deeply nested, varying typed meta example. Convert the map[string]interface to a Meta in the tests. Make the Meta field of a Link of type Meta rather than a map[string]inteface{}. Use the headerAccept constant defined for the example app. Commenting the new Metable interface and moving the Meta type beside it. Example app updated to use jsonapi.Links and jsonapi.Meta types rather than the underlying map[string]interface{}. 2017-02-16 20:28:09 -08:00
Samantha Belkin 776433d17d Add support for 'meta' (#72)
* add Meta field in node structs and Metable/RelationshipMetable interfaces

* update response marshalling to add Meta

* update tests for presence of Meta

* add Metable and RelationshipMetable interfaces to example

* update README to include Meta details
2017-02-16 17:40:50 -08:00
Aren Patel 7d60f153a2 Added test (serialization, deserialization) for the []string attr feature. 2017-02-03 15:18:58 -08:00
Lucius Humm 9d919b42a6 Add MarshalManyPayloadWithoutIncluded (#56)
* fix spelling in documentation

* add MarshalManyPayloadWithoutIncluded

does the same as `MarshalOnePayloadWithoutIncluded` but for
MarshalManyPayload

* Refactored MarshalManyPayloadWithoutIncluded to use the MarshalMany func
2017-01-24 14:53:31 -08:00
Kyle Truscott 46a5b96356 Add support for 'links' via optional interfaces (#57)
* Implement `links` via optional interfaces

* Updating example app to include links

* Update readme with links information

* Exclude a slice relationship only if the slice is empty AND there are no defined links

* Remove `Link` in favor of vanilla `map[string]interface{}`. More flexible for different allowed links spec implementations.

* Update app.go with correct Links methods

* Use LinksObject and LinkObject types along with type assertion to provide errors when marshaling an invalid links JSON API object.

* Renamed LinksObject Links and LinkObject Link

* Added back the relationship link post merge.

* Renamed the JSON* Linkable functions JSONAPI* such that when a library user implements the interface it is clear the functions are used for JSON API as opposed to JSON

* Example cleanup.

* Refactor the example to use constants from jsonapi and http.
2017-01-20 17:55:59 -08:00
Aren Patel 2cb19b89ed Skimata's null relationships + fixes (#62)
* Add support to nullify relationship; http://jsonapi.org/format/#document-resource-object-linkage

* Fixed: [null] is not valid as an empty relationship.

* add support for 'omitempty' on relationships; default behavior of marshalling empty/nil relations (i.e. w/o 'omitempty' tag) marshals with null data relation

* cleanup whitespace

* Added go 1.7 to test versions; fixed the marshaling of empty relations to return an empty array rather than a null/nil. Added a more robust test case for the marshaling of non omitted relations.

* Cleanup.

* Added a comment to UnmarshalMany

* Document the ‘omitempty’ annotation on a relation.

* Add common JSON API values as exported jsonapi pkg constants.
2017-01-20 16:13:04 -08:00
Aren Patel 925ebf2136 Added support for string, int(8,16,32,64), uint(8,16,32,64) and each … (#51)
* Added support for string, int(8,16,32,64), uint(8,16,32,64) and each of their ptr types as acceptable to use for the ID field.

* No longer declaring a new idErr var; also eliminate the switch within a switch - if the ID field was a string or *string it will continue. Added a couple extra tests.
2016-09-22 15:02:30 -07:00
Geoff Garside b6c6609ff2 Add support for iso8601 struct tag argument (#47)
* Add support for iso8601 struct tag.

Currently only unix timestamps are supported for serialising time.Time objects. The JSON.API specification doesn't make a specific requirement on time serialisation format, though it does make a recommendation for using ISO8601.

This adds support for an additional struct tag `iso8601` which controls serialisation and deserialisation using the ISO8601 timestamp format.

* Update doc.go with information regarding iso8601 and omitempty tag arguments.
2016-09-22 13:58:07 -07:00
Aren Patel a1fa2c84a0 Feature/marshal many interface (#42)
* add support for direct use of slice of struct pointers for MarshalMany

* Added a test to ensure that whether MarshalManyPayload is called with a []interface{} or []*Struct it will produce the same desired result.

* Added a test to show how the new error type may be returned.

* Ensure the outside accessible Errs have comments.

* Page char width cleanup. Addressed warnings about duplicated "client-id" definition; using the const.
2016-09-12 22:12:42 -07:00
Aren Patel a70d58d3c8 Support pointers as attrs (#40)
* add support to unmarshal attributes to struct field that are ptr types

* Spacing, addressed all the linter warnings, comments to describe errors, cleanup, left a TODO note to resolve the Error messaging.
2016-07-22 18:34:38 -07:00
Aren Patel de4994e265 Feature/omitempty (#35)
* Implemented a failing test demonstrating the intended behaviour of the omitempty annotation.

* Updated the failing test to ensure that unset field without the "omitempty" annotation are not inadvertently omitted.

* Working implementation of the "omitempty" annotation for fields that are of any type.

* Update the readme to include a brief description of how to use the `omitempty` in a attr field.

* Update the json example also using a uint for type variety.
2016-07-16 08:24:21 -07:00
Sam Woodard 3b09fe9cb9 fix the build 2016-07-15 13:40:23 -07:00
Sam Woodard 81169d52b6 Merge pull request #32 from lyoung-uber/id
Update to reflect official Golang naming specifications
2016-07-15 13:32:39 -07:00
Aren Patel 0c87c2c473 Added the MarshalOnePayloadWithoutIncluded method for marshaling sing… (#34)
* Added the MarshalOnePayloadWithoutIncluded method for marshaling single objects and their relations without actually populating the "included" key with the full related object.

* Completed method description.

* Added a test to ensure that the library is capable of Unmarshmaling a payload where the One object in the payload had relationships but did not include them via "included"
2016-07-13 18:32:04 -07:00
Luke Young 57819f3b34 Follow Golang naming specifications 2016-07-05 20:32:15 -05:00
Sam Woodard d9645f7f7e major code simplification while making client ids work 2015-09-17 15:55:53 -07:00
Sam Woodard 10e0987b5d start supporting client ids 2015-09-10 15:55:51 -07:00
Sam Woodard 23302de79c paniced before when added Blog field to Post 2015-07-20 16:10:52 -07:00
Sam Woodard 4216780137 yay! finally figured out how to accept []interface{} 2015-07-12 11:45:03 -07:00
Sam Woodard 8f7c63b9c4 change interface of MarshalManyPayload to include reflect.Value for models 2015-07-12 11:37:31 -07:00
Sam Woodard aa2b010be5 fix unique included array algorithm 2015-07-12 08:46:30 -07:00
Sam Woodard ca0304f527 bug fix: don't forget some included nodes 2015-07-12 07:42:52 -07:00
Sam Woodard ffcbb660c3 readme work and an example app 2015-07-10 13:50:51 -07:00
Sam Woodard 0becfab81d remove 'JsonApi' everywhere, since we're already in a pkg 2015-07-10 09:07:12 -07:00
Sam Woodard 5fc25e655a in marshal methods, write json directly to io.Writer 2015-07-10 08:57:27 -07:00
Sam Woodard db9617ef6f omit zero times from the response 2015-07-09 12:07:33 -07:00
Sam Woodard 7430fd0b0c dry off, error if tag does not contain two arguments 2015-07-08 11:49:36 -07:00
Sam Woodard 8de6c952ef test request relationships, nested relationships 2015-07-08 09:35:20 -07:00
Sam Woodard 81bf23f93f support marshalling a list of models 2015-07-07 09:52:38 -07:00
Sam Woodard 0525400acb fix relationships--add data--to comply w spec 2015-07-06 17:04:26 -07:00
Sam Woodard f4c5ee491c switch to using unix timestamps in payloads 2015-07-06 14:35:17 -07:00
Sam Woodard 8be7afb2fe deserialize request id and attrs, including parsing time 2015-07-06 13:40:43 -07:00
Sam Woodard 00a581297a rename method, remove debug code 2015-07-06 12:06:12 -07:00
Sam Woodard d45d528865 add assertion that there are two posts 2015-07-06 12:00:17 -07:00
Sam Woodard 68210ff3ec rename struct, add test for relationships 2015-07-06 11:57:20 -07:00
Sam Woodard 65952bdedd support use of structs to pointers 2015-07-06 10:38:42 -07:00
Sam Woodard f8d5fbba3d rename files, only initialize included if there are relationships 2015-07-06 09:24:35 -07:00