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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 337a46e1015523315103711f4b61d556fc5cd71b
4
- data.tar.gz: 0e9327ad9c3387224ce1d63282691d3952b140b1
2
+ SHA256:
3
+ metadata.gz: 2512a1b983589c7d296ca42a9931209e01b5df52ca1c8e303886cade92c44e04
4
+ data.tar.gz: 3cea7ab525f3d9e0bf3630f22831634639a13b03cd8fb62a9895f48e59333a00
5
5
  SHA512:
6
- metadata.gz: 5650229f42d09b51761304d2e61f1706ff174d4b78da527af8376eb0a470b37ed4b578bcc678e500803496a43bcd3507adad640b63a596b8d46b3ccf7380936f
7
- data.tar.gz: '09742bdb78ef01ed2dc7b24969b18820268896b30d15c620be2c041768a11ceb69eeb3b7cdd2f37a5a7b339fa37c39c3458a15ebc81fd6d5538ede2ff465d8e9'
6
+ metadata.gz: 0abeee9ce1ea2830119b0c8e3c2d1949ceb85c9a78b50bf57d84eda95d29fa27f3257610292152b15c456ae952e5daf24968b5b48a585103164f4bc84da01674
7
+ data.tar.gz: 7e27bd1d98036d5340a2a53693ffaa832e0fd24f52365578f95114e7cadebc9da2dae5ca7ad71b2ceef64bb969424a0c2e0a27038d4a8bf1bebaf4eedd584c30
data/.drone.yml CHANGED
@@ -1,32 +1,46 @@
1
- build:
2
- test:
3
- image: abakpress/dind-testing
4
- pull: true
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
- - fetch-images
17
- --image whilp/ssh-agent
18
- --image abakpress/ruby-app:$RUBY_IMAGE_TAG
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
- - dip ssh add -T -v /ssh_keys -k /ssh_keys/id_rsa
21
- - dip provision
22
- - dip rspec
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
- release:
25
- image: abakpress/gem-publication
26
- pull: true
27
- when:
28
- event: push
29
- volumes:
30
- - /home/data/drone/rubygems:/root/.gem
31
- commands:
32
- - release-gem --public
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
- appraise 'rails4.0' do
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
- # v0.15.0
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
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in string_tools.gemspec
4
5
  gemspec
6
+
7
+ gem 'actionpack', '~> 4.2.0', require: false
data/Rakefile CHANGED
@@ -1 +1,2 @@
1
+ # frozen_string_literal: true
1
2
  require "bundler/gem_tasks"
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'string_tools'
data/dip.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  version: '1'
2
2
 
3
3
  environment:
4
- DOCKER_RUBY_VERSION: 2.2
5
- RUBY_IMAGE_TAG: 2.2-latest
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 -f Gemfile.lock gemfiles/*.gemfile.*
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'.freeze
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.replace(self.to_utf8)
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
- enc = detect_encoding
169
+ source_enc = detect_encoding
170
+ return '' unless source_enc
174
171
 
175
- # если utf или английские буквы, то тоже ок
176
- return self if ['utf-8', 'ascii'].include?(enc)
177
-
178
- # если неизвестная каша, то возвращаем пустую строку
179
- return '' if enc.nil?
172
+ encode_utf8(source_enc, inplace)
173
+ end
180
174
 
181
- # иначе пытаемся перекодировать
182
- encode 'utf-8', enc, :undef => :replace, :invalid => :replace
183
- rescue
184
- ''
175
+ def to_utf8!
176
+ to_utf8(true)
185
177
  end
186
178
 
187
179
  def to_cp1251
188
- encode 'cp1251', :undef => :replace, :invalid => :replace
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
@@ -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'.freeze).each { |node| scrubber.call node }
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('.'.freeze)
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]
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module StringTools
2
3
  class String
3
4
  TRUE_VALUES = %w(1 t T true TRUE on ON).to_set
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module StringTools
2
- VERSION = '0.15.0'.freeze
3
+ VERSION = '1.0.0'
3
4
  end
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'.freeze
190
- normalize_link node, 'href'.freeze
191
- when 'img'.freeze
192
- normalize_link node, 'src'.freeze
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', '>= 3.1.12'
23
- spec.add_runtime_dependency 'activesupport', '>= 3.1.12'
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.15.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: 2020-05-13 00:00:00.000000000 Z
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: 3.1.12
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: 3.1.12
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: 3.1.12
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: 3.1.12
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: '0'
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: '0'
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
- rubyforge_project:
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