js-code-wrapper 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
-