Sha256: 4362343dc762435ff6bf3d439d2606beb78d2891ad36fa31e0e0af2027dfca66

Contents?: true

Size: 1.25 KB

Versions: 16

Compression:

Stored size: 1.25 KB

Contents

module ComfortableMexicanSofa::IsCategorized
  
  def self.included(base)
    base.send :extend, ClassMethods
  end
  
  module ClassMethods
    def cms_is_categorized
      include ComfortableMexicanSofa::IsCategorized::InstanceMethods
      
      has_many :categorizations,
        :as         => :categorized,
        :dependent  => :destroy
      has_many :categories,
        :through    => :categorizations
        
      attr_accessor :category_ids
      
      after_save :sync_categories
      
      scope :for_category, lambda { |*categories|
        if (categories = [categories].flatten.compact).present?
          select("DISTINCT #{table_name}.*").joins(:categorizations => :category).where('cms_categories.label' => categories)
        end
      }
    end
  end
  
  module InstanceMethods
    def sync_categories
      (self.category_ids || {}).each do |category_id, flag|
        case flag.to_i
        when 1
          if category = Cms::Category.find_by_id(category_id)
            category.categorizations.create(:categorized => self)
          end
        when 0
          self.categorizations.where(:category_id => category_id).destroy_all
        end
      end
    end
  end
end

ActiveRecord::Base.send :include, ComfortableMexicanSofa::IsCategorized

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
comfortable_mexican_sofa-1.4.15 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.14 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.13 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.12 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.11 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.10 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.9 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.8 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.7 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.6 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.5 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.4 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.3 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.2 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.1 lib/comfortable_mexican_sofa/extensions/is_categorized.rb
comfortable_mexican_sofa-1.4.0 lib/comfortable_mexican_sofa/extensions/is_categorized.rb