Class: WikiAvro::XML::Group
- Inherits:
-
Object
- Object
- WikiAvro::XML::Group
- Defined in:
- lib/wikiavro/xml.rb
Direct Known Subclasses
MediaWiki::ContributorGroup, MediaWiki::DiscussionThreadingGroup, MediaWiki::PageFlags, MediaWiki::RevisionFlags, MediaWiki::ThreadParentGroup, MediaWiki::ThreadSummaryPageGroup
Instance Method Summary collapse
-
#initialize(elements) ⇒ Group
constructor
A new instance of Group.
-
#optional? ⇒ Boolean
remember to override this if untrue, especially if it might be within an empty element.
- #parse(output, parent, reader) ⇒ Object
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
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 |