Commit Graph

485 Commits

Author SHA1 Message Date
João Moura
1ea5608e78 updating tests to match new adapters structure 2015-06-15 13:39:36 -03:00
João Moura
2e46507971 avoiding nil cases when dynamically creating a class 2015-06-15 02:50:06 -03:00
João Moura
8e1214b4c5 force to use flattenJson when dealing with ArraySerializer 2015-06-15 02:48:39 -03:00
João Moura
b2f1947d4a removing unseless root method 2015-06-14 17:24:48 -03:00
João Moura
2bf91a0c0e updating adapters to follow new root logic 2015-06-14 03:25:20 -03:00
João Moura
a0753cb0bc autoloading new flatten son adapter 2015-06-14 03:25:00 -03:00
João Moura
1c3a180a20 disable root as flag option 2015-06-13 15:48:33 -03:00
João Moura
c8fcb60a5d addung fragment_cache method to Adapter::Json 2015-06-13 15:48:33 -03:00
João Moura
5932da64ef creating flatten_json adapter 2015-06-13 15:48:33 -03:00
João Moura
37114e9d5b removing unnecessary root parameter on fragment cache 2015-06-13 15:48:33 -03:00
Lachlan Sylvester
97e82c3eb7 use model name to determine the type 2015-06-13 19:45:46 +10:00
João Moura
de23501995 Merge pull request #949 from edwardloveall/el-870-fix
Don't pass serializer option to associated serializers
2015-06-13 03:01:25 -03:00
João Moura
6251b90d25 Merge pull request #902 from cristianbica/serializer_file_digest
Added serializer file digest to the cache_key
2015-06-12 18:56:43 -03:00
Santiago Pastorino
4752e6723a Make resource generator invoke serializer generator 2015-06-10 20:45:33 -03:00
Edward Loveall
0f0ef2baf5 Don't pass serializer option to associated serializers
Fixes #870

Commit af81a40 introduced passing a serializer's 'options'
along to its associated model serializers.

Thus, an explicit 'each_serializer' passed to render for a
singular resource would be passed on as the implicit 'serializer'
for its associations.

