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.
- data/lib/hyp_diff.rb +12 -6
- data/lib/hyp_diff/version.rb +1 -1
- data/spec/hyp_diff_spec.rb +18 -0
- metadata +29 -11
- checksums.yaml +0 -7
data/lib/hyp_diff.rb
CHANGED
@@ -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
|
-
|
135
|
+
new_text << deletion_tag(deletions.join)
|
136
136
|
end
|
137
137
|
if insertions.length > 0
|
138
|
-
|
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(/(?=[
|
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
|
data/lib/hyp_diff/version.rb
CHANGED
data/spec/hyp_diff_spec.rb
CHANGED
@@ -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 < bar",
|
105
|
+
"foo > bar",
|
106
|
+
"foo <del><</del><ins>></ins> bar"
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "handles them transparently when words contain entities" do
|
111
|
+
expect_diff(
|
112
|
+
"fü bär",
|
113
|
+
"fö bär",
|
114
|
+
"<del>fü</del><ins>fö</ins> bä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.
|
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-
|
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
|
84
|
-
snippets. The diff is a new HTML snippet that highlights textual changes.
|
85
|
-
structure and formatting of the input snippets is preserved. The generated
|
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:
|
145
|
+
rubygems_version: 1.8.23
|
128
146
|
signing_key:
|
129
|
-
specification_version:
|
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
|