Ticket #2: acts_as_sanitized.2.diff
| File acts_as_sanitized.2.diff, 6.6 kB (added by ant..@planyp.us, 1 year ago) |
|---|
-
test/models/entry.rb
old new 1 class 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] 7 end -
test/models/review.rb
old new 1 class 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'] 6 end -
test/models/comment.rb
old new 1 class 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 7 end -
test/models/message.rb
old new 1 class Message < ActiveRecord::Base 2 belongs_to :person 3 4 # leave out plugin to test that it doesn't intefere with other models 5 end -
test/models/person.rb
old new 1 class Person < ActiveRecord::Base 2 has_many :entries 3 4 # pass strip_html option for testing purposes 5 acts_as_sanitized :strip_tags => true 6 end -
test/acts_as_sanitized_test.rb
old new 1 1 require File.join(File.dirname(__FILE__), 'setup_test') 2 2 3 3 class 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 4 11 def test_field_specification 5 12 e = Entry.new(:title => "Test entry", 6 13 :body => "Lorem ipsum etc. etc.", 7 14 :extended => "Yet more lorem ipsum...", 8 15 :person_id => 1) 9 16 10 assert_equal [ "title", "body"], e.acts_as_sanitized_options[:fields]17 assert_equal [:title, :body], e.acts_as_sanitized_options[:fields] 11 18 end 12 19 13 20 def test_field_discovery … … 15 22 :title => "Test title", 16 23 :body => "Test body") 17 24 18 assert_equal [ "title", "body"], c.acts_as_sanitized_options[:fields]25 assert_equal [:title, :body], c.acts_as_sanitized_options[:fields] 19 26 end 20 27 21 28 def test_uncontaminated_model -
lib/acts_as_sanitized.rb
old new 1 1 module AlexPayne 2 class TextHelperWrapper 3 include ActionView::Helpers::TextHelper 4 include Singleton 5 end 2 6 module Acts #:nodoc: all 3 7 module Sanitized 4 8 def self.included(base) 5 9 base.extend(ClassMethods) 10 6 11 end 7 12 8 13 module ClassMethods 14 9 15 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 11 19 20 options[:fields] = options[:fields].collect{ |field| field.to_sym } if options[:fields] 12 21 write_inheritable_attribute(:acts_as_sanitized_options, { 13 22 :fields => options[:fields], 14 23 :strip_tags => options[:strip_tags] … … 22 31 23 32 self.columns.each do |column| 24 33 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) 26 35 end 27 36 end 28 37 end 29 38 30 include AlexPayne::Acts::Sanitized::InstanceMethods31 39 end 32 40 end 33 41 34 42 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(/</, '<') } 47 end 48 else 49 def sanitize_field(content) 50 TextHelperWrapper.instance.sanitize(content) 51 end 52 end 36 53 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) 41 61 end 42 else43 acts_as_sanitized_options[:fields].each do |field|44 sanitize_field(field)45 end46 62 end 63 64 write_attribute_without_sanitize(attr_name, value) 65 47 66 end 48 49 def sanitize_field(field)50 content = self[field.to_sym]51 self[field.to_sym] = sanitize(content) unless content.nil?52 end53 67 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? 57 70 end 58 71 end 59 72 end
