hyp_diff 0.0.2 → 0.0.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.
@@ -107,7 +107,7 @@ module HypDiff; class << self
107
107
  insertions << change.new_element.text
108
108
  when "=" then
109
109
  apply_insertions_and_deletions
110
- new_text << change.new_element.text
110
+ new_text << escape_html(change.new_element.text)
111
111
  when "+" then
112
112
  insertions << change.new_element.text
113
113
  when "-" then
@@ -132,10 +132,10 @@ module HypDiff; class << self
132
132
 
133
133
  def apply_insertions_and_deletions
134
134
  if deletions.length > 0
135
- @new_text << deletion_tag(deletions.join)
135
+ new_text << deletion_tag(deletions.join)
136
136
  end
137
137
  if insertions.length > 0
138
- @new_text << insertion_tag(insertions.join)
138
+ new_text << insertion_tag(insertions.join)
139
139
  end
140
140
 
141
141
  @insertions = []
@@ -143,11 +143,17 @@ module HypDiff; class << self
143
143
  end
144
144
 
145
145
  def insertion_tag(text)
146
- @render_insertion.call(text)
146
+ @render_insertion.call(escape_html(text))
147
147
  end
148
148
 
149
149
  def deletion_tag(text)
150
- @render_deletion.call(text)
150
+ @render_deletion.call(escape_html(text))
151
+ end
152
+
153
+ def escape_html(text)
154
+ fragment = Nokogiri::HTML::DocumentFragment.parse("")
155
+ fragment.content = text
156
+ fragment.to_html
151
157
  end
152
158
 
153
159
  end
@@ -162,7 +168,7 @@ module HypDiff; class << self
162
168
 
163
169
  def text_fragments(node)
164
170
  if node.is_a?(Nokogiri::XML::Text)
165
- node.text.split(/(?=[.!, ])|\b/).map { |token| TextFromNode.new(token, node) }
171
+ node.text.split(/(?=[.!,<> ])|\b/).map { |token| TextFromNode.new(token, node) }
166
172
  else
167
173
  node.children.map { |c| text_fragments(c) }.flatten
168
174
  end
@@ -1,3 +1,3 @@
1
1
  module HypDiff
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -98,6 +98,24 @@ describe HypDiff do
98
98
  end
99
99
  end
100
100
 
101
+ describe "handling html entities" do
102
+ it "handles them transparently when whole words are entities" do
103
+ expect_diff(
104
+ "foo &lt; bar",
105
+ "foo &gt; bar",
106
+ "foo <del>&lt;</del><ins>&gt;</ins> bar"
107
+ )
108
+ end
109
+
110
+ it "handles them transparently when words contain entities" do
111
+ expect_diff(
112
+ "f&#252; b&#228;r",
113
+ "f&#246; b&#228;r",
114
+ "<del>f&#252;</del><ins>f&#246;</ins> b&#228;r"
115
+ )
116
+ end
117
+ end
118
+
101
119
  describe "handling whitespace" do
102
120
  it "treats consecutive whitespace as a single whitespace" do
103
121
  expect_diff("hello world", "hello world", "hello world")
metadata CHANGED
@@ -1,18 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hyp_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Kristian Hanekamp
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-03-18 00:00:00.000000000 Z
12
+ date: 2014-04-01 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: nokogiri
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
@@ -20,6 +22,7 @@ dependencies:
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
27
  - - ~>
25
28
  - !ruby/object:Gem::Version
@@ -27,6 +30,7 @@ dependencies:
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: diff-lcs
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
35
  - - ~>
32
36
  - !ruby/object:Gem::Version
@@ -34,6 +38,7 @@ dependencies:
34
38
  type: :runtime
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
43
  - - ~>
39
44
  - !ruby/object:Gem::Version
@@ -41,6 +46,7 @@ dependencies:
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: bundler
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
51
  - - ~>
46
52
  - !ruby/object:Gem::Version
@@ -48,6 +54,7 @@ dependencies:
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
59
  - - ~>
53
60
  - !ruby/object:Gem::Version
@@ -55,6 +62,7 @@ dependencies:
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: rspec
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
67
  - - ~>
60
68
  - !ruby/object:Gem::Version
@@ -62,6 +70,7 @@ dependencies:
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
75
  - - ~>
67
76
  - !ruby/object:Gem::Version
@@ -69,6 +78,7 @@ dependencies:
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: rake
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ~>
74
84
  - !ruby/object:Gem::Version
@@ -76,14 +86,15 @@ dependencies:
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
91
  - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: '10.1'
83
- description: "\nHypDiff compares HTML snippets. It generates a diff between two input
84
- snippets. The diff is a new HTML snippet that highlights textual changes. The tag
85
- structure and formatting of the input snippets is preserved. The generated diff
86
- snippet is valid, well-formed HTML and suitable for presentation inside a WYSIWYG
94
+ description: ! "\nHypDiff compares HTML snippets. It generates a diff between two
95
+ input snippets. The diff is a new HTML snippet that highlights textual changes.
96
+ The tag structure and formatting of the input snippets is preserved. The generated
97
+ diff snippet is valid, well-formed HTML and suitable for presentation inside a WYSIWYG
87
98
  environment.\n "
88
99
  email:
89
100
  - kris.hanekamp@gmail.com
@@ -107,26 +118,33 @@ files:
107
118
  homepage: https://github.com/krishan/hyp_diff
108
119
  licenses:
109
120
  - MIT
110
- metadata: {}
111
121
  post_install_message:
112
122
  rdoc_options: []
113
123
  require_paths:
114
124
  - lib
115
125
  required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
116
127
  requirements:
117
- - - '>='
128
+ - - ! '>='
118
129
  - !ruby/object:Gem::Version
119
130
  version: '0'
131
+ segments:
132
+ - 0
133
+ hash: -2073153059126079532
120
134
  required_rubygems_version: !ruby/object:Gem::Requirement
135
+ none: false
121
136
  requirements:
122
- - - '>='
137
+ - - ! '>='
123
138
  - !ruby/object:Gem::Version
124
139
  version: '0'
140
+ segments:
141
+ - 0
142
+ hash: -2073153059126079532
125
143
  requirements: []
126
144
  rubyforge_project:
127
- rubygems_version: 2.0.14
145
+ rubygems_version: 1.8.23
128
146
  signing_key:
129
- specification_version: 4
147
+ specification_version: 3
130
148
  summary: HypDiff compares html snippets
131
149
  test_files:
132
150
  - spec/hyp_diff_spec.rb
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 7f4edc59168406b4b1194beb77ecde74bd4e2645
4
- data.tar.gz: e89d6a3a2a7c55250d3d9183c6f2b6fcdbb16a80
5
- SHA512:
6
- metadata.gz: d0197e591ec496470791dd49b63bcb78f88fa44d9d86e42bca2ddf95633f9f6576094cb4173aa7d29c71088482e2544c16fbb4ab30e29009947a1f6330f6e2a5
7
- data.tar.gz: ed945683196fe5997645ba09f38d16853c9d2acac68d72cf531d8590d8f42227ad3e8389c73d2e254b12ee58d9e6200e16aedd269f026d195323f51cf08cf07d