From da035809ba9510854d12ecf6ba1fa32eec0e50b3 Mon Sep 17 00:00:00 2001 From: Courteney Ervin Date: Wed, 1 Apr 2015 00:54:44 -0400 Subject: [PATCH 1/5] Add raffle logic to Event class --- app/models/event.rb | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/app/models/event.rb b/app/models/event.rb index c7e907d8..26687394 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -115,6 +115,44 @@ def fetch_engagement_stats stats end + def create_raffle_tickets + tickets = [] + + attendee_github_stats.each do |email, stats| + contributions = stats ? stats[:pull_requests] + stats[:issues] : 0 + contributions.times { tickets << email } + end + + tickets + end + + def select_raffle_winner(tickets = create_raffle_tickets) + winner = User.find_by_email(tickets.sample) + { email: winner.email, name: winner.profile.name } if winner + end + + def print_raffle_winners(winners) + winner_text = "" + winners.compact! + + winners.each_with_index do |winner, i| + winner_text += "#{i+1}. #{winner[:name]} - #{winner[:email]}\n" + end + + winner_text = "This event had no contributions." if winner_text.blank? + puts winner_text + end + + def raffle(num_winners = 2) + winners = [] + tickets = create_raffle_tickets + + num_winners.times { winners << select_raffle_winner(tickets) } if tickets.present? + + print_raffle_winners(winners) + tickets + end + def upcoming? true if end_date >= Time.now end From b8f4212ce62529c9965e2c8a95f2fd6535a8fc26 Mon Sep 17 00:00:00 2001 From: Courteney Ervin Date: Fri, 3 Apr 2015 11:51:23 -0400 Subject: [PATCH 2/5] Return user with profile to minimize db queries --- app/models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index 26687394..a2e4bc38 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -127,7 +127,7 @@ def create_raffle_tickets end def select_raffle_winner(tickets = create_raffle_tickets) - winner = User.find_by_email(tickets.sample) + winner = User.find_by_email(tickets.sample).joins(:profile) { email: winner.email, name: winner.profile.name } if winner end From b4a08c71ba0dd44cb7247f391a83a19e0379aee5 Mon Sep 17 00:00:00 2001 From: Courteney Ervin Date: Fri, 3 Apr 2015 11:56:44 -0400 Subject: [PATCH 3/5] Use the Rails logger instead of STDOUT --- app/models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index a2e4bc38..cbd84053 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -140,7 +140,7 @@ def print_raffle_winners(winners) end winner_text = "This event had no contributions." if winner_text.blank? - puts winner_text + Rails.logger.info(winner_text) end def raffle(num_winners = 2) From 30ad85b885170617032bea0faeb0af58dcc20193 Mon Sep 17 00:00:00 2001 From: Courteney Ervin Date: Fri, 3 Apr 2015 12:01:11 -0400 Subject: [PATCH 4/5] Adjust syntax according to HoundCI recommendations --- app/models/event.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index cbd84053..218cd364 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -147,7 +147,9 @@ def raffle(num_winners = 2) winners = [] tickets = create_raffle_tickets - num_winners.times { winners << select_raffle_winner(tickets) } if tickets.present? + if tickets.present? + num_winners.times { winners << select_raffle_winner(tickets) } + end print_raffle_winners(winners) tickets From bf2373b5abc2d9b674228f4aee4c74bbf1fc9b4e Mon Sep 17 00:00:00 2001 From: Courteney Ervin Date: Fri, 10 Apr 2015 10:45:49 -0700 Subject: [PATCH 5/5] Remove join --- app/models/event.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/event.rb b/app/models/event.rb index 218cd364..62199ab6 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -127,7 +127,7 @@ def create_raffle_tickets end def select_raffle_winner(tickets = create_raffle_tickets) - winner = User.find_by_email(tickets.sample).joins(:profile) + winner = User.find_by_email(tickets.sample) { email: winner.email, name: winner.profile.name } if winner end