With @bf4
2015-06-10 18:20:34 -04:00
Chris Branson
d34bba07b9 Ensure the adapters honor a custom root option and include meta when required 2015-06-04 17:33:41 +01:00
João Moura
a40df8fd3d reverting PR #909 and adding json api usage advise on readme 2015-05-27 18:35:00 -03:00
João Moura
12adb2e6d4 Merge pull request #924 from navinpeiris/fragment-cache
Avoid unecessary calls to attribute methods when fragment caching
2015-05-27 14:55:31 -03:00
Navin Peiris
e0947fcbd4 Fixing issue where fragment cache calls attribute methods multiple times, even when they are supposed to be cached 2015-05-22 00:40:22 +05:30
Benedikt Deicke
4f576a1463 Adjusts JsonApi adapter to serialize relationships in a nested relationships hash 2015-05-21 16:35:35 +02:00
Benedikt Deicke
ca41901fb8 Adjusts JsonApi adapter to serialize attributes in a nested attributes hash 2015-05-21 16:23:01 +02:00
Guillermo Iguaran
f7fb4dbb98 Merge pull request #909 from joaomdmoura/json-api-default
Defining Json-API Adapter as Default
2015-05-20 20:50:19 -05:00
groyoh
5393e5d235 Prevent possible duplicated attributes
Calling ActiveModel::Serializer.attributes or ActiveModel::Serializer.attribute
methods multiple times won't create duplicated attributes anymore.
2015-05-18 22:42:10 +02:00
João Moura
d981ee5106 Merge pull request #880 from groyoh/serializer-inheritance
Inabling subclasses serializers to inherit attributes
2015-05-18 11:34:10 -03:00
groyoh
a794a06fa5 Fixed #911 2015-05-17 22:47:44 +02:00
João Moura
2c9c36e21f adding json_api as default adapter 2015-05-10 03:58:18 -03:00
João Moura
46ae776175 Merge pull request #897 from imanel/patch-1
Allow to define custom serializer for given class
2015-05-10 03:28:14 -03:00
Cristian Bica
7a62d31777 Added serializer file digest to the cache_key
Fixes #901
2015-05-06 08:37:18 +03:00
Bernard Potocki
c91b649504 Allow to define custom serializer for given class by defining #serializer_class method in serialized object's class. Resolves #515. 2015-05-03 17:47:52 +02:00
groyoh
5dcdfaaef3 Fixed a bug that appeared when json adapter serialize a nil association 2015-04-28 22:20:21 +02:00
Yohan Robert
02ffff599f Serializers now inherit attributes 2015-04-23 13:25:36 +02:00
Alexandre de Oliveira
1577969cb7 Bumps to 0.10.0.rc1 2015-04-22 03:06:06 -03:00
Alexandre de Oliveira
168c36fc7d Merge pull request #810 from joaomdmoura/fragment-cache
Adding Fragment Cache to AMS
2015-04-21 17:57:55 -03:00
João Moura
792fb8a905 Adding Fragment Cache to AMS
It's an upgrade based on the new Cache implementation #693.
It allows to use the Rails conventions to cache
specific attributes or associations.
It's based on the Cache Composition implementation.
2015-04-05 18:19:57 -03:00
Yohan Robert
6a0564a241 Fixed a bug that appears when a nil association is included 2015-04-03 12:50:05 +02:00
Mateo Murphy
9aebc6cb11 Fix bugs with included resources
Make sure they're cached along with the including resource and remove duplicates
2015-03-24 20:07:25 -04:00
Mateo Murphy
90c7005c79 Don't store the root as we don't need it elsewhere 2015-03-23 12:38:15 -04:00
Mateo Murphy
294d06624f Remove unused embed option 2015-03-22 20:43:56 -04:00
Mateo Murphy
33f3a88ba0 Implement included and id and type as per spec 2015-03-22 20:43:56 -04:00
Mateo Murphy
d82c599c68 Always use plural for linked types
Although spec is agnostic about inflection rules, examples given are plural
2015-03-22 20:43:11 -04:00
Mateo Murphy
0f55f21266 Update format of links 2015-03-22 20:41:20 -04:00
Mateo Murphy
83c2854094 Rename add_linked to add_included
Better reflect generated output
2015-03-22 20:38:30 -04:00
Mateo Murphy
da86747a3e Use symbol for root in jsonapi, fix tests 2015-03-22 20:38:29 -04:00
Mateo Murphy
3ba4386bda Root is always "data" for jsonapi 2015-03-22 20:37:25 -04:00
Guillermo Iguaran
b68d7f4826 Merge pull request #852 from mateomurphy/serializer-options-fix
Fix options merge order in `each_association`
2015-03-22 18:54:07 -05:00
Mateo Murphy
03372ea61d Fix options merge order in each_association
Custom association serializers were getting clobbered when using an each serializer.
2015-03-20 00:22:46 -04:00
Mateo Murphy
ca985e1afd Use association value for determining serializer used
Ensures overridden association value works when orignal association does not return a result.
2015-03-19 23:28:00 -04:00
Alexandre de Oliveira
0446a9714d Merge pull request #833 from lsylvester/cache-serializers-for-class
Cache serializers for class
2015-03-13 19:55:49 -03:00
Alexandre de Oliveira
af81a403e3 Passes serializer options down into associations 2015-03-11 16:37:14 -03:00
Alexandre de Oliveira
bcd3844e58 Stores passed in options in array serializers
This is supported in single serializers. This adds support for passing
options from array serializers to each serializer in it.
2015-03-11 16:14:09 -03:00
Guillermo Iguaran
73aeba4177 Merge pull request #836 from rails-api/stores-passed-in-options
Makes passed in options accessible inside serializers
2015-03-11 13:21:36 -05:00
Alexandre de Oliveira
48650ecf7e Makes passed in options accessible inside serializers
In some cases, we want to pass arguments from the controller and we want
to serializer a resource according to that. This allows serializers to
use the `options` method to retrieve whatever was passed in via
arguments.
2015-03-11 14:53:57 -03:00
Robbie Pitts
ad5677c4ec Make json api adapter 'include' option accept an array, accommodate comma delimited string for legacy reasons 2015-03-11 10:01:44 -04:00
Lachlan Sylvester
980d1ced81 add explicit thread_safe dependency 2015-03-11 11:15:17 +11:00
lsylvester
2b0c5ee084 clear the cache between requests 2015-03-11 09:53:47 +11:00
lsylvester
3fb560908e cache the serializers for a class 2015-03-11 09:53:47 +11:00
Guillermo Iguaran
d55f3b33b4 Merge pull request #811 from mateomurphy/scope
Reimplement serialization scope and scope_name
2015-03-10 10:16:06 -05:00
Gary Gordon
651b99f22e Support has_one to be compatible with 0.8.x
Update README and CHANGELOG
2015-03-01 13:47:34 -05:00
Will Jordan
f2ee544a88 Fix explicit serializer for associations 2015-02-24 16:01:43 -08:00
Mateo Murphy
2962f3f64e Reimplement serialization scope and scope_name 2015-02-09 11:24:41 -05:00
Joao Moura
8a432ad2b3 Adding cache support to version 0.10.0
It's a new implementation of cache based on ActiveSupport::Cache.
The implementation abstracts the cache in Adapter class on a
private method called cached_object, this method is intended
to be used on Adapters inside serializable_hash method in order
to cache each instance of the object that will be returned by
the serializer.

