Commit Graph

133 Commits

Author SHA1 Message Date
Marc Abramowitz 71d291e52c README.md: Fix typo in "serializer" (#65) 2017-02-03 12:16:52 -08:00
Sam Woodard 6e86cbdd0d Merge pull request #38 from thedodd/handle-type-errors
Handle type errors during unmarshalNode routine.
2017-01-31 12:35:06 -08:00
Anthony Dodd 1e69609202
Revert use of new error system in `request.go`.
Update tests to account for generic `errors.New` use.
2017-01-31 13:36:56 -06:00
Anthony Dodd 5836d603a3
Handle type errors properly during unmarshal node.
During the `unmarshalNode` routine, various type errors may come up.
Currently they are being swallowed by the error handling mechanism.
Rework that system so that errors are actually exposed and can be
corrected without having to dive into the code.

Handle time.Time & *time.Time type errors.

Add test for unmarshalling ptr with bad type.

Final `attr` type check catch-all & tests.

Implement system for JSON API compatible errors.

This commit creates a series of structs and interfaces for representing
JSON API compatible error objects. It includes a method for emitting a
payload of error objects (according to the JSON API spec). Its algorithm
is based upon a series of interfaces which define incremental levels of
support for errors which are JSON API compatible.

Use new error type for unmarshalling errors.

Update some docs & the privacy of a func.

Don't be prescriptive on `meta`. Use map[string]interface{}.

Add a README section on errors &c.

Do not force inclusion of `title` & `detail` (use omitempty).

Update README & docs on use of pertient errors related types.

Update tests to account for these changes.

If error type is already *ErrorObject, return immediately.

Rm everything except for ErrorsPayload, ErrorObject & MarshalErrors.

Also update README & tests.

Remove a test fixture which is no longer needed.
2017-01-31 13:06:10 -06:00
Keiji Yoshida e126f9ab94 Fix newUUID (#70)
The checking `n` returned by `io.ReadFull()` is removed because `io.ReadFull()` returns n == len(buf) if and only if err == nil according to its document ( https://golang.org/pkg/io/#ReadFull ) and it's enough to check only `err`.
2017-01-30 13:51:41 -08:00
Mirek Petricek d550198212 use constants rather than strings in request.go (#71) 2017-01-30 13:14:01 -08:00
Keiji Yoshida a8d743e645 Remove an unused parameter (#69)
`relationName` parameter of `visitModelNodeRelationships` method is not used and removed.
2017-01-28 19:43:47 -08:00
Aren Patel 3ea9ec4904 Testing and Documentation for UnmarshalManyPayload (#66)
* Added a test for UnmarshalManyPayload

* Document UnmarshalManyPayload in the Readme

* Update the example app to have a UnmarshalManyPayload usage.

* DRY the UnmarshalManyPayload implementation.

* Add a test for grabbing the Links out of a ManyPayload
2017-01-26 15:25:13 -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
Aren Patel baa7beb3f7 Update the go versions 2017-01-20 21:36:58 -08:00
Aren Patel 15abc3066a Use constants for status codes, HTTP methods and JSON API media types in comments and readme 2017-01-20 18:06:44 -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 bb88592460 Simplify the MarshalMany implementation. For & range rather than for with int inc; etc. (#59) 2017-01-17 16:04:07 -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 dd46e31eb5 Updated: build status badge, the go get installation instruction to account for the repo move, readme examples use ID instead of Id (so that they would be linter compliant if copy/pasted). shwoodard/jsonapi => google/jsonapi (#41) 2016-07-22 18:31:33 -07:00
Sam Woodard b4fad2f2e6 Change to force travis to pick up config 2016-07-21 09:00:16 -07:00
Sam Woodard 2eeccd9649 Update License
Process to transfer ownership to google
2016-07-19 13:50:30 -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 5005a0cfae Add method passthrough to runtime 2016-05-25 09:14:49 -07:00
Sam Woodard a337a3bc9f update travis build versions 2016-04-10 05:06:41 -07:00
Sam Woodard ec72d597cc Merge pull request #30 from brandonbloom/messages
Improve ErrTypeMismatch error message
2016-04-09 05:34:35 -07:00
Brandon Bloom 5b0e148a11 Improve ErrTypeMismatch error message 2016-04-08 17:34:02 -07:00
Sam Woodard 564f8a809c Merge pull request #29 from morenoh149/patch-1
fix typo in example script
2016-03-30 07:23:18 -07:00
Harry Moreno 6c6ec44cd3 fix typo in example script 2016-03-27 14:44:52 -04:00
Sam Woodard ffd7d3c05d Merge pull request #26 from sharonjl/master
Added support for int64 and uint64 primary id types
2016-01-26 10:12:38 -08:00
Sam Woodard a2b98a0910 Merge pull request #24 from shwoodard/add-more-numerics
add support for more numeric types and pointers to
2016-01-12 10:05:49 -08:00
Sam Woodard e1b87012d8 add support for more numeric types and pointers to 2016-01-12 10:00:18 -08:00
Sharon Lourduraj 04bf04450b Added support for int64 and uint64 primary id types 2016-01-07 15:14:57 -05:00
Sam Woodard b2e454fb0a Merge pull request #23 from shwoodard/optimizations
optimizations, refactors
2016-01-05 14:14:39 -08:00
Sam Woodard d4c1f40f1d optimizations, refactors 2016-01-05 13:13:24 -08:00
Sam Woodard ae3568a7b2 Merge pull request #20 from shwoodard/string-array-values
fix with included and handle string array value
2015-10-28 10:15:22 -07:00
Sam Woodard d336c1b556 fix with included and handle string array value 2015-10-28 10:08:50 -07:00
Sam Woodard 00f3f5774e Merge pull request #19 from shwoodard/unmarshal-many
Add UnmarshalManyPayload
2015-10-27 09:33:41 -07:00
Sam Woodard 04da7d3cac Add UnmarshalManyPayload 2015-10-27 09:29:56 -07:00
Sam Woodard 53c7c4e5b5 Merge pull request #17 from shwoodard/nil-times
add support for pointers to time and if nil put null in json response
2015-10-27 09:26:49 -07:00
Sam Woodard 438e9b0626 add support for pointers to time and if nil put null in json response 2015-10-13 09:10:10 -07:00
Sam Woodard fd92bd51ba add a go for travis ci to build with 2015-10-12 15:46:56 -07:00
Sam Woodard 4eef9a091e Merge pull request #16 from shwoodard/client-ids
Client ids and refactor
2015-10-12 15:45:42 -07:00
Sam Woodard 509c75ed6b flag in the wrong the place 2015-10-12 15:41:05 -07:00
Sam Woodard 57cb7c9f3f Merge remote-tracking branch 'origin/master' into client-ids
* origin/master:
  Fix issue #10 to avoid panics with invalid JSON
2015-10-12 11:08:23 -07:00
Sam Woodard fb2e4b68ce fix nil pointer panic 2015-10-12 11:05:06 -07:00
Sam Woodard d9645f7f7e major code simplification while making client ids work 2015-09-17 15:55:53 -07:00