From b71e5cb98bde02014663ede3a635393f591975b9 Mon Sep 17 00:00:00 2001 From: MoisesMachado Date: Thu, 10 Jul 2008 21:04:22 +0000 Subject: [PATCH] ActionItem514: refactored out the categorization functionality --- app/models/article_categorization.rb | 15 +++++---------- app/models/categorization.rb | 17 +++++++++++++++++ app/models/profile_categorization.rb | 16 +++++----------- 3 files changed, 27 insertions(+), 21 deletions(-) create mode 100644 app/models/categorization.rb diff --git a/app/models/article_categorization.rb b/app/models/article_categorization.rb index abdff5f..46639cb 100644 --- a/app/models/article_categorization.rb +++ b/app/models/article_categorization.rb @@ -3,18 +3,13 @@ class ArticleCategorization < ActiveRecord::Base belongs_to :article belongs_to :category - def self.add_category_to_article(category, article) - connection.execute("insert into articles_categories (category_id, article_id) values(#{category.id}, #{article.id})") + extend Categorization - c = category.parent - while !c.nil? && !self.find(:first, :conditions => {:article_id => article, :category_id => c}) - connection.execute("insert into articles_categories (category_id, article_id, virtual) values(#{c.id}, #{article.id}, 1>0)") - c = c.parent + class << self + alias :add_category_to_article :add_category_to_object + def object_id_column + :article_id end end - def self.remove_all_for(article) - self.delete_all(:article_id => article.id) - end - end diff --git a/app/models/categorization.rb b/app/models/categorization.rb new file mode 100644 index 0000000..296aa42 --- /dev/null +++ b/app/models/categorization.rb @@ -0,0 +1,17 @@ +module Categorization + + def add_category_to_object(category, object) + connection.execute("insert into #{table_name} (category_id, #{object_id_column}) values(#{category.id}, #{object.id})") + + c = category.parent + while !c.nil? && !self.find(:first, :conditions => {object_id_column => object, :category_id => c}) + connection.execute("insert into #{table_name} (category_id, #{object_id_column}, virtual) values(#{c.id}, #{object.id}, 1>0)") + c = c.parent + end + end + + def remove_all_for(object) + self.delete_all(object_id_column => object.id) + end + +end diff --git a/app/models/profile_categorization.rb b/app/models/profile_categorization.rb index 6143758..bcf8706 100644 --- a/app/models/profile_categorization.rb +++ b/app/models/profile_categorization.rb @@ -3,21 +3,15 @@ class ProfileCategorization < ActiveRecord::Base belongs_to :profile belongs_to :category - def self.add_category_to_profile(category, profile) - return if self.find_by_category_id_and_profile_id(category.id, profile.id) - connection.execute("insert into categories_profiles (category_id, profile_id) values(#{category.id}, #{profile.id})") + extend Categorization - c = category.parent - while !c.nil? && !self.find(:first, :conditions => {:profile_id => profile, :category_id => c}) - connection.execute("insert into categories_profiles (category_id, profile_id, virtual) values(#{c.id}, #{profile.id}, 1>0)") - c = c.parent + class << self + alias :add_category_to_profile :add_category_to_object + def object_id_column + :profile_id end end - def self.remove_all_for(profile) - self.delete_all(:profile_id => profile.id) - end - def self.remove_region(profile) region = profile.categories.find(:first, :conditions => "type = 'Region'") if region -- libgit2 0.21.2