blob: c2f2c008d192770fc3c31128a627525aee4d9e65 [file] [log] [blame]
#
# Helpers for building agenda items to be posted:
# committee-list: list all of the committees
# committer-list: list all of the committers on a given committee
# committee-members: list chair and members of a committee
# change-chair: produce a draft change chair resolution
#
# debugging support: enable script to be run from the command line
if $0 == __FILE__
$LOAD_PATH.unshift '/srv/whimsy/lib'
Dir.chdir File.expand_path('../..', __dir__)
require './helpers/string'
require 'whimsy/asf'
require 'erubis'
require 'ostruct'
require 'pp'
$SAFE = 1
ARGV.each do |arg|
name, value = arg.split('=', 2)
next unless name =~ /^\w+$/ and value
instance_variable_set "@#{name}", value
end
binding.local_variable_set :env, OpenStruct.new(user: ENV['user'])
end
ASF::Committee.load_committee_info
output = case @request
when 'committee-list'
id = env.user
committees = {chair: [], member: [], rest: []}
ASF::Committee.pmcs.sort_by {|pmc| pmc.id}.each do |pmc|
if pmc.chairs.any? {|chair| chair[:id] == id}
committees[:chair] << pmc.id
elsif pmc.info.include? id
committees[:member] << pmc.id
else
committees[:rest] << pmc.id
end
end
committees[:chair] + committees[:member] + committees[:rest]
when 'committer-list'
committee = ASF::Committee[@pmc]
return unless committee
roster = committee.committers
roster = roster.map {|person| {name: person.public_name, id: person.id}}
{members: roster.sort_by {|person| person[:name]}}
when 'committee-members'
committee = ASF::Committee[@pmc]
return unless committee
chair = committee.chairs.first
return unless chair
roster = committee.roster
roster.delete(chair[:id])
roster = roster.map {|id, info| {id: id}.merge(info)}
{chair: chair, members: roster}
when 'change-chair'
@committee = ASF::Committee[@pmc]
return unless @committee
@outgoing_chair = ASF::Person[@committee.chairs.first[:id]]
@incoming_chair = ASF::Person[@chair]
return unless @outgoing_chair and @incoming_chair
template = File.read('templates/change-chair.erb').untaint
draft = Erubis::Eruby.new(template).result(binding)
{draft: draft.reflow(0, 71)}
when 'establish'
@people = @people.split(',').map {|id| ASF::Person[id]}
@people.sort_by! {|person| ASF::Person.sortable_name(person.public_name)}
@description = @description.strip.sub(/\.\z/, '')
@chair = ASF::Person[@chair]
@pmcname.gsub!(/\b\w/) {|c| c.upcase} unless @pmcname =~ /[A-Z]/
template = File.read('templates/establish.erb').untaint
draft = Erubis::Eruby.new(template).result(binding)
names = draft[/^(\s*\*.*\n)+/]
if names
draft[/^(\s*\*.*\n)+/] = "\n<-@->\n"
draft = draft.reflow(0, 71)
draft.sub! "\n<-@->\n", names
else
draft = draft.reflow(0, 71)
end
{draft: draft, names: names}
when 'terminate'
@committee = ASF::Committee[@pmc]
return unless @committee
template = File.read('templates/terminate.erb').untaint
draft = Erubis::Eruby.new(template).result(binding)
{draft: draft.reflow(0, 71)}
end
puts output if $0 == __FILE__
output