aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Filip Ignacy Bartosik <jbartosik@gmail.com>2011-07-04 19:28:33 +0200
committerPetteri Räty <petsku@petteriraty.eu>2011-07-11 10:09:09 +0300
commit5d1bd8af067a5554ee8f2994691a5109e175fa2b (patch)
tree19d40903b7715b9a872fac5711996de3c7874809
parentShow community votes properly (diff)
downloadcouncil-webapp-5d1bd8af067a5554ee8f2994691a5109e175fa2b.tar.gz
council-webapp-5d1bd8af067a5554ee8f2994691a5109e175fa2b.tar.bz2
council-webapp-5d1bd8af067a5554ee8f2994691a5109e175fa2b.zip
Pull information on how long meeting took from Gentoo archives
-rw-r--r--site/app/models/agenda_item.rb75
-rw-r--r--site/db/schema.rb7
-rw-r--r--site/features/agenda_items.feature4
-rw-r--r--site/features/step_definitions/agenda_item_steps.rb13
-rw-r--r--site/features/support/paths.rb3
-rw-r--r--site/lib/tasks/update_discussion_times.rb10
-rw-r--r--site/spec/files/msg_181309f75a15da95fffdf921bf313b87.xml?passthru=1237
-rw-r--r--site/spec/files/msg_3132152624ffdcf3217437d95e75c634.xml?passthru=1236
-rw-r--r--site/spec/files/msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml?passthru=1235
-rw-r--r--site/spec/files/msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml?passthru=1230
-rw-r--r--site/spec/files/msg_c0c8b0aa686f83a7268cd13f067d6da2.xml?passthru=1231
-rw-r--r--site/spec/files/msg_e490369a0c7e6c279af9baef63897629.xml?passthru=1275
-rw-r--r--site/spec/models/agenda_item_spec.rb27
-rw-r--r--site/spec/support/http_stub.rb22
14 files changed, 1597 insertions, 8 deletions
diff --git a/site/app/models/agenda_item.rb b/site/app/models/agenda_item.rb
index eaa6ede..b76b067 100644
--- a/site/app/models/agenda_item.rb
+++ b/site/app/models/agenda_item.rb
@@ -3,11 +3,12 @@ class AgendaItem < ActiveRecord::Base
hobo_model # Don't put anything above this
fields do
- title :string
- discussion :string
- body :markdown
- rejected :boolean, :default => false
- timelimits :text, :null => false, :default => ''
+ title :string
+ discussion :string
+ body :text
+ rejected :boolean, :default => false
+ timelimits :text, :null => false, :default => ''
+ discussion_time :string, :null => false, :default => ''
timestamps
end
@@ -25,6 +26,7 @@ class AgendaItem < ActiveRecord::Base
end
def update_permitted?
+ return false if discussion_time_changed?
return false if agenda._?.state == 'old'
return false if user_changed?
return true if acting_user.council_member?
@@ -55,6 +57,69 @@ class AgendaItem < ActiveRecord::Base
end
protected
+ # Updated discussion time for a single agenda item
+ # protected because we want to call it only from
+ # AgendaItem.update_discussion_times
+ # or similar methods in children classes (if there will be any)
+ def update_discussion_time
+ link_regexp = /^(https?:\/\/)?archives.gentoo.org\/([a-zA-Z-]+)\/(msg_[a-fA-F0-9]+.xml)$/
+ uri_match = link_regexp.match(discussion)
+ return unless uri_match
+
+ group = uri_match[2]
+ msg = uri_match[3]
+ message_info = get_message(group, msg)
+ first_date = Time.parse message_info[:date]
+ last_date = first_date
+
+ to_visit = []
+ visited = Set.new([msg])
+
+ to_visit += message_info[:links]
+
+ until to_visit.empty?
+ msg = to_visit.pop()
+
+ next if visited.include? msg
+ visited.add msg
+ message_info = get_message(group, msg)
+ current_date = Time.parse message_info[:date]
+
+ first_date = current_date if first_date > current_date
+ last_date = current_date if last_date < current_date
+ to_visit += message_info[:links]
+ end
+
+ duration = ((last_date - first_date) / 1.day).floor
+ first_date = first_date.strftime '%Y.%m.%d'
+ last_date = last_date.strftime '%Y.%m.%d'
+ self.discussion_time = "From #{first_date} to #{last_date}, #{duration} full days"
+ self.save!
+ end
+
+ def get_message(group, msg)
+ Net::HTTP.start("archives.gentoo.org") { |http|
+ resp = http.get("/#{group}/#{msg}?passthru=1")
+ doc = REXML::Document.new(resp.body)
+ table = REXML::XPath.match(doc, '//table/tr[th=\'Replies:\']/../tr')
+ in_replies = false
+ reply_links = []
+ table.each do |row|
+ th = REXML::XPath.first(row, "th")
+ if th
+ in_replies = (th.text == 'Replies:')
+ else
+ next unless in_replies
+ reply = REXML::XPath.first(row, "ti/uri")
+ reply_link = reply.attribute(:link).to_s
+ reply_links.push(reply_link)
+ end
+ end
+ date = resp.body.match(/\<\!--X-Date: (.*) --\>/)[1]
+ {:date => date, :links => reply_links}
+ }
+ end
+
def timelimits_entered_properly
regexp = /^\d+:\d+( .*)?$/
for line in timelimits.split("\n")
diff --git a/site/db/schema.rb b/site/db/schema.rb
index c39cb60..2b69ac8 100644
--- a/site/db/schema.rb
+++ b/site/db/schema.rb
@@ -10,18 +10,19 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20110706144851) do
+ActiveRecord::Schema.define(:version => 20110706145154) do
create_table "agenda_items", :force => true do |t|
t.string "title"
t.string "discussion"
t.text "body"
- t.boolean "rejected", :default => false
+ t.boolean "rejected", :default => false
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
t.integer "agenda_id"
- t.text "timelimits", :default => "", :null => false
+ t.text "timelimits", :default => "", :null => false
+ t.string "discussion_time", :default => "", :null => false
end
add_index "agenda_items", ["agenda_id"], :name => "index_agenda_items_on_agenda_id"
diff --git a/site/features/agenda_items.feature b/site/features/agenda_items.feature
index 18d301f..2507e2d 100644
--- a/site/features/agenda_items.feature
+++ b/site/features/agenda_items.feature
@@ -54,3 +54,7 @@ Feature: Suggest Agenda Items
And "Reject" button should be inline
And I should see "Add to current agenda" button inside content body
And "Add to current agenda" button should be inline
+
+ Scenario: View discussion times
+ Given some agenda item with discussion times
+ Then I should see discussion times when viewing agenda items
diff --git a/site/features/step_definitions/agenda_item_steps.rb b/site/features/step_definitions/agenda_item_steps.rb
index 5bf5de2..b600bad 100644
--- a/site/features/step_definitions/agenda_item_steps.rb
+++ b/site/features/step_definitions/agenda_item_steps.rb
@@ -39,3 +39,16 @@ Then /^"([^"]*)" button should be inline$/ do |arg1|
page.all(:xpath, "//input[@type='submit'][@value='#{arg1}']").should_not be_empty
end
end
+
+Given /^some agenda item with discussion times$/ do
+ Factory(:agenda_item)
+ Factory(:agenda_item, :discussion_time => 'From 2011.07.01 to 2011.07.05, 4 full days')
+ Factory(:agenda_item, :discussion_time => 'manually set')
+end
+
+Then /^I should see discussion times when viewing agenda items$/ do
+ AgendaItem.all.each do |item|
+ When "I am on agenda item number #{item.id} show page"
+ Then "I should see \"#{item.discussion_time}\""
+ end
+end
diff --git a/site/features/support/paths.rb b/site/features/support/paths.rb
index e08acc5..92e736e 100644
--- a/site/features/support/paths.rb
+++ b/site/features/support/paths.rb
@@ -35,6 +35,9 @@ module NavigationHelpers
when /([1-9]*)th agenda page/
agenda_path(Agenda.find $1)
+ when /agenda item number ([1-9]*) show page/
+ agenda_item_path($1)
+
when /newest agenda item page/
agenda_item_path(AgendaItem.last)
diff --git a/site/lib/tasks/update_discussion_times.rb b/site/lib/tasks/update_discussion_times.rb
new file mode 100644
index 0000000..7d85595
--- /dev/null
+++ b/site/lib/tasks/update_discussion_times.rb
@@ -0,0 +1,10 @@
+desc = 'Update discussion times for ageda items that are not assigned or assigned to current agenda'
+
+namespace :management do
+ task :update_discussion_times => :environment do
+ current_items = Agenda.current.agenda_items
+ unassigned_items = AgendaItem.agenda_is(nil)
+ all_items = current_items + unassigned_items
+ all_items.each { |item| item.update_discussion_time }
+ end
+end
diff --git a/site/spec/files/msg_181309f75a15da95fffdf921bf313b87.xml?passthru=1 b/site/spec/files/msg_181309f75a15da95fffdf921bf313b87.xml?passthru=1
new file mode 100644
index 0000000..9b17ded
--- /dev/null
+++ b/site/spec/files/msg_181309f75a15da95fffdf921bf313b87.xml?passthru=1
@@ -0,0 +1,237 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Council web app &#45; weekly report #2 -->
+<!--X-From-R13: Xbnpuvz Tvyvc Pnegbfvx <wonegbfvxNtznvy.pbz> -->
+<!--X-Date: Tue, 07 Jun 2011 20:05:30 +0000 -->
+<!--X-Message-Id: 4DEE8487.6050105@gmail.com -->
+<!--X-Content-Type: multipart/signed -->
+<!--X-Archives-Hash: 181309f75a15da95fffdf921bf313b87 -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Reference: 4DE3D2A0.80305@gmail.com -->
+<!--X-Derived: pgpN9dukUjNgi.pgp -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 05, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml">Next &gt;</uri>
+ <uri link="msg_7d6727f6a11cbd8effa061def0cb6172.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_863ef8718d9689ba05289db1063ebf79.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Joachim Filip Bartosik &lt;jbartosik@...&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+ Council web app - weekly report #2
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Tue, 07 Jun 2011 22:05:27 +0200
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">(Note: this is c&amp;p from my blog [0])
+
+Last week I:
+
+ Fixed some bugs
+ Added support for proxies:
+ each council member can appoint one proxy per meeting
+ proxy must not be a council member
+ council member who appointed proxy will not be listed as
+&#x2018;voter&#x2019; (for IRC bot)
+ appointed proxy will be listed as voter
+ Nearly finished work on bot
+ It obtains list of users allowed to vote from application
+ It obtains list of agenda items (with voting options for
+each item)
+ It helps to manage meeting (you can use #nextitem and
+#previtem commands)
+ It manages voting (#startvote, #endvote)
+ Application can send email reminders about meetings.
+
+For short description of project and sources, read this[1].
+
+[0]
+<uri link="http://ahenobarbi.wordpress.com/2011/06/07/council-application-%E2%80%93-weekly-report-2/">http://ahenobarbi.wordpress.com/2011/06/07/council-application-%E2%80%93-weekly-report-2/</uri>
+[1]
+<uri link="http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/">http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/</uri>
+
+</pre><table>
+ <tr>
+ <th>Attachment:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="pgpN9dukUjNgi.pgp">signature.asc</uri> <e>(OpenPGP digital signature)</e>
+ </ti>
+ </tr>
+</table>
+
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+ <tr>
+ <th>Replies:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml"> Re: Council web app - weekly report #3</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml">Next &gt;</uri>
+ <uri link="msg_7d6727f6a11cbd8effa061def0cb6172.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_863ef8718d9689ba05289db1063ebf79.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_3132152624ffdcf3217437d95e75c634.xml"> Re: Council web app - weekly report #3</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_7d6727f6a11cbd8effa061def0cb6172.xml"> Gentoo Maven Integration - Weekly Report #2</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_863ef8718d9689ba05289db1063ebf79.xml">Re: Re: Rework Porthole to use the new public portage API -- Weekly report #1</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/files/msg_3132152624ffdcf3217437d95e75c634.xml?passthru=1 b/site/spec/files/msg_3132152624ffdcf3217437d95e75c634.xml?passthru=1
new file mode 100644
index 0000000..1636f58
--- /dev/null
+++ b/site/spec/files/msg_3132152624ffdcf3217437d95e75c634.xml?passthru=1
@@ -0,0 +1,236 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Re: Council web app &#45; weekly report #3 -->
+<!--X-From-R13: Xbnpuvz Tvyvc Pnegbfvx <wonegbfvxNtznvy.pbz> -->
+<!--X-Date: Mon, 13 Jun 2011 08:46:16 +0000 -->
+<!--X-Message-Id: 4DF5CE83.5000800@gmail.com -->
+<!--X-Content-Type: multipart/signed -->
+<!--X-Archives-Hash: 3132152624ffdcf3217437d95e75c634 -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Reference: 4DE3D2A0.80305@gmail.com -->
+<!--X-Reference: 4DEE8487.6050105@gmail.com -->
+<!--X-Derived: pgptWtEOHmaRa.pgp -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 05, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">Next &gt;</uri>
+ <uri link="msg_141966ae75bfb866559fbd40145b60d2.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_c322633c3dba12318e74a614327f23cf.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Joachim Filip Bartosik &lt;jbartosik@...&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+ Re: Council web app - weekly report #3
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Mon, 13 Jun 2011 10:46:59 +0200
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">(Note: this is c&amp;p from my blog [0])
+Last week I:
+
+ Wrote Supybot[1] plugin that regularly fetches JSON data from given
+location. Then it checks timestamp, if timestam is newer then previous
+it sends message to listed users.
+ Application now tracks slaking properly - it marks participation
+after meeting (council members who voted at least once are present).
+Then it calculates &quot;slacking status&quot; for current council members based
+on council term start date and participations.
+
+For short description of project and sources, read this[2].
+
+[0]
+<uri link="http://ahenobarbi.wordpress.com/2011/06/13/council-application-%E2%80%93-weekly-report-3/">http://ahenobarbi.wordpress.com/2011/06/13/council-application-%E2%80%93-weekly-report-3/</uri>
+[1] <uri link="http://sourceforge.net/projects/supybot/">http://sourceforge.net/projects/supybot/</uri>
+[2]
+<uri link="http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/">http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/</uri>
+
+</pre><table>
+ <tr>
+ <th>Attachment:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="pgptWtEOHmaRa.pgp">signature.asc</uri> <e>(OpenPGP digital signature)</e>
+ </ti>
+ </tr>
+</table>
+
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+ <tr>
+ <th>Replies:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">Re: Re: Council web app - weekly report #3</uri><br/>
+ -- <e>Rich Freeman</e>
+ </ti>
+ </tr>
+
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml"> Council web app - weekly report #2</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">Next &gt;</uri>
+ <uri link="msg_141966ae75bfb866559fbd40145b60d2.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_c322633c3dba12318e74a614327f23cf.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_181309f75a15da95fffdf921bf313b87.xml"> Council web app - weekly report #2</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">Re: Re: Council web app - weekly report #3</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_141966ae75bfb866559fbd40145b60d2.xml"> Project Glentoo: Week #3 Status Report</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_c322633c3dba12318e74a614327f23cf.xml"> Rework Porthole to use the new public portage API -- Weekly report #3</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/files/msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml?passthru=1 b/site/spec/files/msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml?passthru=1
new file mode 100644
index 0000000..3af9ffa
--- /dev/null
+++ b/site/spec/files/msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml?passthru=1
@@ -0,0 +1,235 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Council web app &#45; weekly report #4 -->
+<!--X-From-R13: Xbnpuvz Tvyvc Pnegbfvx <wonegbfvxNtznvy.pbz> -->
+<!--X-Date: Mon, 20 Jun 2011 09:38:16 +0000 -->
+<!--X-Message-Id: 4DFF151A.5060807@gmail.com -->
+<!--X-Content-Type: multipart/signed -->
+<!--X-Archives-Hash: 59e3fb9cae272cb4fea7a40d6940d7b7 -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Reference: 4DE3D2A0.80305@gmail.com -->
+<!--X-Derived: pgp02ZnJFw6tA.pgp -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 04, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">&lt; Prev</uri>
+ <uri link="index.xml#00001">By Thread</uri>
+ <uri link="msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml">Next &gt;</uri>
+ <uri link="msg_a83e0d6daaa8bed4da4eda84522d4519.xml">&lt; Prev</uri>
+ <uri link="date.xml#00001">By Date</uri>
+ <uri link="msg_6ccab7d1785aad8238a0db7b4ef7b11a.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Joachim Filip Bartosik &lt;jbartosik@...&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+ Council web app - weekly report #4
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Mon, 20 Jun 2011 11:38:34 +0200
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">(Note: this is c&amp;p from my blog [0])
+
+Last week I used metrical[1] on the web app and improved tests coverage
+and variable naming. I also removed some stuff it reported as &#x201C;code
+duplication&#x201D;. Metrical warned about some stuff, but I couldn&#x2019;t find a
+reasonable way to fix it.
+
+I tried to switch to capybara-webkit[2] for cucumber tests but I
+couldn&#x2019;t find a way to remove session cookies (and I need it to test
+&#x201C;Remember me&#x201D; feature) so I made a feature request[3] (including a
+suggested patch) and I&#x2019;m waiting.
+
+I added
+#option add
+#option remove
+#option list
+
+commands to MeetBot[4] to allow changing voting options during meeting
+(I must do some work on the webapp end to handle added and removed
+option properly).
+
+I also improved tests for my changes to MeetBot[4] and wrote test for
+Reminder (the Supybot[5] plugin I wrote last week[6]).
+
+[0]
+<uri link="http://ahenobarbi.wordpress.com/2011/06/20/council-application-%E2%80%93-weekly-report-4/">http://ahenobarbi.wordpress.com/2011/06/20/council-application-%E2%80%93-weekly-report-4/</uri>
+[1] <uri link="http://rubydoc.info/gems/metrical/0.0.5/frames">http://rubydoc.info/gems/metrical/0.0.5/frames</uri>
+[2] <uri link="http://rubygems.org/gems/capybara-webkit">http://rubygems.org/gems/capybara-webkit</uri>
+[3] <uri link="https://github.com/thoughtbot/capybara-webkit/issues/79">https://github.com/thoughtbot/capybara-webkit/issues/79</uri>
+[4] <uri link="http://wiki.debian.org/MeetBot">http://wiki.debian.org/MeetBot</uri>
+[5] <uri link="http://sourceforge.net/projects/supybot/">http://sourceforge.net/projects/supybot/</uri>
+[6]
+<uri link="http://ahenobarbi.wordpress.com/2011/06/13/council-application-%E2%80%93-weekly-report-3/">http://ahenobarbi.wordpress.com/2011/06/13/council-application-%E2%80%93-weekly-report-3/</uri>
+
+
+</pre><table>
+ <tr>
+ <th>Attachment:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="pgp02ZnJFw6tA.pgp">signature.asc</uri> <e>(OpenPGP digital signature)</e>
+ </ti>
+ </tr>
+</table>
+
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">&lt; Prev</uri>
+ <uri link="index.xml#00001">By Thread</uri>
+ <uri link="msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml">Next &gt;</uri>
+ <uri link="msg_a83e0d6daaa8bed4da4eda84522d4519.xml">&lt; Prev</uri>
+ <uri link="date.xml#00001">By Date</uri>
+ <uri link="msg_6ccab7d1785aad8238a0db7b4ef7b11a.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_c0c8b0aa686f83a7268cd13f067d6da2.xml">Re: Re: Council web app - weekly report #3</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml"> Council application &#x2013; weekly report #5</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_a83e0d6daaa8bed4da4eda84522d4519.xml"> Gentoo/Java IDE integration Weekly report #5</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_6ccab7d1785aad8238a0db7b4ef7b11a.xml"> Rework Porthole to use the new public portage API -- Weekly report #4</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/files/msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml?passthru=1 b/site/spec/files/msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml?passthru=1
new file mode 100644
index 0000000..2c4e6a4
--- /dev/null
+++ b/site/spec/files/msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml?passthru=1
@@ -0,0 +1,230 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Council application – weekly report #5 -->
+<!--X-From-R13: Xbnpuvz Tvyvc Pnegbfvx <wonegbfvxNtznvy.pbz> -->
+<!--X-Date: Tue, 28 Jun 2011 10:39:15 +0000 -->
+<!--X-Message-Id: 4E09AF85.4010409@gmail.com -->
+<!--X-Content-Type: multipart/signed -->
+<!--X-Archives-Hash: b5b2b992bbbfb4f5e7532db90af8f28a -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Reference: 4DE3D2A0.80305@gmail.com -->
+<!--X-Derived: pgpvqWSbE7e1x.pgp -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 05, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml">Next &gt;</uri>
+ <uri link="msg_60ffda79bf186c6f0f595c4a1affd252.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_3d4b2a06c60aa534f05d026b2402cac7.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Joachim Filip Bartosik &lt;jbartosik@...&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+ Council application &#x2013; weekly report #5
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Tue, 28 Jun 2011 12:40:05 +0200
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">
+(Note: this is c&amp;p from my blog [0])
+
+Last week I worked to improve MeetBot:
+
+ I added support for #changeitemcommand &#x2013; it allows you to move
+through agenda items faster then #netxitem/ #previtem.
+ Bot will close voting after last vote
+ Bot can send reminders. You can add reminder with
+
+ #timelimit add :
+
+ remove it with
+
+ #timelimt remove message
+
+ list set reminders with
+
+ #timelimit list
+
+ or set them in web application before meeting. Changing item removes
+all reminders.
+
+For short description of project and sources, read this[1].
+
+[0]
+<uri link="http://ahenobarbi.wordpress.com/2011/06/28/council-application-%E2%80%93-weekly-report-5/">http://ahenobarbi.wordpress.com/2011/06/28/council-application-%E2%80%93-weekly-report-5/</uri>
+[1]
+<uri link="http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/">http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/</uri>
+
+</pre><table>
+ <tr>
+ <th>Attachment:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="pgpvqWSbE7e1x.pgp">signature.asc</uri> <e>(OpenPGP digital signature)</e>
+ </ti>
+ </tr>
+</table>
+
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml">Next &gt;</uri>
+ <uri link="msg_60ffda79bf186c6f0f595c4a1affd252.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_3d4b2a06c60aa534f05d026b2402cac7.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml"> Council web app - weekly report #4</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml"> Rework Porthole to use the new public portage API -- Weekly report #1</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_60ffda79bf186c6f0f595c4a1affd252.xml">Re: Distfile patching support - Weekly report #5</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_3d4b2a06c60aa534f05d026b2402cac7.xml"> Gentoo Maven Integration - Weekly Report #5</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/files/msg_c0c8b0aa686f83a7268cd13f067d6da2.xml?passthru=1 b/site/spec/files/msg_c0c8b0aa686f83a7268cd13f067d6da2.xml?passthru=1
new file mode 100644
index 0000000..db13d41
--- /dev/null
+++ b/site/spec/files/msg_c0c8b0aa686f83a7268cd13f067d6da2.xml?passthru=1
@@ -0,0 +1,231 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Re: Re: Council web app &#45; weekly report #3 -->
+<!--X-From-R13: Dvpu Terrzna <evpu0Ntragbb.bet> -->
+<!--X-Date: Mon, 13 Jun 2011 13:24:28 +0000 -->
+<!--X-Message-Id: BANLkTinhnRRJKKiRsmrssBJ_J6xDPD6VPw@mail.gmail.com -->
+<!--X-Content-Type: text/plain -->
+<!--X-Archives-Hash: c0c8b0aa686f83a7268cd13f067d6da2 -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Reference: 4DE3D2A0.80305@gmail.com -->
+<!--X-Reference: 4DEE8487.6050105@gmail.com -->
+<!--X-Reference: 4DF5CE83.5000800@gmail.com -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 05, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml">Next &gt;</uri>
+ <uri link="msg_c322633c3dba12318e74a614327f23cf.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_eb993e57c1ad3afc81f74dbfeab348be.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Rich Freeman &lt;rich0@g.o&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+Re: Re: Council web app - weekly report #3
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Mon, 13 Jun 2011 09:24:09 -0400
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">On Mon, Jun 13, 2011 at 4:46 AM, Joachim Filip Bartosik
+&lt;jbartosik@...&gt; wrote:
+&gt; &#xA0; &#xA0;Application now tracks slaking properly - it marks participation
+&gt; after meeting (council members who voted at least once are present).
+&gt; Then it calculates &quot;slacking status&quot; for current council members based
+&gt; on council term start date and participations.
+
+Honestly, I've seen this kind of thing tried so many times and fail in
+so many situations that I have to say that I think this isn't the
+right way to go about this.
+
+Why not let somebody in the Council just mark off attendance?
+Sometimes automation isn't the best solution. What if somebody was
+present but there was only one vote and they didn't vote, or whatever?
+ I could see some value in the thing helping to facilitate taking
+attendance (looking at who talked during the meeting and suggesting
+that to the attendance-taker for confirmation). In the end, however,
+deciding whether somebody slacked shouldn't be based on an algorithm -
+if it fails for whatever reason then suddenly we're back to just doing
+it manually 100%.
+
+I'm a big fan of KISS for these sorts of things. The 95% solution is
+a lot better than the 99.9999% solution that is worth 10% when it gets
+something wrong trying too hard to get it all right.
+
+Rich
+
+
+</pre>
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_e490369a0c7e6c279af9baef63897629.xml"> Re: Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml"> Council web app - weekly report #2</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml"> Re: Council web app - weekly report #3</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_3132152624ffdcf3217437d95e75c634.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml">Next &gt;</uri>
+ <uri link="msg_c322633c3dba12318e74a614327f23cf.xml">&lt; Prev</uri>
+ <uri link="date.xml#00000">By Date</uri>
+ <uri link="msg_eb993e57c1ad3afc81f74dbfeab348be.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_3132152624ffdcf3217437d95e75c634.xml"> Re: Council web app - weekly report #3</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml"> Council web app - weekly report #4</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_c322633c3dba12318e74a614327f23cf.xml"> Rework Porthole to use the new public portage API -- Weekly report #3</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_eb993e57c1ad3afc81f74dbfeab348be.xml"> Gentoo/Java integration Project Weekly report #4</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/files/msg_e490369a0c7e6c279af9baef63897629.xml?passthru=1 b/site/spec/files/msg_e490369a0c7e6c279af9baef63897629.xml?passthru=1
new file mode 100644
index 0000000..a89a8ad
--- /dev/null
+++ b/site/spec/files/msg_e490369a0c7e6c279af9baef63897629.xml?passthru=1
@@ -0,0 +1,275 @@
+<?xml version='1.0' encoding="UTF-8"?>
+<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
+<?xml-stylesheet type="text/xsl" href="/xsl/guide.xsl"?>
+
+<!-- MHonArc v2.6.16 -->
+<!--X-Subject: Re: Council web app &#45; introduction -->
+<!--X-From-R13: Xbnpuvz Tvyvc Pnegbfvx <wonegbfvxNtznvy.pbz> -->
+<!--X-Date: Mon, 30 May 2011 17:22:48 +0000 -->
+<!--X-Message-Id: 4DE3D2A0.80305@gmail.com -->
+<!--X-Content-Type: multipart/signed -->
+<!--X-Archives-Hash: e490369a0c7e6c279af9baef63897629 -->
+<!--X-Reference: 4DE3D1AB.90203@gmail.com -->
+<!--X-Derived: pgpY9Dc8VMlwJ.pgp -->
+<!--X-Head-End-->
+<mainpage id="lists">
+<title>List Archive: gentoo-soc</title>
+
+<author title="Author">
+ <mail link="listadmin@gentoo.org">Gentoo Mailing List Administrators</mail>
+</author>
+
+<abstract>
+Archive of the gentoo-soc mailing list.
+</abstract>
+
+<version>1.0</version>
+<date>Jul 05, 2011</date>
+
+<chapter>
+<section>
+<body>
+
+<brite>List Archive: gentoo-soc</brite>
+<!--X-Body-Begin-->
+<!--X-User-Header-->
+<!--X-User-Header-End-->
+<!--X-TopPNI-->
+<table>
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml">Next &gt;</uri>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml">&lt; Prev</uri>
+ <uri link="date_2.xml#00000">By Date</uri>
+ <uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+
+<!--X-TopPNI-End-->
+<!--X-MsgBody-->
+<!--X-Subject-Header-Begin-->
+ <tr>
+ <th>Headers:</th>
+ </tr>
+<!--X-Subject-Header-End-->
+<!--X-Head-of-Message-->
+ <tr>
+ <ti>
+ <table>
+ <tr>
+ <ti>
+To:
+ </ti>
+ <ti>
+gentoo-soc@g.o
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+From:
+ </ti>
+ <ti>
+Joachim Filip Bartosik &lt;jbartosik@...&gt;
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Subject:
+ </ti>
+ <ti>
+ Re: Council web app - introduction
+ </ti>
+ </tr>
+
+ <tr>
+ <ti>
+Date:
+ </ti>
+ <ti>
+Mon, 30 May 2011 19:23:44 +0200
+ </ti>
+ </tr>
+
+ </table>
+ </ti>
+ </tr>
+<!--X-Head-of-Message-End-->
+<!--X-Head-Body-Sep-Begin-->
+</table>
+
+<!--X-Head-Body-Sep-End-->
+<!--X-Body-of-Message-->
+<pre plain="true">(Note: this is c&amp;p from my blog [0])
+
+I&#x2019;m going to finish work early (first week of August) so I started
+working three weeks ago.
+
+Some functionality is ready:
+
+ Anyone can view agendas
+ Agenda has state:
+ Open &#x2013; council members and administrators can edit it.
+ Closed for submissions &#x2013; when meeting is close and no one
+should change agenda.
+ Meeting ongoing &#x2013; currently unused.
+ Old &#x2013; old agendas, no one can change them.
+ There is always exactly one agenda in state different then &#x201C;old&#x201D;
+(that is in open, closed for submissions or meeting ongoing state). cal
+this agenda &#x201C;current agenda&#x201D;.
+ There is list of agenda items
+ Every item has fields for title, description, and discussion(s).
+ Any registered user can create a new item. Initially item is
+not assigned to agenda. There is listing of all unassigned (suggested)
+agenda items.
+ Council members can add it to current agenda. Items added to
+agenda don&#x2019;t appear any more on the suggested agenda items list. They
+appear as agenda items for a specific agenda.
+ Council members can reject it. Rejected items don&#x2019;t appear
+on suggested agenda items list.
+ For every agenda item there is voting options list.
+ Anyone can register
+ Registered user can be marked as administrator
+ Registered user can be marked as council member
+ I started work on the IRC bot
+ When someone says #startmeeting (in addition to everything
+MeetBot usually does) it obtains two JSON files containing:
+ Array of nicks allowed to vote on the meeting
+ Array of agenda items. Each agenda item is array. First item
+of that array is title of agenda item. Second item is array with voting
+options for agenda item.
+ This looks a more complicated then it really is, so here is
+an example: suppose current has two two items: &#x2018;What I will eat for
+diner&#x2019; and &#x2018;Should I walk the dog before or after dinner&#x2019;. Voting
+options for the first one are &#x2018;Pizza&#x2019;, &#x2018;Sandwiches&#x2019; and &#x2018;Nothing&#x2019;.
+Choices for the second one are &#x2018;Yes&#x2019; and &#x2018;No&#x2019;. This results in an array:
+
+ [[&quot;What I will eat for diner&quot;, [&quot;Pizza&quot;, &quot;Sandwiches&quot;,
+&quot;Nothing&quot;]], [&quot;Should I walk the dog before or after dinner&quot;, [&quot;Yes&quot;,
+&quot;No&quot;]]]
+ Other commands I added are: #nextitem, #previtem (to change
+currently discussed item), #startvote, #endvote, #vote(to vote).
+ When someone issues #endmeeting command bot posts voting results
+(JSON with hash mapping agenda item title to hash mapping nick to voting
+choice).
+
+For short description of project and sources, read this[1].
+
+[0]
+<uri link="http://ahenobarbi.wordpress.com/2011/05/30/council-application-weekly-report-1/">http://ahenobarbi.wordpress.com/2011/05/30/council-application-weekly-report-1/</uri>
+[1]
+<uri link="http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/">http://ahenobarbi.wordpress.com/2011/05/30/council-application-short-introduction/</uri>
+
+</pre><table>
+ <tr>
+ <th>Attachment:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="pgpY9Dc8VMlwJ.pgp">signature.asc</uri> <e>(OpenPGP digital signature)</e>
+ </ti>
+ </tr>
+</table>
+
+<!--X-Body-of-Message-End-->
+<!--X-MsgBody-End-->
+<!--X-Follow-Ups-->
+
+<table>
+ <tr>
+ <th>Replies:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_b5b2b992bbbfb4f5e7532db90af8f28a.xml"> Council application &#x2013; weekly report #5</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_59e3fb9cae272cb4fea7a40d6940d7b7.xml"> Council web app - weekly report #4</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml"> Council web app - weekly report #2</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-Follow-Ups-End-->
+<!--X-References-->
+ <tr>
+ <th>References:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri><br/>
+ -- <e>Joachim Filip Bartosik</e>
+ </ti>
+ </tr>
+
+<!--X-References-End-->
+<!--X-BotPNI-->
+ <tr>
+ <th>Navigation:</th>
+ </tr>
+ <tr>
+ <ti>
+ <uri link="/">Lists</uri>:
+ <uri link="/gentoo-soc/">gentoo-soc</uri>:
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml">&lt; Prev</uri>
+ <uri link="index.xml#00000">By Thread</uri>
+ <uri link="msg_181309f75a15da95fffdf921bf313b87.xml">Next &gt;</uri>
+ <uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml">&lt; Prev</uri>
+ <uri link="date_2.xml#00000">By Date</uri>
+ <uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml">Next &gt;</uri>
+ </ti>
+ </tr>
+ <tr>
+ <th>Previous by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by thread:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_181309f75a15da95fffdf921bf313b87.xml"> Council web app - weekly report #2</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Previous by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_347d1f7e7149aafe73aa0cccdffd7b8c.xml"> Council web app - introduction</uri></ti>
+ </tr>
+
+ <tr>
+ <th>Next by date:</th>
+ </tr>
+ <tr>
+ <ti><uri link="msg_54105881bc9a1974c39d5f4a34bc40b3.xml"> Rework Porthole to use the new public portage API -- Weekly report #1</uri></ti>
+ </tr>
+
+</table>
+
+<!--X-BotPNI-End-->
+<!--X-User-Footer-->
+<!--X-User-Footer-End-->
+
+</body>
+</section>
+</chapter>
+</mainpage>
diff --git a/site/spec/models/agenda_item_spec.rb b/site/spec/models/agenda_item_spec.rb
index 72ee0bb..961b663 100644
--- a/site/spec/models/agenda_item_spec.rb
+++ b/site/spec/models/agenda_item_spec.rb
@@ -1,4 +1,5 @@
require 'spec_helper'
+require 'support/http_stub.rb'
describe AgendaItem do
it 'should allow all registered users to create' do
@@ -119,4 +120,30 @@ describe AgendaItem do
item.errors[:timelimits].should_not be_nil
end
end
+
+ describe '.update_discussion_time' do
+ it 'should do nothing if discussion is not url to discussion on gentoo archives' do
+ items = [Factory(:agenda_item),
+ Factory(:agenda_item, :discussion_time => 'something'),
+ Factory(:agenda_item, :discussion => 'http://archives.gentoo.org/gentoo-bsd/'),
+ Factory(:agenda_item, :discussion_time => 'something',
+ :discussion => 'http://archives.gentoo.org/gentoo-bsd/')]
+ items.each do |item|
+ lambda {
+ item.send(:update_discussion_time)
+ }.should_not change(item, :discussion_time)
+ end
+ end
+
+
+
+ it 'should set discussion_time properly if discussion is url to discussion on gentoo archives' do
+ item = Factory(:agenda_item,
+ :discussion =>
+ 'http://archives.gentoo.org/gentoo-soc/msg_e490369a0c7e6c279af9baef63897629.xml')
+ lambda {
+ item.send(:update_discussion_time)
+ }.should change(item, :discussion_time).from('').to('From 2011.05.30 to 2011.06.28, 28 full days')
+ end
+ end
end
diff --git a/site/spec/support/http_stub.rb b/site/spec/support/http_stub.rb
new file mode 100644
index 0000000..ba6565e
--- /dev/null
+++ b/site/spec/support/http_stub.rb
@@ -0,0 +1,22 @@
+class ResponseStub
+ def initialize(filename)
+ @filename = filename
+ end
+ def body
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../files", @filename))
+ File.open(path).read
+ end
+end
+
+class RespStub
+ def get(path)
+ filename = path.split('/').last
+ ResponseStub.new(filename)
+ end
+end
+
+class Net::HTTP
+ def self.start(serv)
+ yield(RespStub.new)
+ end
+end