Sha256: d696a85607cd73f6db42a78bb9d383ad62904b60bcae3631de14bcb5b869cc8d

Contents?: true

Size: 1.7 KB

Versions: 15

Compression:

Stored size: 1.7 KB

Contents

module FilteredColumn
  module Mixin
    def self.included(base)
      base.extend(ActMethod)
    end
    
    module ActMethod
      # filtered_column :name, :title, :only => [ :textile_filter, :smartypants_filter ]
      def filtered_column(*names)
        unless included_modules.include?(InstanceMethods)
          send :include, InstanceMethods
          class_attribute :filtered_attributes, :filtered_options
          before_save :process_filters
        end
        
        options = names.last.is_a?(Hash) ? names.pop : {}
        options[:only]   = [options[:only]].flatten.compact
        options[:except] = [options[:except]].flatten.compact
        names.each do |name|
          (self.filtered_options    ||= {})[name] = options
          (self.filtered_attributes ||= []) << name
          define_method("#{name}_doc") do
            class << self; attr_accessor "#{name}_doc"; end
            instance_variable_set("@#{name}_doc", HTML::Document.new(send("#{name}_html")))
          end
        end
      end

      module InstanceMethods
        protected
          def process_filters
            filtered_attributes.each do |attr_name|
              send "#{attr_name}_html=", FilteredColumn::Processor.process_filter(filter_for_attribute(attr_name), send(attr_name).to_s.dup)
            end
          end
           
          def filter_for_attribute(attr_name)
            return nil if filter.blank? ||
              (!filtered_options[attr_name][:only].blank?   && !filtered_options[attr_name][:only].include?(filter.to_sym)) ||
              (!filtered_options[attr_name][:except].blank? &&  filtered_options[attr_name][:except].include?(filter.to_sym))
            filter
          end
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 2 rubygems

Version Path
adva-0.3.2 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.3.1 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.3.0 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.2.4 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.2.3 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.2.2 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.2.1 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.2.0 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.1.4 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.1.3 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.1.2 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.1.1 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.1.0 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva_cms-0.0.1 vendor/gems/filtered_column/lib/filtered_column/mixin.rb
adva-0.0.1 adva_cms/vendor/gems/filtered_column/lib/filtered_column/mixin.rb