Ticket #2: acts_as_sanitized.2.diff

File acts_as_sanitized.2.diff, 6.6 kB (added by ant..@planyp.us, 1 year ago)

fixed setting model properties to nil and using symbols in acts_as_sanitized calls in models

  • test/models/entry.rb

    old new  
     1class Entry < ActiveRecord::Base 
     2  belongs_to :person 
     3  has_many :comments 
     4   
     5  # specify which fields to sanitize, purposefully excluding 'extended' for testing purposes 
     6  acts_as_sanitized :fields => ['title', :body] 
     7end 
  • test/models/review.rb

    old new  
     1class Review < ActiveRecord::Base 
     2  belongs_to :person 
     3   
     4  # pass strip_html option and specify fields for testing purposes 
     5  acts_as_sanitized :strip_tags => true, :fields => ['title', 'body'] 
     6end 
  • test/models/comment.rb

    old new  
     1class Comment < ActiveRecord::Base 
     2  belongs_to :entry 
     3  belongs_to :person 
     4   
     5  # let the plugin figure out which fields can be sanitized 
     6  acts_as_sanitized 
     7end 
  • test/models/message.rb

    old new  
     1class Message < ActiveRecord::Base 
     2  belongs_to :person 
     3   
     4  # leave out plugin to test that it doesn't intefere with other models 
     5end 
  • test/models/person.rb

    old new  
     1class Person < ActiveRecord::Base 
     2  has_many :entries 
     3   
     4  # pass strip_html option for testing purposes 
     5  acts_as_sanitized :strip_tags => true 
     6end 
  • test/acts_as_sanitized_test.rb

    old new  
    11require File.join(File.dirname(__FILE__), 'setup_test') 
    22 
    33class ActsAsSanitizedTest < Test::Unit::TestCase   
     4  def test_field_assignments 
     5    e = Entry.new 
     6    e.title = 'test' 
     7    assert e.title == 'test' 
     8    e.title = nil 
     9    assert e.title == nil 
     10  end 
    411  def test_field_specification 
    512    e = Entry.new(:title => "Test entry", 
    613                  :body => "Lorem ipsum etc. etc.", 
    714                  :extended => "Yet more lorem ipsum...", 
    815                  :person_id => 1) 
    916                   
    10     assert_equal ["title", "body"], e.acts_as_sanitized_options[:fields] 
     17    assert_equal [:title, :body], e.acts_as_sanitized_options[:fields] 
    1118  end 
    1219   
    1320  def test_field_discovery 
     
    1522                    :title => "Test title", 
    1623                    :body => "Test body") 
    1724     
    18     assert_equal ["title", "body"], c.acts_as_sanitized_options[:fields] 
     25    assert_equal [:title, :body], c.acts_as_sanitized_options[:fields] 
    1926  end 
    2027   
    2128  def test_uncontaminated_model 
  • lib/acts_as_sanitized.rb

    old new  
    11module AlexPayne 
     2  class TextHelperWrapper 
     3    include ActionView::Helpers::TextHelper 
     4    include Singleton 
     5  end 
    26  module Acts #:nodoc: all 
    37    module Sanitized 
    48      def self.included(base) 
    59        base.extend(ClassMethods) 
     10         
    611      end 
    7  
     12        
    813      module ClassMethods 
     14         
    915        def acts_as_sanitized(options = {}) 
    10           before_save :sanitize_fields 
     16          include AlexPayne::Acts::Sanitized::InstanceMethods 
     17          alias_method :write_attribute_without_sanitize, :write_attribute 
     18          alias_method :write_attribute, :write_attribute_with_sanitize 
    1119 
     20          options[:fields] = options[:fields].collect{ |field| field.to_sym } if options[:fields] 
    1221          write_inheritable_attribute(:acts_as_sanitized_options, { 
    1322            :fields => options[:fields], 
    1423            :strip_tags => options[:strip_tags] 
     
    2231             
    2332            self.columns.each do |column| 
    2433              if column.type == :string || column.type == :text 
    25                 acts_as_sanitized_options[:fields].push(column.name
     34                acts_as_sanitized_options[:fields].push(column.name.to_sym
    2635              end 
    2736            end 
    2837          end 
    2938           
    30           include AlexPayne::Acts::Sanitized::InstanceMethods 
    3139        end 
    3240      end 
    3341 
    3442      module InstanceMethods 
    35         include ActionView::Helpers::TextHelper 
     43        if Object.const_defined?(:WhiteListHelper) 
     44          include WhiteListHelper 
     45          def sanitize_field(content) 
     46            white_list(content) { |node, bad| node.to_s.gsub(/</, '&lt;') }  
     47          end 
     48        else 
     49          def sanitize_field(content) 
     50            TextHelperWrapper.instance.sanitize(content)       
     51          end 
     52        end 
    3653         
    37         def sanitize_fields 
    38           if acts_as_sanitized_options[:strip_tags] == true 
    39             acts_as_sanitized_options[:fields].each do |field| 
    40               strip_tags_field(field) 
     54        def write_attribute_with_sanitize(attr_name, value) 
     55           
     56          if !value.nil? && acts_as_sanitized_options[:fields].include?(attr_name.to_sym) 
     57            if acts_as_sanitized_options[:strip_tags] == true 
     58                value = strip_tags_field(value) 
     59            else 
     60                value = sanitize_field(value)  
    4161            end 
    42           else 
    43             acts_as_sanitized_options[:fields].each do |field| 
    44               sanitize_field(field) 
    45             end 
    4662          end 
     63             
     64          write_attribute_without_sanitize(attr_name, value) 
     65           
    4766        end 
    48  
    49         def sanitize_field(field) 
    50           content = self[field.to_sym] 
    51           self[field.to_sym] = sanitize(content) unless content.nil? 
    52         end 
    5367         
    54         def strip_tags_field(field) 
    55           content = self[field.to_sym] 
    56           self[field.to_sym] = strip_tags(content) unless content.nil? 
     68        def strip_tags_field(content) 
     69          TextHelperWrapper.instance.strip_tags(content) unless content.nil? 
    5770        end 
    5871      end 
    5972    end