class SimpleJsonapi::Node::Base
Represents a node in the JSONAPI document. See {file:README.md} for more details.
{include:file:doc/node_hierarchy.md} @abstract @!attribute [r] root_node
@return [Node::Base]
@!attribute [r] serializer_inferrer
@return [SerializerInferrer]
@!attribute [r] serializer
@return [Serializer,ErrorSerializer]
@!attribute [r] fields_spec
@return [Parameters::FieldsSpec]
@!attribute [r] include_spec
@return [Parameters::IncludeSpec]
@!attribute [r] sort_spec
@return [Parameters::SortSpec]
@!attribute [r] extras
@return [Hash{Symbol => Object}]
Attributes
extras[R]
fields_spec[R]
include_spec[R]
root_node[R]
serializer[R]
serializer_inferrer[R]
sort_spec[R]
Public Class Methods
new( root_node:, serializer_inferrer: nil, serializer: nil, fields: nil, include: nil, sort_related: nil, extras: {}, **_options )
click to toggle source
@param root_node
[Node::Base] @param serializer_inferrer
[SerializerInferrer] @param serializer [Serializer,ErrorSerializer] @param fields [Parameters::FieldsSpec] @param include [Parameters::IncludeSpec] @param sort_related [Parameters::SortSpec] @param extras [Hash{Symbol => Object}]
# File lib/simple_jsonapi/node/base.rb, line 31 def initialize( root_node:, serializer_inferrer: nil, serializer: nil, fields: nil, include: nil, sort_related: nil, extras: {}, **_options ) @root_node = root_node @serializer_inferrer = SimpleJsonapi::SerializerInferrer.wrap(serializer_inferrer) @serializer = serializer @fields_spec = SimpleJsonapi::Parameters::FieldsSpec.wrap(fields) @include_spec = SimpleJsonapi::Parameters::IncludeSpec.wrap(include) @sort_spec = SimpleJsonapi::Parameters::SortSpec.wrap(sort_related) @extras = extras end
Public Instance Methods
as_jsonapi()
click to toggle source
@abstract @return [Hash{Symbol => Hash}]
# File lib/simple_jsonapi/node/base.rb, line 52 def as_jsonapi raise NotImplementedError, "Implement #{__method__} in each subclass." end
Private Instance Methods
build_child_node(node_class, **options)
click to toggle source
# File lib/simple_jsonapi/node/base.rb, line 58 def build_child_node(node_class, **options) defaults = { root_node: root_node, serializer_inferrer: serializer_inferrer, serializer: serializer, fields: fields_spec, include: include_spec, sort_related: sort_spec, extras: extras, } node_class.new(defaults.merge(options)) end
evaluate(callable, object, **data)
click to toggle source
# File lib/simple_jsonapi/node/base.rb, line 72 def evaluate(callable, object, **data) serializer.with(data.merge(extras)) do serializer.instance_exec(object, &callable) end end
render?(definition, object)
click to toggle source
# File lib/simple_jsonapi/node/base.rb, line 78 def render?(definition, object) if_proc = definition.if_predicate unless_proc = definition.unless_predicate if if_proc && !evaluate(if_proc, object) false elsif unless_proc && evaluate(unless_proc, object) false else true end end