From 886f6cfbcc6b3fc888614cbd247ac85e877b0859 Mon Sep 17 00:00:00 2001 From: Abraham Kuri Date: Wed, 29 Jan 2014 16:07:59 -0600 Subject: [PATCH] Adds invitations_counter cache for triggering the number of invitations sent --- lib/devise_invitable/model.rb | 4 ++-- lib/generators/active_record/templates/migration.rb | 2 ++ test/models/invitable_test.rb | 8 ++++++++ test/rails_app/db/migrate/20100401102949_create_tables.rb | 5 +++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/devise_invitable/model.rb b/lib/devise_invitable/model.rb index d25c7fe2..4f02ed52 100644 --- a/lib/devise_invitable/model.rb +++ b/lib/devise_invitable/model.rb @@ -30,9 +30,9 @@ module Invitable included do include ::DeviseInvitable::Inviter if Devise.invited_by_class_name - belongs_to :invited_by, :class_name => Devise.invited_by_class_name + belongs_to :invited_by, :class_name => Devise.invited_by_class_name, :counter_cache => :invitations_count else - belongs_to :invited_by, :polymorphic => true + belongs_to :invited_by, :polymorphic => true, :counter_cache => :invitations_count end include ActiveSupport::Callbacks diff --git a/lib/generators/active_record/templates/migration.rb b/lib/generators/active_record/templates/migration.rb index 6841d8c0..36f1d794 100644 --- a/lib/generators/active_record/templates/migration.rb +++ b/lib/generators/active_record/templates/migration.rb @@ -7,6 +7,8 @@ def up t.datetime :invitation_accepted_at t.integer :invitation_limit t.references :invited_by, :polymorphic => true + t.integer :invitations_count, default: 0 + t.index :invitations_count t.index :invitation_token, :unique => true # for invitable t.index :invited_by_id end diff --git a/test/models/invitable_test.rb b/test/models/invitable_test.rb index 29cec4d5..b281877f 100644 --- a/test/models/invitable_test.rb +++ b/test/models/invitable_test.rb @@ -12,6 +12,14 @@ def setup end test 'should not generate the raw invitation token after creating a record' do + current_user = new_user + 2.times do |index| + User.invite!({:email => "valid#{index}@email.com"}, current_user) + end + assert_equal current_user.reload.invitations_count, 2 + end + + test 'should update the invitations count counter cache' do assert_nil new_user.raw_invitation_token end diff --git a/test/rails_app/db/migrate/20100401102949_create_tables.rb b/test/rails_app/db/migrate/20100401102949_create_tables.rb index f9e03921..e70e2f1a 100644 --- a/test/rails_app/db/migrate/20100401102949_create_tables.rb +++ b/test/rails_app/db/migrate/20100401102949_create_tables.rb @@ -27,15 +27,20 @@ def change t.integer :invitation_limit t.integer :invited_by_id t.string :invited_by_type + t.integer :invitations_count, :default => 0 t.timestamps end add_index :users, :invitation_token, :unique => true + add_index :users, :invitations_count create_table :admins do |t| ## Database authenticatable t.string :email, :null => true, :default => "" t.string :encrypted_password, :null => true, :default => "" + + t.integer :invitations_count, :default => 0 end + add_index :admins, :invitations_count end end