js-code-wrapper 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -14,4 +14,5 @@ to your `Gemfile`.
14
14
 
15
15
  ``` ruby
16
16
  wrap_js_code("<script>alert('wrap me!');</script>") # => "<code><script>alert('wrap me!');</script></code>"
17
+ wrap_js_code("<script>alert('wrap me!');</script>", :escape_js => true) # => "&lt;script&gt;alert('wrap me!');&lt;/script&gt;"
17
18
  ```
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = "js-code-wrapper"
8
- s.version = "0.1.2"
7
+ s.name = %q{js-code-wrapper}
8
+ s.version = "0.1.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["dom1nga"]
12
- s.date = "2011-11-29"
13
- s.description = "Usage: wrap_js_code('<script>alert('wrap me!');</script>') # => '<code><script>alert('wrap me!');</script></code>'"
14
- s.email = "beloved.dom1nga@gmail.com"
11
+ s.authors = [%q{dom1nga}]
12
+ s.date = %q{2011-12-06}
13
+ s.description = %q{Usage: wrap_js_code('<script>alert('wrap me!');</script>') # => '<code><script>alert('wrap me!');</script></code>'}
14
+ s.email = %q{beloved.dom1nga@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.md"
@@ -30,11 +30,11 @@ Gem::Specification.new do |s|
30
30
  "spec/lib/js_code_wrapper_spec.rb",
31
31
  "spec/spec_helper.rb"
32
32
  ]
33
- s.homepage = "http://github.com/dom1nga/js-code-wrapper"
34
- s.licenses = ["MIT"]
35
- s.require_paths = ["lib"]
36
- s.rubygems_version = "1.8.10"
37
- s.summary = "Provides helper method 'wrap_js_code' that wraps javascript code into '<code></code>' tags"
33
+ s.homepage = %q{http://github.com/dom1nga/js-code-wrapper}
34
+ s.licenses = [%q{MIT}]
35
+ s.require_paths = [%q{lib}]
36
+ s.rubygems_version = %q{1.8.7}
37
+ s.summary = %q{Provides helper method 'wrap_js_code' that wraps javascript code into '<code></code>' tags}
38
38
 
39
39
  if s.respond_to? :specification_version then
40
40
  s.specification_version = 3
@@ -1,12 +1,18 @@
1
1
  require 'nokogiri'
2
+ require 'cgi'
2
3
 
3
4
  module JsCodeWrapper
4
- def wrap_js_code(text)
5
+ def wrap_js_code(text, options = { :escape_js => false })
5
6
  doc = ::Nokogiri::HTML("<text>#{text}</text>")
6
- doc.xpath("//script[not(ancestor::code)] | //*/@*[starts-with(name(.), 'on')]/..").wrap('<code>')
7
+ if options[:escape_js]
8
+ doc.xpath("//script[not(ancestor::code)] | //*[@*[starts-with(name(), 'on')] and not(ancestor::code)]").each {|elem| elem.replace(::CGI.escapeHTML(elem.to_html)) }
9
+ else
10
+ doc.xpath("//script[not(ancestor::code)] | //*[@*[starts-with(name(), 'on')] and not(ancestor::code)]").wrap('<code>')
11
+ end
7
12
  doc.xpath("//body/*").to_s.scan(/<text>(.*)<\/text>/im)[0][0]
8
13
  end
14
+
15
+ module_function :wrap_js_code
9
16
  end
10
17
 
11
- Object.send(:include, JsCodeWrapper)
12
18
  ActionView::Base.send(:include, JsCodeWrapper) if defined?(ActionView::Base)
@@ -4,44 +4,54 @@ describe JsCodeWrapper do
4
4
 
5
5
  describe "#wrap_js_code" do
6
6
  it "should return the text without changes, if it doesn't contains script tags" do
7
- wrap_js_code("text <p>text</p><h1>text</h1>").should ==
7
+ JsCodeWrapper.wrap_js_code("text <p>text</p><h1>text</h1>").should ==
8
8
  "text <p>text</p>\n<h1>text</h1>"
9
9
  end
10
10
 
11
11
  it "should return the text with script body (type1) wrapped into code tags" do
12
- wrap_js_code("<script>alert('wrap me!')</script>").should ==
12
+ JsCodeWrapper.wrap_js_code("<script>alert('wrap me!')</script>").should ==
13
13
  "<code><script>alert('wrap me!')</script></code>"
14
14
  end
15
15
 
16
16
  it "should return the text with script body (type2) wrapped into code tags" do
17
- wrap_js_code('<script type="text/javascript" src="example.com/example.js"></script>').should ==
17
+ JsCodeWrapper.wrap_js_code('<script type="text/javascript" src="example.com/example.js"></script>').should ==
18
18
  '<code><script type="text/javascript" src="example.com/example.js"></script></code>'
19
19
  end
20
20
 
21
21
  it "should return the text with script body wrapped into code tags when script body duplicated in text" do
22
- wrap_js_code('<code><script>alert("wrap me!")</script></code><script>alert("wrap me!")</script>').should ==
22
+ JsCodeWrapper.wrap_js_code('<code><script>alert("wrap me!")</script></code><script>alert("wrap me!")</script>').should ==
23
23
  '<code><script>alert("wrap me!")</script></code><code><script>alert("wrap me!")</script></code>'
24
24
  end
25
25
 
26
26
  it "should return the text with script body wrapped into code tags" do
27
- wrap_js_code("<code><script>alert('wrap me1!')</script><script type='text/javascript' src='example.com/example1.js'></script></code><p>text1</p><script>alert('wrap me2!')</script><script type='text/javascript' src='example.com/example2.js'></script><code><script>alert('wrap me3!')</script></code>").should ==
27
+ JsCodeWrapper.wrap_js_code("<code><script>alert('wrap me1!')</script><script type='text/javascript' src='example.com/example1.js'></script></code><p>text1</p><script>alert('wrap me2!')</script><script type='text/javascript' src='example.com/example2.js'></script><code><script>alert('wrap me3!')</script></code>").should ==
28
28
  "<code><script>alert('wrap me1!')</script><script type=\"text/javascript\" src=\"example.com/example1.js\"></script></code><p>text1</p>\n<code><script>alert('wrap me2!')</script></code><code><script type=\"text/javascript\" src=\"example.com/example2.js\"></script></code><code><script>alert('wrap me3!')</script></code>"
29
29
  end
30
30
 
31
31
  it "should return the text without changes, if script body into code tags" do
32
- wrap_js_code("<code><script>alert('wrap me!')</script></code>").should ==
32
+ JsCodeWrapper.wrap_js_code("<code><script>alert('wrap me!')</script></code>").should ==
33
33
  "<code><script>alert('wrap me!')</script></code>"
34
34
  end
35
35
 
36
36
  it "should return the text with link wrapped into code tags if link contains event attribute" do
37
- wrap_js_code('<a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a>').should ==
37
+ JsCodeWrapper.wrap_js_code('<a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a>').should ==
38
38
  "<code><a href=\"#\" onclick=\"alert('wrap me!'); return 0;\">link</a></code>"
39
39
  end
40
40
 
41
41
  it "should return the text with tags without changes if tags not contains event attributes" do
42
- wrap_js_code('<a href="#">link</a><div class="div1"></div><p>text1</p>').should ==
42
+ JsCodeWrapper.wrap_js_code('<a href="#">link</a><div class="div1"></div><p>text1</p>').should ==
43
43
  "<a href=\"#\">link</a><div class=\"div1\"></div>\n<p>text1</p>"
44
44
  end
45
45
 
46
+ it "should return the text with escaped java script" do
47
+ JsCodeWrapper.wrap_js_code("<script>alert('wrap me!')</script>", :escape_js => true).should ==
48
+ "&lt;script&gt;alert('wrap me!')&lt;/script&gt;"
49
+ end
50
+
51
+ it "should return the text with script body wrapped into code tags when tag contains script body duplicated in text" do
52
+ JsCodeWrapper.wrap_js_code('<code><a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a></code><a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a>').should ==
53
+ '<code><a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a></code><code><a href="#" onclick="alert(\'wrap me!\'); return 0;">link</a></code>'
54
+ end
55
+
46
56
  end
47
57
  end
metadata CHANGED
@@ -1,88 +1,69 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: js-code-wrapper
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 1
9
- - 2
10
- version: 0.1.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - dom1nga
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-11-29 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- requirement: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
30
- version_requirements: *id001
12
+ date: 2011-12-06 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
31
15
  name: rspec
32
- prerelease: false
33
- type: :development
34
- - !ruby/object:Gem::Dependency
35
- requirement: &id002 !ruby/object:Gem::Requirement
16
+ requirement: &449670 !ruby/object:Gem::Requirement
36
17
  none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- hash: 3
41
- segments:
42
- - 0
43
- version: "0"
44
- version_requirements: *id002
45
- name: rake
46
- prerelease: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
47
22
  type: :development
48
- - !ruby/object:Gem::Dependency
49
- requirement: &id003 !ruby/object:Gem::Requirement
50
- none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
- version: "0"
58
- version_requirements: *id003
59
- name: jeweler
60
23
  prerelease: false
24
+ version_requirements: *449670
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &449370 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
61
33
  type: :development
62
- - !ruby/object:Gem::Dependency
63
- requirement: &id004 !ruby/object:Gem::Requirement
34
+ prerelease: false
35
+ version_requirements: *449370
36
+ - !ruby/object:Gem::Dependency
37
+ name: jeweler
38
+ requirement: &449010 !ruby/object:Gem::Requirement
64
39
  none: false
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- hash: 3
69
- segments:
70
- - 0
71
- version: "0"
72
- version_requirements: *id004
73
- name: nokogiri
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
74
45
  prerelease: false
46
+ version_requirements: *449010
47
+ - !ruby/object:Gem::Dependency
48
+ name: nokogiri
49
+ requirement: &448640 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
75
55
  type: :development
76
- description: "Usage: wrap_js_code('<script>alert('wrap me!');</script>') # => '<code><script>alert('wrap me!');</script></code>'"
56
+ prerelease: false
57
+ version_requirements: *448640
58
+ description: ! 'Usage: wrap_js_code(''<script>alert(''wrap me!'');</script>'') # =>
59
+ ''<code><script>alert(''wrap me!'');</script></code>'''
77
60
  email: beloved.dom1nga@gmail.com
78
61
  executables: []
79
-
80
62
  extensions: []
81
-
82
- extra_rdoc_files:
63
+ extra_rdoc_files:
83
64
  - LICENSE.txt
84
65
  - README.md
85
- files:
66
+ files:
86
67
  - .document
87
68
  - .rspec
88
69
  - Gemfile
@@ -96,37 +77,32 @@ files:
96
77
  - spec/lib/js_code_wrapper_spec.rb
97
78
  - spec/spec_helper.rb
98
79
  homepage: http://github.com/dom1nga/js-code-wrapper
99
- licenses:
80
+ licenses:
100
81
  - MIT
101
82
  post_install_message:
102
83
  rdoc_options: []
103
-
104
- require_paths:
84
+ require_paths:
105
85
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
86
+ required_ruby_version: !ruby/object:Gem::Requirement
107
87
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 3
112
- segments:
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ segments:
113
93
  - 0
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
94
+ hash: -385486207
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
96
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 3
121
- segments:
122
- - 0
123
- version: "0"
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
124
101
  requirements: []
125
-
126
102
  rubyforge_project:
127
- rubygems_version: 1.8.10
103
+ rubygems_version: 1.8.7
128
104
  signing_key:
129
105
  specification_version: 3
130
- summary: Provides helper method 'wrap_js_code' that wraps javascript code into '<code></code>' tags
106
+ summary: Provides helper method 'wrap_js_code' that wraps javascript code into '<code></code>'
107
+ tags
131
108
  test_files: []
132
-