sterile 1.0.17 → 1.0.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 54f6ac8ea9a3e5802c5b86f5befee2a68e3aec5929e63d688fd6ad2279e056ac
4
- data.tar.gz: 7924d238a5d5211a343bda5a9fb280e0686009dc2ca97fe98ebe3b4844776ecd
3
+ metadata.gz: 82975c959e59df1cb9411de684259be5470d4653b811a9bc0569c63bc5c7a3eb
4
+ data.tar.gz: cac8194311cb05acad5e0209adefb414befa6236c5545d61fc7eca9eb1899763
5
5
  SHA512:
6
- metadata.gz: 2e8ccd1ae5c05c787ecaf255dafba763593e6d2405c2b4204a3984ae08a007700349c2f47d6c8334d8886f40c40183c59535cadf9f91bae947fc92875e2c4399
7
- data.tar.gz: d6533af4c6e9e03808ce7a634642040d7df9c024a9b7a1a3e5cc91058ad47d522466ba4f8e2e6d1666ed3cb3dad19d1dfc9db8a4d826c3e06eadab1003fa9a7f
6
+ metadata.gz: ed54878488af252a7e6d8db8bea711c2b18877e24830c49c487de9eb89cd9d8527eaf4550f3037f771ad997e68ab1a24713c071d8607bd59c8180b74a9248800
7
+ data.tar.gz: 79df903d40aef3a6b2207a7ed988fa128de361077fa345659d4b867a80a981a4553c19e6c26bd57a1be0a844357e9ef295022f773eade617c1a23d842dbab277
@@ -0,0 +1,26 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ paths-ignore:
6
+ - '**.md'
7
+ pull_request:
8
+ paths-ignore:
9
+ - '**.md'
10
+ workflow_dispatch:
11
+
12
+ jobs:
13
+ test:
14
+ strategy:
15
+ max-parallel: 3
16
+ matrix:
17
+ os: [ubuntu, macos]
18
+ ruby-version: [head, 3.0, 2.7, 2.5]
19
+ runs-on: ${{ matrix.os }}-latest
20
+ steps:
21
+ - uses: actions/checkout@v2
22
+ - uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: ${{ matrix.ruby-version }}
25
+ - run: bundle install
26
+ - run: bundle exec rake test
data/.gitignore CHANGED
@@ -5,5 +5,4 @@ doc/*
5
5
  .bundle
6
6
  .DS_Store
7
7
  make
8
- test
9
- vendor
8
+ vendor
data/.ruby-version CHANGED
@@ -1,3 +1 @@
1
- 2.4
2
-
3
-
1
+ 2.7.2
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --no-private lib/**/*.rb - README.markdown
data/Gemfile CHANGED
@@ -1,3 +1,7 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
  gemspec
3
3
 
4
+ group :development, :test do
5
+ gem 'minitest'
6
+ gem 'rake'
7
+ end
data/Gemfile.lock CHANGED
@@ -1,21 +1,27 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sterile (1.0.17)
5
- nokogiri (>= 1.10.8)
4
+ sterile (1.0.22)
5
+ nokogiri (>= 1.11.7)
6
6
 
7
7
  GEM
8
- remote: http://rubygems.org/
8
+ remote: https://rubygems.org/
9
9
  specs:
10
- mini_portile2 (2.4.0)
11
- nokogiri (1.10.10)
12
- mini_portile2 (~> 2.4.0)
10
+ mini_portile2 (2.5.3)
11
+ minitest (5.14.4)
12
+ nokogiri (1.11.7)
13
+ mini_portile2 (~> 2.5.0)
14
+ racc (~> 1.4)
15
+ racc (1.5.2)
16
+ rake (13.0.3)
13
17
 
14
18
  PLATFORMS
15
19
  ruby
16
20
 
17
21
  DEPENDENCIES
22
+ minitest
23
+ rake
18
24
  sterile!
19
25
 
20
26
  BUNDLED WITH
