From 6f09343e85ab23c4d81f827bbd47a720f3e2cf7b Mon Sep 17 00:00:00 2001 From: ankonym Date: Fri, 2 Oct 2015 20:58:29 +0200 Subject: Update rake task to allow generation of multi-use invites The rake task now takes a second (optional) argument that sets the number of uses per invite code. If this is omitted, the default number of uses is 1. (This commit also contains some minor code cleanup that removes some stuff that I'd commented out but not removed.) --- app/models/invite_code_validator.rb | 8 +------- lib/tasks/invite_code.rake | 21 +++++++++++++++------ test/unit/invite_code_test.rb | 17 ----------------- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/app/models/invite_code_validator.rb b/app/models/invite_code_validator.rb index d52e698..9dfe6fa 100644 --- a/app/models/invite_code_validator.rb +++ b/app/models/invite_code_validator.rb @@ -1,4 +1,5 @@ class InviteCodeValidator < ActiveModel::Validator + def validate(user) user_invite_code = InviteCode.find_by_invite_code user.invite_code @@ -8,9 +9,6 @@ class InviteCodeValidator < ActiveModel::Validator elsif has_no_uses_left?(user_invite_code) add_error_to_user("This code has already been used", user) - - # elsif count_greater_than_zero?(user_invite_code) - # add_error_to_user("This code has already been used", user) end end @@ -23,10 +21,6 @@ class InviteCodeValidator < ActiveModel::Validator code.invite_count >= code.invite_max_uses end - # def count_greater_than_zero?(code) - # code.invite_count > 0 - # end - def add_error_to_user(error, user) user.errors[:invite_code] << error end diff --git a/lib/tasks/invite_code.rake b/lib/tasks/invite_code.rake index f3bafac..6623640 100644 --- a/lib/tasks/invite_code.rake +++ b/lib/tasks/invite_code.rake @@ -1,16 +1,25 @@ desc "Generate a batch of invite codes" -task :generate_invites, [:n] => :environment do |task, args| +task :generate_invites, [:n, :u] => :environment do |task, args| - codes = args.n - codes = codes.to_i + codes = args.n + codes = codes.to_i - codes.times do |x| + if args.u == nil + max_uses = 1 + + elsif + max_uses = args.u + max_uses = max_uses.to_i + end + + codes.times do |x| x = InviteCode.new + x.invite_max_uses = max_uses x.save - puts "#{x.invite_code} Code generated." - + puts "#{x.invite_code} Code generated with #{x.invite_max_uses} uses." end + end diff --git a/test/unit/invite_code_test.rb b/test/unit/invite_code_test.rb index 7e14a03..adaf397 100644 --- a/test/unit/invite_code_test.rb +++ b/test/unit/invite_code_test.rb @@ -20,23 +20,6 @@ class InviteCodeTest < ActiveSupport::TestCase assert_equal code1.invite_count, 0 end - - # test "Invite count >0 is not accepted for new account signup" do - # validator = InviteCodeValidator.new nil - # - # user_code = InviteCode.new - # user_code.invite_count = 1 - # user_code.save - # - # user = FactoryGirl.build :user - # user.invite_code = user_code.invite_code - # - # validator.validate(user) - # - # assert_equal ["This code has already been used"], user.errors[:invite_code] - # - # end - test "Invite count >= invite max uses is not accepted for new account signup" do validator = InviteCodeValidator.new nil -- cgit v1.2.3