Some of its features are:
- A different syntax. (no longer need the cache_key method).
- An options argument that have the same arguments of ActiveSupport::Cache::Store, plus a key option that will be the prefix of the object cache on a pattern "#{key}-#{object.id}".
- It cache the objects individually and not the whole Serializer return, re-using it in different requests (as a show and a index method for example.)
2015-02-02 14:53:34 -02:00
Alexandre de Oliveira
e47231cdc8 Support overriding association methods
You can override associations to define custom scope on them.
2015-01-29 16:52:18 -02:00
Nicolás Hock Isaza
1d7d9fd6aa Fix nested include attributes
When the requests asked for a nested attribute in the `include` and it's
missing or empty, don't break because the type of the object can't be
determined.

If the request is for a collection and none of the elements has the
attribute, it will not be added to the `linked` key, similar to what
happens with simple includes.
2015-01-13 14:49:58 -05:00
Robbie Pitts
90023b1af7 Make linked resource type names consistent with root names 2015-01-11 14:24:01 -05:00
Alexandre de Oliveira
6eb75af96b Merge pull request #696 from ggordon/explicit_serializer
Explicitly set serializer for associations
2015-01-06 09:57:07 -02:00
Alexandre de Oliveira
87f817943a Merge pull request #700 from arenoir/sparse_fieldsets
sparse fieldsets
2015-01-06 09:38:51 -02:00
Alexandre de Oliveira
bd27da1b76 Adds support for meta attribute
Currently, 0.10.0.pre doesn't support `meta` option in `render`. This
way, there's no way to support features such as pagination. `0.9` had
this feature in place.

This adds support for it, as well as fixes small things in README.md.

This won't support `meta` in array responses because arrays don't have
keys, obviously. Also, the response should have a `root` key, otherwise
no `meta` will be included.

In some cases, for example using JsonApi, ArraySerializer will result in
a response with a `root`. In that case, `meta` will be included.
2015-01-05 02:56:33 -02:00
Joakim Ekström
9768da7a70 Missing a word 2014-12-04 17:05:10 +01:00
Aaron Renoir
2ed52f96a6 merge upstream update fieldset 2014-11-13 17:45:47 -08:00
Alexandre de Oliveira
2f5626d616 Fixes nested has_many links in JSONAPI
When linked resource had has_many links, all of them would use the
association from the first resource, causing all of the items to build
`links` with the same associations.

This fixes it by iterating over the serializers, not just the
attributes array.
2014-11-13 16:38:47 -02:00
Gary Gordon
5560b49098 Allow overriding the adapter with render option
Make it easy to use multiple adapters in an app.

use "adapter: false" to not use ams

make a test override config.adapter
2014-11-13 10:23:19 -05:00
Gary Gordon
9f9715801a Explicitly set serializer for associations
Document specifying serializer for assocaition
2014-11-13 10:17:59 -05:00
Gary Gordon
08716d20c9 Rename attribute with :key (0.8.x compatibility) 2014-11-13 08:03:22 -05:00
Alexandre de Oliveira
ac37570bff Merge pull request #728 from rails-api/linked-resources-use-type-as-key
Use type as key for linked resources
2014-11-13 10:53:59 -02:00
Alexandre de Oliveira
4af02021ac Merge pull request #703 from ggordon/specify_serializer_from_controller
Support serializer and each_serializer options in renderer
2014-11-12 20:09:51 -02:00
Alexandre de Oliveira
7333f20285 Use type as key for linked resources
If type is `author` but the association is called `writer`, the linked
resource key should be called `authors`, e.g

    {
      ...
      linked: {
        authors: [{
          ...
        }]
      }
      ...
    }
2014-11-12 20:03:25 -02:00
Alexandre de Oliveira
91b3fba509 Includes links inside of linked resources
According to
http://jsonapi.org/format/#document-structure-resource-objects,

> Resource objects have the same internal structure, regardless of
> whether they represent primary or linked resources.

And then
http://jsonapi.org/format/#document-structure-resource-object-attributes,