21
- 1.17.3
27
+ 2.2.19
data/README.markdown CHANGED
@@ -1,4 +1,4 @@
1
- Sterile
1
+ Sterile ![test](https://github.com/pbhogan/sterile/actions/workflows/test.yml/badge.svg)
2
2
  =======
3
3
 
4
4
  Sterilize your strings! Transliterate, generate slugs, smart format, strip tags, encode/decode entities and more.
@@ -107,4 +107,4 @@ License
107
107
  -------
108
108
 
109
109
  Copyright (c) 2011 Patrick Hogan, released under the MIT License.
110
- http://www.opensource.org/licenses/mit-license
110
+ http://www.opensource.org/licenses/mit-license
data/Rakefile CHANGED
@@ -1,7 +1,14 @@
1
1
  require 'bundler'
2
+ require 'rake/testtask'
3
+
2
4
  Bundler::GemHelper.install_tasks
3
5
 
4
- require 'rake/testtask'
5
6
  Rake::TestTask.new do |t|
6
- t.pattern = "test/test_*.rb"
7
+ t.libs << 'test'
8
+ end
9
+ task default: :test
10
+
11
+ # Watch rb files, run tests whenever something changes. Requires entr
12
+ task :watch do
13
+ sh "find . -name '*.rb' | entr -c rake"
7
14
  end
@@ -26,7 +26,7 @@ module Sterile
26
26
  ["(c)", "©"],
27
27
  ["(r)", "®"],
28
28
  ["(R)", "®"],
29
- [/\'(\d\d)(?!’|\')([\p{P}\p{Z}])/, "’\\1\\2"],
29
+ [/\'(\d\d)(?!’|\'|[^’\'\s]+[’\'][\p{P}\p{Z}])([\p{P}\p{Z}])/, "’\\1\\2"],
30
30
  # [/<p>"/, "<p>\\1″"],
31
31
  [/s\'([^a-zA-Z0-9])/, "s’\\1"],
32
32
  [/"([:;])/, "”\\1"],
@@ -24,7 +24,8 @@ module Sterile
24
24
  # their Unicode counterparts.
25
25
  #
26
26
  def decode_entities(string)
27
- string.gsub!(/&#(\d{1,4});/) { [$1.to_i].pack("U") }
27
+ string.gsub!(/&#x([a-zA-Z0-9]{1,7});/) { [$1.to_i(16)].pack("U") }
28
+ string.gsub!(/&#(\d{1,7});/) { [$1.to_i].pack("U") }
28
29
  string.gsub(/&([a-zA-Z0-9]+);/) do
29
30
  codepoint = html_entities_data[$1]
30
31
  codepoint ? [codepoint].pack("U") : $&
@@ -46,3 +47,4 @@ module Sterile
46
47
  end # class << self
47
48
 
48
49
  end # module Sterile
50
+
@@ -9,6 +9,8 @@ module Sterile
9
9
  # q{"He said, 'Away with you, Drake!'"}.smart_format # => “He said, ‘Away with you, Drake!’”
10
10
  #
11
11
  def smart_format(string)
12
+ string = string.to_s
13
+ string = string.dup if string.frozen?
12
14
  smart_format_rules.each do |rule|
13
15
  string.gsub! rule[0], rule[1]
14
16
  end
@@ -19,7 +21,7 @@ module Sterile
19
21
  # Like +smart_format+, but works with HTML/XML (somewhat).
20
22
  #
21
23
  def smart_format_tags(string)
22
- string = string.gsub /[\p{Z}\s]+(<\/[a-zA-Z]+>)(['"][a-zA-Z])/, "\\1 \\2" # Fixes quote after whitespace + tag "<em>Dan. </em>'And"
24
+ string = string.gsub(/[\p{Z}\s]+(<\/[a-zA-Z]+>)(['"][a-zA-Z])/, "\\1 \\2") # Fixes quote after whitespace + tag "<em>Dan. </em>'And"
23
25
  string.gsub_tags do |text|
24
26
  text.smart_format
25
27
  end.encode_entities.gsub(/(\<\/\w+\>)&ldquo;/, "\\1&rdquo;").gsub(/(\<\/\w+\>)&lsquo;/, "\\1&rsquo;")
@@ -106,18 +106,7 @@ module Sterile
106
106
  end
107
107
  alias_method :titleize, :titlecase
108
108
 
109
-
110
- private
111
-
112
- # Lazy load smart formatting rules
113
- #
114
- def smart_format_rules
115
- @smart_format_rules ||= begin
116
- require "sterile/data/smart_format_rules"
117
- Data.smart_format_rules
118
- end
119
- end
120
-
121
109
  end # class << self
122
110
 
123
- end # module Sterile
111
+ end # module Sterile
112
+
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module Sterile
4
- VERSION = "1.0.17"
4
+ VERSION = "1.0.23"
5
5
  end
6
6
 
data/sterile.gemspec CHANGED
@@ -10,16 +10,14 @@ Gem::Specification.new do |s|
10
10
  s.authors = ["Patrick Hogan"]
11
11
  s.email = ["pbhogan@gmail.com"]
12
12
  s.homepage = "https://github.com/pbhogan/sterile"
13
+ s.licenses = ['MIT']
13
14
  s.summary = %q{Sterilize your strings! Transliterate, generate slugs, smart format, strip tags, encode/decode entities and more.}
14
15
  s.description = s.summary
15
16
 
16
- s.rubyforge_project = "sterile"
17
-
18
- s.add_dependency("nokogiri", ">= 1.10.8")
17
+ s.add_dependency("nokogiri", ">= 1.11.7")
19
18
 
20
19
  s.files = `git ls-files`.split("\n")
21
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
21
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
22
  s.require_paths = ["lib"]
24
23
  end
25
-
@@ -0,0 +1,2 @@
1
+ require 'minitest/autorun'
2
+ require 'sterile'
@@ -0,0 +1,74 @@
1
+ require "test_helper"
2
+
3
+ class TestSterile < Minitest::Test
4
+ def test_decode_entities
5
+ assert_equal "“Hey” you", Sterile.decode_entities("&ldquo;Hey&rdquo; you")
6
+
7
+ # try all variants
8
+ assert_equal "°", Sterile.decode_entities("&deg;")
9
+ assert_equal "°", Sterile.decode_entities("&#176;")
10
+ assert_equal "°", Sterile.decode_entities("&#000176;")
11
+ assert_equal "°", Sterile.decode_entities("&#x000b0;")
12
+ assert_equal "°", Sterile.decode_entities("&#x000B0;")
13
+ end
14
+
15
+ def test_encode_entities
16
+ assert_equal "&ldquo;Hey&rdquo; you", Sterile.encode_entities("“Hey” you")
17
+ end
18
+
19
+ def test_gsub_tags
20
+ assert_equal "A<i>B</i>C", Sterile.gsub_tags("a<i>b</i>c", &:upcase)
21
+ end
22
+
23
+ def test_plain_format
24
+ s = "&#169; &copy; &#8482; &trade;"
25
+ assert_equal "(c) (c) (tm) (tm)", Sterile.plain_format(s)
26
+ end
27
+
28
+ def test_plain_format_tags
29
+ s = '<i x="&copy;">&copy;</i>'
30
+ assert_equal '<i x="&copy;">(c)</i>', Sterile.plain_format_tags(s)
31
+ end
32
+
33
+ def test_scan_tags
34
+ text = []
35
+ Sterile.scan_tags("a<i>b</i>c") { |i| text << i }
36
+ assert_equal %w[a b c], text
37
+ end
38
+
39
+ def test_sluggerize
40
+ assert_equal "hello-world", Sterile.sluggerize("Hello world!")
41
+ end
42
+
43
+ def test_smart_format
44
+ s = "\"He said, 'Away, Drake!'\""
45
+ assert_equal "“He said, ‘Away, Drake!’”", Sterile.smart_format(s)
46
+ end
47
+
48
+ def test_smart_format_tags
49
+ # ?
50
+ end
51
+
52
+ def test_sterilize
53
+ assert_equal "nasty", Sterile.sterilize("<b>nåsty</b>")
54
+ end
55
+
56
+ def test_strip_tags
57
+ s = 'Visit <a href="http://example.com">site!</a>'
58
+ assert_equal "Visit site!", Sterile.strip_tags(s)
59
+ end
60
+
61
+ def test_titlecase
62
+ s = "Q&A: 'That's what happens'"
63
+ assert_equal "Q&A: 'That's What Happens'", Sterile.titlecase(s)
64
+ end
65
+
66
+ def test_transliterate
67
+ assert_equal "yucky", Sterile.transliterate("ýůçký")
68
+ end
69
+
70
+ def test_trim_whitespace
71
+ assert_equal "Hello world!", Sterile.trim_whitespace(" Hello world! ")
72
+ end
73
+ end
74
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sterile
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.17
4
+ version: 1.0.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Hogan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-08 00:00:00.000000000 Z
11
+ date: 2021-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.10.8
19
+ version: 1.11.7
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.10.8
26
+ version: 1.11.7
27
27
  description: Sterilize your strings! Transliterate, generate slugs, smart format,
28
28
  strip tags, encode/decode entities and more.
29
29
  email:
@@ -32,10 +32,11 @@ executables: []
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - ".github/workflows/test.yml"
35
36
  - ".gitignore"
36
37
  - ".ruby-gemset"
37
38
  - ".ruby-version"
38
- - ".yaropts"
39
+ - ".yardopts"
39
40
  - Gemfile
40
41
  - Gemfile.lock
41
42
  - README.markdown
@@ -56,8 +57,11 @@ files:
56
57
  - lib/sterile/version.rb
57
58
  - sterile
58
59
  - sterile.gemspec
60
+ - test/test_helper.rb
61
+ - test/test_sterile.rb
59
62
  homepage: https://github.com/pbhogan/sterile
60
- licenses: []
63
+ licenses:
64
+ - MIT
61
65
  metadata: {}
62
66
  post_install_message:
63
67
  rdoc_options: []
@@ -74,9 +78,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
78
  - !ruby/object:Gem::Version
75
79
  version: '0'
76
80
  requirements: []
77
- rubygems_version: 3.0.8
81
+ rubygems_version: 3.2.6
78
82
  signing_key:
79
83
  specification_version: 4
80
84
  summary: Sterilize your strings! Transliterate, generate slugs, smart format, strip
81
85
  tags, encode/decode entities and more.
82
- test_files: []
86
+ test_files:
87
+ - test/test_helper.rb
88
+ - test/test_sterile.rb
data/.yaropts DELETED
@@ -1 +0,0 @@
1
- --no-private lib/**/*.rb - README.markdown