truncato 0.7.7 → 0.7.8
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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/truncato/truncated_sax_document.rb +21 -12
- data/lib/truncato/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9cb24d2051ad12e17099cc7ec2c3a03240ea1ca6
|
4
|
+
data.tar.gz: e4e8af975b663b294522e9da8f0fa734de680e75
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b2c503c442955a2095e6578a00f43c93764f40a1ba5f0b4fa1bbeb97d0537ddbd4aaa6d9560adc17ea37aecba4922af1aba65cdd4facad12bebd25770428c6e
|
7
|
+
data.tar.gz: 60261242b872ac153e45ab9811f15b8058def2f3825252f4522b3f08fbac7b9237105432e784fe86056cf3c564eded95bd40af0f5caf986cce28098c8f7abf0d
|
data/README.md
CHANGED
@@ -13,8 +13,8 @@ gem 'truncato'
|
|
13
13
|
## Usage
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
Truncato.truncate "<p>some text</p>", max_length: 4
|
17
|
-
Truncato.truncate "<p>some text</p>", max_length: 4, count_tags: false
|
16
|
+
Truncato.truncate "<p>some text</p>", max_length: 4 #=> "<p>s...</p>"
|
17
|
+
Truncato.truncate "<p>some text</p>", max_length: 4, count_tags: false #=> "<p>some...</p>"
|
18
18
|
```
|
19
19
|
|
20
20
|
The configuration options are:
|
@@ -2,6 +2,10 @@ require 'nokogiri'
|
|
2
2
|
require 'htmlentities'
|
3
3
|
|
4
4
|
class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
5
|
+
IGNORABLE_TAGS = %w(html head body)
|
6
|
+
|
7
|
+
SINGLE_TAGS = %w{br img}
|
8
|
+
|
5
9
|
attr_reader :truncated_string, :max_length, :max_length_reached, :tail,
|
6
10
|
:count_tags, :filtered_attributes, :filtered_tags, :ignored_levels
|
7
11
|
|
@@ -13,7 +17,7 @@ class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
|
13
17
|
|
14
18
|
def start_element name, attributes
|
15
19
|
enter_ignored_level if filtered_tags.include?(name)
|
16
|
-
return if @max_length_reached ||
|
20
|
+
return if @max_length_reached || ignorable_tag?(name) || ignore_mode?
|
17
21
|
@closing_tags.push name unless single_tag_element? name
|
18
22
|
append_to_truncated_string opening_tag(name, attributes), overriden_tag_length
|
19
23
|
end
|
@@ -28,23 +32,17 @@ class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
|
28
32
|
def comment string
|
29
33
|
if @comments
|
30
34
|
return if @max_length_reached
|
31
|
-
|
32
|
-
string_to_append = comment_tag(string).length > remaining_length ? truncate_comment(comment_tag(string), remaining_length) : comment_tag(string)
|
33
|
-
append_to_truncated_string string_to_append
|
35
|
+
process_comment string
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
def comment_tag comment
|
38
|
-
"<!--#{comment}-->"
|
39
|
-
end
|
40
|
-
|
41
39
|
def end_element name
|
42
40
|
if filtered_tags.include?(name) && ignore_mode?
|
43
41
|
exit_ignored_level
|
44
42
|
return
|
45
43
|
end
|
46
44
|
|
47
|
-
return if @max_length_reached ||
|
45
|
+
return if @max_length_reached || ignorable_tag?(name) || ignore_mode?
|
48
46
|
|
49
47
|
unless single_tag_element? name
|
50
48
|
@closing_tags.pop
|
@@ -69,6 +67,16 @@ class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
|
69
67
|
@comments = options.fetch(:comments, false)
|
70
68
|
end
|
71
69
|
|
70
|
+
def process_comment(string)
|
71
|
+
remaining_length = max_length - @estimated_length - 1
|
72
|
+
string_to_append = comment_tag(string).length > remaining_length ? truncate_comment(comment_tag(string), remaining_length) : comment_tag(string)
|
73
|
+
append_to_truncated_string string_to_append
|
74
|
+
end
|
75
|
+
|
76
|
+
def comment_tag comment
|
77
|
+
"<!--#{comment}-->"
|
78
|
+
end
|
79
|
+
|
72
80
|
def init_parsing_state
|
73
81
|
@truncated_string = ""
|
74
82
|
@closing_tags = []
|
@@ -82,7 +90,7 @@ class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
|
82
90
|
end
|
83
91
|
|
84
92
|
def single_tag_element? name
|
85
|
-
|
93
|
+
SINGLE_TAGS.include? name
|
86
94
|
end
|
87
95
|
|
88
96
|
def append_to_truncated_string string, overriden_length=nil
|
@@ -158,8 +166,9 @@ class TruncatedSaxDocument < Nokogiri::XML::SAX::Document
|
|
158
166
|
@count_tags ? nil : 0
|
159
167
|
end
|
160
168
|
|
161
|
-
|
162
|
-
|
169
|
+
|
170
|
+
def ignorable_tag?(name)
|
171
|
+
artificial_root_name?(name) || IGNORABLE_TAGS.include?(name.downcase)
|
163
172
|
end
|
164
173
|
|
165
174
|
def artificial_root_name? name
|
data/lib/truncato/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: truncato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jorge Manrubia
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.6.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.6.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: htmlentities
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 10.1.
|
61
|
+
version: 10.1.1
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 10.1.
|
68
|
+
version: 10.1.1
|
69
69
|
description: Ruby tool for truncating HTML strings keeping a valid HTML markup
|
70
70
|
email: jorge.manrubia@gmail.com
|
71
71
|
executables: []
|