Sha256: 4b62350d66ca9a945b5aa7213ab4f47f17a479c280742a0a182d26f20cfb5193

Contents?: true

Size: 1.11 KB

Versions: 26

Compression:

Stored size: 1.11 KB

Contents

module JSONAPIonify::Structure
  module Collections
    class IncludedResources < Resources
      value_is Objects::IncludedResource

      def self.referenceable?(referenced, not_referenced)
        not_referenced.any? do |unreferenced_item|
          referenced.any? do |referenced_item|
            referenced_item.relates_to? unreferenced_item
          end
        end
      end

      def referenced
        return [] unless parent
        top_level_referenced.tap do |referenced|
          not_referenced = reduce([]) { |a, i| a << i }

          while self.class.referenceable?(referenced, not_referenced)
            not_referenced.each do |resource|
              if referenced.any? { |referenced_item| referenced_item.relates_to? resource }
                referenced << not_referenced.delete(resource)
              end
            end
          end
        end
      end

      private

      def top_level_referenced
        return [] unless parent
        reduce([]) { |a, i| a << i }.select do |resource|
          Array.wrap(parent[:data]).any? { |tlr| tlr.relates_to? resource }
        end
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

Version Path
jsonapionify-0.12.10 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.9 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.8 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.7 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.5 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.4 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.3 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.2 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.1 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.12.0 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.11 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.10 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.9 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.8 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.7 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.6 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.5 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.11.0 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.10.2 lib/jsonapionify/structure/collections/included_resources.rb
jsonapionify-0.10.1 lib/jsonapionify/structure/collections/included_resources.rb