Sha256: 7c4b52fdc66a7ba30d23321835ab7f5afd44a36a30e0fe278c7af8cacbe903a1

Contents?: true

Size: 762 Bytes

Versions: 6

Compression:

Stored size: 762 Bytes

Contents

module Hydra::PCDM
  ##
  # Iterates over a record's members and all of their members in a breadth-first
  # search.
  class DeepMemberIterator
    include Enumerable
    attr_reader :record
    # @param [#members] record The object whose members are iterated across.
    def initialize(record)
      @record = HasMembers.new(record)
    end

    def each
      record.members.each do |member|
        yield member
      end
      record.members.each do |member|
        DeepMemberIterator.new(member).each do |deep_member|
          yield deep_member
        end
      end
    end
  end
  ##
  # Small decorator to ensure that #members isn't undefined.
  class HasMembers < SimpleDelegator
    def members
      __getobj__.try(:members) || []
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
hydra-pcdm-0.5.0 lib/hydra/pcdm/deep_member_iterator.rb
hydra-pcdm-0.4.0 lib/hydra/pcdm/deep_member_iterator.rb
hydra-pcdm-0.3.2 lib/hydra/pcdm/deep_member_iterator.rb
hydra-pcdm-0.3.1 lib/hydra/pcdm/deep_member_iterator.rb
hydra-pcdm-0.3.0 lib/hydra/pcdm/deep_member_iterator.rb
hydra-pcdm-0.2.0 lib/hydra/pcdm/deep_member_iterator.rb