class Svnx::Base::Entries

Attributes

size[R]

Public Class Methods

new(lines) click to toggle source
# File lib/svnx/base/entries.rb, line 23
def initialize lines
  # it's a hash, but indexed with integers, for non-sequential access:
  @entries  = Hash.new
  doc       = if $use_nokogiri
                Nokogiri::XML lines.join('')
              else
                REXML::Document.new Array(lines).join
              end
  @elements = get_elements doc
  @size     = @elements.size
end

Public Instance Methods

[](idx) click to toggle source
# File lib/svnx/base/entries.rb, line 47
def [] idx
  if idx.kind_of? Range
    fridx = to_index idx.first
    toidx = to_index idx.last
    rg = Range.new fridx, toidx, idx.exclude_end?
    rg.collect { |x| self[x] }
  else
    if idx >= size
      raise "error: index #{idx} is not in range(0 .. #{size})"
    else
      idx = to_index idx
    end
    if entry = @entries[idx]
      return entry
    end
    @entries[idx] = create_entry @elements[idx]
  end
end
create_entry(xmlelement) click to toggle source
# File lib/svnx/base/entries.rb, line 39
def create_entry xmlelement
  raise "create_entry must be implemented for: #{self.class}"
end
each(&blk) click to toggle source
# File lib/svnx/base/entries.rb, line 66
def each(&blk)
  (0 ... size).collect do |idx|
    @entries[idx] ||= create_entry @elements[idx]
  end.each(&blk)
end
get_elements(doc) click to toggle source
# File lib/svnx/base/entries.rb, line 35
def get_elements doc
  raise "get_elements must be implemented for: #{self.class}"
end
to_index(idx) click to toggle source
# File lib/svnx/base/entries.rb, line 43
def to_index idx
  idx < 0 ? size + idx : idx
end