js-code-wrapper 0.1.1 → 0.1.2

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/Gemfile CHANGED
@@ -4,4 +4,5 @@ group :development do
4
4
  gem "rspec"
5
5
  gem "rake"
6
6
  gem "jeweler"
7
+ gem "nokogiri"
7
8
  end
@@ -7,6 +7,7 @@ GEM
7
7
  bundler (~> 1.0)
8
8
  git (>= 1.2.5)
9
9
  rake
10
+ nokogiri (1.5.0)
10
11
  rake (0.9.2.2)
11
12
  rspec (2.7.0)
12
13
  rspec-core (~> 2.7.0)
@@ -22,5 +23,6 @@ PLATFORMS
22
23
 
23
24
  DEPENDENCIES
24
25
  jeweler
26
+ nokogiri
25
27
  rake
26
28
  rspec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "js-code-wrapper"
8
- s.version = "0.1.1"
8
+ s.version = "0.1.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["dom1nga"]
12
- s.date = "2011-11-28"
12
+ s.date = "2011-11-29"
13
13
  s.description = "Usage: wrap_js_code('<script>alert('wrap me!');</script>') # => '<code><script>alert('wrap me!');</script></code>'"
14
14
  s.email = "beloved.dom1nga@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -43,15 +43,18 @@ Gem::Specification.new do |s|
43
43
  s.add_development_dependency(%q<rspec>, [">= 0"])
44
44
  s.add_development_dependency(%q<rake>, [">= 0"])
45
45
  s.add_development_dependency(%q<jeweler>, [">= 0"])
46
+ s.add_development_dependency(%q<nokogiri>, [">= 0"])
46
47
  else
47
48
  s.add_dependency(%q<rspec>, [">= 0"])
48
49
  s.add_dependency(%q<rake>, [">= 0"])
49
50
  s.add_dependency(%q<jeweler>, [">= 0"])
51
+ s.add_dependency(%q<nokogiri>, [">= 0"])
50
52
  end
51
53
  else
52
54
  s.add_dependency(%q<rspec>, [">= 0"])
53
55
  s.add_dependency(%q<rake>, [">= 0"])
54
56
  s.add_dependency(%q<jeweler>, [">= 0"])
57
+ s.add_dependency(%q<nokogiri>, [">= 0"])
55
58
  end
56
59
  end
57
60
 
@@ -1,41 +1,11 @@
1
+ require 'nokogiri'
2
+
1
3
  module JsCodeWrapper
2
4
  def wrap_js_code(text)
3
- code_coords = code_tag_coords(text)
4
- matches_count = script_to_code_tags_inclusion(text, code_coords).count {|t| !t[1]}
5
-
6
- while matches_count > 0 do
7
- text = insert_code_tags(text, code_coords)
8
- matches_count = matches_count - 1
9
- code_coords = code_tag_coords(text)
10
- end
11
-
12
- text
13
- end
14
-
15
- private
16
-
17
- def code_tag_coords(text)
18
- code_begin = text.to_enum(:scan,/(<code)/i).map { |m,| $`.size }
19
- code_end = text.to_enum(:scan,/(<\/code>)/i).map { |m,| $`.size }
20
- 0.upto(code_begin.length - 1).map {|i| [code_begin[i], code_end[i]] }
5
+ doc = ::Nokogiri::HTML("<text>#{text}</text>")
6
+ doc.xpath("//script[not(ancestor::code)] | //*/@*[starts-with(name(.), 'on')]/..").wrap('<code>')
7
+ doc.xpath("//body/*").to_s.scan(/<text>(.*)<\/text>/im)[0][0]
21
8
  end
22
-
23
- def script_to_code_tags_inclusion(text, code_coords)
24
- text.to_enum(:scan,/(<script{1}[^<]*<\/script>{1})/i).map { |m,| $`.size }.map { |v| [v, code_coords.map{|c| c[0] < v && v < c[1] }.compact.any?] }
25
- end
26
-
27
- def insert_code_tags(text, code_coords)
28
- matches = text.gsub /(<script{1}[^<]*<\/script>{1})/i
29
-
30
- script_to_code_tags_inclusion(text, code_coords).each do |b|
31
- tmp = matches.next
32
- unless b[1]
33
- text[b[0]..(b[0]+tmp.length-1)] = '<code>'+ tmp +'</code>'
34
- return text
35
- end
36
- end
37
- end
38
-
39
9
  end
40
10
 
41
11
  Object.send(:include, JsCodeWrapper)
@@ -4,28 +4,43 @@ 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 == "text <p>text</p><h1>text</h1>"
7
+ wrap_js_code("text <p>text</p><h1>text</h1>").should ==
8
+ "text <p>text</p>\n<h1>text</h1>"
8
9
  end
9
10
 
10
11
  it "should return the text with script body (type1) wrapped into code tags" do
11
- wrap_js_code("<script>alert('wrap me!')</script>").should == "<code><script>alert('wrap me!')</script></code>"
12
+ wrap_js_code("<script>alert('wrap me!')</script>").should ==
13
+ "<code><script>alert('wrap me!')</script></code>"
12
14
  end
13
15
 
14
16
  it "should return the text with script body (type2) wrapped into code tags" do
15
- wrap_js_code('<script type="text/javascript" src="example.com/example.js"></script>').should == '<code><script type="text/javascript" src="example.com/example.js"></script></code>'
17
+ wrap_js_code('<script type="text/javascript" src="example.com/example.js"></script>').should ==
18
+ '<code><script type="text/javascript" src="example.com/example.js"></script></code>'
16
19
  end
17
20
 
18
21
  it "should return the text with script body wrapped into code tags when script body duplicated in text" do
19
22
  wrap_js_code('<code><script>alert("wrap me!")</script></code><script>alert("wrap me!")</script>').should ==
20
- '<code><script>alert("wrap me!")</script></code><code><script>alert("wrap me!")</script></code>'
23
+ '<code><script>alert("wrap me!")</script></code><code><script>alert("wrap me!")</script></code>'
21
24
  end
22
25
 
23
26
  it "should return the text with script body wrapped into code tags" do
24
- 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 == "<code><script>alert('wrap me1!')</script><script type='text/javascript' src='example.com/example1.js'></script></code><p>text1</p><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>"
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 ==
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>"
25
29
  end
26
30
 
27
31
  it "should return the text without changes, if script body into code tags" do
28
- wrap_js_code("<code><script>alert('wrap me!')</script></code>").should == "<code><script>alert('wrap me!')</script></code>"
32
+ wrap_js_code("<code><script>alert('wrap me!')</script></code>").should ==
33
+ "<code><script>alert('wrap me!')</script></code>"
34
+ end
35
+
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 ==
38
+ "<code><a href=\"#\" onclick=\"alert('wrap me!'); return 0;\">link</a></code>"
39
+ end
40
+
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 ==
43
+ "<a href=\"#\">link</a><div class=\"div1\"></div>\n<p>text1</p>"
29
44
  end
30
45
 
31
46
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: js-code-wrapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - dom1nga
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-28 00:00:00 Z
18
+ date: 2011-11-29 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -59,6 +59,20 @@ dependencies:
59
59
  name: jeweler
60
60
  prerelease: false
61
61
  type: :development
62
+ - !ruby/object:Gem::Dependency
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ 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
74
+ prerelease: false
75
+ type: :development
62
76
  description: "Usage: wrap_js_code('<script>alert('wrap me!');</script>') # => '<code><script>alert('wrap me!');</script></code>'"
63
77
  email: beloved.dom1nga@gmail.com
64
78
  executables: []