string_tools 0.16.0 → 1.1.0
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 +5 -5
- data/.drone.yml +0 -18
- data/Appraisals +0 -6
- data/CHANGELOG.md +25 -1
- data/Gemfile +1 -1
- data/dip.yml +2 -2
- data/lib/string_tools/core_ext/string.rb +15 -20
- data/lib/string_tools/version.rb +1 -1
- data/lib/string_tools.rb +19 -2
- data/string_tools.gemspec +3 -3
- metadata +11 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 210c99c75f04b03ef26c76343f29b29b6325c94d270904a276df3c50e438ef52
|
4
|
+
data.tar.gz: 9a89a82fc8d20d222e67e44bb786941d860341e707bc5945d8867394fc8447e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c25cd4f6a32ea07a771a8e59e17a3e28e370441065d592989754d5b67b0f79a9a429a8bc79b231aa23b7f7b20b3a76b2461a610d3a410f7f64401b8a6bb49634
|
7
|
+
data.tar.gz: 140e95adee684c86f90e31a3780e4eca0c9110891160278412b5038ed30b533ebb2f1ca3cf2a45981d93632259ba55b98df8a8ef8b16edb1938541e6169b1dca
|
data/.drone.yml
CHANGED
@@ -23,24 +23,6 @@ spec_step_common: &spec_step_common
|
|
23
23
|
- bundle exec appraisal bundle exec rspec
|
24
24
|
|
25
25
|
steps:
|
26
|
-
- name: build on ruby2.2
|
27
|
-
image: abakpress/ruby-app:2.2-latest
|
28
|
-
environment:
|
29
|
-
TEST_DB_HOST: postgres
|
30
|
-
TEST_DB_NAME: docker
|
31
|
-
TEST_DB_USERNAME: postgres
|
32
|
-
BUNDLE_PATH: /bundle/2.2
|
33
|
-
<<: *spec_step_common
|
34
|
-
|
35
|
-
- name: build on ruby2.3
|
36
|
-
image: abakpress/ruby-app:2.3-latest
|
37
|
-
environment:
|
38
|
-
TEST_DB_HOST: postgres
|
39
|
-
TEST_DB_NAME: docker
|
40
|
-
TEST_DB_USERNAME: postgres
|
41
|
-
BUNDLE_PATH: /bundle/2.3
|
42
|
-
<<: *spec_step_common
|
43
|
-
|
44
26
|
- name: build on ruby2.4
|
45
27
|
image: abakpress/ruby-app:2.4-latest
|
46
28
|
environment:
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
|
-
#
|
1
|
+
# v1.1.0
|
2
|
+
|
3
|
+
* 2023-10-16 [8ccb54a](../../commit/8ccb54a) - __(ArtemBorodinEvgenyevich)__ Release v1.1.0
|
4
|
+
* 2023-08-29 [bed389b](../../commit/bed389b) - __(Terentev Aleksey)__ feat: sanitize links in alt of img tag
|
5
|
+
https://jira.railsc.ru/browse/PC4-29908
|
6
|
+
|
7
|
+
* 2023-08-11 [7848491](../../commit/7848491) - __(Terentev Aleksey)__ feat: add options for sanitize outer links in css
|
8
|
+
https://jira.railsc.ru/browse/PC4-29908
|
2
9
|
|
10
|
+
* 2023-06-15 [503fce2](../../commit/503fce2) - __(Andrew N. Shalaev)__ Release v1.0.0
|
11
|
+
* 2023-06-15 [8e9fa48](../../commit/8e9fa48) - __(Andrew N. Shalaev)__ fix: convert to_utf8 correctly, without hidding errors
|
12
|
+
https://jira.railsc.ru/browse/BPC-22244
|
13
|
+
|
14
|
+
* 2023-06-15 [9bc5cf5](../../commit/9bc5cf5) - __(Andrew N. Shalaev)__ fix: up test env
|
3
15
|
* 2021-07-16 [8a3bf46](../../commit/8a3bf46) - __(Andrew N. Shalaev)__ Release v0.16.0
|
4
16
|
* 2021-07-16 [5784a91](../../commit/5784a91) - __(Andrew N. Shalaev)__ feature: add support for ruby v2.4
|
5
17
|
https://jira.railsc.ru/browse/BPC-19154
|
@@ -91,6 +103,18 @@ https://jira.railsc.ru/browse/PC4-16353
|
|
91
103
|
# v3.0.1
|
92
104
|
|
93
105
|
|
106
|
+
# v1.0.0
|
107
|
+
|
108
|
+
* 2023-06-15 [8e9fa48](../../commit/8e9fa48) - __(Andrew N. Shalaev)__ fix: convert to_utf8 correctly, without hidding errors
|
109
|
+
https://jira.railsc.ru/browse/BPC-22244
|
110
|
+
|
111
|
+
* 2023-06-15 [9bc5cf5](../../commit/9bc5cf5) - __(Andrew N. Shalaev)__ fix: up test env
|
112
|
+
|
113
|
+
# v0.16.0
|
114
|
+
|
115
|
+
* 2021-07-16 [5784a91](../../commit/5784a91) - __(Andrew N. Shalaev)__ feature: add support for ruby v2.4
|
116
|
+
https://jira.railsc.ru/browse/BPC-19154
|
117
|
+
|
94
118
|
# v0.15.0
|
95
119
|
|
96
120
|
* 2020-04-03 [e63c121](../../commit/e63c121) - __(Mikhail Nelaev)__ feature: optionally turn off uri normalization
|
data/Gemfile
CHANGED
data/dip.yml
CHANGED
@@ -163,32 +163,21 @@ class String
|
|
163
163
|
e
|
164
164
|
end
|
165
165
|
|
166
|
-
def to_utf8
|
167
|
-
self
|
168
|
-
end
|
169
|
-
|
170
|
-
def to_utf8
|
171
|
-
# и так utf
|
172
|
-
return self if is_utf8?
|
166
|
+
def to_utf8(inplace = false)
|
167
|
+
return self if valid_encoding? && is_utf8?
|
173
168
|
|
174
|
-
|
169
|
+
source_enc = detect_encoding
|
170
|
+
return '' unless source_enc
|
175
171
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
# если неизвестная каша, то возвращаем пустую строку
|
180
|
-
return '' if enc.nil?
|
172
|
+
encode_utf8(source_enc, inplace)
|
173
|
+
end
|
181
174
|
|
182
|
-
|
183
|
-
|
184
|
-
rescue
|
185
|
-
''
|
175
|
+
def to_utf8!
|
176
|
+
to_utf8(true)
|
186
177
|
end
|
187
178
|
|
188
179
|
def to_cp1251
|
189
|
-
encode 'cp1251', :
|
190
|
-
rescue
|
191
|
-
''
|
180
|
+
encode 'cp1251', undef: :replace, invalid: :replace, replace: ''
|
192
181
|
end
|
193
182
|
|
194
183
|
def to_cp1251!
|
@@ -230,6 +219,12 @@ class String
|
|
230
219
|
|
231
220
|
private
|
232
221
|
|
222
|
+
def encode_utf8(source_enc, inplace = false)
|
223
|
+
args = ['utf-8', source_enc, undef: :replace, invalid: :replace, replace: '']
|
224
|
+
|
225
|
+
inplace ? encode!(*args) : encode(*args)
|
226
|
+
end
|
227
|
+
|
233
228
|
def surround_with_ansi(ascii_seq)
|
234
229
|
"#{ascii_seq}#{protect_escape_of(ascii_seq)}#{ANSI_CLEAR}"
|
235
230
|
end
|
data/lib/string_tools/version.rb
CHANGED
data/lib/string_tools.rb
CHANGED
@@ -155,6 +155,11 @@ module StringTools
|
|
155
155
|
|
156
156
|
TAGS_WITHOUT_ATTRIBUTES = %w(b strong i em sup sub ul ol li blockquote br tr u caption thead s).freeze
|
157
157
|
|
158
|
+
# Public: Sanitize string
|
159
|
+
# str - String for sanitize
|
160
|
+
# attrs - Hash, custom attributes, defaults empty hash
|
161
|
+
# remove_contents - Set of string, tags to be removed
|
162
|
+
# protocols - Array of string, protocols using in css properties urls
|
158
163
|
def sanitize(str, attrs = {})
|
159
164
|
# для корректного обрезания utf строчек режем через mb_chars
|
160
165
|
# для защиты от перегрузки парсера пропускаем максимум 1 мегабайт текста
|
@@ -162,6 +167,9 @@ module StringTools
|
|
162
167
|
# длина по символам с перестраховкой, т.к. латинские символы(теги, например) занимают 1 байт
|
163
168
|
str = str.mb_chars.slice(0..(2**19)).to_s
|
164
169
|
|
170
|
+
remove_contents = attrs.delete(:remove_contents)
|
171
|
+
protocols = attrs.delete(:protocols) || []
|
172
|
+
|
165
173
|
# Мерджим добавочные теги и атрибуты
|
166
174
|
attributes = TAGS_WITH_ATTRIBUTES.merge(attrs)
|
167
175
|
elements = attributes.keys | TAGS_WITHOUT_ATTRIBUTES
|
@@ -173,8 +181,8 @@ module StringTools
|
|
173
181
|
str,
|
174
182
|
:attributes => attributes,
|
175
183
|
:elements => elements,
|
176
|
-
:css => {:properties => Sanitize::Config::RELAXED[:css][:properties]},
|
177
|
-
:remove_contents =>
|
184
|
+
:css => {:properties => Sanitize::Config::RELAXED[:css][:properties], protocols: protocols},
|
185
|
+
:remove_contents => remove_contents || Set['style', 'script'],
|
178
186
|
:allow_comments => false,
|
179
187
|
:transformers => transformers
|
180
188
|
)
|
@@ -191,6 +199,7 @@ module StringTools
|
|
191
199
|
normalize_link node, 'href'
|
192
200
|
when 'img'
|
193
201
|
normalize_link node, 'src'
|
202
|
+
remove_links node, 'alt'
|
194
203
|
end
|
195
204
|
end
|
196
205
|
|
@@ -202,6 +211,14 @@ module StringTools
|
|
202
211
|
rescue Addressable::URI::InvalidURIError
|
203
212
|
node.swap node.children
|
204
213
|
end
|
214
|
+
|
215
|
+
def remove_links(node, attr_name)
|
216
|
+
return unless node[attr_name]
|
217
|
+
|
218
|
+
node[attr_name] = node[attr_name].gsub(URI::DEFAULT_PARSER.make_regexp, '').squish
|
219
|
+
|
220
|
+
node.remove_attribute(attr_name) if node[attr_name].empty?
|
221
|
+
end
|
205
222
|
end
|
206
223
|
|
207
224
|
class IframeNormalizer
|
data/string_tools.gemspec
CHANGED
@@ -20,8 +20,8 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.add_runtime_dependency 'actionpack', '>= 4.0
|
24
|
-
spec.add_runtime_dependency 'activesupport', '>= 4.0
|
23
|
+
spec.add_runtime_dependency 'actionpack', '>= 4.2.0'
|
24
|
+
spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
|
25
25
|
spec.add_runtime_dependency 'rchardet19', '~> 1.3.5'
|
26
26
|
spec.add_runtime_dependency 'addressable', '>= 2.3.2'
|
27
27
|
spec.add_runtime_dependency 'ru_propisju', '>= 2.1.4'
|
@@ -29,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_runtime_dependency 'nokogiri'
|
30
30
|
spec.add_runtime_dependency 'simpleidn', '>= 0.0.5'
|
31
31
|
|
32
|
-
spec.add_development_dependency 'bundler'
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.17.3'
|
33
33
|
spec.add_development_dependency 'rake'
|
34
34
|
spec.add_development_dependency 'rspec', '>= 3.4'
|
35
35
|
spec.add_development_dependency 'appraisal', '>= 1.0.2'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: string_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey D.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0
|
19
|
+
version: 4.2.0
|
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: 4.0
|
26
|
+
version: 4.2.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 4.0
|
33
|
+
version: 4.2.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 4.0
|
40
|
+
version: 4.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rchardet19
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,16 +126,16 @@ dependencies:
|
|
126
126
|
name: bundler
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "~>"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
131
|
+
version: 1.17.3
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "~>"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
138
|
+
version: 1.17.3
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
140
|
name: rake
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -252,8 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
252
252
|
- !ruby/object:Gem::Version
|
253
253
|
version: '0'
|
254
254
|
requirements: []
|
255
|
-
|
256
|
-
rubygems_version: 2.6.1
|
255
|
+
rubygems_version: 3.0.3
|
257
256
|
signing_key:
|
258
257
|
specification_version: 4
|
259
258
|
summary: String Tools
|