Commit beb338bc1d67f4fe2dcfd00eeec50c657c5c3f65
1 parent
a4aab71d
Exists in
master
and in
29 other branches
ActionItem466: making the proper fixes for PostgreSQL, which is not as
forgiving as SQLite git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2076 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
10 changed files
with
38 additions
and
45 deletions
Show diff stats
app/models/article.rb
@@ -21,7 +21,7 @@ class Article < ActiveRecord::Base | @@ -21,7 +21,7 @@ class Article < ActiveRecord::Base | ||
21 | 21 | ||
22 | def add_category(c) | 22 | def add_category(c) |
23 | if self.id | 23 | if self.id |
24 | - ArticleCategorization.create!(:category => c, :article => self) | 24 | + ArticleCategorization.add_category_to_article(c, self) |
25 | else | 25 | else |
26 | pending_categorizations << c | 26 | pending_categorizations << c |
27 | end | 27 | end |
@@ -37,7 +37,7 @@ class Article < ActiveRecord::Base | @@ -37,7 +37,7 @@ class Article < ActiveRecord::Base | ||
37 | after_create :create_pending_categorizations | 37 | after_create :create_pending_categorizations |
38 | def create_pending_categorizations | 38 | def create_pending_categorizations |
39 | pending_categorizations.each do |item| | 39 | pending_categorizations.each do |item| |
40 | - ArticleCategorization.create!(:category => item, :article => self) | 40 | + ArticleCategorization.add_category_to_article(item, self) |
41 | end | 41 | end |
42 | pending_categorizations.clear | 42 | pending_categorizations.clear |
43 | end | 43 | end |
app/models/article_categorization.rb
@@ -3,13 +3,12 @@ class ArticleCategorization < ActiveRecord::Base | @@ -3,13 +3,12 @@ class ArticleCategorization < ActiveRecord::Base | ||
3 | belongs_to :article | 3 | belongs_to :article |
4 | belongs_to :category | 4 | belongs_to :category |
5 | 5 | ||
6 | - after_create :associate_with_entire_hierarchy | ||
7 | - def associate_with_entire_hierarchy | ||
8 | - return if virtual | 6 | + def self.add_category_to_article(category, article) |
7 | + connection.execute("insert into articles_categories (category_id, article_id) values(#{category.id}, #{article.id})") | ||
9 | 8 | ||
10 | c = category.parent | 9 | c = category.parent |
11 | - while !c.nil? && !self.class.find(:first, :conditions => {:article_id => article, :category_id => c}) | ||
12 | - self.class.create!(:article => article, :category => c, :virtual => true) | 10 | + while !c.nil? && !self.find(:first, :conditions => {:article_id => article, :category_id => c}) |
11 | + connection.execute("insert into articles_categories (category_id, article_id, virtual) values(#{c.id}, #{article.id}, 1>0)") | ||
13 | c = c.parent | 12 | c = c.parent |
14 | end | 13 | end |
15 | end | 14 | end |
app/models/profile.rb
@@ -109,7 +109,7 @@ class Profile < ActiveRecord::Base | @@ -109,7 +109,7 @@ class Profile < ActiveRecord::Base | ||
109 | 109 | ||
110 | def add_category(c) | 110 | def add_category(c) |
111 | if self.id | 111 | if self.id |
112 | - ProfileCategorization.create!(:category => c, :profile => self) | 112 | + ProfileCategorization.add_category_to_profile(c, self) |
113 | else | 113 | else |
114 | pending_categorizations << c | 114 | pending_categorizations << c |
115 | end | 115 | end |
@@ -125,7 +125,7 @@ class Profile < ActiveRecord::Base | @@ -125,7 +125,7 @@ class Profile < ActiveRecord::Base | ||
125 | after_create :create_pending_categorizations | 125 | after_create :create_pending_categorizations |
126 | def create_pending_categorizations | 126 | def create_pending_categorizations |
127 | pending_categorizations.each do |item| | 127 | pending_categorizations.each do |item| |
128 | - ProfileCategorization.create!(:category => item, :profile => self) | 128 | + ProfileCategorization.add_category_to_profile(item, self) |
129 | end | 129 | end |
130 | pending_categorizations.clear | 130 | pending_categorizations.clear |
131 | end | 131 | end |
app/models/profile_categorization.rb
@@ -3,13 +3,13 @@ class ProfileCategorization < ActiveRecord::Base | @@ -3,13 +3,13 @@ class ProfileCategorization < ActiveRecord::Base | ||
3 | belongs_to :profile | 3 | belongs_to :profile |
4 | belongs_to :category | 4 | belongs_to :category |
5 | 5 | ||
6 | - after_create :associate_with_entire_hierarchy | ||
7 | - def associate_with_entire_hierarchy | ||
8 | - return if virtual | 6 | + def self.add_category_to_profile(category, profile) |
7 | + | ||
8 | + connection.execute("insert into categories_profiles (category_id, profile_id) values(#{category.id}, #{profile.id})") | ||
9 | 9 | ||
10 | c = category.parent | 10 | c = category.parent |
11 | - while !c.nil? && !self.class.find(:first, :conditions => {:profile_id => profile, :category_id => c}) | ||
12 | - self.class.create!(:profile => profile, :category => c, :virtual => true) | 11 | + while !c.nil? && !self.find(:first, :conditions => {:profile_id => profile, :category_id => c}) |
12 | + connection.execute("insert into categories_profiles (category_id, profile_id, virtual) values(#{c.id}, #{profile.id}, 1>0)") | ||
13 | c = c.parent | 13 | c = c.parent |
14 | end | 14 | end |
15 | end | 15 | end |
test/functional/search_controller_test.rb
@@ -484,7 +484,7 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -484,7 +484,7 @@ class SearchControllerTest < Test::Unit::TestCase | ||
484 | child = Category.create!(:name => 'Child Category', :environment => Environment.default, :parent => parent) | 484 | child = Category.create!(:name => 'Child Category', :environment => Environment.default, :parent => parent) |
485 | 485 | ||
486 | p = create_user('test_profile').person | 486 | p = create_user('test_profile').person |
487 | - p.categories << child | 487 | + p.add_category child |
488 | p.save! | 488 | p.save! |
489 | 489 | ||
490 | get :index, :category_path => ['parent-category'], :query => 'test_profile', :find_in => ['people'] | 490 | get :index, :category_path => ['parent-category'], :query => 'test_profile', :find_in => ['people'] |
@@ -563,10 +563,10 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -563,10 +563,10 @@ class SearchControllerTest < Test::Unit::TestCase | ||
563 | should 'display people with a given initial, under a specific category' do | 563 | should 'display people with a given initial, under a specific category' do |
564 | 564 | ||
565 | in_category_and_with_initial = create_user('fergunson').person | 565 | in_category_and_with_initial = create_user('fergunson').person |
566 | - in_category_and_with_initial.categories << @category | 566 | + in_category_and_with_initial.add_category @category |
567 | 567 | ||
568 | in_category_but_without_initial = create_user('yanerson').person | 568 | in_category_but_without_initial = create_user('yanerson').person |
569 | - in_category_but_without_initial.categories << @category | 569 | + in_category_but_without_initial.add_category @category |
570 | 570 | ||
571 | not_in_category_but_with_initial = create_user('fergy').person | 571 | not_in_category_but_with_initial = create_user('fergy').person |
572 | not_in_category_and_without_initial = create_user('xalanxalan').person | 572 | not_in_category_and_without_initial = create_user('xalanxalan').person |
@@ -580,8 +580,8 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -580,8 +580,8 @@ class SearchControllerTest < Test::Unit::TestCase | ||
580 | end | 580 | end |
581 | 581 | ||
582 | should 'display communities with a given initial, under a specific category' do | 582 | should 'display communities with a given initial, under a specific category' do |
583 | - c1 = Community.create!(:name => 'a beautiful community', :identifier => 'bea_comm', :environment => Environment.default); c1.categories << @category | ||
584 | - c2 = Community.create!(:name => 'beautiful community (another)', :identifier => 'an_bea_comm', :environment => Environment.default); c2.categories << @category | 583 | + c1 = Community.create!(:name => 'a beautiful community', :identifier => 'bea_comm', :environment => Environment.default); c1.add_category @category |
584 | + c2 = Community.create!(:name => 'beautiful community (another)', :identifier => 'an_bea_comm', :environment => Environment.default); c2.add_category @category | ||
585 | 585 | ||
586 | c3 = Community.create!(:name => 'another beautiful community', :identifier => 'lalala', :environment => Environment.default); | 586 | c3 = Community.create!(:name => 'another beautiful community', :identifier => 'lalala', :environment => Environment.default); |
587 | c4 = Community.create!(:name => 'damn beautiful community (another)', :identifier => 'lelele', :environment => Environment.default) | 587 | c4 = Community.create!(:name => 'damn beautiful community (another)', :identifier => 'lelele', :environment => Environment.default) |
@@ -595,8 +595,8 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -595,8 +595,8 @@ class SearchControllerTest < Test::Unit::TestCase | ||
595 | end | 595 | end |
596 | 596 | ||
597 | should 'display enterprises with a given initial, under a specific category' do | 597 | should 'display enterprises with a given initial, under a specific category' do |
598 | - ent1 = Enterprise.create!(:name => 'aaaaa', :identifier => 'teste1'); ent1.categories << @category | ||
599 | - ent2 = Enterprise.create!(:name => 'bbbbb', :identifier => 'teste2'); ent1.categories << @category | 598 | + ent1 = Enterprise.create!(:name => 'aaaaa', :identifier => 'teste1'); ent1.add_category @category |
599 | + ent2 = Enterprise.create!(:name => 'bbbbb', :identifier => 'teste2'); ent1.add_category @category | ||
600 | ent3 = Enterprise.create!(:name => 'aaaa1111', :identifier => 'teste1111') | 600 | ent3 = Enterprise.create!(:name => 'aaaa1111', :identifier => 'teste1111') |
601 | ent4 = Enterprise.create!(:name => 'ddddd', :identifier => 'teste2222') | 601 | ent4 = Enterprise.create!(:name => 'ddddd', :identifier => 'teste2222') |
602 | 602 | ||
@@ -611,9 +611,9 @@ class SearchControllerTest < Test::Unit::TestCase | @@ -611,9 +611,9 @@ class SearchControllerTest < Test::Unit::TestCase | ||
611 | should 'display articles with a given initial, under a specific category' do | 611 | should 'display articles with a given initial, under a specific category' do |
612 | person = create_user('teste').person | 612 | person = create_user('teste').person |
613 | art1 = person.articles.build(:name => 'an article to be found'); art1.save! | 613 | art1 = person.articles.build(:name => 'an article to be found'); art1.save! |
614 | - art1.categories << @category | 614 | + art1.add_category @category |
615 | art2 = person.articles.build(:name => 'better article'); art2.save! | 615 | art2 = person.articles.build(:name => 'better article'); art2.save! |
616 | - art2.categories << @category | 616 | + art2.add_category @category |
617 | 617 | ||
618 | art3 = person.articles.build(:name => 'another article to be found'); art3.save! | 618 | art3 = person.articles.build(:name => 'another article to be found'); art3.save! |
619 | art4 = person.articles.build(:name => 'damn article'); art4.save! | 619 | art4 = person.articles.build(:name => 'damn article'); art4.save! |
test/unit/article_categorization_test.rb
@@ -25,7 +25,7 @@ class ArticleCategorizationTest < Test::Unit::TestCase | @@ -25,7 +25,7 @@ class ArticleCategorizationTest < Test::Unit::TestCase | ||
25 | a = p.articles.create!(:name => 'test') | 25 | a = p.articles.create!(:name => 'test') |
26 | 26 | ||
27 | assert_difference ArticleCategorization, :count, 2 do | 27 | assert_difference ArticleCategorization, :count, 2 do |
28 | - ArticleCategorization.create!(:category => c2, :article => a) | 28 | + ArticleCategorization.add_category_to_article(c2, a) |
29 | end | 29 | end |
30 | 30 | ||
31 | assert_equal 2, ArticleCategorization.find_all_by_article_id(a.id).size | 31 | assert_equal 2, ArticleCategorization.find_all_by_article_id(a.id).size |
@@ -40,8 +40,8 @@ class ArticleCategorizationTest < Test::Unit::TestCase | @@ -40,8 +40,8 @@ class ArticleCategorizationTest < Test::Unit::TestCase | ||
40 | a = p.articles.create!(:name => 'test') | 40 | a = p.articles.create!(:name => 'test') |
41 | 41 | ||
42 | assert_difference ArticleCategorization, :count, 3 do | 42 | assert_difference ArticleCategorization, :count, 3 do |
43 | - ac = ArticleCategorization.create!(:category => c2, :article => a) | ||
44 | - ac = ArticleCategorization.create!(:category => c3, :article => a) | 43 | + ArticleCategorization.add_category_to_article(c2, a) |
44 | + ArticleCategorization.add_category_to_article(c3, a) | ||
45 | end | 45 | end |
46 | end | 46 | end |
47 | 47 | ||
@@ -53,8 +53,8 @@ class ArticleCategorizationTest < Test::Unit::TestCase | @@ -53,8 +53,8 @@ class ArticleCategorizationTest < Test::Unit::TestCase | ||
53 | p = create_user('testuser').person | 53 | p = create_user('testuser').person |
54 | a = p.articles.create!(:name => 'test') | 54 | a = p.articles.create!(:name => 'test') |
55 | 55 | ||
56 | - ac = ArticleCategorization.create!(:category => c2, :article => a) | ||
57 | - ac = ArticleCategorization.create!(:category => c3, :article => a) | 56 | + ArticleCategorization.add_category_to_article(c2, a) |
57 | + ArticleCategorization.add_category_to_article(c3, a) | ||
58 | 58 | ||
59 | assert_difference ArticleCategorization, :count, -3 do | 59 | assert_difference ArticleCategorization, :count, -3 do |
60 | ArticleCategorization.remove_all_for(a) | 60 | ArticleCategorization.remove_all_for(a) |
test/unit/article_test.rb
@@ -175,14 +175,8 @@ class ArticleTest < Test::Unit::TestCase | @@ -175,14 +175,8 @@ class ArticleTest < Test::Unit::TestCase | ||
175 | article = profile.articles.build(:name => 'withcategories') | 175 | article = profile.articles.build(:name => 'withcategories') |
176 | article.save! | 176 | article.save! |
177 | 177 | ||
178 | - assert_raise ActiveRecord::AssociationTypeMismatch do | ||
179 | - article.categories << 1 | ||
180 | - end | ||
181 | - | ||
182 | - assert_nothing_raised do | ||
183 | - article.categories << c1 | ||
184 | - article.categories << c2 | ||
185 | - end | 178 | + article.add_category c1 |
179 | + article.add_category c2 | ||
186 | 180 | ||
187 | assert_equivalent [c1,c2], article.categories(true) | 181 | assert_equivalent [c1,c2], article.categories(true) |
188 | end | 182 | end |
test/unit/category_test.rb
@@ -312,9 +312,9 @@ class CategoryTest < Test::Unit::TestCase | @@ -312,9 +312,9 @@ class CategoryTest < Test::Unit::TestCase | ||
312 | should 'have people' do | 312 | should 'have people' do |
313 | c = @env.categories.build(:name => 'my category'); c.save! | 313 | c = @env.categories.build(:name => 'my category'); c.save! |
314 | p1 = create_user('testuser_1').person | 314 | p1 = create_user('testuser_1').person |
315 | - p1.categories << c | 315 | + p1.add_category c |
316 | p2 = create_user('testuser_2').person | 316 | p2 = create_user('testuser_2').person |
317 | - p2.categories << c | 317 | + p2.add_category c |
318 | assert_equal [p1, p2], c.people | 318 | assert_equal [p1, p2], c.people |
319 | end | 319 | end |
320 | 320 |
test/unit/profile_categorization_test.rb
@@ -5,7 +5,7 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | @@ -5,7 +5,7 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | ||
5 | should 'have profile and category' do | 5 | should 'have profile and category' do |
6 | person = create_user('test_user').person | 6 | person = create_user('test_user').person |
7 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! | 7 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! |
8 | - person.categories << cat | 8 | + person.add_category cat |
9 | person.save! | 9 | person.save! |
10 | assert_includes person.categories, cat | 10 | assert_includes person.categories, cat |
11 | assert_includes cat.people, person | 11 | assert_includes cat.people, person |
@@ -19,7 +19,7 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | @@ -19,7 +19,7 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | ||
19 | p = create_user('testuser').person | 19 | p = create_user('testuser').person |
20 | 20 | ||
21 | assert_difference ProfileCategorization, :count, 2 do | 21 | assert_difference ProfileCategorization, :count, 2 do |
22 | - ProfileCategorization.create!(:category => c2, :profile => p) | 22 | + ProfileCategorization.add_category_to_profile(c2, p) |
23 | end | 23 | end |
24 | 24 | ||
25 | assert_equal 2, ProfileCategorization.find_all_by_profile_id(p.id).size | 25 | assert_equal 2, ProfileCategorization.find_all_by_profile_id(p.id).size |
@@ -33,8 +33,8 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | @@ -33,8 +33,8 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | ||
33 | p = create_user('testuser').person | 33 | p = create_user('testuser').person |
34 | 34 | ||
35 | assert_difference ProfileCategorization, :count, 3 do | 35 | assert_difference ProfileCategorization, :count, 3 do |
36 | - ac = ProfileCategorization.create!(:category => c2, :profile => p) | ||
37 | - ac = ProfileCategorization.create!(:category => c3, :profile => p) | 36 | + ProfileCategorization.add_category_to_profile(c2, p) |
37 | + ProfileCategorization.add_category_to_profile(c3, p) | ||
38 | end | 38 | end |
39 | end | 39 | end |
40 | 40 | ||
@@ -45,8 +45,8 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | @@ -45,8 +45,8 @@ class ProfileCategorizationTest < ActiveSupport::TestCase | ||
45 | 45 | ||
46 | p = create_user('testuser').person | 46 | p = create_user('testuser').person |
47 | 47 | ||
48 | - ac = ProfileCategorization.create!(:category => c2, :profile => p) | ||
49 | - ac = ProfileCategorization.create!(:category => c3, :profile => p) | 48 | + ProfileCategorization.add_category_to_profile(c2, p) |
49 | + ProfileCategorization.add_category_to_profile(c3, p) | ||
50 | 50 | ||
51 | assert_difference ProfileCategorization, :count, -3 do | 51 | assert_difference ProfileCategorization, :count, -3 do |
52 | ProfileCategorization.remove_all_for(p) | 52 | ProfileCategorization.remove_all_for(p) |
test/unit/profile_test.rb
@@ -390,7 +390,7 @@ class ProfileTest < Test::Unit::TestCase | @@ -390,7 +390,7 @@ class ProfileTest < Test::Unit::TestCase | ||
390 | should 'have categories' do | 390 | should 'have categories' do |
391 | c = Profile.create!(:name => 'my test profile', :identifier => 'mytestprofile') | 391 | c = Profile.create!(:name => 'my test profile', :identifier => 'mytestprofile') |
392 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! | 392 | cat = Environment.default.categories.build(:name => 'a category'); cat.save! |
393 | - c.categories << cat | 393 | + c.add_category cat |
394 | c.save! | 394 | c.save! |
395 | assert_includes c.categories, cat | 395 | assert_includes c.categories, cat |
396 | end | 396 | end |