Expand BadgeRewarder functionality (#540)

- Refactor badge rewarder
- Add contributor badge functionality
- Create BadgeRewarder rake tasks
This commit is contained in:
Ben Halpern 2018-08-30 16:03:38 -04:00 committed by Mac Siri
parent c0c07a0085
commit f1abd283f9
3 changed files with 37 additions and 4 deletions

View file

@ -25,12 +25,20 @@ module BadgeRewarder
end
end
def self.reward_top_seven_badges(usernames)
def self.award_top_seven_badges(usernames, message_markdown = "Congrats!!!")
award_badges(usernames, "top-7", message_markdown)
end
def self.award_contributor_badges(usernames, message_markdown = "Thank you so much for your contributions!")
award_badges(usernames, "dev-contributor", message_markdown)
end
def self.award_badges(usernames, slug, message_markdown)
User.where(username: usernames).each do |user|
BadgeAchievement.create(
user_id: user.id,
badge_id: Badge.find_by_slug("top-7").id,
rewarding_context_message_markdown: "Congrats!!!",
badge_id: Badge.find_by_slug(slug).id,
rewarding_context_message_markdown: message_markdown,
)
user.save
end

View file

@ -75,3 +75,20 @@ task award_badges: :environment do
BadgeRewarder.award_yearly_club_badges
BadgeRewarder.award_beloved_comment_badges
end
# rake award_top_seven_badges["ben jess peter mac liana andy"]
task :award_top_seven_badges, [:arg1] => :environment do |t, args|
usernames = args[:arg1].split(" ")
puts "Awarding top-7 badges to #{usernames}"
BadgeRewarder.award_top_seven_badges(usernames)
puts "Done!"
end
# rake award_contributor_badges["ben jess peter mac liana andy"]
task :award_contributor_badges, [:arg1] => :environment do |t, args|
usernames = args[:arg1].split(" ")
puts "Awarding dev-contributor badges to #{usernames}"
BadgeRewarder.award_contributor_badges(usernames)
puts "Done!"
end

View file

@ -34,7 +34,15 @@ RSpec.describe BadgeRewarder do
badge = create(:badge, title: "Top 7")
user = create(:user)
user_other = create(:user)
described_class.reward_top_seven_badges([user.username, user_other.username])
described_class.award_top_seven_badges([user.username, user_other.username])
expect(BadgeAchievement.where(badge_id: badge.id).size).to eq(2)
end
it "rewards contributor badges" do
badge = create(:badge, title: "Dev Contributor")
user = create(:user)
user_other = create(:user)
described_class.award_contributor_badges([user.username, user_other.username])
expect(BadgeAchievement.where(badge_id: badge.id).size).to eq(2)
end
end