jsmestad / jsonapi-consumer

Client framework for consuming JSONAPI services in Ruby
https://github.com/jsmestad/jsonapi-consumer
Apache License 2.0
94 stars 18 forks source link

Feature/persistence #17

Closed danelowe closed 9 years ago

danelowe commented 9 years ago

This is changing the way jsonapi-consumer decides if an object is persisted or not. It no longer checks for the existence of an ID attribute and instead sets flags when an object is loaded. I tried to draw inspiration from how ActiveRecord does it, but its a much simpler implementation.

The reasoning behind this change is that I read the JSONAPI spec as almost encouraging the use of client-supplied IDs. If jsonapi-consumer assumes that a new record with an ID is persisted, then the wrong actions would be taken.

I'm not completely happy with adding another parameter to the initialise method, but it seemed like the path of least resistance for now.

In the query classes, I've added methods that signify whether the query type is to be used for a new record or for an existing record (e.g. create vs update query). This I see as a pragmatic way of influencing how the path is built during the instantiation of the query.

To simulate a persisted object in a spec, one would pass false as the second parameter (new_record) when instantiating the object, e.g.

persisted_object = test_class.new({name: 'jsonapi.example', id: '1'}, false)