hardbap (owner)

Fork Of

Revisions

gist: 168382 Download_button fork
public
Public Clone URL: git://gist.github.com/168382.git
Embed All Files: show embed
bug_mash_prizes.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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