summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'projects/devdashboard/app/models/herd.rb')
-rw-r--r--projects/devdashboard/app/models/herd.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/projects/devdashboard/app/models/herd.rb b/projects/devdashboard/app/models/herd.rb
new file mode 100644
index 0000000..f08a2be
--- /dev/null
+++ b/projects/devdashboard/app/models/herd.rb
@@ -0,0 +1,41 @@
+require 'rexml/document'
+
+class Herd < ActiveRecord::Base
+ include REXML
+
+ has_and_belongs_to_many :developers
+
+ validates_presence_of :name
+
+ HERDS_XML = '/home/nichoj/checkouts/gentoo/xml/htdocs/proj/en/metastructure/herds/herds.xml'
+
+ def Herd.load_from_xml
+ file = File.new(HERDS_XML)
+ doc = Document.new(file)
+ root = doc.root
+
+ root.elements.each('herd') do |herdnode|
+ namenode = herdnode.elements['name']
+ emailnode = herdnode.elements['email']
+ descriptionnode = herdnode.elements['description']
+ projectnode = herdnode.elements['maintainingproject']
+
+ herd = Herd.new
+ herd.name = namenode.text
+ herd.email = emailnode.text unless emailnode.nil?
+ herd.description = descriptionnode.text unless descriptionnode.nil?
+
+ # look for maintainers if not part of a project
+ if projectnode.nil?
+ herdnode.elements.each('maintainer') do |maintainer|
+ email = maintainer.elements['email'].text
+ developer = Developer.find_by_nickname(email.gsub /@gentoo\.org$/, '')
+ unless developer.nil?
+ herd.developers.push(developer)
+ end
+ end
+ end
+ herd.save!
+ end
+ end
+end