Module: JsonapiCompliable::Base
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/jsonapi_compliable/base.rb
Overview
Provides main interface to jsonapi_compliable
This gets mixed in to a “context” class, such as a Rails controller.
Class Method Summary collapse
-
.jsonapi(foo = 'bar', resource: nil, &blk) ⇒ void
Define your JSONAPI configuration.
Instance Method Summary collapse
-
#default_jsonapi_render_options ⇒ Hash
Define a hash that will be automatically merged into your render_jsonapi call.
- #deserialized_params ⇒ Deserializer
-
#jsonapi_create ⇒ Util::ValidationResponse
Create the resource model and process all nested relationships via the serialized parameters.
-
#jsonapi_resource ⇒ Resource
Returns an instance of the associated Resource.
-
#jsonapi_scope(scope, opts = {}) ⇒ Scope
Use when direct, low-level access to the scope is required.
-
#jsonapi_update ⇒ Util::ValidationResponse
Update the resource model and process all nested relationships via the serialized parameters.
-
#query ⇒ Query
Instantiates the relevant Query object.
-
#query_hash ⇒ Hash
The normalized query hash for only the current resource.
-
#render_jsonapi(scope, opts = {}) ⇒ Object
Similar to render :json or render :jsonapi.
-
#wrap_context ⇒ Object
private
Tracks the current context so we can refer to it within any random object.
Class Method Details
.jsonapi(foo = 'bar', resource: nil, &blk) ⇒ void
This method returns an undefined value.
Define your JSONAPI configuration
44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/jsonapi_compliable/base.rb', line 44 def jsonapi(foo = 'bar', resource: nil, &blk) if resource self._jsonapi_compliable = resource else if !self._jsonapi_compliable self._jsonapi_compliable = Class.new(JsonapiCompliable::Resource) end end self._jsonapi_compliable.class_eval(&blk) if blk end |
Instance Method Details
#default_jsonapi_render_options ⇒ Hash
Define a hash that will be automatically merged into your render_jsonapi call
238 239 240 241 |
# File 'lib/jsonapi_compliable/base.rb', line 238 def {}.tap do || end end |
#deserialized_params ⇒ Deserializer
119 120 121 |
# File 'lib/jsonapi_compliable/base.rb', line 119 def deserialized_params @deserialized_params ||= JsonapiCompliable::Deserializer.new(params, request.env) end |
#jsonapi_create ⇒ Util::ValidationResponse
Create the resource model and process all nested relationships via the serialized parameters. Any error, including validation errors, will roll back the transaction.
147 148 149 150 151 152 153 154 |
# File 'lib/jsonapi_compliable/base.rb', line 147 def jsonapi_create _persist do jsonapi_resource.persist_with_relationships \ deserialized_params., deserialized_params.attributes, deserialized_params.relationships end end |
#jsonapi_resource ⇒ Resource
Returns an instance of the associated Resource
In other words, if you configured your controller as:
jsonapi resource: MyResource
This returns MyResource.new
66 67 68 |
# File 'lib/jsonapi_compliable/base.rb', line 66 def jsonapi_resource @jsonapi_resource ||= self.class._jsonapi_compliable.new end |
#jsonapi_scope(scope, opts = {}) ⇒ Scope
Use when direct, low-level access to the scope is required.
113 114 115 |
# File 'lib/jsonapi_compliable/base.rb', line 113 def jsonapi_scope(scope, opts = {}) jsonapi_resource.build_scope(scope, query, opts) end |
#jsonapi_update ⇒ Util::ValidationResponse
Update the resource model and process all nested relationships via the serialized parameters. Any error, including validation errors, will roll back the transaction.
178 179 180 181 182 183 184 185 |
# File 'lib/jsonapi_compliable/base.rb', line 178 def jsonapi_update _persist do jsonapi_resource.persist_with_relationships \ deserialized_params., deserialized_params.attributes, deserialized_params.relationships end end |
#query ⇒ Query
Instantiates the relevant Query object
74 75 76 |
# File 'lib/jsonapi_compliable/base.rb', line 74 def query @query ||= Query.new(jsonapi_resource, params) end |
#query_hash ⇒ Hash
Returns the normalized query hash for only the current resource
80 81 82 |
# File 'lib/jsonapi_compliable/base.rb', line 80 def query_hash @query_hash ||= query.to_hash[jsonapi_resource.type] end |
#render_jsonapi(scope, opts = {}) ⇒ Object
Similar to render :json or render :jsonapi
By default, this will “build” the scope via #jsonapi_scope
. To
avoid this, pass scope: false
This builds relevant options and sends them to JSONAPI::Serializable::Renderer.renderfrom jsonapi-rb
218 219 220 221 222 223 224 225 |
# File 'lib/jsonapi_compliable/base.rb', line 218 def render_jsonapi(scope, opts = {}) scope = jsonapi_scope(scope) unless opts[:scope] == false || scope.is_a?(JsonapiCompliable::Scope) opts = .merge(opts) opts = Util::RenderOptions.generate(scope, query_hash, opts) opts[:expose][:context] = self opts[:include] = deserialized_params.include_directive if force_includes? perform_render_jsonapi(opts) end |
#wrap_context ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Tracks the current context so we can refer to it within any random object. Helpful for easy-access to things like the current user.
90 91 92 93 94 |
# File 'lib/jsonapi_compliable/base.rb', line 90 def wrap_context jsonapi_resource.with_context(self, action_name.to_sym) do yield end end |