Class: WikiAvro::XML::Group

Inherits:
Object
  • Object
show all
Defined in:
lib/wikiavro/xml.rb

Instance Method Summary collapse

Constructor Details

#initialize(elements) ⇒ Group

Returns a new instance of Group.



272
273
274
275
276
277
278
279
280
# File 'lib/wikiavro/xml.rb', line 272

def initialize(elements)
  @elements = {}
  @n = Hash.new 0
  elements.each do |e|
    name = e[:element].name
    @elements[name] = e
    @n[name] = 0
  end
end

Instance Method Details

#optional?Boolean

remember to override this if untrue, especially if it might be within an empty element

Returns:

  • (Boolean)


241
242
243
# File 'lib/wikiavro/xml.rb', line 241

def optional?
  false
end

#parse(output, parent, reader) ⇒ Object



245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/wikiavro/xml.rb', line 245

def parse(output, parent, reader)
  @n.keys.each {|k| @n[k] = 0}

  while WikiAvro::XML::to_tag(reader)
    e = @elements[reader.name]

    if e.nil?
      @elements.each do |k, v|
        raise TooFewElements.new(k) if @n[k] < v[:min]
        # this ought to be a redundant check
        raise TooManyElements.new(k) if @n[k] > v[:max]
      end
#          puts "group: rejected #{reader.name}"
      return
    else
#          puts "group: accepted #{reader.name}"
      name = reader.name
      @n[name] += 1
      raise TooManyElements.new(name) if @n[name] > e[:max]
      e[:element].parse(output, parent, reader)
      reader.read
    end
  end

#      puts 'group: ran to parent end'
end