> There are four reserved keys in resource objects:
>
> "id"
> "type"
> "href"
> "links"

This commits includes `links` inside of linked resources.
2014-11-12 15:44:54 -02:00
Alexandre de Oliveira
971f501e55 Bugfix: include nested has_many association
Currently, doing `include: author.bio` would work correctly, but not for
has_many associations such as `include: author.roles`. This fixes it.

The problem was basically that we were not handling arrays for has_many linked,
as happens for ArraySerializers.
2014-11-11 14:35:00 -02:00
Gary Gordon
d97b2f5005 Fix infinite recursion
The method for testing whether to include an association was causing
an infinite loop when two models referenced each other.
2014-11-07 10:03:31 -05:00
Aaron Renoir
fc1562c04a add fields to adapter initialize function, pull in master, add tests using includes with fields 2014-11-05 18:10:37 -08:00
Aaron Renoir
c9c58e31e5 merge upstream/master 2014-11-05 16:47:15 -08:00
Gary Gordon
c84430cdad Support serializer and each_serializer in render json 2014-11-05 15:10:14 -05:00
Alexandre de Oliveira
95d122046d Merge pull request #692 from ggordon/linked_for_jsonapi_collection
Include 'linked' member for json-api collections
2014-11-04 21:59:15 -02:00
Guillermo Iguaran
f5411f045f Define as_json instead of to_json 2014-11-03 17:38:58 -05:00
Gary Gordon
d5bae0c2f0 Include 'linked' member for json-api collections
The options passed to the render are partitioned into adapter options
and serializer options. 'include' and 'root' are sent to the adapter,
not sure what options would go directly to serializer, but leaving this
in until I understand that better.
2014-11-03 17:13:55 -05:00
Guillermo Iguaran
3bba334cf8 JSON-API: Don't include linked section if associations are empty 2014-10-31 14:30:59 -05:00
Guillermo Iguaran
2d21a8e83f Add type when association name is different than objects type 2014-10-31 01:54:13 -05:00
Guillermo Iguaran
19ac139880 Handle correctly null associations
null belongs_to associations are now serialized as nil instead
of raise an error during serialization.
2014-10-30 09:35:05 -05:00
Alexandre de Oliveira
baf3db1365 Merge pull request #691 from jacob-s-son/fix-embed-option-for-associations
Fix embed option for associations
2014-10-29 18:41:59 -02:00
Aaron Renoir
be54e0bc4f remove serializer dependency from fieldset 2014-10-27 15:24:19 -07:00
Aaron Renoir
39bee48ae6 implement sparse fieldsets http://jsonapi.org/format/#fetching-sparse-fieldsets 2014-10-26 13:04:14 -07:00
Edgars Jekabsons
f9b7c74235 Renamed embed test to have "test" suffix
Fixed reference to association options
2014-10-22 15:30:44 +03:00
Guillermo Iguaran
5f198667be Fix support for custom root in JSON-API adapter 2014-10-22 04:01:12 -03:00
Guillermo Iguaran
7c030314cb Serialize ids as strings in JSON-API adapter 2014-10-15 18:56:49 -05:00
Guillermo Iguaran
557b56a50e Refactor adapters to implement support for array serialization 2014-10-15 17:35:50 -05:00
Guillermo Iguaran
3fa1116035 Include root by default in JSON-API serializers 2014-10-14 11:33:06 -05:00
Steve Klabnik
099f773a65 Merge pull request #625 from JordanFaust/feature/url-dsl
Add DSL for urls
2014-10-14 11:47:14 -04:00
Steve Klabnik
410eacc30e Merge pull request #677 from ride/embed-ids-option
Add support for embed: :ids option for in associations
2014-10-14 11:39:09 -04:00
Steve Klabnik
341cca7d8a Merge pull request #681 from quainjn/inherited-serializer
Check superclasses for Serializers
2014-10-14 11:36:02 -04:00
Jake Quain
c0166f3026 Check superclasses for Serializers 2014-10-13 17:39:54 -06:00
NullVoxPopuli
7338b62b02 add support for root keys
remove debugging gem

