Created
August 7, 2009 19:07
-
-
Save edavis10/164109 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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