Sha256: af3040d6ba21b2d980d484568fd2160314c203c78bbb4325b128b30fb7410058

Contents?: true

Size: 1.01 KB

Versions: 19

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true
module Valkyrie::Persistence::Fedora
  # Lazily iterates over a doubly linked list, fixing up nodes if necessary.
  # Used for reading ordered members out of Fedora, and then converting them to
  # member_ids.
  class OrderedReader
    include Enumerable
    attr_reader :root

    # @param root [Valkyrie::Persistence::Fedora::OrderedList]
    def initialize(root)
      @root = root
    end

    # Enumerates through each node in the RDF linked list
    # @yield [Valkyrie::Persistence::Fedora::OrderedList::HeadSentinel, Valkyrie::Persistence::Fedora::ListNode]
    def each
      proxy = first_head
      while proxy
        yield proxy unless proxy.nil?
        next_proxy = proxy.next
        next_proxy.try(:prev=, proxy) if next_proxy&.prev != proxy
        proxy = next_proxy
      end
    end

    private

    # Access the "first" (head) node for the linked list
    # @return [Valkyrie::Persistence::Fedora::OrderedList::HeadSentinel]
    def first_head
      root.head
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
valkyrie-3.5.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.4.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.3.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.5 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.4 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.3 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.2 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.1 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.1.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.3 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.2 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.1 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.0.pre.rc.1 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.0.pre.beta.3 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.0.pre.beta.2 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-3.0.0.pre.beta.1 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-2.2.0 lib/valkyrie/persistence/fedora/ordered_reader.rb
valkyrie-2.1.2 lib/valkyrie/persistence/fedora/ordered_reader.rb