fix white space
2014-10-13 13:27:09 -04:00
Guillermo Iguaran
188336522f Add support for embed: :ids option for in associations 2014-10-10 16:48:55 -05:00
Jordan Faust
ad0859e262 Add DSL for urls 2014-09-01 13:44:22 -05:00
Tema Bolshakov and Dmitry Myaskovskiy
71a43a432a Pass options to associations 2014-08-29 20:16:11 +04:00
Tema Bolshakov and Dmitry Myaskovskiy
258b5953e2 clean up code 2014-08-29 19:47:46 +04:00
Tema Bolshakov and Dmitry Myaskovskiy
45a47a1c4d safe_constantize instead of rescue 2014-08-29 19:47:29 +04:00
Tema Bolshakov and Dmitry Myaskovskiy
ff37b6260d test for json adapter 2014-08-29 19:40:01 +04:00
Tema Bolshakov
77847d7c02 User String#constantize instead of Object.const_get 2014-08-29 13:48:06 +04:00
Tema Bolshakov
139609355f Object.const_get differs on 2.0 and 2.1.2. So rescue from NameError 2014-08-29 13:01:01 +04:00
Tema Bolshakov
b4a313e6d8 Merge remote-tracking branch 'upstream/master' into feature/adapter 2014-08-29 12:55:20 +04:00
Tema Bolshakov
e45e5a82b7 Remove 'Adapter' suffix from adapters since they are in Adapter:: namespace 2014-08-29 11:40:56 +04:00
Tema Bolshakov
6bb4501f67 JsonApi adapter: serialize association 2014-08-29 11:37:27 +04:00
Tema Bolshakov
6496b08464 rename simple adapter to json 2014-08-29 11:01:39 +04:00
Tema Bolshakov
3dd4928279 * Do not ingerit array serializer from Serializer
* Tests for ArraySerializer
2014-08-29 10:58:14 +04:00
Tema Bolshakov
85ff8123fd Include Enumerable to ArraySerializer 2014-08-28 23:03:28 +04:00
Tema Bolshakov
c1fdfc1cdc First try to implement ArraySerializer 2014-08-28 19:16:24 +04:00
Tema Bolshakov
1b718b6d48 fix spelling 2014-08-28 18:56:22 +04:00
Tema Bolshakov
597765e3b0 start implementing json_api adapter to understand how associations should work 2014-08-28 18:55:27 +04:00
Tema Bolshakov
466c7d5dd8 Wrap association into Serializers 2014-08-28 18:46:19 +04:00
Tony Pitale
dee2f1969e Rails does not support const_defined? in development mode;
Use const_get instead, and rescue NameError
2014-08-27 14:42:41 -04:00
Tema Bolshakov
fa4ee9d645 Add Serializer#associations 2014-08-27 11:21:01 +04:00
Tema Bolshakov
b1f7a5ccda Move Adapter.adapter_for to Serializer.adapter 2014-08-27 11:02:39 +04:00
Tema Bolshakov
a6f9dae560 Concrete adapter should provide serializable hash for Adapter#to_json method 2014-08-27 09:33:14 +04:00
Tema Bolshakov
7b7d4d8907 Test for SimpleAdapter#serializable_hash 2014-08-27 09:15:07 +04:00
Tema Bolshakov
553c470e10 Serializer should be available wiithing adapter to inspect attributes and assotions 2014-08-27 09:09:01 +04:00
Tema Bolshakov
6cc4fa0258 * Configure adapter using ActiveModel::Serializer.config.adapter
* Get adapter instance using ActiveModel::Serializer::Adapter.adapter_for(serializer)
2014-08-27 09:05:28 +04:00
Tema Bolshakov
56725b45a6 Add NullAdapater 2014-08-27 08:41:45 +04:00
Tema Bolshakov
f00fe5595d * Rename NullAdapter to SimpleAdapter
* Introduce abstract Adapter class
* Organaze test structure to match convemtions
2014-08-27 08:21:08 +04:00
Tema Bolshakov
d39a3e0aec serializer_for Array 2014-08-26 12:50:47 +04:00
Jordan Faust
00f7cab864 Add DSL for assocations 2014-08-23 15:20:48 -05:00
Steve Klabnik
86fc7d7227 bump version to 0.10.0.pre 2014-08-22 17:02:05 -04:00
Steve Klabnik
886ada9151 don't hold on to serializer
this is an optimization for now, this may have to change later.
2014-07-09 23:05:41 -04:00
Steve Klabnik
970b542549 Implement basic rendering
Woo actioncontroller
2014-07-09 17:52:31 -04:00
Steve Klabnik
1ea83c8bee Implement a NullAdapter.
This adapter basically doesn't do anything, and just serializes
the attributes into plain old JSON.
2014-07-09 16:51:30 -04:00
Steve Klabnik
729a823868 Getting started: attributes.
Super super basic collection of attributes. Nothing fancy.
2014-07-09 16:16:39 -04:00