Skip to content

Instantly share code, notes, and snippets.

@edavis10
Created August 7, 2009 19:07
Show Gist options
  • Save edavis10/164109 to your computer and use it in GitHub Desktop.
Save edavis10/164109 to your computer and use it in GitHub Desktop.
require 'ostruct'
class BugMash
# Prizes last updated 2009-08-07 12:04pm PDT
# http://wiki.railsbridge.org/projects/railsbridge/wiki/BugMash?version=41
def prizes
[
OpenStruct.new(:sponsor => "Jeff Cohen", :prize => "$100-off coupon code for any public Purple Workshops workshop"),
OpenStruct.new(:sponsor => "Mike Mangino", :prize => "Developing Facebook Platform Applications with Rails"),
OpenStruct.new(:sponsor => "Mike Gunderloy", :prize => "Rails Rescue Handbook"),
OpenStruct.new(:sponsor => "Mike Gunderloy", :prize => "Rails Freelancing Handbook"),
OpenStruct.new(:sponsor => "Noel Rappin", :prize => "Copy #1: Rails Test Prescriptions"),
OpenStruct.new(:sponsor => "Noel Rappin", :prize => "Copy #2: Rails Test Prescriptions"),
OpenStruct.new(:sponsor => "Jeremy McAnally", :prize => "Signed copy of Ruby in Practice"),
OpenStruct.new(:sponsor => "Luke Crawford", :prize => "$100 credit at Prgmr (VPS hosting)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #1: 1yr Lighthouse (bronze)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #2: 1yr Lighthouse (bronze)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #3: 1yr Lighthouse (bronze)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #1: 1yr Tender Support (plus)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #2: 1yr Tender Support (plus)"),
OpenStruct.new(:sponsor => "ENTP", :prize => "Copy #3: 1yr Tender Support (plus)"),
OpenStruct.new(:sponsor => "ActionRails", :prize => "1 month (4 hours) of Developer Hotline support"),
OpenStruct.new(:sponsor => "RimuHosting", :prize => "Copy #1: $200 VPS hosting credits"),
OpenStruct.new(:sponsor => "RimuHosting", :prize => "Copy #2: $200 VPS hosting credits"),
OpenStruct.new(:sponsor => "RimuHosting", :prize => "Copy #3: $200 VPS hosting credits"),
OpenStruct.new(:sponsor => "Exceptional", :prize => "1-year Mini plan in the prize pool"),
OpenStruct.new(:sponsor => "Devver", :prize => "Copy #1: Beta invite"),
OpenStruct.new(:sponsor => "Devver", :prize => "Copy #2: Beta invite"),
OpenStruct.new(:sponsor => "Devver", :prize => "Copy #3: Beta invite"),
OpenStruct.new(:sponsor => "Slicehost", :prize => "$100 hosting credit"),
OpenStruct.new(:sponsor => "GitHub", :prize => "Copy #1: one-year Medium account"),
OpenStruct.new(:sponsor => "GitHub", :prize => "Copy #2: one-year Medium account"),
OpenStruct.new(:sponsor => "GitHub", :prize => "Copy #3: one-year Medium account"),
OpenStruct.new(:sponsor => "Uservoice", :prize => "Two months of gold service"),
OpenStruct.new(:sponsor => "Sterling Rose Design", :prize => "Ten hours of free design work on any project")
]
end
# Users
def example_users
{
"User A" => 1_500,
"User B" => 500,
"User C" => 200,
"User D" => 1200,
"User E" => 25
}
end
def to_tickets(users)
tickets = []
users.each do |user, points|
number_of_tickets = (points.to_f / 100.0).floor # TODO: Round up or down?
(1..number_of_tickets).each do
tickets << user
end
end
tickets
end
def raffle(users=nil)
users ||= example_users
raffle_pool = to_tickets(users).sort_by {rand}
winners = []
prizes.each do |prize|
winners << OpenStruct.new(:user => raffle_pool.pop, :prize => prize)
end
winners
end
end
### Example usage
b = BugMash.new
# Send raffle a {user => points} hash
b.raffle.each do |winner|
puts "Congrats #{winner.user}, you've won #{winner.prize.prize} from #{winner.prize.sponsor}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment