Module: JsonapiCompliable

Defined in:
lib/jsonapi_compliable/deserializable.rb,
lib/jsonapi_compliable.rb,
lib/jsonapi_compliable/dsl.rb,
lib/jsonapi_compliable/base.rb,
lib/jsonapi_compliable/errors.rb,
lib/jsonapi_compliable/version.rb,
lib/jsonapi_compliable/scope/base.rb,
lib/jsonapi_compliable/scope/sort.rb,
lib/jsonapi_compliable/scope/filter.rb,
lib/jsonapi_compliable/util/scoping.rb,
lib/jsonapi_compliable/scope/paginate.rb,
lib/jsonapi_compliable/scope/sideload.rb,
lib/jsonapi_compliable/scope/filterable.rb,
lib/jsonapi_compliable/util/field_params.rb,
lib/jsonapi_compliable/scope/extra_fields.rb,
lib/jsonapi_compliable/util/include_params.rb,
lib/jsonapi_compliable/scope/default_filter.rb

Overview

This will convert JSONAPI-compatible POST/PUT payloads into something Rails better understands. Example:

{ "data": { "type": "articles", "attributes": { "title": "the first article" }, "relationships": { "tags": { "data": [{ "type": "tags", "attributes": { "name": "One" } }, { "type": "tags", "attributes": { "name": "Two" } }] } } } }

Into:

{ article: { title: 'the first article', tags_attributes: [ { name: 'One' }, { name: 'Two' }, ] } }

Why we don't use AMS deserialization - AMS will:

  • not support relationship data
  • override foreign key incorrectly, ie post_id incorrectly becomes nil if post relation is nil, even if it is in the attributes payload

Usage:

In controller:

before_action :deserialize_jsonapi!, only: [:my_action]

Defined Under Namespace

Modules: Base, Deserializable, Errors, Scope, Util Classes: DSL

Constant Summary collapse

VERSION =
"0.3.4"

Class Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



24
25
26
27
28
29
# File 'lib/jsonapi_compliable.rb', line 24

def self.included(klass)
  klass.instance_eval do
    include Base
    include Deserializable
  end
end