Class: Wikipedia::VandalismDetection::RevisionParser

Inherits:
Object
  • Object
show all
Defined in:
lib/wikipedia/vandalism_detection/revision_parser.rb

Instance Method Summary collapse

Instance Method Details

#parse(xml, options = {}) ⇒ Object

Parses an xml string and returns a Wikipedia::VandalismDetection::Revision.



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/wikipedia/vandalism_detection/revision_parser.rb', line 11

def parse(xml, options = {})
  document = Nokogiri::XML(xml, nil, 'UTF-8').xpath('//revision')

  revision = Revision.new

  properties = options[:only] || [:id, :parent_id, :timestamp, :contributor, :comment, :text, :sha1]

  revision.id = document.xpath('id').inner_text if properties.include?(:id)
  revision.timestamp = document.xpath('timestamp').inner_text if properties.include?(:timestamp)
  revision.comment = Text.new(document.xpath('comment').inner_text) if properties.include?(:comment)
  revision.text = Text.new(document.xpath('text').inner_text) if properties.include?(:text)
  revision.sha1 = document.xpath('sha1').inner_text if properties.include?(:sha1)

  if properties.include?(:contributor)
    contributor_id_node = document.xpath('contributor/id')
    contributor_ip_node = document.xpath('contributor/ip')
    contributor_username_node = document.xpath('contributor/username')

    revision.contributor = contributor_id_node.inner_text unless contributor_id_node.empty?
    revision.contributor = contributor_ip_node.inner_text unless contributor_ip_node.empty?
    revision.contributor_username = contributor_username_node.inner_text unless contributor_username_node.empty?
  end

  if properties.include?(:parent_id)
    parent_id_node = document.xpath('parentid')
    revision.parent_id = parent_id_node.inner_text unless parent_id_node.empty?
  end

  revision
end