Skip to content

Efficiently render JSON API documents.

License

Notifications You must be signed in to change notification settings

jsonapi-rb/jsonapi-renderer

Repository files navigation

jsonapi-renderer

Ruby gem for rendering JSON API documents.

Status

Gem VersionBuild StatuscodecovGitter chat

Resources

Installation

# In Gemfilegem'jsonapi-renderer'

then

$ bundle 

or manually via

$ gem install jsonapi-renderer 

Usage

First, require the gem:

require'jsonapi/renderer'

Rendering resources

A resource here is any class that implements the following interface:

classResourceInterface# Returns the type of the resource.# @return [String]defjsonapi_type;end# Returns the id of the resource.# @return [String]defjsonapi_id;end# Returns a hash containing, for each included relationship, an array of the# resources to be included from that one.# @param included_relationships [Array<Symbol>] The keys of the relationships# to be included.# @return [Hash{Symbol => Array<#ResourceInterface>}]defjsonapi_related(included_relationships);end# Returns a JSON API-compliant representation of the resource as a hash.# @param options [Hash]# @option fields [Set<Symbol>, Nil] The requested fields, or nil.# @option include [Set<Symbol>] The requested relationships to# include (defaults to []).# @return [Hash]defas_jsonapi(options={});endend

Rendering a single resource

JSONAPI.render(data: resource,include: include_string,fields: fields_hash,meta: meta_hash,links: links_hash)

This returns a JSON API compliant hash representing the described document.

Rendering a collection of resources

JSONAPI.render(data: resources,include: include_string,fields: fields_hash,meta: meta_hash,links: links_hash)

This returns a JSON API compliant hash representing the described document.

Rendering a relationship

JSONAPI.render(data: resource,relationship: :posts,include: include_string,fields: fields_hash,meta: meta_hash,links: links_hash)

This returns a JSON API compliant hash representing the described document.

Rendering errors

JSONAPI.render_errors(errors: errors,meta: meta_hash,links: links_hash)

where errors is an array of objects implementing the as_jsonapi method, that returns a JSON API-compliant representation of the error.

This returns a JSON API compliant hash representing the described document.

Caching

The generated JSON fragments can be cached in any cache implementation supporting the fetch_multi method.

When using caching, the serializable resources must implement an additional jsonapi_cache_key method:

# Returns a cache key for the resource, parameterized by the `include` and# `fields` options.# @param options [Hash]# @option fields [Set<Symbol>, Nil] The requested fields, or nil.# @option include [Set<Symbol>] The requested relationships to# include (defaults to []).# @return [String]defjsonapi_cache_key(options={});end

The cache instance must be passed to the renderer as follows:

JSONAPI.render(data: resources,include: include_string,fields: fields_hash,cache: cache_instance)

License

jsonapi-renderer is released under the MIT License.

close