Module: JSONAPI::Serializable::Relationship::DSL

Included in:
JSONAPI::Serializable::Relationship
Defined in:
lib/jsonapi/serializable/relationship/dsl.rb

Instance Method Summary collapse

Instance Method Details

#dataObject

Declare the related resources for this relationship. end

Examples:

data do
  @object.posts
end

Yield Returns:

  • The related resources for this relationship.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/jsonapi/serializable/relationship/dsl.rb', line 13

def data
  # NOTE(beauby): Lazify computation since it is only needed when
  #   the corresponding relationship is included.
  @_resources_block = proc do
    resources = yield
    if resources.nil?
      nil
    elsif resources.respond_to?(:to_ary)
      Array(resources).map do |obj|
        @_class[obj.class.name.to_sym]
          .new(@_exposures.merge(object: obj))
      end
    else
      @_class[resources.class.name.to_sym]
        .new(@_exposures.merge(object: resources))
    end
  end
end

Declare a link for this relationship. The properties of the link are set

by providing a block in which the DSL methods of
+JSONAPI::Serializable::Link+ are called.

Examples:

link(:self) do
  "http://api.example.com/users/#{@user.id}/relationships/posts"
end
link(:related) do
  href "http://api.example.com/users/#{@user.id}/posts"
  meta authorization_needed: true
end

Parameters:

  • name (Symbol)

    The key of the link.

Yield Returns:

  • (Hash, String, nil)

    The block to compute the value, if any.

See Also:

  • JSONAPI::Serialiable::Link


88
89
90
# File 'lib/jsonapi/serializable/relationship/dsl.rb', line 88

def link(name, &block)
  @_links[name] = Link.as_jsonapi(@_exposures, &block)
end

#linkage(options = {}, &block) ⇒ Object #linkage(options = {}) ⇒ Object

Overloads:

  • #linkage(options = {}, &block) ⇒ Object

    Explicitly declare linkage data.

    Examples:

    linkage do
      @object.posts.map { |p| { id: p.id.to_s, type: 'posts' } }
    end
    

    Yield Returns:

    • The resource linkage.

  • #linkage(options = {}) ⇒ Object

    Forces standard linkage even if relationship not included.

    Examples:

    linkage always: true
    


46
47
48
49
# File 'lib/jsonapi/serializable/relationship/dsl.rb', line 46

def linkage(always: false, &block)
  @_include_linkage = always
  @_linkage_block = block
end

#meta(value) ⇒ Object #meta(&block) ⇒ Object

Overloads:

  • #meta(value) ⇒ Object

    Declare the meta information for this relationship.

    Examples:

    meta paginated: true
    

    Parameters:

    • value (Hash)

      The meta information hash.

  • #meta(&block) ⇒ Object

    Declare the meta information for this relationship.

    Examples:

    meta do
      { paginated: true }
    end
    

    Yield Returns:

    • (Hash)

      The meta information hash.



66
67
68
# File 'lib/jsonapi/serializable/relationship/dsl.rb', line 66

def meta(value = nil)
  @_meta = value || yield
end