diff --git a/config/initializers/noosfero_extensions.rb b/config/initializers/noosfero_extensions.rb index 37791a8..eb7aa89 100644 --- a/config/initializers/noosfero_extensions.rb +++ b/config/initializers/noosfero_extensions.rb @@ -1 +1,2 @@ require 'noosfero/role_assignment_ext' +require 'noosfero/action_tracker_ext' diff --git a/lib/noosfero/action_tracker_ext.rb b/lib/noosfero/action_tracker_ext.rb new file mode 100644 index 0000000..ac0d8c9 --- /dev/null +++ b/lib/noosfero/action_tracker_ext.rb @@ -0,0 +1,21 @@ +Rails.configuration.to_prepare do + ActionTracker::Record.module_eval do + extend CacheCounterHelper + + after_create do |record| + update_cache_counter(:activities_count, record.user, 1) + if record.target.kind_of?(Organization) + update_cache_counter(:activities_count, record.target, 1) + end + end + + after_destroy do |record| + if record.created_at >= ActionTracker::Record::RECENT_DELAY.days.ago + update_cache_counter(:activities_count, record.user, -1) + if record.target.kind_of?(Organization) + update_cache_counter(:activities_count, record.target, -1) + end + end + end + end +end diff --git a/test/unit/action_tracker_ext_test.rb b/test/unit/action_tracker_ext_test.rb new file mode 100644 index 0000000..b7ae1d8 --- /dev/null +++ b/test/unit/action_tracker_ext_test.rb @@ -0,0 +1,60 @@ +require File.dirname(__FILE__) + '/../test_helper' + +class ActionTrackerExtTest < ActiveSupport::TestCase + should 'increase person activities_count on new activity' do + person = fast_create(Person) + assert_difference person, :activities_count, 1 do + ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) + person.reload + end + end + + should 'decrease person activities_count on activity removal' do + person = fast_create(Person) + record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) + assert_difference person, :activities_count, -1 do + record.destroy + person.reload + end + end + + should 'not decrease person activities_count on activity removal after the recent delay' do + person = fast_create(Person) + record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) + record.created_at = record.created_at - ActionTracker::Record::RECENT_DELAY.days - 1.day + record.save! + assert_no_difference person, :activities_count do + record.destroy + person.reload + end + end + + should 'increase organization activities_count on new activity' do + person = fast_create(Person) + organization = fast_create(Organization) + assert_difference organization, :activities_count, 1 do + ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization + organization.reload + end + end + + should 'decrease organization activities_count on activity removal' do + person = fast_create(Person) + organization = fast_create(Organization) + record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization + assert_difference organization, :activities_count, -1 do + record.destroy + organization.reload + end + end + + should 'not decrease organization activities_count on activity removal after the recent delay' do + person = fast_create(Person) + organization = fast_create(Organization) + record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization, :created_at => (ActionTracker::Record::RECENT_DELAY + 1).days.ago + assert_no_difference organization, :activities_count do + record.destroy + organization.reload + end + end +end diff --git a/test/unit/organization_test.rb b/test/unit/organization_test.rb index 0bce8ed..a6ba204 100644 --- a/test/unit/organization_test.rb +++ b/test/unit/organization_test.rb @@ -406,35 +406,6 @@ class OrganizationTest < ActiveSupport::TestCase assert !organization.visible end - should 'increase activities_count on new activity' do - person = fast_create(Person) - organization = fast_create(Organization) - assert_difference organization, :activities_count, 1 do - ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization - organization.reload - end - end - - should 'decrease activities_count on activity removal' do - person = fast_create(Person) - organization = fast_create(Organization) - record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization - assert_difference organization, :activities_count, -1 do - record.destroy - organization.reload - end - end - - should 'not decrease activities_count on activity removal after the recent delay' do - person = fast_create(Person) - organization = fast_create(Organization) - record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => organization, :created_at => (ActionTracker::Record::RECENT_DELAY + 1).days.ago - assert_no_difference organization, :activities_count do - record.destroy - organization.reload - end - end - should 'increase members_count on new membership' do member = fast_create(Person) organization = fast_create(Organization) diff --git a/test/unit/person_test.rb b/test/unit/person_test.rb index 3335fad..ac684e9 100644 --- a/test/unit/person_test.rb +++ b/test/unit/person_test.rb @@ -1428,33 +1428,4 @@ class PersonTest < ActiveSupport::TestCase person.reload end end - - should 'increase activities_count on new activity' do - person = fast_create(Person) - assert_difference person, :activities_count, 1 do - ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) - person.reload - end - end - - should 'decrease activities_count on activity removal' do - person = fast_create(Person) - record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) - assert_difference person, :activities_count, -1 do - record.destroy - person.reload - end - end - - should 'not decrease activities_count on activity removal after the recent delay' do - person = fast_create(Person) - record = ActionTracker::Record.create! :verb => :leave_scrap, :user => person, :target => fast_create(Profile) - record.created_at = record.created_at - ActionTracker::Record::RECENT_DELAY.days - 1.day - record.save! - assert_no_difference person, :activities_count do - record.destroy - person.reload - end - end - end diff --git a/vendor/plugins/action_tracker/lib/action_tracker_model.rb b/vendor/plugins/action_tracker/lib/action_tracker_model.rb index 352ee0b..cff4d08 100644 --- a/vendor/plugins/action_tracker/lib/action_tracker_model.rb +++ b/vendor/plugins/action_tracker/lib/action_tracker_model.rb @@ -1,8 +1,5 @@ module ActionTracker class Record < ActiveRecord::Base - - extend CacheCounterHelper - set_table_name 'action_tracker' belongs_to :user, :polymorphic => true @@ -16,22 +13,6 @@ module ActionTracker validates_presence_of :user validate :user_existence - after_create do |record| - update_cache_counter(:activities_count, record.user, 1) - if record.target.kind_of?(Organization) - update_cache_counter(:activities_count, record.target, 1) - end - end - - after_destroy do |record| - if record.created_at >= RECENT_DELAY.days.ago - update_cache_counter(:activities_count, record.user, -1) - if record.target.kind_of?(Organization) - update_cache_counter(:activities_count, record.target, -1) - end - end - end - def user_existence errors.add(:user, "user doesn't exists") if user && !user.class.exists?(user) end -- libgit2 0.21.2