jsonapi-rb / jsonapi-renderer

Efficiently render JSON API documents.
http://jsonapi-rb.org
MIT License
27 stars 11 forks source link

Should there be support for recursive includes? #14

Open NullVoxPopuli opened 7 years ago

NullVoxPopuli commented 7 years ago

something like: https://github.com/json-api/json-api/issues/940

basically, if you have a tree structure, where your relationships are parent/children, you can never get all the children.

beauby commented 7 years ago

I'm up for supporting this if/when it gets into the spec. Note that in your case, you can always pre-compute the depth of the tree and build an adequate include directive.

NullVoxPopuli commented 7 years ago

I actually ended up doing this monkeypatch:

# To support recursive include directives
# e.g.: 'children[*]'
module ActiveModelSerializers
  module Adapter
    class JsonApi
      def process_relationships(serializer, include_slice)
        if (key = include_slice.to_hash.keys.first.to_s).end_with?('[*]')
          rel = key.remove('[*]')
          new_rel = "#{rel}.#{rel}[*]"

          include_slice = JSONAPI::IncludeDirective.new(
            new_rel,
            allow_wildcard: true
          )
        end

        serializer.associations(include_slice).each do |association|
          process_relationship(association.serializer, include_slice[association.key])
        end
      end
    end
  end
end
patodevilla commented 5 years ago

What is the syntax to get this to work with rails? https://github.com/jsonapi-rb/jsonapi-renderer/blob/daa95d830a6f71a39304c8db20c8acd89e34b7a7/lib/jsonapi/include_directive.rb#L12