string_tools 0.15.0 → 1.0.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 +43 -29
- data/Appraisals +1 -9
- data/CHANGELOG.md +20 -1
- data/Gemfile +3 -0
- data/Rakefile +1 -0
- data/bin/console +1 -0
- data/dip.yml +4 -3
- data/lib/string_tools/core_ext/string.rb +17 -21
- data/lib/string_tools/html.rb +3 -2
- data/lib/string_tools/string.rb +1 -0
- data/lib/string_tools/version.rb +2 -1
- data/lib/string_tools.rb +6 -5
- data/string_tools.gemspec +4 -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: 2512a1b983589c7d296ca42a9931209e01b5df52ca1c8e303886cade92c44e04
|
|
4
|
+
data.tar.gz: 3cea7ab525f3d9e0bf3630f22831634639a13b03cd8fb62a9895f48e59333a00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0abeee9ce1ea2830119b0c8e3c2d1949ceb85c9a78b50bf57d84eda95d29fa27f3257610292152b15c456ae952e5daf24968b5b48a585103164f4bc84da01674
|
|
7
|
+
data.tar.gz: 7e27bd1d98036d5340a2a53693ffaa832e0fd24f52365578f95114e7cadebc9da2dae5ca7ad71b2ceef64bb969424a0c2e0a27038d4a8bf1bebaf4eedd584c30
|
data/.drone.yml
CHANGED
|
@@ -1,32 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
privileged: true
|
|
6
|
-
volumes:
|
|
7
|
-
- /home/data/drone/images:/images
|
|
8
|
-
- /home/data/drone/gems:/bundle
|
|
9
|
-
- /home/data/drone/key_cache:/ssh_keys
|
|
10
|
-
environment:
|
|
11
|
-
- COMPOSE_FILE_EXT=drone
|
|
12
|
-
- RUBY_IMAGE_TAG=2.2-latest
|
|
13
|
-
commands:
|
|
14
|
-
- wrapdocker docker -v
|
|
1
|
+
---
|
|
2
|
+
kind: pipeline
|
|
3
|
+
type: docker
|
|
4
|
+
name: build
|
|
15
5
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
volumes:
|
|
7
|
+
- name: bundle
|
|
8
|
+
host:
|
|
9
|
+
path: /home/data/drone/gems
|
|
10
|
+
- name: rubygems
|
|
11
|
+
host:
|
|
12
|
+
path: /home/data/drone/rubygems
|
|
19
13
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
14
|
+
spec_step_common: &spec_step_common
|
|
15
|
+
pull: if-not-exists
|
|
16
|
+
volumes:
|
|
17
|
+
- name: bundle
|
|
18
|
+
path: /bundle
|
|
19
|
+
commands:
|
|
20
|
+
- rm -fr Gemfile.lock gemfiles/
|
|
21
|
+
- bundle install -j 5
|
|
22
|
+
- bundle exec appraisal install
|
|
23
|
+
- bundle exec appraisal bundle exec rspec
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
25
|
+
steps:
|
|
26
|
+
- name: build on ruby2.4
|
|
27
|
+
image: abakpress/ruby-app:2.4-latest
|
|
28
|
+
environment:
|
|
29
|
+
TEST_DB_HOST: postgres
|
|
30
|
+
TEST_DB_NAME: docker
|
|
31
|
+
TEST_DB_USERNAME: postgres
|
|
32
|
+
BUNDLE_PATH: /bundle/2.4
|
|
33
|
+
<<: *spec_step_common
|
|
34
|
+
|
|
35
|
+
- name: release
|
|
36
|
+
image: abakpress/gem-publication:latest
|
|
37
|
+
pull: if-not-exists
|
|
38
|
+
when:
|
|
39
|
+
event: push
|
|
40
|
+
branch: master
|
|
41
|
+
status: success
|
|
42
|
+
volumes:
|
|
43
|
+
- name: rubygems
|
|
44
|
+
path: /root/.gem
|
|
45
|
+
commands:
|
|
46
|
+
- release-gem --public
|
data/Appraisals
CHANGED
|
@@ -1,12 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
gem 'actionpack', '~> 4.0.0'
|
|
3
|
-
gem 'activesupport', '~> 4.0.0'
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
appraise 'rails4.1' do
|
|
7
|
-
gem 'actionpack', '~> 4.1.0'
|
|
8
|
-
gem 'activesupport', '~> 4.1.0'
|
|
9
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
10
2
|
|
|
11
3
|
appraise 'rails4.2' do
|
|
12
4
|
gem 'actionpack', '~> 4.2.0'
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,13 @@
|
|
|
1
|
-
#
|
|
1
|
+
# v1.0.0
|
|
2
|
+
|
|
3
|
+
* 2023-06-15 [503fce2](../../commit/503fce2) - __(Andrew N. Shalaev)__ Release v1.0.0
|
|
4
|
+
* 2023-06-15 [8e9fa48](../../commit/8e9fa48) - __(Andrew N. Shalaev)__ fix: convert to_utf8 correctly, without hidding errors
|
|
5
|
+
https://jira.railsc.ru/browse/BPC-22244
|
|
6
|
+
|
|
7
|
+
* 2023-06-15 [9bc5cf5](../../commit/9bc5cf5) - __(Andrew N. Shalaev)__ fix: up test env
|
|
8
|
+
* 2021-07-16 [8a3bf46](../../commit/8a3bf46) - __(Andrew N. Shalaev)__ Release v0.16.0
|
|
9
|
+
* 2021-07-16 [5784a91](../../commit/5784a91) - __(Andrew N. Shalaev)__ feature: add support for ruby v2.4
|
|
10
|
+
https://jira.railsc.ru/browse/BPC-19154
|
|
2
11
|
|
|
3
12
|
* 2020-05-13 [19cb127](../../commit/19cb127) - __(TamarinEA)__ Release 0.15.0
|
|
4
13
|
* 2020-04-03 [e63c121](../../commit/e63c121) - __(Mikhail Nelaev)__ feature: optionally turn off uri normalization
|
|
@@ -87,6 +96,16 @@ https://jira.railsc.ru/browse/PC4-16353
|
|
|
87
96
|
# v3.0.1
|
|
88
97
|
|
|
89
98
|
|
|
99
|
+
# v0.16.0
|
|
100
|
+
|
|
101
|
+
* 2021-07-16 [5784a91](../../commit/5784a91) - __(Andrew N. Shalaev)__ feature: add support for ruby v2.4
|
|
102
|
+
https://jira.railsc.ru/browse/BPC-19154
|
|
103
|
+
|
|
104
|
+
# v0.15.0
|
|
105
|
+
|
|
106
|
+
* 2020-04-03 [e63c121](../../commit/e63c121) - __(Mikhail Nelaev)__ feature: optionally turn off uri normalization
|
|
107
|
+
https://jira.railsc.ru/browse/GOODS-2219
|
|
108
|
+
|
|
90
109
|
# v0.14.0
|
|
91
110
|
|
|
92
111
|
* 2019-09-23 [f495195](../../commit/f495195) - __(TamarinEA)__ feature: use nokogiri for strip tags
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/bin/console
CHANGED
data/dip.yml
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
version: '1'
|
|
2
2
|
|
|
3
3
|
environment:
|
|
4
|
-
DOCKER_RUBY_VERSION: 2.
|
|
5
|
-
RUBY_IMAGE_TAG: 2.
|
|
4
|
+
DOCKER_RUBY_VERSION: 2.4
|
|
5
|
+
RUBY_IMAGE_TAG: 2.4-latest
|
|
6
6
|
COMPOSE_FILE_EXT: development
|
|
7
7
|
RAILS_ENV: test
|
|
8
8
|
|
|
@@ -33,9 +33,10 @@ interaction:
|
|
|
33
33
|
|
|
34
34
|
clean:
|
|
35
35
|
service: app
|
|
36
|
-
command: rm -
|
|
36
|
+
command: rm -rf Gemfile.lock gemfiles
|
|
37
37
|
|
|
38
38
|
provision:
|
|
39
39
|
- docker volume create --name bundler_data
|
|
40
|
+
- dip clean
|
|
40
41
|
- dip bundle install
|
|
41
42
|
- dip appraisal install
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'rchardet19'
|
|
2
3
|
require 'addressable/uri'
|
|
3
4
|
require 'active_support/core_ext/module'
|
|
@@ -154,7 +155,7 @@ class String
|
|
|
154
155
|
end
|
|
155
156
|
end
|
|
156
157
|
|
|
157
|
-
WIN_1251_ENCODING = 'windows-1251'
|
|
158
|
+
WIN_1251_ENCODING = 'windows-1251'
|
|
158
159
|
# shorthand
|
|
159
160
|
def detect_encoding
|
|
160
161
|
e = ::CharDet.detect(self)["encoding"]
|
|
@@ -162,32 +163,21 @@ class String
|
|
|
162
163
|
e
|
|
163
164
|
end
|
|
164
165
|
|
|
165
|
-
def to_utf8
|
|
166
|
-
self
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
def to_utf8
|
|
170
|
-
# и так utf
|
|
171
|
-
return self if is_utf8?
|
|
166
|
+
def to_utf8(inplace = false)
|
|
167
|
+
return self if valid_encoding? && is_utf8?
|
|
172
168
|
|
|
173
|
-
|
|
169
|
+
source_enc = detect_encoding
|
|
170
|
+
return '' unless source_enc
|
|
174
171
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
# если неизвестная каша, то возвращаем пустую строку
|
|
179
|
-
return '' if enc.nil?
|
|
172
|
+
encode_utf8(source_enc, inplace)
|
|
173
|
+
end
|
|
180
174
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
rescue
|
|
184
|
-
''
|
|
175
|
+
def to_utf8!
|
|
176
|
+
to_utf8(true)
|
|
185
177
|
end
|
|
186
178
|
|
|
187
179
|
def to_cp1251
|
|
188
|
-
encode 'cp1251', :
|
|
189
|
-
rescue
|
|
190
|
-
''
|
|
180
|
+
encode 'cp1251', undef: :replace, invalid: :replace, replace: ''
|
|
191
181
|
end
|
|
192
182
|
|
|
193
183
|
def to_cp1251!
|
|
@@ -229,6 +219,12 @@ class String
|
|
|
229
219
|
|
|
230
220
|
private
|
|
231
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
|
+
|
|
232
228
|
def surround_with_ansi(ascii_seq)
|
|
233
229
|
"#{ascii_seq}#{protect_escape_of(ascii_seq)}#{ANSI_CLEAR}"
|
|
234
230
|
end
|
data/lib/string_tools/html.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'nokogiri'
|
|
3
4
|
require 'addressable/uri'
|
|
4
5
|
require 'simpleidn'
|
|
@@ -44,7 +45,7 @@ module StringTools
|
|
|
44
45
|
doc = Nokogiri::HTML::DocumentFragment.parse(html)
|
|
45
46
|
scrubber = LinksRemoveScrubber.new(options)
|
|
46
47
|
|
|
47
|
-
doc.css('a'
|
|
48
|
+
doc.css('a').each { |node| scrubber.call node }
|
|
48
49
|
|
|
49
50
|
if scrubber.done_changes?
|
|
50
51
|
doc.children.map { |node| node.serialize HTML_SERIALIZE_OPTIONS }.join
|
|
@@ -78,7 +79,7 @@ module StringTools
|
|
|
78
79
|
end
|
|
79
80
|
|
|
80
81
|
def whitelisted?(domain)
|
|
81
|
-
host_parts = domain.split('.'
|
|
82
|
+
host_parts = domain.split('.')
|
|
82
83
|
host = host_parts[-1] # com, ru ...
|
|
83
84
|
(host_parts.length - 2).downto(0) do |i|
|
|
84
85
|
subdomain = host_parts[i]
|
data/lib/string_tools/string.rb
CHANGED
data/lib/string_tools/version.rb
CHANGED
data/lib/string_tools.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'string_tools/version'
|
|
3
4
|
require 'ru_propisju'
|
|
4
5
|
require 'sanitize'
|
|
@@ -186,10 +187,10 @@ module StringTools
|
|
|
186
187
|
def call(env)
|
|
187
188
|
node = env[:node]
|
|
188
189
|
case node.name
|
|
189
|
-
when 'a'
|
|
190
|
-
normalize_link node, 'href'
|
|
191
|
-
when 'img'
|
|
192
|
-
normalize_link node, 'src'
|
|
190
|
+
when 'a'
|
|
191
|
+
normalize_link node, 'href'
|
|
192
|
+
when 'img'
|
|
193
|
+
normalize_link node, 'src'
|
|
193
194
|
end
|
|
194
195
|
end
|
|
195
196
|
|
|
@@ -229,7 +230,7 @@ module StringTools
|
|
|
229
230
|
# Сумма в рублях прописью. Кол-во копеек выводится всегда. Первая буква заглавная
|
|
230
231
|
def rublej_propisju(amount)
|
|
231
232
|
kop = (amount.divmod(1)[1]*100).round
|
|
232
|
-
result = RuPropisju.rublej(amount.to_i).capitalize
|
|
233
|
+
result = RuPropisju.rublej(amount.to_i).capitalize.dup
|
|
233
234
|
result << " %.2d " % kop
|
|
234
235
|
result << RuPropisju.choose_plural(kop, 'копейка', 'копейки', 'копеек')
|
|
235
236
|
end
|
data/string_tools.gemspec
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# coding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
lib = File.expand_path('../lib', __FILE__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
5
|
require 'string_tools/version'
|
|
@@ -19,8 +20,8 @@ Gem::Specification.new do |spec|
|
|
|
19
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
21
|
spec.require_paths = ['lib']
|
|
21
22
|
|
|
22
|
-
spec.add_runtime_dependency 'actionpack', '>=
|
|
23
|
-
spec.add_runtime_dependency 'activesupport', '>=
|
|
23
|
+
spec.add_runtime_dependency 'actionpack', '>= 4.2.0'
|
|
24
|
+
spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
|
|
24
25
|
spec.add_runtime_dependency 'rchardet19', '~> 1.3.5'
|
|
25
26
|
spec.add_runtime_dependency 'addressable', '>= 2.3.2'
|
|
26
27
|
spec.add_runtime_dependency 'ru_propisju', '>= 2.1.4'
|
|
@@ -28,7 +29,7 @@ Gem::Specification.new do |spec|
|
|
|
28
29
|
spec.add_runtime_dependency 'nokogiri'
|
|
29
30
|
spec.add_runtime_dependency 'simpleidn', '>= 0.0.5'
|
|
30
31
|
|
|
31
|
-
spec.add_development_dependency 'bundler'
|
|
32
|
+
spec.add_development_dependency 'bundler', '~> 1.17.3'
|
|
32
33
|
spec.add_development_dependency 'rake'
|
|
33
34
|
spec.add_development_dependency 'rspec', '>= 3.4'
|
|
34
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: 0.
|
|
4
|
+
version: 1.0.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-06-15 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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|