Skip to content

Instantly share code, notes, and snippets.

@reidab
Created June 16, 2014 00:57
Show Gist options
  • Save reidab/41f938e9ed2a56502674 to your computer and use it in GitHub Desktop.
Save reidab/41f938e9ed2a56502674 to your computer and use it in GitHub Desktop.
# require 'rubygems'
# require 'fastercsv'
require 'csv'
ATTENDEE_CSV = 'Attendees.csv'
BADGE_CSV_OUTPUT = 'Badges.csv'
AttendeeStruct = Struct.new(:first_name,
:last_name,
:company,
:ticket_type,
:discount_code,
:t_shirt_size,
:age,
:gender,
:food_preference,
:years_in_open_source,
:attended_last_year,
:evening_reception,
:other_requests,
:one_day_pass_day,
:twitter,
:policies,
:order_number,
:coc_agreement)
class Attendee < AttendeeStruct
def initialize(row)
(self.last_name, self.first_name, self.ticket_type, self.discount_code, self.order_number,
self.twitter, self.age, self.gender, self.years_in_open_source, self.attended_last_year,
self.food_preference, self.other_requests, self.one_day_pass_day,
self.t_shirt_size, self.company) = *row
puts row.inspect
self.discount_code = "" unless self.discount_code
self.twitter = "@#{self.twitter.gsub('@','')}" if self.twitter && self.twitter != ""
self.one_day_pass_day = self.one_day_pass_day.split(' ').first if self.one_day_pass_day && self.one_day_pass_day != ""
end
def speaker?; self.discount_code.include?('speaker_'); end
def volunteer?; self.discount_code.include?('volunteer_'); end
def sponsor?; self.discount_code.include?('sponsor_'); end
def media?; self.discount_code.include?('media_'); end
def badge_type
[ speaker? && "Speaker",
volunteer? && "Volunteer",
sponsor? && "Sponsor",
media? && "Media"
].select{|t| t}.join(' / ')
end
def name
[self.first_name, self.last_name].compact.join("___")
end
end
rows = CSV.read(ATTENDEE_CSV, :encoding => 'windows-1251:utf-8')
rows.shift
attendees = rows.map{|row| Attendee.new(row) }
File.delete(BADGE_CSV_OUTPUT) if File.exists?(BADGE_CSV_OUTPUT)
CSV.open(BADGE_CSV_OUTPUT, "w") do |csv|
csv << ['First Name', 'Last Name', 'Company', 'Badge Type', 'Order Number', 'Twitter', 'Day']
attendees.sort{|a,b| a.badge_type <=> b.badge_type }.each do |attendee|
csv << [attendee.first_name, attendee.last_name, attendee.company, attendee.badge_type, attendee.order_number, attendee.twitter, attendee.one_day_pass_day]
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment