Class: Svnx::Base::Entries

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/svnx/base/entries.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lines) ⇒ Entries

Returns a new instance of Entries.



23
24
25
26
27
28
29
30
31
32
33
# 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

Instance Attribute Details

#sizeObject (readonly)

Returns the value of attribute size.



21
22
23
# File 'lib/svnx/base/entries.rb', line 21

def size
  @size
end

Instance Method Details

#[](idx) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



39
40
41
# File 'lib/svnx/base/entries.rb', line 39

def create_entry xmlelement
  raise "create_entry must be implemented for: #{self.class}"
end

#each(&blk) ⇒ Object



66
67
68
69
70
# 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) ⇒ Object



35
36
37
# 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) ⇒ Object



43
44
45
# File 'lib/svnx/base/entries.rb', line 43

def to_index idx
  idx < 0 ? size + idx : idx
end