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.
This commit is contained in:
Alexandre de Oliveira
2015-01-05 01:00:03 -02:00
parent 282de21984
commit bd27da1b76
7 changed files with 170 additions and 15 deletions

View File

@@ -18,7 +18,8 @@ module ActiveModel
end
def as_json(options = {})
serializable_hash(options)
hash = serializable_hash(options)
include_meta(hash)
end
def self.create(resource, options = {})
@@ -30,6 +31,25 @@ module ActiveModel
def self.adapter_class(adapter)
"ActiveModel::Serializer::Adapter::#{adapter.to_s.classify}".safe_constantize
end
private
def meta
serializer.meta if serializer.respond_to?(:meta)
end
def meta_key
serializer.meta_key || "meta"
end
def root
serializer.json_key
end
def include_meta(json)
json[meta_key] = meta if meta && root
json
end
end
end
end