acts_as_sanitiled 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.4
1
+ 1.1.5
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{acts_as_sanitiled}
8
- s.version = "1.1.4"
8
+ s.version = "1.1.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gabe da Silveira"]
@@ -14,6 +14,10 @@ module ActsAsSanitiled #:nodoc: all
14
14
  klass.extend ClassMethods
15
15
  end
16
16
 
17
+ def self.html_safe_available?
18
+ "".respond_to?(:html_safe)
19
+ end
20
+
17
21
  module ClassMethods
18
22
  def acts_as_textiled(*attributes)
19
23
  raise "only acts_as_sanitized or acts_as_sanitiled can take an options hash" if attributes.last.is_a?(Hash)
@@ -58,7 +62,7 @@ module ActsAsSanitiled #:nodoc: all
58
62
  string = Sanitize.clean(string, sanitize_options) unless skip_sanitize
59
63
  textiled[attribute.to_s] = string
60
64
  end
61
- textiled[attribute.to_s]
65
+ ActsAsSanitiled.html_safe_available? ? textiled[attribute.to_s].html_safe : textiled[attribute.to_s]
62
66
  elsif type.nil? && self[attribute].nil?
63
67
  nil
64
68
  elsif type_options.include?(type.to_s)
@@ -68,7 +72,7 @@ module ActsAsSanitiled #:nodoc: all
68
72
  end
69
73
  end
70
74
 
71
- define_method("#{attribute}_plain", proc { strip_html(__send__(attribute)) if __send__(attribute) } )
75
+ define_method("#{attribute}_plain", proc { ActsAsSanitiled.html_safe_available? ? strip_html(__send__(attribute)).html_safe : strip_html(__send__(attribute)) if __send__(attribute) } )
72
76
  define_method("#{attribute}_source", proc { __send__("#{attribute}_before_type_cast") } )
73
77
 
74
78
  @textiled_attributes << attribute
@@ -41,16 +41,36 @@ EOF
41
41
  @body_plain = "First line\nSecond line with bold\n\nSecond paragraph with special char™, XSS attribute,\nscript>script tag, and unclosed tag."
42
42
  end
43
43
 
44
- it "should properly textilize and strip html" do
44
+ it "should properly textilize and sanitize by default" do
45
45
  @story.description.should.equal @desc_html
46
- @story.description(:source).should.equal @desc_textile
46
+ @story.body.should.equal @body_html
47
+ end
48
+
49
+ it "should mark textilized and sanitized output as html safe" do
50
+ @story.description.should.be :html_safe?
51
+ @story.body.should.be :html_safe?
52
+ end if ActsAsSanitiled.html_safe_available?
53
+
54
+ it "should properly strip html when given the 'plain' option" do
47
55
  @story.description(:plain).should.equal @desc_plain
56
+ @story.body(:plain).should.equal @body_plain
57
+ end
48
58
 
49
- @story.body.should.equal @body_html
59
+ it "should mark output stripped of html as html safe" do
60
+ @story.description(:plain).should.be :html_safe?
61
+ @story.body(:plain).should.be :html_safe?
62
+ end if ActsAsSanitiled.html_safe_available?
63
+
64
+ it "should leave unchanged when given the 'source' option" do
65
+ @story.description(:source).should.equal @desc_textile
50
66
  @story.body(:source).should.equal @body_textile
51
- @story.body(:plain).should.equal @body_plain
52
67
  end
53
68
 
69
+ it "should not mark raw source as html safe" do
70
+ @story.description(:source).should.not.be :html_safe?
71
+ @story.body(:source).should.not.be :html_safe?
72
+ end if ActsAsSanitiled.html_safe_available?
73
+
54
74
  it "should raise when given a non-sensical option" do
55
75
  proc{ @story.description(:cassadaga) }.should.raise
56
76
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_sanitiled
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 4
10
- version: 1.1.4
9
+ - 5
10
+ version: 1.1.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gabe da Silveira