Commit 2827fff7c76aa180de0323ab2b99339fe4e71cf9
Exists in
master
and in
9 other branches
Merge branch 'global-user' into 'master'
Global thread-safe current user for models use See merge request !362
Showing
30 changed files
with
122 additions
and
587 deletions
Show diff stats
app/models/user.rb
| @@ -15,6 +15,14 @@ class User < ActiveRecord::Base | @@ -15,6 +15,14 @@ class User < ActiveRecord::Base | ||
| 15 | :email => {:label => _('Email'), :weight => 5}, | 15 | :email => {:label => _('Email'), :weight => 5}, |
| 16 | } | 16 | } |
| 17 | 17 | ||
| 18 | + # see http://stackoverflow.com/a/2513456/670229 | ||
| 19 | + def self.current | ||
| 20 | + Thread.current[:current_user] | ||
| 21 | + end | ||
| 22 | + def self.current=(user) | ||
| 23 | + Thread.current[:current_user] = user | ||
| 24 | + end | ||
| 25 | + | ||
| 18 | def self.[](login) | 26 | def self.[](login) |
| 19 | self.find_by_login(login) | 27 | self.find_by_login(login) |
| 20 | end | 28 | end |
config/initializers/action_tracker.rb
| @@ -32,6 +32,8 @@ ActionTrackerConfig.verbs = { | @@ -32,6 +32,8 @@ ActionTrackerConfig.verbs = { | ||
| 32 | }, | 32 | }, |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | -ActionTrackerConfig.current_user_method = :current_person | 35 | +ActionTrackerConfig.current_user = proc do |
| 36 | + User.current.person rescue nil | ||
| 37 | +end | ||
| 36 | 38 | ||
| 37 | ActionTrackerConfig.timeout = 24.hours | 39 | ActionTrackerConfig.timeout = 24.hours |
lib/authenticated_system.rb
| 1 | module AuthenticatedSystem | 1 | module AuthenticatedSystem |
| 2 | + | ||
| 2 | protected | 3 | protected |
| 4 | + | ||
| 5 | + # See impl. from http://stackoverflow.com/a/2513456/670229 | ||
| 6 | + def self.included? base | ||
| 7 | + base.around_filter do | ||
| 8 | + begin | ||
| 9 | + User.current = current_user | ||
| 10 | + yield | ||
| 11 | + ensure | ||
| 12 | + # to address the thread variable leak issues in Puma/Thin webserver | ||
| 13 | + User.current = nil | ||
| 14 | + end | ||
| 15 | + end | ||
| 16 | + end | ||
| 17 | + | ||
| 3 | # Returns true or false if the user is logged in. | 18 | # Returns true or false if the user is logged in. |
| 4 | # Preloads @current_user with the user model if they're logged in. | 19 | # Preloads @current_user with the user model if they're logged in. |
| 5 | def logged_in? | 20 | def logged_in? |
| @@ -8,7 +23,9 @@ module AuthenticatedSystem | @@ -8,7 +23,9 @@ module AuthenticatedSystem | ||
| 8 | 23 | ||
| 9 | # Accesses the current user from the session. | 24 | # Accesses the current user from the session. |
| 10 | def current_user | 25 | def current_user |
| 11 | - @current_user ||= (session[:user] && User.find_by_id(session[:user])) || nil | 26 | + @current_user ||= begin |
| 27 | + User.current = (session[:user] && User.find_by_id(session[:user])) || nil | ||
| 28 | + end | ||
| 12 | end | 29 | end |
| 13 | 30 | ||
| 14 | # Store the given user in the session. | 31 | # Store the given user in the session. |
| @@ -19,7 +36,7 @@ module AuthenticatedSystem | @@ -19,7 +36,7 @@ module AuthenticatedSystem | ||
| 19 | session[:user] = new_user.id | 36 | session[:user] = new_user.id |
| 20 | new_user.register_login | 37 | new_user.register_login |
| 21 | end | 38 | end |
| 22 | - @current_user = new_user | 39 | + @current_user = User.current = new_user |
| 23 | end | 40 | end |
| 24 | 41 | ||
| 25 | # Check if the user is authorized. | 42 | # Check if the user is authorized. |
test/action_tracker_test_helper.rb
test/functional/profile_controller_test.rb
| @@ -703,13 +703,13 @@ class ProfileControllerTest < ActionController::TestCase | @@ -703,13 +703,13 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 703 | p1= create_user.person | 703 | p1= create_user.person |
| 704 | p2= create_user.person | 704 | p2= create_user.person |
| 705 | 705 | ||
| 706 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p1) | 706 | + User.current = p1.user |
| 707 | scrap1 = create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p2)) | 707 | scrap1 = create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p2)) |
| 708 | 708 | ||
| 709 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 709 | + User.current = p2.user |
| 710 | scrap2 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p1)) | 710 | scrap2 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p1)) |
| 711 | 711 | ||
| 712 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p1) | 712 | + User.current = p1.user |
| 713 | create(TinyMceArticle, :profile => p1, :name => 'An article about free software') | 713 | create(TinyMceArticle, :profile => p1, :name => 'An article about free software') |
| 714 | a1 = ActionTracker::Record.last | 714 | a1 = ActionTracker::Record.last |
| 715 | 715 | ||
| @@ -738,10 +738,10 @@ class ProfileControllerTest < ActionController::TestCase | @@ -738,10 +738,10 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 738 | scrap1 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) | 738 | scrap1 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) |
| 739 | scrap2 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => profile)) | 739 | scrap2 = create(Scrap, defaults_for_scrap(:sender => p2, :receiver => profile)) |
| 740 | 740 | ||
| 741 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p3) | 741 | + User.current = p3.user |
| 742 | article1 = TinyMceArticle.create!(:profile => p3, :name => 'An article about free software') | 742 | article1 = TinyMceArticle.create!(:profile => p3, :name => 'An article about free software') |
| 743 | 743 | ||
| 744 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 744 | + User.current = p2.user |
| 745 | article2 = TinyMceArticle.create!(:profile => p2, :name => 'Another article about free software') | 745 | article2 = TinyMceArticle.create!(:profile => p2, :name => 'Another article about free software') |
| 746 | 746 | ||
| 747 | login_as(profile.identifier) | 747 | login_as(profile.identifier) |
| @@ -761,15 +761,15 @@ class ProfileControllerTest < ActionController::TestCase | @@ -761,15 +761,15 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 761 | 761 | ||
| 762 | ActionTracker::Record.delete_all | 762 | ActionTracker::Record.delete_all |
| 763 | 763 | ||
| 764 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p1) | 764 | + User.current = p1.user |
| 765 | create(Scrap,defaults_for_scrap(:sender => p1, :receiver => p1)) | 765 | create(Scrap,defaults_for_scrap(:sender => p1, :receiver => p1)) |
| 766 | a1 = ActionTracker::Record.last | 766 | a1 = ActionTracker::Record.last |
| 767 | 767 | ||
| 768 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 768 | + User.current = p2.user |
| 769 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) | 769 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) |
| 770 | a2 = ActionTracker::Record.last | 770 | a2 = ActionTracker::Record.last |
| 771 | 771 | ||
| 772 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p3) | 772 | + User.current = p3.user |
| 773 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) | 773 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) |
| 774 | a3 = ActionTracker::Record.last | 774 | a3 = ActionTracker::Record.last |
| 775 | 775 | ||
| @@ -791,15 +791,15 @@ class ProfileControllerTest < ActionController::TestCase | @@ -791,15 +791,15 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 791 | 791 | ||
| 792 | ActionTracker::Record.delete_all | 792 | ActionTracker::Record.delete_all |
| 793 | 793 | ||
| 794 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p1) | 794 | + User.current = p1.user |
| 795 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) | 795 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) |
| 796 | a1 = ActionTracker::Record.last | 796 | a1 = ActionTracker::Record.last |
| 797 | 797 | ||
| 798 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 798 | + User.current = p2.user |
| 799 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) | 799 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) |
| 800 | a2 = ActionTracker::Record.last | 800 | a2 = ActionTracker::Record.last |
| 801 | 801 | ||
| 802 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p3) | 802 | + User.current = p3.user |
| 803 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) | 803 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) |
| 804 | a3 = ActionTracker::Record.last | 804 | a3 = ActionTracker::Record.last |
| 805 | 805 | ||
| @@ -833,10 +833,10 @@ class ProfileControllerTest < ActionController::TestCase | @@ -833,10 +833,10 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 833 | ActionTracker::Record.destroy_all | 833 | ActionTracker::Record.destroy_all |
| 834 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) | 834 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) |
| 835 | a1 = ActionTracker::Record.last | 835 | a1 = ActionTracker::Record.last |
| 836 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 836 | + User.current = p2.user |
| 837 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) | 837 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) |
| 838 | a2 = ActionTracker::Record.last | 838 | a2 = ActionTracker::Record.last |
| 839 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p3) | 839 | + User.current = p3.user |
| 840 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) | 840 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) |
| 841 | a3 = ActionTracker::Record.last | 841 | a3 = ActionTracker::Record.last |
| 842 | 842 | ||
| @@ -868,7 +868,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -868,7 +868,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 868 | ActionTracker::Record.destroy_all | 868 | ActionTracker::Record.destroy_all |
| 869 | create(Article, :name => 'a', :profile_id => community.id) | 869 | create(Article, :name => 'a', :profile_id => community.id) |
| 870 | create(Article, :name => 'b', :profile_id => community.id) | 870 | create(Article, :name => 'b', :profile_id => community.id) |
| 871 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 871 | + User.current = p2.user |
| 872 | create(Article, :name => 'c', :profile_id => community.id) | 872 | create(Article, :name => 'c', :profile_id => community.id) |
| 873 | process_delayed_job_queue | 873 | process_delayed_job_queue |
| 874 | 874 | ||
| @@ -895,10 +895,10 @@ class ProfileControllerTest < ActionController::TestCase | @@ -895,10 +895,10 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 895 | ActionTracker::Record.destroy_all | 895 | ActionTracker::Record.destroy_all |
| 896 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) | 896 | create(Scrap, defaults_for_scrap(:sender => p1, :receiver => p1)) |
| 897 | a1 = ActionTracker::Record.last | 897 | a1 = ActionTracker::Record.last |
| 898 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p2) | 898 | + User.current = p2.user |
| 899 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) | 899 | create(Scrap, defaults_for_scrap(:sender => p2, :receiver => p3)) |
| 900 | a2 = ActionTracker::Record.last | 900 | a2 = ActionTracker::Record.last |
| 901 | - UserStampSweeper.any_instance.stubs(:current_user).returns(p3) | 901 | + User.current = p3.user |
| 902 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) | 902 | create(Scrap, defaults_for_scrap(:sender => p3, :receiver => p1)) |
| 903 | a3 = ActionTracker::Record.last | 903 | a3 = ActionTracker::Record.last |
| 904 | 904 | ||
| @@ -1317,7 +1317,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1317,7 +1317,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 1317 | another_person = fast_create(Person) | 1317 | another_person = fast_create(Person) |
| 1318 | create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => profile, :content => 'A scrap')) | 1318 | create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => profile, :content => 'A scrap')) |
| 1319 | 1319 | ||
| 1320 | - UserStampSweeper.any_instance.stubs(:current_user).returns(profile) | 1320 | + User.current = profile.user |
| 1321 | ActionTracker::Record.destroy_all | 1321 | ActionTracker::Record.destroy_all |
| 1322 | TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') | 1322 | TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') |
| 1323 | 1323 | ||
| @@ -1332,7 +1332,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1332,7 +1332,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 1332 | another_person = fast_create(Person) | 1332 | another_person = fast_create(Person) |
| 1333 | scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => profile, :content => 'A scrap')) | 1333 | scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => profile, :content => 'A scrap')) |
| 1334 | 1334 | ||
| 1335 | - UserStampSweeper.any_instance.stubs(:current_user).returns(profile) | 1335 | + User.current = profile.user |
| 1336 | ActionTracker::Record.destroy_all | 1336 | ActionTracker::Record.destroy_all |
| 1337 | TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') | 1337 | TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') |
| 1338 | activity = ActionTracker::Record.last | 1338 | activity = ActionTracker::Record.last |
| @@ -1380,7 +1380,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1380,7 +1380,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 1380 | end | 1380 | end |
| 1381 | 1381 | ||
| 1382 | should 'display comment in wall if user was removed after click in view all comments' do | 1382 | should 'display comment in wall if user was removed after click in view all comments' do |
| 1383 | - UserStampSweeper.any_instance.stubs(:current_user).returns(profile) | 1383 | + User.current = profile.user |
| 1384 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') | 1384 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') |
| 1385 | to_be_removed = create_user('removed_user').person | 1385 | to_be_removed = create_user('removed_user').person |
| 1386 | comment = create(Comment, :author => to_be_removed, :title => 'Test Comment', :body => 'My author does not exist =(', :source_id => article.id, :source_type => 'Article') | 1386 | comment = create(Comment, :author => to_be_removed, :title => 'Test Comment', :body => 'My author does not exist =(', :source_id => article.id, :source_type => 'Article') |
| @@ -1397,7 +1397,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1397,7 +1397,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 1397 | end | 1397 | end |
| 1398 | 1398 | ||
| 1399 | should 'not display spam comments in wall' do | 1399 | should 'not display spam comments in wall' do |
| 1400 | - UserStampSweeper.any_instance.stubs(:current_user).returns(profile) | 1400 | + User.current = profile.user |
| 1401 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about spam\'s nutritional attributes') | 1401 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about spam\'s nutritional attributes') |
| 1402 | comment = create(Comment, :author => profile, :title => 'Test Comment', :body => 'This article makes me hungry', :source_id => article.id, :source_type => 'Article') | 1402 | comment = create(Comment, :author => profile, :title => 'Test Comment', :body => 'This article makes me hungry', :source_id => article.id, :source_type => 'Article') |
| 1403 | comment.spam! | 1403 | comment.spam! |
| @@ -1408,7 +1408,7 @@ class ProfileControllerTest < ActionController::TestCase | @@ -1408,7 +1408,7 @@ class ProfileControllerTest < ActionController::TestCase | ||
| 1408 | end | 1408 | end |
| 1409 | 1409 | ||
| 1410 | should 'display comment in wall from non logged users after click in view all comments' do | 1410 | should 'display comment in wall from non logged users after click in view all comments' do |
| 1411 | - UserStampSweeper.any_instance.stubs(:current_user).returns(profile) | 1411 | + User.current = profile.user |
| 1412 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') | 1412 | article = TinyMceArticle.create!(:profile => profile, :name => 'An article about free software') |
| 1413 | comment = create(Comment, :name => 'outside user', :email => 'outside@localhost.localdomain', :title => 'Test Comment', :body => 'My author does not exist =(', :source_id => article.id, :source_type => 'Article') | 1413 | comment = create(Comment, :name => 'outside user', :email => 'outside@localhost.localdomain', :title => 'Test Comment', :body => 'My author does not exist =(', :source_id => article.id, :source_type => 'Article') |
| 1414 | 1414 |
test/test_helper.rb
| @@ -76,6 +76,12 @@ class ActiveSupport::TestCase | @@ -76,6 +76,12 @@ class ActiveSupport::TestCase | ||
| 76 | 76 | ||
| 77 | end | 77 | end |
| 78 | 78 | ||
| 79 | + setup :global_setup | ||
| 80 | + | ||
| 81 | + def global_setup | ||
| 82 | + User.current = nil | ||
| 83 | + end | ||
| 84 | + | ||
| 79 | alias :ok :assert_block | 85 | alias :ok :assert_block |
| 80 | 86 | ||
| 81 | def assert_equivalent(enum1, enum2) | 87 | def assert_equivalent(enum1, enum2) |
test/unit/action_tracker_notification_test.rb
| @@ -89,7 +89,7 @@ class ActionTrackerNotificationTest < ActiveSupport::TestCase | @@ -89,7 +89,7 @@ class ActionTrackerNotificationTest < ActiveSupport::TestCase | ||
| 89 | end | 89 | end |
| 90 | 90 | ||
| 91 | should "have comments through article action_tracker" do | 91 | should "have comments through article action_tracker" do |
| 92 | - person = fast_create(Person) | 92 | + person = create_user.person |
| 93 | article = create(TextileArticle, :profile_id => person.id) | 93 | article = create(TextileArticle, :profile_id => person.id) |
| 94 | process_delayed_job_queue | 94 | process_delayed_job_queue |
| 95 | notification = ActionTrackerNotification.last | 95 | notification = ActionTrackerNotification.last |
test/unit/article_test.rb
| @@ -985,12 +985,12 @@ class ArticleTest < ActiveSupport::TestCase | @@ -985,12 +985,12 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 985 | 985 | ||
| 986 | should 'track action when a published article is created in a community' do | 986 | should 'track action when a published article is created in a community' do |
| 987 | community = fast_create(Community) | 987 | community = fast_create(Community) |
| 988 | - p1 = fast_create(Person) | ||
| 989 | - p2 = fast_create(Person) | ||
| 990 | - p3 = fast_create(Person) | 988 | + p1 = create_user.person |
| 989 | + p2 = create_user.person | ||
| 990 | + p3 = create_user.person | ||
| 991 | community.add_member(p1) | 991 | community.add_member(p1) |
| 992 | community.add_member(p2) | 992 | community.add_member(p2) |
| 993 | - UserStampSweeper.any_instance.expects(:current_user).returns(p1).at_least_once | 993 | + User.current = p1.user |
| 994 | 994 | ||
| 995 | article = create(TinyMceArticle, :profile_id => community.id) | 995 | article = create(TinyMceArticle, :profile_id => community.id) |
| 996 | activity = article.activity | 996 | activity = article.activity |
| @@ -1085,11 +1085,11 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1085,11 +1085,11 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 1085 | end | 1085 | end |
| 1086 | 1086 | ||
| 1087 | should 'create the notification to organization and all organization members' do | 1087 | should 'create the notification to organization and all organization members' do |
| 1088 | - Profile.delete_all | ||
| 1089 | - ActionTracker::Record.delete_all | 1088 | + Profile.destroy_all |
| 1089 | + ActionTracker::Record.destroy_all | ||
| 1090 | 1090 | ||
| 1091 | community = fast_create(Community) | 1091 | community = fast_create(Community) |
| 1092 | - member_1 = fast_create(Person) | 1092 | + member_1 = create_user.person |
| 1093 | community.add_member(member_1) | 1093 | community.add_member(member_1) |
| 1094 | 1094 | ||
| 1095 | article = create TinyMceArticle, :name => 'Tracked Article 1', :profile_id => community.id | 1095 | article = create TinyMceArticle, :name => 'Tracked Article 1', :profile_id => community.id |
| @@ -1116,7 +1116,7 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1116,7 +1116,7 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 1116 | Article.destroy_all | 1116 | Article.destroy_all |
| 1117 | ActionTracker::Record.destroy_all | 1117 | ActionTracker::Record.destroy_all |
| 1118 | ActionTrackerNotification.destroy_all | 1118 | ActionTrackerNotification.destroy_all |
| 1119 | - UserStampSweeper.any_instance.expects(:current_user).returns(profile).at_least_once | 1119 | + User.current = profile.user |
| 1120 | article = create(TinyMceArticle, :profile_id => profile.id) | 1120 | article = create(TinyMceArticle, :profile_id => profile.id) |
| 1121 | 1121 | ||
| 1122 | process_delayed_job_queue | 1122 | process_delayed_job_queue |
| @@ -1127,7 +1127,7 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1127,7 +1127,7 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 1127 | f1 = fast_create(Person) | 1127 | f1 = fast_create(Person) |
| 1128 | profile.add_friend(f1) | 1128 | profile.add_friend(f1) |
| 1129 | 1129 | ||
| 1130 | - UserStampSweeper.any_instance.expects(:current_user).returns(profile).at_least_once | 1130 | + User.current = profile.user |
| 1131 | article = create TinyMceArticle, :name => 'Tracked Article 1', :profile_id => profile.id | 1131 | article = create TinyMceArticle, :name => 'Tracked Article 1', :profile_id => profile.id |
| 1132 | assert_equal 1, ActionTracker::Record.find_all_by_verb('create_article').count | 1132 | assert_equal 1, ActionTracker::Record.find_all_by_verb('create_article').count |
| 1133 | process_delayed_job_queue | 1133 | process_delayed_job_queue |
| @@ -1147,7 +1147,7 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1147,7 +1147,7 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 1147 | Article.destroy_all | 1147 | Article.destroy_all |
| 1148 | ActionTracker::Record.destroy_all | 1148 | ActionTracker::Record.destroy_all |
| 1149 | ActionTrackerNotification.destroy_all | 1149 | ActionTrackerNotification.destroy_all |
| 1150 | - UserStampSweeper.any_instance.expects(:current_user).returns(profile).at_least_once | 1150 | + User.current = profile.user |
| 1151 | article = create(TinyMceArticle, :profile_id => profile.id) | 1151 | article = create(TinyMceArticle, :profile_id => profile.id) |
| 1152 | activity = article.activity | 1152 | activity = article.activity |
| 1153 | 1153 | ||
| @@ -1165,11 +1165,11 @@ class ArticleTest < ActiveSupport::TestCase | @@ -1165,11 +1165,11 @@ class ArticleTest < ActiveSupport::TestCase | ||
| 1165 | 1165 | ||
| 1166 | should 'destroy action_tracker and notifications when an article is destroyed in a community' do | 1166 | should 'destroy action_tracker and notifications when an article is destroyed in a community' do |
| 1167 | community = fast_create(Community) | 1167 | community = fast_create(Community) |
| 1168 | - p1 = fast_create(Person) | ||
| 1169 | - p2 = fast_create(Person) | 1168 | + p1 = create_user.person |
| 1169 | + p2 = create_user.person | ||
| 1170 | community.add_member(p1) | 1170 | community.add_member(p1) |
| 1171 | community.add_member(p2) | 1171 | community.add_member(p2) |
| 1172 | - UserStampSweeper.any_instance.expects(:current_user).returns(p1).at_least_once | 1172 | + User.current = p1.user |
| 1173 | 1173 | ||
| 1174 | article = create(TinyMceArticle, :profile_id => community.id) | 1174 | article = create(TinyMceArticle, :profile_id => community.id) |
| 1175 | activity = article.activity | 1175 | activity = article.activity |
test/unit/comment_test.rb
| @@ -286,7 +286,7 @@ class CommentTest < ActiveSupport::TestCase | @@ -286,7 +286,7 @@ class CommentTest < ActiveSupport::TestCase | ||
| 286 | end | 286 | end |
| 287 | 287 | ||
| 288 | should "return activities comments as a thread" do | 288 | should "return activities comments as a thread" do |
| 289 | - person = fast_create(Person) | 289 | + person = create_user.person |
| 290 | a = TextileArticle.create!(:profile => person, :name => 'My article', :body => 'Article body') | 290 | a = TextileArticle.create!(:profile => person, :name => 'My article', :body => 'Article body') |
| 291 | c0 = Comment.create!(:source => a, :body => 'My comment', :author => person) | 291 | c0 = Comment.create!(:source => a, :body => 'My comment', :author => person) |
| 292 | c1 = Comment.create!(:reply_of_id => c0.id, :source => a, :body => 'bla', :author => person) | 292 | c1 = Comment.create!(:reply_of_id => c0.id, :source => a, :body => 'bla', :author => person) |
| @@ -302,7 +302,7 @@ class CommentTest < ActiveSupport::TestCase | @@ -302,7 +302,7 @@ class CommentTest < ActiveSupport::TestCase | ||
| 302 | end | 302 | end |
| 303 | 303 | ||
| 304 | should "return activities comments when some comment on thread is spam and not display its replies" do | 304 | should "return activities comments when some comment on thread is spam and not display its replies" do |
| 305 | - person = fast_create(Person) | 305 | + person = create_user.person |
| 306 | a = TextileArticle.create!(:profile => person, :name => 'My article', :body => 'Article body') | 306 | a = TextileArticle.create!(:profile => person, :name => 'My article', :body => 'Article body') |
| 307 | c0 = Comment.create(:source => a, :body => 'Root comment', :author => person) | 307 | c0 = Comment.create(:source => a, :body => 'Root comment', :author => person) |
| 308 | c1 = Comment.create(:reply_of_id => c0.id, :source => a, :body => 'c1', :author => person) | 308 | c1 = Comment.create(:reply_of_id => c0.id, :source => a, :body => 'c1', :author => person) |
test/unit/community_test.rb
| @@ -301,8 +301,8 @@ class CommunityTest < ActiveSupport::TestCase | @@ -301,8 +301,8 @@ class CommunityTest < ActiveSupport::TestCase | ||
| 301 | ActionTrackerNotification.delete_all | 301 | ActionTrackerNotification.delete_all |
| 302 | p1 = Person.first | 302 | p1 = Person.first |
| 303 | community = fast_create(Community) | 303 | community = fast_create(Community) |
| 304 | - p2 = fast_create(Person) | ||
| 305 | - p3 = fast_create(Person) | 304 | + p2 = create_user.person |
| 305 | + p3 = create_user.person | ||
| 306 | community.add_member(p3) | 306 | community.add_member(p3) |
| 307 | article = create(TextileArticle, :profile_id => community.id) | 307 | article = create(TextileArticle, :profile_id => community.id) |
| 308 | time = article.activity.updated_at + 1.day | 308 | time = article.activity.updated_at + 1.day |
| @@ -372,10 +372,10 @@ class CommunityTest < ActiveSupport::TestCase | @@ -372,10 +372,10 @@ class CommunityTest < ActiveSupport::TestCase | ||
| 372 | end | 372 | end |
| 373 | 373 | ||
| 374 | should 'return tracked_actions of community as activities' do | 374 | should 'return tracked_actions of community as activities' do |
| 375 | - person = fast_create(Person) | 375 | + person = create_user.person |
| 376 | community = fast_create(Community) | 376 | community = fast_create(Community) |
| 377 | 377 | ||
| 378 | - UserStampSweeper.any_instance.expects(:current_user).returns(person).at_least_once | 378 | + User.current = person.user |
| 379 | assert_difference 'ActionTracker::Record.count', 1 do | 379 | assert_difference 'ActionTracker::Record.count', 1 do |
| 380 | article = create(TinyMceArticle, :profile => community, :name => 'An article about free software') | 380 | article = create(TinyMceArticle, :profile => community, :name => 'An article about free software') |
| 381 | assert_equal [article.activity], community.activities.map { |a| a.klass.constantize.find(a.id) } | 381 | assert_equal [article.activity], community.activities.map { |a| a.klass.constantize.find(a.id) } |
| @@ -387,7 +387,7 @@ class CommunityTest < ActiveSupport::TestCase | @@ -387,7 +387,7 @@ class CommunityTest < ActiveSupport::TestCase | ||
| 387 | community = fast_create(Community) | 387 | community = fast_create(Community) |
| 388 | community2 = fast_create(Community) | 388 | community2 = fast_create(Community) |
| 389 | 389 | ||
| 390 | - UserStampSweeper.any_instance.expects(:current_user).returns(person).at_least_once | 390 | + User.current = person.user |
| 391 | article = create(TinyMceArticle, :profile => community2, :name => 'Another article about free software') | 391 | article = create(TinyMceArticle, :profile => community2, :name => 'Another article about free software') |
| 392 | 392 | ||
| 393 | assert_not_includes community.activities.map { |a| a.klass.constantize.find(a.id) }, article.activity | 393 | assert_not_includes community.activities.map { |a| a.klass.constantize.find(a.id) }, article.activity |
test/unit/enterprise_test.rb
| @@ -475,7 +475,7 @@ class EnterpriseTest < ActiveSupport::TestCase | @@ -475,7 +475,7 @@ class EnterpriseTest < ActiveSupport::TestCase | ||
| 475 | person = fast_create(Person) | 475 | person = fast_create(Person) |
| 476 | enterprise = fast_create(Enterprise) | 476 | enterprise = fast_create(Enterprise) |
| 477 | 477 | ||
| 478 | - UserStampSweeper.any_instance.expects(:current_user).returns(person).at_least_once | 478 | + User.current = person.user |
| 479 | article = create(TinyMceArticle, :profile => enterprise, :name => 'An article about free software') | 479 | article = create(TinyMceArticle, :profile => enterprise, :name => 'An article about free software') |
| 480 | 480 | ||
| 481 | assert_equal [article.activity], enterprise.activities.map { |a| a.klass.constantize.find(a.id) } | 481 | assert_equal [article.activity], enterprise.activities.map { |a| a.klass.constantize.find(a.id) } |
| @@ -486,7 +486,7 @@ class EnterpriseTest < ActiveSupport::TestCase | @@ -486,7 +486,7 @@ class EnterpriseTest < ActiveSupport::TestCase | ||
| 486 | enterprise = fast_create(Enterprise) | 486 | enterprise = fast_create(Enterprise) |
| 487 | enterprise2 = fast_create(Enterprise) | 487 | enterprise2 = fast_create(Enterprise) |
| 488 | 488 | ||
| 489 | - UserStampSweeper.any_instance.expects(:current_user).returns(person).at_least_once | 489 | + User.current = person.user |
| 490 | article = create(TinyMceArticle, :profile => enterprise2, :name => 'Another article about free software') | 490 | article = create(TinyMceArticle, :profile => enterprise2, :name => 'Another article about free software') |
| 491 | 491 | ||
| 492 | assert_not_includes enterprise.activities.map { |a| a.klass.constantize.find(a.id) }, article.activity | 492 | assert_not_includes enterprise.activities.map { |a| a.klass.constantize.find(a.id) }, article.activity |
test/unit/person_test.rb
| @@ -1249,9 +1249,9 @@ class PersonTest < ActiveSupport::TestCase | @@ -1249,9 +1249,9 @@ class PersonTest < ActiveSupport::TestCase | ||
| 1249 | person = create_user.person | 1249 | person = create_user.person |
| 1250 | another_person = create_user.person | 1250 | another_person = create_user.person |
| 1251 | 1251 | ||
| 1252 | - UserStampSweeper.any_instance.stubs(:current_user).returns(another_person) | 1252 | + User.current = another_person.user |
| 1253 | scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => person, :content => 'A scrap')) | 1253 | scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => person, :content => 'A scrap')) |
| 1254 | - UserStampSweeper.any_instance.expects(:current_user).returns(person).at_least_once | 1254 | + User.current = person.user |
| 1255 | article = create(TinyMceArticle, :profile => person, :name => 'An article about free software') | 1255 | article = create(TinyMceArticle, :profile => person, :name => 'An article about free software') |
| 1256 | 1256 | ||
| 1257 | assert_equivalent [scrap,article.activity], person.activities.map { |a| a.klass.constantize.find(a.id) } | 1257 | assert_equivalent [scrap,article.activity], person.activities.map { |a| a.klass.constantize.find(a.id) } |
| @@ -1259,17 +1259,17 @@ class PersonTest < ActiveSupport::TestCase | @@ -1259,17 +1259,17 @@ class PersonTest < ActiveSupport::TestCase | ||
| 1259 | 1259 | ||
| 1260 | should 'not return tracked_actions and scraps from others as activities' do | 1260 | should 'not return tracked_actions and scraps from others as activities' do |
| 1261 | ActionTracker::Record.destroy_all | 1261 | ActionTracker::Record.destroy_all |
| 1262 | - person = fast_create(Person) | ||
| 1263 | - another_person = fast_create(Person) | 1262 | + person = create_user.person |
| 1263 | + another_person = create_user.person | ||
| 1264 | 1264 | ||
| 1265 | person_scrap = create(Scrap, defaults_for_scrap(:sender => person, :receiver => person, :content => 'A scrap from person')) | 1265 | person_scrap = create(Scrap, defaults_for_scrap(:sender => person, :receiver => person, :content => 'A scrap from person')) |
| 1266 | another_person_scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => another_person, :content => 'A scrap from another person')) | 1266 | another_person_scrap = create(Scrap, defaults_for_scrap(:sender => another_person, :receiver => another_person, :content => 'A scrap from another person')) |
| 1267 | 1267 | ||
| 1268 | - UserStampSweeper.any_instance.stubs(:current_user).returns(another_person) | 1268 | + User.current = another_person.user |
| 1269 | create(TinyMceArticle, :profile => another_person, :name => 'An article about free software from another person') | 1269 | create(TinyMceArticle, :profile => another_person, :name => 'An article about free software from another person') |
| 1270 | another_person_activity = ActionTracker::Record.last | 1270 | another_person_activity = ActionTracker::Record.last |
| 1271 | 1271 | ||
| 1272 | - UserStampSweeper.any_instance.stubs(:current_user).returns(person) | 1272 | + User.current = person.user |
| 1273 | create(TinyMceArticle, :profile => person, :name => 'An article about free software') | 1273 | create(TinyMceArticle, :profile => person, :name => 'An article about free software') |
| 1274 | person_activity = ActionTracker::Record.last | 1274 | person_activity = ActionTracker::Record.last |
| 1275 | 1275 |
test/unit/textile_article_test.rb
| 1 | require_relative "../test_helper" | 1 | require_relative "../test_helper" |
| 2 | 2 | ||
| 3 | class TextileArticleTest < ActiveSupport::TestCase | 3 | class TextileArticleTest < ActiveSupport::TestCase |
| 4 | - | 4 | + |
| 5 | def setup | 5 | def setup |
| 6 | @profile = create_user('testing').person | 6 | @profile = create_user('testing').person |
| 7 | - ActionTracker::Record.stubs(:current_user_from_model).returns(fast_create(Person)) | ||
| 8 | end | 7 | end |
| 9 | attr_reader :profile | 8 | attr_reader :profile |
| 10 | 9 | ||
| @@ -128,7 +127,7 @@ class TextileArticleTest < ActiveSupport::TestCase | @@ -128,7 +127,7 @@ class TextileArticleTest < ActiveSupport::TestCase | ||
| 128 | assert_equal true, a.notifiable? | 127 | assert_equal true, a.notifiable? |
| 129 | assert_equal true, a.advertise? | 128 | assert_equal true, a.advertise? |
| 130 | assert_equal true, a.is_trackable? | 129 | assert_equal true, a.is_trackable? |
| 131 | - | 130 | + |
| 132 | a.published=false | 131 | a.published=false |
| 133 | assert_equal false, a.published? | 132 | assert_equal false, a.published? |
| 134 | assert_equal false, a.is_trackable? | 133 | assert_equal false, a.is_trackable? |
test/unit/uploaded_file_test.rb
| @@ -325,7 +325,6 @@ class UploadedFileTest < ActiveSupport::TestCase | @@ -325,7 +325,6 @@ class UploadedFileTest < ActiveSupport::TestCase | ||
| 325 | 325 | ||
| 326 | should 'group trackers activity of image\'s upload' do | 326 | should 'group trackers activity of image\'s upload' do |
| 327 | ActionTracker::Record.delete_all | 327 | ActionTracker::Record.delete_all |
| 328 | - ActionTracker::Record.stubs(:current_user_from_model).returns(profile) | ||
| 329 | gallery = fast_create(Gallery, :profile_id => profile.id) | 328 | gallery = fast_create(Gallery, :profile_id => profile.id) |
| 330 | 329 | ||
| 331 | image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) | 330 | image1 = UploadedFile.create!(:uploaded_data => fixture_file_upload('/files/rails.png', 'image/png'), :parent => gallery, :profile => profile) |
vendor/plugins/action_tracker/init.rb
vendor/plugins/action_tracker/lib/action_tracker.rb
| @@ -5,7 +5,6 @@ module ActionTracker | @@ -5,7 +5,6 @@ module ActionTracker | ||
| 5 | module ControllerMethods | 5 | module ControllerMethods |
| 6 | 6 | ||
| 7 | def self.included(base) | 7 | def self.included(base) |
| 8 | - base.send :user_stamp, ActionTracker::Record | ||
| 9 | base.send :extend, ClassMethods | 8 | base.send :extend, ClassMethods |
| 10 | end | 9 | end |
| 11 | 10 | ||
| @@ -42,7 +41,7 @@ module ActionTracker | @@ -42,7 +41,7 @@ module ActionTracker | ||
| 42 | elsif keep_params.to_s == 'all' | 41 | elsif keep_params.to_s == 'all' |
| 43 | stored_params = params | 42 | stored_params = params |
| 44 | end | 43 | end |
| 45 | - user = send ActionTrackerConfig.current_user_method | 44 | + user = send ActionTrackerConfig.current_user |
| 46 | tracked_action = case ActionTrackerConfig.verb_type(verb) | 45 | tracked_action = case ActionTrackerConfig.verb_type(verb) |
| 47 | when :groupable | 46 | when :groupable |
| 48 | Record.add_or_create :verb => verb, :user => user, :params => stored_params | 47 | Record.add_or_create :verb => verb, :user => user, :params => stored_params |
| @@ -90,7 +89,7 @@ module ActionTracker | @@ -90,7 +89,7 @@ module ActionTracker | ||
| 90 | 89 | ||
| 91 | def save_action_for_verb(verb, keep_params = :all, post_proc = Proc.new{}, custom_user = nil, custom_target = nil) | 90 | def save_action_for_verb(verb, keep_params = :all, post_proc = Proc.new{}, custom_user = nil, custom_target = nil) |
| 92 | user = self.send(custom_user) unless custom_user.blank? | 91 | user = self.send(custom_user) unless custom_user.blank? |
| 93 | - user ||= ActionTracker::Record.current_user_from_model | 92 | + user ||= ActionTracker::Record.current_user |
| 94 | target = self.send(custom_target) unless custom_target.blank? | 93 | target = self.send(custom_target) unless custom_target.blank? |
| 95 | return nil if user.nil? | 94 | return nil if user.nil? |
| 96 | if keep_params.is_a? Array | 95 | if keep_params.is_a? Array |
| @@ -115,7 +114,7 @@ module ActionTracker | @@ -115,7 +114,7 @@ module ActionTracker | ||
| 115 | end | 114 | end |
| 116 | tracked_action.target = target || self | 115 | tracked_action.target = target || self |
| 117 | user.tracked_actions << tracked_action | 116 | user.tracked_actions << tracked_action |
| 118 | - post_proc.call tracked_action.reload | 117 | + post_proc.call tracked_action |
| 119 | end | 118 | end |
| 120 | 119 | ||
| 121 | end | 120 | end |
vendor/plugins/action_tracker/lib/action_tracker_config.rb
| @@ -20,12 +20,12 @@ class ActionTrackerConfig | @@ -20,12 +20,12 @@ class ActionTrackerConfig | ||
| 20 | verbs.keys.map(&:to_s) | 20 | verbs.keys.map(&:to_s) |
| 21 | end | 21 | end |
| 22 | 22 | ||
| 23 | - def self.current_user_method | ||
| 24 | - config[:current_user_method] || :current_user | 23 | + def self.current_user |
| 24 | + config[:current_user] || proc{ nil } | ||
| 25 | end | 25 | end |
| 26 | 26 | ||
| 27 | - def self.current_user_method=(method_name) | ||
| 28 | - UserStamp.current_user_method = config[:current_user_method] = method_name | 27 | + def self.current_user= block |
| 28 | + config[:current_user] = block | ||
| 29 | end | 29 | end |
| 30 | 30 | ||
| 31 | def self.default_filter_time | 31 | def self.default_filter_time |
vendor/plugins/action_tracker/lib/action_tracker_model.rb
| @@ -27,14 +27,12 @@ module ActionTracker | @@ -27,14 +27,12 @@ module ActionTracker | ||
| 27 | scope :recent, :conditions => ['created_at >= ?', RECENT_DELAY.days.ago] | 27 | scope :recent, :conditions => ['created_at >= ?', RECENT_DELAY.days.ago] |
| 28 | scope :visible, :conditions => { :visible => true } | 28 | scope :visible, :conditions => { :visible => true } |
| 29 | 29 | ||
| 30 | - def self.current_user_from_model | ||
| 31 | - u = new | ||
| 32 | - u.valid? | ||
| 33 | - u.user | 30 | + def self.current_user |
| 31 | + ActionTrackerConfig.current_user.call | ||
| 34 | end | 32 | end |
| 35 | 33 | ||
| 36 | def self.update_or_create(params) | 34 | def self.update_or_create(params) |
| 37 | - u = params[:user] || current_user_from_model | 35 | + u = params[:user] || current_user |
| 38 | return if u.nil? | 36 | return if u.nil? |
| 39 | target_hash = params[:target].nil? ? {} : {:target_type => params[:target].class.base_class.to_s, :target_id => params[:target].id} | 37 | target_hash = params[:target].nil? ? {} : {:target_type => params[:target].class.base_class.to_s, :target_id => params[:target].id} |
| 40 | conditions = { :user_id => u.id, :user_type => u.class.base_class.to_s, :verb => params[:verb].to_s }.merge(target_hash) | 38 | conditions = { :user_id => u.id, :user_type => u.class.base_class.to_s, :verb => params[:verb].to_s }.merge(target_hash) |
| @@ -44,7 +42,7 @@ module ActionTracker | @@ -44,7 +42,7 @@ module ActionTracker | ||
| 44 | end | 42 | end |
| 45 | 43 | ||
| 46 | def self.add_or_create(params) | 44 | def self.add_or_create(params) |
| 47 | - u = params[:user] || current_user_from_model | 45 | + u = params[:user] || current_user |
| 48 | return if u.nil? | 46 | return if u.nil? |
| 49 | target_hash = params[:target].nil? ? {} : {:target_type => params[:target].class.base_class.to_s, :target_id => params[:target].id} | 47 | target_hash = params[:target].nil? ? {} : {:target_type => params[:target].class.base_class.to_s, :target_id => params[:target].id} |
| 50 | l = last :conditions => { :user_id => u.id, :user_type => u.class.base_class.to_s, :verb => params[:verb].to_s }.merge(target_hash) | 48 | l = last :conditions => { :user_id => u.id, :user_type => u.class.base_class.to_s, :verb => params[:verb].to_s }.merge(target_hash) |
vendor/plugins/action_tracker/test/action_tracker_config_test.rb
| @@ -33,16 +33,6 @@ class ActionTrackerConfigTest < ActiveSupport::TestCase | @@ -33,16 +33,6 @@ class ActionTrackerConfigTest < ActiveSupport::TestCase | ||
| 33 | %w(search delete login).each { |verb| assert ActionTrackerConfig.verb_names.include?(verb) } | 33 | %w(search delete login).each { |verb| assert ActionTrackerConfig.verb_names.include?(verb) } |
| 34 | end | 34 | end |
| 35 | 35 | ||
| 36 | - def test_current_user_is_default_method | ||
| 37 | - ActionTrackerConfig.config[:current_user_method] = nil | ||
| 38 | - assert_equal :current_user, ActionTrackerConfig.current_user_method | ||
| 39 | - end | ||
| 40 | - | ||
| 41 | - def test_current_user_can_be_set | ||
| 42 | - ActionTrackerConfig.current_user_method = :logged_in_user | ||
| 43 | - assert_equal :logged_in_user, ActionTrackerConfig.current_user_method | ||
| 44 | - end | ||
| 45 | - | ||
| 46 | def test_default_filter_time_is_after | 36 | def test_default_filter_time_is_after |
| 47 | ActionTrackerConfig.config[:default_filter_time] = nil | 37 | ActionTrackerConfig.config[:default_filter_time] = nil |
| 48 | assert_equal :after, ActionTrackerConfig.default_filter_time | 38 | assert_equal :after, ActionTrackerConfig.default_filter_time |
| @@ -66,7 +56,7 @@ class ActionTrackerConfigTest < ActiveSupport::TestCase | @@ -66,7 +56,7 @@ class ActionTrackerConfigTest < ActiveSupport::TestCase | ||
| 66 | def test_get_verb_return_hash | 56 | def test_get_verb_return_hash |
| 67 | assert_kind_of Hash, ActionTrackerConfig.get_verb(:search) | 57 | assert_kind_of Hash, ActionTrackerConfig.get_verb(:search) |
| 68 | end | 58 | end |
| 69 | - | 59 | + |
| 70 | def test_get_verb_symbol_search_by_symbol | 60 | def test_get_verb_symbol_search_by_symbol |
| 71 | ActionTrackerConfig.verbs = { :search => { :description => "Got it" } } | 61 | ActionTrackerConfig.verbs = { :search => { :description => "Got it" } } |
| 72 | assert_equal "Got it", ActionTrackerConfig.get_verb(:search)[:description] | 62 | assert_equal "Got it", ActionTrackerConfig.get_verb(:search)[:description] |
vendor/plugins/action_tracker/test/action_tracker_test.rb
| @@ -43,10 +43,6 @@ class ThingsController < ActionController::Base | @@ -43,10 +43,6 @@ class ThingsController < ActionController::Base | ||
| 43 | render :text => "test" | 43 | render :text => "test" |
| 44 | end | 44 | end |
| 45 | 45 | ||
| 46 | - def current_user | ||
| 47 | - SomeModel.first || SomeModel.create! | ||
| 48 | - end | ||
| 49 | - | ||
| 50 | def rescue_action(e) | 46 | def rescue_action(e) |
| 51 | raise e | 47 | raise e |
| 52 | end | 48 | end |
| @@ -58,9 +54,7 @@ ActionController::Routing::Routes.draw { |map| map.resources :things, :collectio | @@ -58,9 +54,7 @@ ActionController::Routing::Routes.draw { |map| map.resources :things, :collectio | ||
| 58 | class ActionTrackerTest < ActiveSupport::TestCase | 54 | class ActionTrackerTest < ActiveSupport::TestCase |
| 59 | 55 | ||
| 60 | def setup | 56 | def setup |
| 61 | - UserStamp.creator_attribute = :user | ||
| 62 | - UserStamp.updater_attribute = :user | ||
| 63 | - ActionTrackerConfig.current_user_method = :current_user | 57 | + ActionTrackerConfig.current_user = proc{ SomeModel.first || SomeModel.create! } |
| 64 | ActionTracker::Record.delete_all | 58 | ActionTracker::Record.delete_all |
| 65 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something" } } | 59 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something" } } |
| 66 | @request = ActionController::TestRequest.new | 60 | @request = ActionController::TestRequest.new |
| @@ -108,7 +102,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -108,7 +102,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 108 | end | 102 | end |
| 109 | 103 | ||
| 110 | def test_track_actions_executes_block | 104 | def test_track_actions_executes_block |
| 111 | - @controller = create_controller do | 105 | + @controller = create_controller do |
| 112 | track_actions :some_verb do | 106 | track_actions :some_verb do |
| 113 | throw :some_symbol | 107 | throw :some_symbol |
| 114 | end | 108 | end |
| @@ -162,7 +156,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -162,7 +156,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 162 | assert_difference 'ActionTracker::Record.count' do | 156 | assert_difference 'ActionTracker::Record.count' do |
| 163 | get :index, :foo => 5 | 157 | get :index, :foo => 5 |
| 164 | end | 158 | end |
| 165 | - assert_equal({"action"=>"index", "foo"=>"5", "controller"=>"things"}, ActionTracker::Record.first.params) | 159 | + assert_equal({"action"=>"index", "foo"=>"5", "controller"=>"things"}, ActionTracker::Record.first.params) |
| 166 | end | 160 | end |
| 167 | 161 | ||
| 168 | def test_keep_params_not_set_should_store_all_params | 162 | def test_keep_params_not_set_should_store_all_params |
| @@ -228,16 +222,15 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -228,16 +222,15 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 228 | def test_store_user | 222 | def test_store_user |
| 229 | @controller = create_controller do | 223 | @controller = create_controller do |
| 230 | track_actions_before :some_verb | 224 | track_actions_before :some_verb |
| 231 | - def current_user | ||
| 232 | - SomeModel.create! :some_column => "test" | ||
| 233 | - end | ||
| 234 | end | 225 | end |
| 226 | + ActionTrackerConfig.current_user = proc{ SomeModel.create! :some_column => "test" } | ||
| 227 | + | ||
| 235 | assert_difference 'ActionTracker::Record.count' do | 228 | assert_difference 'ActionTracker::Record.count' do |
| 236 | get :test | 229 | get :test |
| 237 | end | 230 | end |
| 238 | assert_equal "test", ActionTracker::Record.last.user.some_column | 231 | assert_equal "test", ActionTracker::Record.last.user.some_column |
| 239 | end | 232 | end |
| 240 | - | 233 | + |
| 241 | def test_should_update_when_verb_is_updatable_and_no_timeout | 234 | def test_should_update_when_verb_is_updatable_and_no_timeout |
| 242 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :updatable } } | 235 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :updatable } } |
| 243 | ActionTrackerConfig.timeout = 5.minutes | 236 | ActionTrackerConfig.timeout = 5.minutes |
| @@ -252,7 +245,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -252,7 +245,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 252 | assert_no_difference 'ActionTracker::Record.count' do | 245 | assert_no_difference 'ActionTracker::Record.count' do |
| 253 | get :test | 246 | get :test |
| 254 | end | 247 | end |
| 255 | - end | 248 | + end |
| 256 | 249 | ||
| 257 | def test_should_create_when_verb_is_updatable_and_timeout | 250 | def test_should_create_when_verb_is_updatable_and_timeout |
| 258 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :updatable } } | 251 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :updatable } } |
| @@ -268,7 +261,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -268,7 +261,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 268 | assert_difference 'ActionTracker::Record.count' do | 261 | assert_difference 'ActionTracker::Record.count' do |
| 269 | get :test | 262 | get :test |
| 270 | end | 263 | end |
| 271 | - end | 264 | + end |
| 272 | 265 | ||
| 273 | def test_should_update_when_verb_is_groupable_and_no_timeout | 266 | def test_should_update_when_verb_is_groupable_and_no_timeout |
| 274 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :groupable } } | 267 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :groupable } } |
| @@ -284,7 +277,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -284,7 +277,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 284 | assert_no_difference 'ActionTracker::Record.count' do | 277 | assert_no_difference 'ActionTracker::Record.count' do |
| 285 | get :test, :foo => "test" | 278 | get :test, :foo => "test" |
| 286 | end | 279 | end |
| 287 | - end | 280 | + end |
| 288 | 281 | ||
| 289 | def test_should_create_when_verb_is_groupable_and_timeout | 282 | def test_should_create_when_verb_is_groupable_and_timeout |
| 290 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :groupable } } | 283 | ActionTrackerConfig.verbs = { :some_verb => { :description => "Did something", :type => :groupable } } |
| @@ -330,7 +323,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -330,7 +323,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 330 | def test_should_get_time_spent_doing_something | 323 | def test_should_get_time_spent_doing_something |
| 331 | ActionTrackerConfig.verbs = { :some_verb => { :type => :updatable }, :other_verb => { :type => :updatable } } | 324 | ActionTrackerConfig.verbs = { :some_verb => { :type => :updatable }, :other_verb => { :type => :updatable } } |
| 332 | m = SomeModel.create! | 325 | m = SomeModel.create! |
| 333 | - @controller = create_controller do | 326 | + @controller = create_controller do |
| 334 | track_actions :some_verb | 327 | track_actions :some_verb |
| 335 | end | 328 | end |
| 336 | @controller.stubs(:current_user).returns(m) | 329 | @controller.stubs(:current_user).returns(m) |
| @@ -394,7 +387,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -394,7 +387,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 394 | assert_equal "foo", ActionTracker::Record.last.params["other_column"] | 387 | assert_equal "foo", ActionTracker::Record.last.params["other_column"] |
| 395 | assert_nil ActionTracker::Record.last.params["another_column"] | 388 | assert_nil ActionTracker::Record.last.params["another_column"] |
| 396 | end | 389 | end |
| 397 | - | 390 | + |
| 398 | def test_replace_dots_by_underline_in_param_name | 391 | def test_replace_dots_by_underline_in_param_name |
| 399 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } | 392 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } |
| 400 | model = create_model do | 393 | model = create_model do |
| @@ -407,7 +400,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -407,7 +400,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 407 | assert_equal 3, ActionTracker::Record.last.params["other_column_size"] | 400 | assert_equal 3, ActionTracker::Record.last.params["other_column_size"] |
| 408 | assert_equal 5, ActionTracker::Record.last.params["another_column"] | 401 | assert_equal 5, ActionTracker::Record.last.params["another_column"] |
| 409 | end | 402 | end |
| 410 | - | 403 | + |
| 411 | def test_track_actions_store_all_params | 404 | def test_track_actions_store_all_params |
| 412 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } | 405 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } |
| 413 | model = create_model do | 406 | model = create_model do |
| @@ -452,7 +445,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -452,7 +445,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 452 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :if => Proc.new { 2 > 1 } } | 445 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :if => Proc.new { 2 > 1 } } |
| 453 | @controller = create_controller_for_model(model) | 446 | @controller = create_controller_for_model(model) |
| 454 | assert_difference('ActionTracker::Record.count') { get :test } | 447 | assert_difference('ActionTracker::Record.count') { get :test } |
| 455 | - | 448 | + |
| 456 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :if => Proc.new { 2 < 1 } } | 449 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :if => Proc.new { 2 < 1 } } |
| 457 | @controller = create_controller_for_model(model) | 450 | @controller = create_controller_for_model(model) |
| 458 | assert_no_difference('ActionTracker::Record.count') { get :test } | 451 | assert_no_difference('ActionTracker::Record.count') { get :test } |
| @@ -460,7 +453,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -460,7 +453,7 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 460 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :unless => Proc.new { 2 > 1 } } | 453 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :unless => Proc.new { 2 > 1 } } |
| 461 | @controller = create_controller_for_model(model) | 454 | @controller = create_controller_for_model(model) |
| 462 | assert_no_difference('ActionTracker::Record.count') { get :test } | 455 | assert_no_difference('ActionTracker::Record.count') { get :test } |
| 463 | - | 456 | + |
| 464 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :unless => Proc.new { 2 < 1 } } | 457 | model = create_model { track_actions :test, :after_create, :keep_params => :all, :unless => Proc.new { 2 < 1 } } |
| 465 | @controller = create_controller_for_model(model) | 458 | @controller = create_controller_for_model(model) |
| 466 | assert_difference('ActionTracker::Record.count') { get :test } | 459 | assert_difference('ActionTracker::Record.count') { get :test } |
| @@ -498,13 +491,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -498,13 +491,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 498 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } | 491 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } |
| 499 | model = create_model do | 492 | model = create_model do |
| 500 | track_actions :test, :after_create, :custom_user => :test_custom_user | 493 | track_actions :test, :after_create, :custom_user => :test_custom_user |
| 501 | - def current_user | ||
| 502 | - SomeModel.create! | ||
| 503 | - end | ||
| 504 | def test_custom_user | 494 | def test_custom_user |
| 505 | OtherModel.create! | 495 | OtherModel.create! |
| 506 | end | 496 | end |
| 507 | end | 497 | end |
| 498 | + ActionTrackerConfig.current_user = proc{ SomeModel.create! } | ||
| 508 | @controller = create_controller_for_model(model, :another_column => 2) | 499 | @controller = create_controller_for_model(model, :another_column => 2) |
| 509 | assert_difference('ActionTracker::Record.count') { get :test } | 500 | assert_difference('ActionTracker::Record.count') { get :test } |
| 510 | assert_kind_of OtherModel, ActionTracker::Record.last.user | 501 | assert_kind_of OtherModel, ActionTracker::Record.last.user |
| @@ -514,13 +505,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -514,13 +505,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 514 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } | 505 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } |
| 515 | model = create_model do | 506 | model = create_model do |
| 516 | track_actions :test, :after_create, "custom_user" => :test_custom_user | 507 | track_actions :test, :after_create, "custom_user" => :test_custom_user |
| 517 | - def current_user | ||
| 518 | - SomeModel.create! | ||
| 519 | - end | ||
| 520 | def test_custom_user | 508 | def test_custom_user |
| 521 | OtherModel.create! | 509 | OtherModel.create! |
| 522 | end | 510 | end |
| 523 | end | 511 | end |
| 512 | + ActionTrackerConfig.current_user = proc{ SomeModel.create! } | ||
| 524 | @controller = create_controller_for_model(model, :another_column => 2) | 513 | @controller = create_controller_for_model(model, :another_column => 2) |
| 525 | assert_difference('ActionTracker::Record.count') { get :test } | 514 | assert_difference('ActionTracker::Record.count') { get :test } |
| 526 | assert_kind_of OtherModel, ActionTracker::Record.last.user | 515 | assert_kind_of OtherModel, ActionTracker::Record.last.user |
| @@ -530,13 +519,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -530,13 +519,11 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 530 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } | 519 | ActionTrackerConfig.verbs = { :test => { :description => "Some" } } |
| 531 | model = create_model do | 520 | model = create_model do |
| 532 | track_actions :test, :after_create | 521 | track_actions :test, :after_create |
| 533 | - def current_user | ||
| 534 | - SomeModel.create! | ||
| 535 | - end | ||
| 536 | def test_custom_user | 522 | def test_custom_user |
| 537 | OtherModel.create! | 523 | OtherModel.create! |
| 538 | end | 524 | end |
| 539 | end | 525 | end |
| 526 | + ActionTrackerConfig.current_user = proc{ SomeModel.create! } | ||
| 540 | @controller = create_controller_for_model(model, :another_column => 2) | 527 | @controller = create_controller_for_model(model, :another_column => 2) |
| 541 | assert_difference('ActionTracker::Record.count') { get :test } | 528 | assert_difference('ActionTracker::Record.count') { get :test } |
| 542 | assert_kind_of SomeModel, ActionTracker::Record.last.user | 529 | assert_kind_of SomeModel, ActionTracker::Record.last.user |
| @@ -625,10 +612,8 @@ class ActionTrackerTest < ActiveSupport::TestCase | @@ -625,10 +612,8 @@ class ActionTrackerTest < ActiveSupport::TestCase | ||
| 625 | render :text => "test" | 612 | render :text => "test" |
| 626 | end | 613 | end |
| 627 | 614 | ||
| 628 | - def current_user | ||
| 629 | - SomeModel.create! :some_column => "test" | ||
| 630 | - end | ||
| 631 | end | 615 | end |
| 616 | + ActionTrackerConfig.current_user = proc{ SomeModel.create! :some_column => "test" } | ||
| 632 | end | 617 | end |
| 633 | 618 | ||
| 634 | end | 619 | end |
vendor/plugins/user_stamp/MIT-LICENSE
| @@ -1,20 +0,0 @@ | @@ -1,20 +0,0 @@ | ||
| 1 | -Copyright (c) 2008 [John Nunemaker] | ||
| 2 | - | ||
| 3 | -Permission is hereby granted, free of charge, to any person obtaining | ||
| 4 | -a copy of this software and associated documentation files (the | ||
| 5 | -"Software"), to deal in the Software without restriction, including | ||
| 6 | -without limitation the rights to use, copy, modify, merge, publish, | ||
| 7 | -distribute, sublicense, and/or sell copies of the Software, and to | ||
| 8 | -permit persons to whom the Software is furnished to do so, subject to | ||
| 9 | -the following conditions: | ||
| 10 | - | ||
| 11 | -The above copyright notice and this permission notice shall be | ||
| 12 | -included in all copies or substantial portions of the Software. | ||
| 13 | - | ||
| 14 | -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| 15 | -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
| 16 | -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
| 17 | -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||
| 18 | -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||
| 19 | -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||
| 20 | -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
vendor/plugins/user_stamp/README
| @@ -1,37 +0,0 @@ | @@ -1,37 +0,0 @@ | ||
| 1 | -= UserStamp | ||
| 2 | - | ||
| 3 | -Rails plugin that makes stamping records with a user when they are | ||
| 4 | -created and updated dirt simple. It assumes that your controller has | ||
| 5 | -a current_user method. It also assumes that any record being stamped | ||
| 6 | -has two attributes--creator_id and updater_id. You can override both | ||
| 7 | -of these assumptions easily. | ||
| 8 | - | ||
| 9 | -== Setup | ||
| 10 | - | ||
| 11 | -1. script/plugin install git://github.com/jnunemaker/user_stamp.git | ||
| 12 | -2. Add user_stamp to application.rb, like the following: | ||
| 13 | - | ||
| 14 | - class ApplicationController < ActionController::Base | ||
| 15 | - user_stamp Post, Asset, Job | ||
| 16 | - end | ||
| 17 | - | ||
| 18 | - | ||
| 19 | -== Defaults | ||
| 20 | - | ||
| 21 | - UserStamp.creator_attribute = :creator_id | ||
| 22 | - UserStamp.updater_attribute = :updater_id | ||
| 23 | - UserStamp.current_user_method = :current_user | ||
| 24 | - | ||
| 25 | -If your user stamped columns and current_user method are different, | ||
| 26 | -just create an initializer such as config/initializers/user_stamp.rb | ||
| 27 | -and copy and paste the defaults above, changing them to fit your app. | ||
| 28 | - | ||
| 29 | -== Problems? | ||
| 30 | - | ||
| 31 | -Use the issue tracker on Github. | ||
| 32 | - | ||
| 33 | -== Docs | ||
| 34 | - | ||
| 35 | -http://rdoc.info/projects/jnunemaker/user_stamp | ||
| 36 | - | ||
| 37 | -Copyright (c) 2008 [John Nunemaker], released under the MIT license |
vendor/plugins/user_stamp/Rakefile
| @@ -1,11 +0,0 @@ | @@ -1,11 +0,0 @@ | ||
| 1 | -require 'rake' | ||
| 2 | -require 'spec/rake/spectask' | ||
| 3 | - | ||
| 4 | -desc 'Default: run specs.' | ||
| 5 | -task :default => :spec | ||
| 6 | - | ||
| 7 | -desc 'Run the specs' | ||
| 8 | -Spec::Rake::SpecTask.new(:spec) do |t| | ||
| 9 | - t.spec_opts = ['--colour --format progress --loadby mtime --reverse'] | ||
| 10 | - t.spec_files = FileList['spec/**/*_spec.rb'] | ||
| 11 | -end | ||
| 12 | \ No newline at end of file | 0 | \ No newline at end of file |
vendor/plugins/user_stamp/init.rb
vendor/plugins/user_stamp/install.rb
| @@ -1,15 +0,0 @@ | @@ -1,15 +0,0 @@ | ||
| 1 | -instructions = <<EOF | ||
| 2 | - | ||
| 3 | -#{'*' * 62} | ||
| 4 | -Don't forget to add user stamp to your application controller. | ||
| 5 | - | ||
| 6 | - class ApplicationController < ActionController::Base | ||
| 7 | - user_stamp Post, Asset, Job | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | -View the README for more information. | ||
| 11 | -#{'*' * 62} | ||
| 12 | - | ||
| 13 | -EOF | ||
| 14 | - | ||
| 15 | -puts instructions | ||
| 16 | \ No newline at end of file | 0 | \ No newline at end of file |
vendor/plugins/user_stamp/lib/user_stamp.rb
| @@ -1,50 +0,0 @@ | @@ -1,50 +0,0 @@ | ||
| 1 | -module UserStamp | ||
| 2 | - mattr_accessor :creator_attribute | ||
| 3 | - mattr_accessor :updater_attribute | ||
| 4 | - mattr_accessor :current_user_method | ||
| 5 | - | ||
| 6 | - def self.creator_assignment_method | ||
| 7 | - "#{UserStamp.creator_attribute}=" | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | - def self.updater_assignment_method | ||
| 11 | - "#{UserStamp.updater_attribute}=" | ||
| 12 | - end | ||
| 13 | - | ||
| 14 | - module ClassMethods | ||
| 15 | - def user_stamp(*models) | ||
| 16 | - models.each { |klass| UserStampSweeper.observe(klass) } | ||
| 17 | - | ||
| 18 | - class_eval do | ||
| 19 | - cache_sweeper :user_stamp_sweeper | ||
| 20 | - end | ||
| 21 | - end | ||
| 22 | - end | ||
| 23 | -end | ||
| 24 | - | ||
| 25 | -UserStamp.creator_attribute = :creator_id | ||
| 26 | -UserStamp.updater_attribute = :updater_id | ||
| 27 | -UserStamp.current_user_method = :current_user | ||
| 28 | - | ||
| 29 | -class UserStampSweeper < ActionController::Caching::Sweeper | ||
| 30 | - def before_validation(record) | ||
| 31 | - return unless current_user | ||
| 32 | - | ||
| 33 | - attribute, method = UserStamp.creator_attribute, UserStamp.creator_assignment_method | ||
| 34 | - if record.respond_to?(method) && record.new_record? | ||
| 35 | - record.send(method, current_user) unless record.send("#{attribute}_id_changed?") || record.send("#{attribute}_type_changed?") | ||
| 36 | - end | ||
| 37 | - | ||
| 38 | - attribute, method = UserStamp.updater_attribute, UserStamp.updater_assignment_method | ||
| 39 | - if record.respond_to?(method) | ||
| 40 | - record.send(method, current_user) if record.send(attribute).blank? | ||
| 41 | - end | ||
| 42 | - end | ||
| 43 | - | ||
| 44 | - private | ||
| 45 | - def current_user | ||
| 46 | - if controller.respond_to?(UserStamp.current_user_method) | ||
| 47 | - controller.send UserStamp.current_user_method | ||
| 48 | - end | ||
| 49 | - end | ||
| 50 | -end |
vendor/plugins/user_stamp/spec/spec_helper.rb
| @@ -1,24 +0,0 @@ | @@ -1,24 +0,0 @@ | ||
| 1 | -require 'rubygems' | ||
| 2 | - | ||
| 3 | -gem 'rspec' | ||
| 4 | -require 'spec' | ||
| 5 | - | ||
| 6 | -%w[activesupport activerecord actionpack].each do |lib| | ||
| 7 | - gem lib | ||
| 8 | - require lib | ||
| 9 | -end | ||
| 10 | - | ||
| 11 | -require 'action_controller' | ||
| 12 | - | ||
| 13 | -$:.unshift File.join(File.dirname(__FILE__), '..', 'lib') | ||
| 14 | -require 'user_stamp' | ||
| 15 | - | ||
| 16 | -UserStampSweeper.instance | ||
| 17 | - | ||
| 18 | -class User | ||
| 19 | - attr_accessor :id | ||
| 20 | - | ||
| 21 | - def initialize(id); | ||
| 22 | - @id = id | ||
| 23 | - end | ||
| 24 | -end |
vendor/plugins/user_stamp/spec/user_stamp_class_methods_spec.rb
| @@ -1,51 +0,0 @@ | @@ -1,51 +0,0 @@ | ||
| 1 | -require File.dirname(__FILE__) + '/spec_helper' | ||
| 2 | - | ||
| 3 | -class FauxModelBase | ||
| 4 | - def self.add_observer(observer_instance); end | ||
| 5 | -end | ||
| 6 | - | ||
| 7 | -class Post < FauxModelBase; end | ||
| 8 | -class Category < FauxModelBase; end | ||
| 9 | -class Label < FauxModelBase; end | ||
| 10 | - | ||
| 11 | -class FauxApplicationController | ||
| 12 | - def self.cache_sweeper(sweepers); end | ||
| 13 | - | ||
| 14 | - def self.current_user | ||
| 15 | - User.new(220) | ||
| 16 | - end | ||
| 17 | -end | ||
| 18 | - | ||
| 19 | -class PostsController < FauxApplicationController | ||
| 20 | - extend UserStamp::ClassMethods | ||
| 21 | -end | ||
| 22 | - | ||
| 23 | -describe UserStamp::ClassMethods do | ||
| 24 | - before do | ||
| 25 | - UserStamp.creator_attribute = :creator_id | ||
| 26 | - UserStamp.updater_attribute = :updater_id | ||
| 27 | - UserStamp.current_user_method = :current_user | ||
| 28 | - end | ||
| 29 | - | ||
| 30 | - it "should add user_stamp method" do | ||
| 31 | - PostsController.respond_to?(:user_stamp).should == true | ||
| 32 | - end | ||
| 33 | - | ||
| 34 | - def user_stamp | ||
| 35 | - PostsController.user_stamp Post, Category, Label | ||
| 36 | - end | ||
| 37 | - | ||
| 38 | - describe "#user_stamp" do | ||
| 39 | - it "should add UserStampSweeper as observer for each model" do | ||
| 40 | - [Post, Category, Label].each do |klass| | ||
| 41 | - klass.should_receive(:add_observer).with(UserStampSweeper.instance).once | ||
| 42 | - end | ||
| 43 | - user_stamp | ||
| 44 | - end | ||
| 45 | - | ||
| 46 | - it "should setup cache sweeper for controller" do | ||
| 47 | - PostsController.should_receive(:cache_sweeper).with(:user_stamp_sweeper).once | ||
| 48 | - user_stamp | ||
| 49 | - end | ||
| 50 | - end | ||
| 51 | -end | ||
| 52 | \ No newline at end of file | 0 | \ No newline at end of file |
vendor/plugins/user_stamp/spec/user_stamp_spec.rb
| @@ -1,51 +0,0 @@ | @@ -1,51 +0,0 @@ | ||
| 1 | -require File.dirname(__FILE__) + '/spec_helper' | ||
| 2 | - | ||
| 3 | -describe UserStamp do | ||
| 4 | - before do | ||
| 5 | - UserStamp.creator_attribute = :creator_id | ||
| 6 | - UserStamp.updater_attribute = :updater_id | ||
| 7 | - UserStamp.current_user_method = :current_user | ||
| 8 | - end | ||
| 9 | - | ||
| 10 | - it "should default creator_attribute to creator_id" do | ||
| 11 | - UserStamp.creator_attribute.should == :creator_id | ||
| 12 | - end | ||
| 13 | - | ||
| 14 | - it "should default updater_attribute to updater_id" do | ||
| 15 | - UserStamp.updater_attribute.should == :updater_id | ||
| 16 | - end | ||
| 17 | - | ||
| 18 | - it "should default current_user_method to current_user" do | ||
| 19 | - UserStamp.current_user_method.should == :current_user | ||
| 20 | - end | ||
| 21 | - | ||
| 22 | - it "should have accessor for creator_attribute" do | ||
| 23 | - UserStamp.creator_attribute = 'mofo_id' | ||
| 24 | - UserStamp.creator_attribute.should == 'mofo_id' | ||
| 25 | - end | ||
| 26 | - | ||
| 27 | - it "should have accessor for updater_attribute" do | ||
| 28 | - UserStamp.updater_attribute = 'mofo_id' | ||
| 29 | - UserStamp.updater_attribute.should == 'mofo_id' | ||
| 30 | - end | ||
| 31 | - | ||
| 32 | - it "should have accessor for current_user_method" do | ||
| 33 | - UserStamp.current_user_method = 'my_current_user' | ||
| 34 | - UserStamp.current_user_method.should == 'my_current_user' | ||
| 35 | - end | ||
| 36 | - | ||
| 37 | - describe "assignment methods" do | ||
| 38 | - before do | ||
| 39 | - UserStamp.creator_attribute = 'creator_mofo_id' | ||
| 40 | - UserStamp.updater_attribute = 'updater_mofo_id' | ||
| 41 | - end | ||
| 42 | - | ||
| 43 | - it "should include creator assignment method" do | ||
| 44 | - UserStamp.creator_assignment_method.should == 'creator_mofo_id=' | ||
| 45 | - end | ||
| 46 | - | ||
| 47 | - it "should include updater assignment method" do | ||
| 48 | - UserStamp.updater_assignment_method.should == 'updater_mofo_id=' | ||
| 49 | - end | ||
| 50 | - end | ||
| 51 | -end | ||
| 52 | \ No newline at end of file | 0 | \ No newline at end of file |
vendor/plugins/user_stamp/spec/user_stamp_sweeper_spec.rb
| @@ -1,194 +0,0 @@ | @@ -1,194 +0,0 @@ | ||
| 1 | -require File.dirname(__FILE__) + '/spec_helper' | ||
| 2 | - | ||
| 3 | -class PostsController | ||
| 4 | - def self.current_user | ||
| 5 | - @@user | ||
| 6 | - end | ||
| 7 | -end | ||
| 8 | - | ||
| 9 | -describe UserStampSweeper, "#before_validation" do | ||
| 10 | - before do | ||
| 11 | - @@user = User.new(220) | ||
| 12 | - UserStamp.creator_attribute = :creator | ||
| 13 | - UserStamp.updater_attribute = :updater | ||
| 14 | - UserStamp.current_user_method = :current_user | ||
| 15 | - @sweeper = UserStampSweeper.instance | ||
| 16 | - @sweeper.stub!(:controller).and_return(PostsController) | ||
| 17 | - end | ||
| 18 | - | ||
| 19 | - describe "(with new record)" do | ||
| 20 | - it "should set creator if attribute exists" do | ||
| 21 | - record = mock('Record', :creator= => nil, :updater= => nil, :new_record? => true, :updater => nil, :creator_id_changed? => false, :creator_type_changed? => false, :updater_id_changed? => false, :updater_type_changed? => false) | ||
| 22 | - record.should_receive(:creator=).with(@@user).once | ||
| 23 | - @sweeper.before_validation(record) | ||
| 24 | - end | ||
| 25 | - | ||
| 26 | - it "should NOT set creator if attribute does not exist" do | ||
| 27 | - record = mock('Record', :new_record? => true, :updater= => nil, :respond_to? => false) | ||
| 28 | - record.should_receive(:respond_to?).with("creator=").and_return(false) | ||
| 29 | - record.should_not_receive(:creator=) | ||
| 30 | - @sweeper.before_validation(record) | ||
| 31 | - end | ||
| 32 | - end | ||
| 33 | - | ||
| 34 | - describe "(with non new record)" do | ||
| 35 | - it "should NOT set creator if attribute exists" do | ||
| 36 | - record = mock('Record', :creator= => nil, :updater= => nil, :updater => nil, :new_record? => false, :creator_id_changed? => false, :creator_type_changed? => false, :updater_id_changed? => false, :updater_type_changed? => false) | ||
| 37 | - record.should_not_receive(:creator=) | ||
| 38 | - @sweeper.before_validation(record) | ||
| 39 | - end | ||
| 40 | - | ||
| 41 | - it "should NOT set creator if attribute does not exist" do | ||
| 42 | - record = mock('Record', :updater= => nil, :updater => nil, :new_record? => false, :creator_id_changed? => false, :creator_type_changed? => false, :updater_id_changed? => false, :updater_type_changed? => false) | ||
| 43 | - record.should_not_receive(:creator=) | ||
| 44 | - @sweeper.before_validation(record) | ||
| 45 | - end | ||
| 46 | - end | ||
| 47 | - | ||
| 48 | - it "should set updater if attribute exists" do | ||
| 49 | - record = mock('Record', :creator= => nil, :updater= => nil, :new_record? => false, :updater => nil) | ||
| 50 | - record.should_receive(:updater=) | ||
| 51 | - @sweeper.before_validation(record) | ||
| 52 | - end | ||
| 53 | - | ||
| 54 | - it "should NOT set updater if attribute does not exist" do | ||
| 55 | - record = mock('Record', :creator= => nil, :updater= => nil, :new_record? => :false, :respond_to? => false) | ||
| 56 | - record.should_receive(:respond_to?).with("updater=").and_return(false) | ||
| 57 | - record.should_not_receive(:updater=) | ||
| 58 | - @sweeper.before_validation(record) | ||
| 59 | - end | ||
| 60 | -end | ||
| 61 | - | ||
| 62 | -describe UserStampSweeper, "#before_validation (with custom attribute names)" do | ||
| 63 | - before do | ||
| 64 | - UserStamp.creator_attribute = :created_by | ||
| 65 | - UserStamp.updater_attribute = :updated_by | ||
| 66 | - UserStamp.current_user_method = :current_user | ||
| 67 | - @sweeper = UserStampSweeper.instance | ||
| 68 | - @sweeper.stub!(:controller).and_return(PostsController) | ||
| 69 | - end | ||
| 70 | - | ||
| 71 | - describe "(with new record)" do | ||
| 72 | - it "should set created_by if attribute exists" do | ||
| 73 | - record = mock('Record', :created_by= => nil, :updated_by => nil, :updated_by= => nil, :new_record? => true, :created_by_id_changed? => false, :created_by_type_changed? => false, :updated_by_id_changed? => false, :updated_by_type_changed? => false) | ||
| 74 | - record.should_receive(:created_by=).with(@@user).once | ||
| 75 | - @sweeper.before_validation(record) | ||
| 76 | - end | ||
| 77 | - | ||
| 78 | - it "should NOT set created_by if attribute does not exist" do | ||
| 79 | - record = mock('Record', :new_record? => true, :updated_by= => nil, :respond_to? => false) | ||
| 80 | - record.should_receive(:respond_to?).with("created_by=").and_return(false) | ||
| 81 | - record.should_not_receive(:created_by=) | ||
| 82 | - @sweeper.before_validation(record) | ||
| 83 | - end | ||
| 84 | - end | ||
| 85 | - | ||
| 86 | - describe "(with non new record)" do | ||
| 87 | - it "should NOT set created_by if attribute exists" do | ||
| 88 | - record = mock('Record', :created_by= => nil, :updated_by => nil, :updated_by= => nil, :new_record? => false, :updated_by_id_changed? => false, :updated_by_type_changed? => false) | ||
| 89 | - record.should_not_receive(:created_by=) | ||
| 90 | - @sweeper.before_validation(record) | ||
| 91 | - end | ||
| 92 | - | ||
| 93 | - it "should NOT set created_by if attribute does not exist" do | ||
| 94 | - record = mock('Record', :updated_by= => nil, :updated_by => nil, :new_record? => false, :updated_by_id_changed? => false, :updated_by_type_changed? => false) | ||
| 95 | - record.should_not_receive(:created_by=) | ||
| 96 | - @sweeper.before_validation(record) | ||
| 97 | - end | ||
| 98 | - end | ||
| 99 | - | ||
| 100 | - it "should set updated_by if attribute exists" do | ||
| 101 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :updated_by => nil, :new_record? => :false, :created_by_id_changed? => false, :created_by_type_changed? => false, :updated_by_id_changed? => false, :updated_by_type_changed? => false) | ||
| 102 | - record.should_receive(:updated_by=) | ||
| 103 | - @sweeper.before_validation(record) | ||
| 104 | - end | ||
| 105 | - | ||
| 106 | - it "should NOT set updated_by if attribute does not exist" do | ||
| 107 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :new_record? => :false, :respond_to? => false) | ||
| 108 | - record.should_receive(:respond_to?).with("updated_by=").and_return(false) | ||
| 109 | - record.should_not_receive(:updated_by=) | ||
| 110 | - @sweeper.before_validation(record) | ||
| 111 | - end | ||
| 112 | - | ||
| 113 | - it "should NOT set created_by if attribute changed" do | ||
| 114 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :new_record? => true, :created_by_id_changed? => true, :created_by_type_changed? => true) | ||
| 115 | - record.should_receive(:respond_to?).with("updated_by=").and_return(false) | ||
| 116 | - record.should_receive(:respond_to?).with("created_by=").and_return(true) | ||
| 117 | - record.should_not_receive(:created_by=) | ||
| 118 | - @sweeper.before_validation(record) | ||
| 119 | - end | ||
| 120 | - | ||
| 121 | - it "should NOT set updated_by if attribute is not nil" do | ||
| 122 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :updated_by => 1, :new_record? => false) | ||
| 123 | - record.should_receive(:respond_to?).with("updated_by=").and_return(true) | ||
| 124 | - record.should_receive(:respond_to?).with("created_by=").and_return(false) | ||
| 125 | - record.should_not_receive(:updated_by=) | ||
| 126 | - @sweeper.before_validation(record) | ||
| 127 | - end | ||
| 128 | - | ||
| 129 | - it "should set created_by if attribute has not changed" do | ||
| 130 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :new_record? => true, :created_by_id_changed? => false, :created_by_type_changed? => false) | ||
| 131 | - record.should_receive(:respond_to?).with("updated_by=").and_return(false) | ||
| 132 | - record.should_receive(:respond_to?).with("created_by=").and_return(true) | ||
| 133 | - record.should_receive(:created_by=) | ||
| 134 | - @sweeper.before_validation(record) | ||
| 135 | - end | ||
| 136 | - | ||
| 137 | - it "should set updated_by if attribute is nil" do | ||
| 138 | - record = mock('Record', :created_by= => nil, :updated_by= => nil, :updated_by => nil, :new_record? => false) | ||
| 139 | - record.should_receive(:respond_to?).with("updated_by=").and_return(true) | ||
| 140 | - record.should_receive(:respond_to?).with("created_by=").and_return(false) | ||
| 141 | - record.should_receive(:updated_by=) | ||
| 142 | - @sweeper.before_validation(record) | ||
| 143 | - end | ||
| 144 | -end | ||
| 145 | - | ||
| 146 | -describe UserStampSweeper, "#current_user" do | ||
| 147 | - before do | ||
| 148 | - UserStamp.creator_attribute = :creator | ||
| 149 | - UserStamp.updater_attribute = :updater | ||
| 150 | - UserStamp.current_user_method = :current_user | ||
| 151 | - @sweeper = UserStampSweeper.instance | ||
| 152 | - end | ||
| 153 | - | ||
| 154 | - it "should send current_user if controller responds to it" do | ||
| 155 | - user = mock('User') | ||
| 156 | - controller = mock('Controller', :current_user => user) | ||
| 157 | - @sweeper.stub!(:controller).and_return(controller) | ||
| 158 | - controller.should_receive(:current_user) | ||
| 159 | - @sweeper.send(:current_user) | ||
| 160 | - end | ||
| 161 | - | ||
| 162 | - it "should not send current_user if controller does not respond to it" do | ||
| 163 | - user = mock('User') | ||
| 164 | - controller = mock('Controller', :respond_to? => false) | ||
| 165 | - @sweeper.stub!(:controller).and_return(controller) | ||
| 166 | - controller.should_not_receive(:current_user) | ||
| 167 | - @sweeper.send(:current_user) | ||
| 168 | - end | ||
| 169 | -end | ||
| 170 | - | ||
| 171 | -describe UserStampSweeper, "#current_user (with custom current_user_method)" do | ||
| 172 | - before do | ||
| 173 | - UserStamp.creator_attribute = :creator | ||
| 174 | - UserStamp.updater_attribute = :updater | ||
| 175 | - UserStamp.current_user_method = :my_user | ||
| 176 | - @sweeper = UserStampSweeper.instance | ||
| 177 | - end | ||
| 178 | - | ||
| 179 | - it "should send current_user if controller responds to it" do | ||
| 180 | - user = mock('User') | ||
| 181 | - controller = mock('Controller', :my_user => user) | ||
| 182 | - @sweeper.stub!(:controller).and_return(controller) | ||
| 183 | - controller.should_receive(:my_user) | ||
| 184 | - @sweeper.send(:current_user) | ||
| 185 | - end | ||
| 186 | - | ||
| 187 | - it "should not send current_user if controller does not respond to it" do | ||
| 188 | - user = mock('User') | ||
| 189 | - controller = mock('Controller', :respond_to? => false) | ||
| 190 | - @sweeper.stub!(:controller).and_return(controller) | ||
| 191 | - controller.should_not_receive(:my_user) | ||
| 192 | - @sweeper.send(:current_user) | ||
| 193 | - end | ||
| 194 | -end |