sanitize_email 2.0.13 → 2.0.15

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
2
  SHA256:
3
- metadata.gz: e428d45c83d29ee8b27c9752d85bb8b53518bd3ea1ababeab6829719e6422c7a
4
- data.tar.gz: 87522e8f3cb045b99c8a1d3ee16253182c76a673542d3de812f3650c609ca74a
3
+ metadata.gz: 97cc655b2be2f3a1343e76f263151a1183117bbc5fd20a54022b319206626c29
4
+ data.tar.gz: c8992d9ae46a2387e2455bc019bb5ced276d9ae7984a284c7e1adb9c0166533f
5
5
  SHA512:
6
- metadata.gz: 3af8f96025e00cbcdb2a6e76e661e0a312db260ee564d1312aad841e19c6ac26b61cbd29ca61fd42ad74fecc7dcf5f91191d03743d2e2f6ebadd0f8b6401b5c1
7
- data.tar.gz: cdd89499132bb6ac8845678113eb857aac44db01214062207d8e18c921fef04091c05b0950fe0b0338390dfd759f4e4cd1692200894e1a161138a872acdfd81e
6
+ metadata.gz: fe76e026fd6391a3c78c3922195b11d84c4f1efb45a264f7f983dedbb019f291a7ceef278241f82c71b487c69ae8baeeb3c31761bf8f47eaeeb5839eae62890e
7
+ data.tar.gz: f34686f58a45665dee1435c2d2ea79a144ae5df6fb833b2d4a8d397070380f5328e08f623cff32cc5b50fd13b1ce41006dbd289fa0f6b974635aece5d031e1f4
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,136 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [2.0.15] - 2026-09-11
34
+
35
+ - TAG: [v2.0.15][2.0.15t]
36
+ - COVERAGE: 95.58% -- 368/385 lines in 13 files
37
+ - BRANCH COVERAGE: 82.91% -- 97/117 branches in 13 files
38
+ - 53.41% documented
39
+
40
+ ### Changed
41
+
42
+ - kettle-jem-template-20260801-001 - Generated README gem dashboard links now
43
+ use ClickGems instead of BestGems.
44
+
45
+ - [kc] kettle-jem/prepare: updated 9 project files:
46
+ - configuration (1)
47
+ - dependencies (8)
48
+
49
+ - [kc] kettle-jem/template: updated 4 project files:
50
+ - code and tests (1)
51
+ - dependencies (2)
52
+ - other (1)
53
+
54
+ ### Fixed
55
+
56
+ - kettle-jem-template-20260801-002 - Generated RSpec helpers now normalize
57
+ managed configuration block bindings structurally, preventing mixed block
58
+ parameter names from producing invalid configuration after a merge.
59
+ - kettle-jem-template-20260801-003 - Generated project metadata and
60
+ documentation now normalize configured underscore hostnames to valid
61
+ hyphenated hostnames.
62
+ - kettle-jem-template-20260801-004 - Generated organization README logos now
63
+ use GitHub's stable organization avatar endpoint instead of assuming a
64
+ matching Galtzo-hosted asset exists.
65
+
66
+ - kettle-jem-template-20260802-001 - Devcontainer JSON files now merge as JSONC,
67
+ preserving comments and trailing commas during template updates.
68
+
69
+ - Restore the Rails app harness required by the default test bundle.
70
+
71
+ - Restore the Rails integration test dependencies removed by an earlier template pass.
72
+
73
+ ## [2.0.14] - 2026-07-31
74
+
75
+ - TAG: [v2.0.14][2.0.14t]
76
+ - COVERAGE: 95.58% -- 368/385 lines in 13 files
77
+ - BRANCH COVERAGE: 82.91% -- 97/117 branches in 13 files
78
+ - 53.41% documented
79
+
80
+ ### Changed
81
+
82
+ - kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
83
+ repository-only files by default to reduce downstream distro packaging churn.
84
+ - kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
85
+ released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
86
+ - kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
87
+ config now uses the installed `smorg-rb` Ruby driver name.
88
+ - kettle-jem-template-20260720-005 - Generated README Support & Community rows
89
+ now include a RubyForum help badge.
90
+ - kettle-jem-template-20260725-001 - Generated JRuby and TruffleRuby workflow
91
+ files now run when pull request head branches start with `feature/release`,
92
+ so release CI monitoring does not report intentionally skipped engine
93
+ workflows as failures.
94
+
95
+ - kettle-jem-template-20260725-002 - Generated gemspec templates now include
96
+ `anonymous_loader` as a development dependency, and version specs use it to
97
+ execute generated `version.rb` files for coverage without redefining package
98
+ constants. Managed version specs are removed when `version_gem` is disabled
99
+ or incompatible with the project's runtime Ruby floor.
100
+
101
+ - kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
102
+ setup-ruby-flash planning and can prepare appraisal-only jobs without
103
+ installing the main Gemfile bundle.
104
+
105
+ ### Fixed
106
+
107
+ - Root development bundle now includes the Rails test harness fragment, so
108
+ `bundle exec kettle-test` can load the suite outside appraisal-specific
109
+ Gemfiles.
110
+ - Added coverage for legacy test helper, matcher, and Rails integration shim
111
+ surfaces so release coverage thresholds pass.
112
+
113
+ - Root release bundles now include the default Rails test support, and
114
+ Rails-dependent specs load `rails_helper` explicitly for parallel workers.
115
+
116
+ - kettle-jem-template-20260726-002 - Generated version files now document their
117
+ version namespace and constants, reducing warning-only YARD lint output.
118
+
119
+ - kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
120
+ QLTY, and Codecov as optional, so provider outages do not fail CI when local
121
+ coverage thresholds still pass.
122
+ - kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
123
+ same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
124
+ installs are not reported as project lint debt.
125
+ - kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
126
+ TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
127
+ before the test suite starts.
128
+
129
+ - kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
130
+ setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
131
+ lockfile parser failures on Git and path dependencies.
132
+
133
+ - kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
134
+ missing canonical version spec when a project only has shim namespace version
135
+ specs.
136
+
137
+ - kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
138
+ legacy manual bundle install path, avoiding setup-time Bundler full-index
139
+ failures against `gem.coop`.
140
+
141
+ - kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
142
+ relative to the gemspec directory, so packaged template assets are included
143
+ even when the gemspec is loaded from another working directory.
144
+
145
+ - Legacy test helpers now reject unsupported match values consistently on Ruby
146
+ 2.5, where plain objects still respond to `=~`.
147
+
148
+ ### Added
149
+
150
+ - Documentation linting now has its generated `yard-lint` dependency and severity config available in the local bundle.
151
+
152
+ - kettle-jem-template-20260726-001 - Projects now include YARD lint
153
+ configuration and documentation dependencies so documentation issues fail
154
+ before generated docs are refreshed.
155
+
156
+ - kettle-jem-template-20260727-001 - Spec harness documentation now lists the
157
+ RSpec helpers provided by `kettle-test`.
158
+
159
+ - kettle-jem-template-20260729-005 - Gemspec metadata now publishes this
160
+ project's RubyForum tag as `mailing_list_uri`, and support docs link to the
161
+ tagged RubyForum community alongside Discord.
162
+
33
163
  ## [2.0.13] - 2026-07-02
34
164
 
35
165
  - TAG: [v2.0.13][2.0.13t]
@@ -482,7 +612,11 @@ Old version?
482
612
  * Fixed require paths
483
613
  * added about.yml and this CHANGELOG
484
614
 
485
- [Unreleased]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.13...HEAD
615
+ [Unreleased]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.15...HEAD
616
+ [2.0.15]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.14...v2.0.15
617
+ [2.0.15t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.15
618
+ [2.0.14]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.13...v2.0.14
619
+ [2.0.14t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.14
486
620
  [2.0.13]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.12...v2.0.13
487
621
  [2.0.13t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.13
488
622
  [2.0.12]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.11...v2.0.12
data/LICENSE.md CHANGED
@@ -3,17 +3,14 @@
3
3
  This project is made available under the following license.
4
4
  Choose the option that best fits your use case:
5
5
 
6
- - [MIT](MIT.md)
6
+ - [MIT](https://github.com/galtzo-floss/sanitize_email/blob/main/MIT.md)
7
7
 
8
8
  ## Copyright Notice
9
9
 
10
- - Copyright (c) 2008 Peter Boling
10
+ - Copyright (c) 2008-2010, 2012-2018, 2022, 2024, 2026 Peter H. Boling
11
11
  - Copyright (c) 2009 John Trupiano
12
- - Copyright (c) 2009-2010 pboling
13
- - Copyright (c) 2009 Peter H. Boling
14
12
  - Copyright (c) 2012 David Morton
15
13
  - Copyright (c) 2012 Harry Lascelles
16
- - Copyright (c) 2012-2018, 2022, 2024, 2026 Peter H. Boling
17
14
  - Copyright (c) 2013 Adrien Siami
18
15
  - Copyright (c) 2013 Chris Altman
19
16
  - Copyright (c) 2014 Scott Rocher
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
- <a href="https://github.com/galtzo-floss"><img alt="galtzo-floss Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/avatar-128px.svg" width="12%" align="right"/></a> <a href="https://github.com/galtzo-floss/sanitize_email"><img alt="sanitize_email Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/sanitize_email/avatar-128px.svg" width="12%" align="right"/></a>
1
+ <a href="https://github.com/galtzo-floss"><img alt="galtzo-floss Logo by GitHub" src="https://github.com/galtzo-floss.png?size=192" width="12%" align="right"/></a> <a href="https://github.com/galtzo-floss/sanitize_email"><img alt="sanitize_email Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/galtzo-floss/sanitize_email/avatar-128px.svg" width="12%" align="right"/></a>
2
2
 
3
3
  # 📧 SanitizeEmail
4
4
 
5
- [![Version][👽versioni]][👽version] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Downloads Rank][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
5
+ [![Version][👽versioni]][👽version] [![Ruby Users Forum][✉️ruby-forum-top-img]][✉️ruby-forum] [![GitHub tag (latest SemVer)][⛳️tag-img]][⛳️tag] [![License: MIT][📄license-img]][📄license] [![Total downloads][👽dl-ranki]][👽dl-rank] [![CodeCov Test Coverage][🏀codecovi]][🏀codecov] [![Coveralls Test Coverage][🏀coveralls-img]][🏀coveralls] [![QLTY Test Coverage][🏀qlty-covi]][🏀qlty-cov] [![QLTY Maintainability][🏀qlty-mnti]][🏀qlty-mnt] [![CI Heads][🚎3-hd-wfi]][🚎3-hd-wf] [![CI Runtime Dependencies @ HEAD][🚎12-crh-wfi]][🚎12-crh-wf] [![CI Current][🚎11-c-wfi]][🚎11-c-wf] [![CI Truffle Ruby][🚎9-t-wfi]][🚎9-t-wf] [![CI JRuby][🚎10-j-wfi]][🚎10-j-wf] [![Deps Locked][🚎13-🔒️-wfi]][🚎13-🔒️-wf] [![Deps Unlocked][🚎14-🔓️-wfi]][🚎14-🔓️-wf] [![CI Test Coverage][🚎2-cov-wfi]][🚎2-cov-wf] [![CI Style][🚎5-st-wfi]][🚎5-st-wf] [![Apache SkyWalking Eyes License Compatibility Check][🚎15-🪪-wfi]][🚎15-🪪-wf]
6
6
 
7
- `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know][✉️discord-invite], as I may have missed the [discord notification][✉️discord-invite].
7
+ `if ci_badges.map(&:color).detect { it != "green"}` ☝️ [let me know on Discord][✉️discord-invite] or [RubyForum][✉️ruby-forum], as I may have missed the notification.
8
8
 
9
9
  ---
10
10
 
@@ -41,8 +41,8 @@ It's particularly helpful when you want to prevent the delivery of email (e.g. i
41
41
  | Works with MRI Ruby 4 | [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
42
42
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
43
43
  | Works with MRI Ruby 2 | ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
44
- | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
45
- | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
44
+ | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Get help from RubyForum][✉️ruby-forum-img]][✉️ruby-forum] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
45
+ | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on GitHub.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
46
46
  | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
47
47
  | Compliance | [![License: MIT][📄license-img]][📄license] [![Apache license compatibility: Category A][📄license-compat-img]][📄license-compat] [![📄ilo-declaration-img]][📄ilo-declaration] [![Security Policy][🔐security-img]][🔐security] [![Contributor Covenant 2.1][🪇conduct-img]][🪇conduct] [![SemVer 2.0.0][📌semver-img]][📌semver] |
48
48
  | Style | [![Enforced Code Style Linter][💎rlts-img]][💎rlts] [![Keep-A-Changelog 1.0.0][📗keep-changelog-img]][📗keep-changelog] [![Gitmoji Commits][📌gitmoji-img]][📌gitmoji] [![Compatibility appraised by: appraisal2][💎appraisal2-img]][💎appraisal2] |
@@ -51,7 +51,7 @@ It's particularly helpful when you want to prevent the delivery of email (e.g. i
51
51
 
52
52
  ### Compatibility
53
53
 
54
- Compatible with MRI Ruby 2.3.0+, and concordant releases of JRuby, and TruffleRuby.
54
+ Compatible with MRI Ruby 2.3.0+, JRuby, and TruffleRuby.
55
55
  CI workflows and Appraisals are generated for MRI Ruby 2.4+.
56
56
  This test floor is configured by `ruby.test_minimum` in `.kettle-jem.yml` and
57
57
  may be higher than the gem's runtime compatibility floor when legacy Rubies are
@@ -64,16 +64,16 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
64
64
  <details markdown="1">
65
65
  <summary>How kettle-dev manages complexity in tests</summary>
66
66
 
67
- | Gem | Source | Role | Daily download rank |
67
+ | Gem | Source | Role | Total downloads |
68
68
  |-----|--------|------|---------------------|
69
- | [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Daily download rank for appraisal2](https://img.shields.io/gem/rd/appraisal2.svg?style=flat-square)](https://bestgems.org/gems/appraisal2) |
70
- | [appraisal2-rubocop](https://bestgems.org/gems/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Daily download rank for appraisal2-rubocop](https://img.shields.io/gem/rd/appraisal2-rubocop.svg?style=flat-square)](https://bestgems.org/gems/appraisal2-rubocop) |
71
- | [kettle-dev](https://bestgems.org/gems/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Daily download rank for kettle-dev](https://img.shields.io/gem/rd/kettle-dev.svg?style=flat-square)](https://bestgems.org/gems/kettle-dev) |
72
- | [kettle-jem](https://bestgems.org/gems/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Daily download rank for kettle-jem](https://img.shields.io/gem/rd/kettle-jem.svg?style=flat-square)](https://bestgems.org/gems/kettle-jem) |
73
- | [kettle-soup-cover](https://bestgems.org/gems/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Daily download rank for kettle-soup-cover](https://img.shields.io/gem/rd/kettle-soup-cover.svg?style=flat-square)](https://bestgems.org/gems/kettle-soup-cover) |
74
- | [kettle-test](https://bestgems.org/gems/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Daily download rank for kettle-test](https://img.shields.io/gem/rd/kettle-test.svg?style=flat-square)](https://bestgems.org/gems/kettle-test) |
75
- | [rubocop-lts](https://bestgems.org/gems/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Daily download rank for rubocop-lts](https://img.shields.io/gem/rd/rubocop-lts.svg?style=flat-square)](https://bestgems.org/gems/rubocop-lts) |
76
- | [turbo_tests2](https://bestgems.org/gems/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Daily download rank for turbo_tests2](https://img.shields.io/gem/rd/turbo_tests2.svg?style=flat-square)](https://bestgems.org/gems/turbo_tests2) |
69
+ | [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [![Total downloads for appraisal2](https://img.shields.io/gem/dt/appraisal2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2) |
70
+ | [appraisal2-rubocop](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) | [GitHub](https://github.com/appraisal-rb/appraisal2-rubocop) | RuboCop Appraisal generator integration | [![Total downloads for appraisal2-rubocop](https://img.shields.io/gem/dt/appraisal2-rubocop.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/appraisal2-rubocop) |
71
+ | [kettle-dev](https://clickgems.clickhouse.com/dashboard/kettle-dev) | [GitHub](https://github.com/kettle-dev/kettle-dev) | development, release, and CI workflow tooling | [![Total downloads for kettle-dev](https://img.shields.io/gem/dt/kettle-dev.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-dev) |
72
+ | [kettle-jem](https://clickgems.clickhouse.com/dashboard/kettle-jem) | [GitHub](https://github.com/kettle-dev/kettle-jem) | Appraisals & CI workflow templates | [![Total downloads for kettle-jem](https://img.shields.io/gem/dt/kettle-jem.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-jem) |
73
+ | [kettle-soup-cover](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) | [GitHub](https://github.com/kettle-dev/kettle-soup-cover) | SimpleCov coverage policy and reporting | [![Total downloads for kettle-soup-cover](https://img.shields.io/gem/dt/kettle-soup-cover.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-soup-cover) |
74
+ | [kettle-test](https://clickgems.clickhouse.com/dashboard/kettle-test) | [GitHub](https://github.com/kettle-dev/kettle-test) | standard test runner and coverage harness | [![Total downloads for kettle-test](https://img.shields.io/gem/dt/kettle-test.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/kettle-test) |
75
+ | [rubocop-lts](https://clickgems.clickhouse.com/dashboard/rubocop-lts) | [GitHub](https://github.com/rubocop-lts/rubocop-lts) | Ruby-version-aware linting | [![Total downloads for rubocop-lts](https://img.shields.io/gem/dt/rubocop-lts.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/rubocop-lts) |
76
+ | [turbo_tests2](https://clickgems.clickhouse.com/dashboard/turbo_tests2) | [GitHub](https://github.com/galtzo-floss/turbo_tests2) | parallel test execution | [![Total downloads for turbo_tests2](https://img.shields.io/gem/dt/turbo_tests2.svg?style=flat-square)](https://clickgems.clickhouse.com/dashboard/turbo_tests2) |
77
77
 
78
78
  </details>
79
79
 
@@ -82,18 +82,17 @@ The _amazing_ test matrix is powered by the kettle-dev stack.
82
82
  <details markdown="1">
83
83
  <summary>Find this repo on federated forges (Coming soon!)</summary>
84
84
 
85
- | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI | Discussions |
86
- |-------------------------------------------------|-----------------------------------------------------------------------|---------------------------|--------------------------|---------------------------|--------------------------|------------------------------|
87
- | 🧪 [galtzo-floss/sanitize_email on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix | ➖ |
88
- | 🧊 [galtzo-floss/sanitize_email on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix | ➖ |
89
- | 🐙 [galtzo-floss/sanitize_email on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix | [💚][gh-discussions] |
90
- | 🎮️ [Discord Server][✉️discord-invite] | [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] | [Let's][✉️discord-invite] | [talk][✉️discord-invite] | [about][✉️discord-invite] | [this][✉️discord-invite] | [library!][✉️discord-invite] |
85
+ | Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
86
+ |-------------------------------------------------|-------------------------------------------|-------------------|------------------|-----------------|----------------|
87
+ | 🧪 [galtzo-floss/sanitize_email on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
88
+ | 🧊 [galtzo-floss/sanitize_email on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
89
+ | 🐙 [galtzo-floss/sanitize_email on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
91
90
 
92
91
  </details>
93
92
 
94
- [gh-discussions]: https://github.com/galtzo-floss/sanitize_email/discussions
93
+ ### Enterprise Support
95
94
 
96
- ### Enterprise Support [![Tidelift](https://tidelift.com/badges/package/rubygems/sanitize_email)](https://tidelift.com/subscription/pkg/rubygems-sanitize_email?utm_source=rubygems-sanitize_email&utm_medium=referral&utm_campaign=readme)
95
+ [![Tidelift](https://tidelift.com/badges/package/rubygems/sanitize_email)](https://tidelift.com/subscription/pkg/rubygems-sanitize_email?utm_source=rubygems-sanitize_email&utm_medium=referral&utm_campaign=readme)
97
96
 
98
97
  Available as part of the Tidelift Subscription.
99
98
 
@@ -110,6 +109,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
110
109
 
111
110
  Alternatively:
112
111
 
112
+ - [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
113
113
  - [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
114
114
  - [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork]
115
115
  - [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor]
@@ -151,6 +151,21 @@ This happens in a few different ways, and two of them are in the config below (`
151
151
 
152
152
  ## 🔧 Basic Usage
153
153
 
154
+ Configure the sanitizer during application boot and register the Mail or
155
+ ActionMailer interceptor. For a temporary override, use `SanitizeEmail.sanitary`
156
+ or `SanitizeEmail.unsanitary` around the delivery:
157
+
158
+ ```ruby
159
+ SanitizeEmail::Config.configure do |config|
160
+ config[:sanitized_to] = "test@example.invalid"
161
+ config[:environment] = "[staging]"
162
+ end
163
+
164
+ SanitizeEmail.sanitary do
165
+ UserMailer.account_notice(user).deliver_now
166
+ end
167
+ ```
168
+
154
169
  ## 🦷 FLOSS Funding
155
170
 
156
171
  While galtzo-floss tools are free software and will always be, the project would benefit immensely from some funding.
@@ -215,8 +230,7 @@ See [SECURITY.md][🔐security].
215
230
  ## 🤝 Contributing
216
231
 
217
232
  If you need some ideas of where to help, you could work on adding more code coverage,
218
- or if it is already 💯 (see [below](#code-coverage)) check [issues][🤝gh-issues] or [PRs][🤝gh-pulls],
219
- or use the gem and think about how it could be better.
233
+ check [issues][🤝gh-issues] or [PRs][🤝gh-pulls], or use the gem and think about how it could be better.
220
234
 
221
235
  We [![Keep A Changelog][📗keep-changelog-img]][📗keep-changelog] so if you make changes, remember to update it.
222
236
 
@@ -255,11 +269,11 @@ Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/sanitize_email/-/
255
269
  <details markdown="1">
256
270
  <summary>⭐️ Star History</summary>
257
271
 
258
- <a href="https://star-history.com/galtzo-floss/sanitize_email&Date">
272
+ <a href="https://star-history.dera.page/#galtzo-floss/sanitize_email&type=date&legend=top-left">
259
273
  <picture>
260
- <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/sanitize_email&type=Date&theme=dark" />
261
- <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=galtzo-floss/sanitize_email&type=Date" />
262
- <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=galtzo-floss/sanitize_email&type=Date" />
274
+ <source media="(prefers-color-scheme: dark)" srcset="https://star-history.dera.page/svg?repos=galtzo-floss/sanitize_email&type=date&theme=dark&legend=top-left" />
275
+ <source media="(prefers-color-scheme: light)" srcset="https://star-history.dera.page/svg?repos=galtzo-floss/sanitize_email&type=date&legend=top-left" />
276
+ <img alt="Star History Chart" src="https://star-history.dera.page/svg?repos=galtzo-floss/sanitize_email&type=date&legend=top-left" />
263
277
  </picture>
264
278
  </a>
265
279
 
@@ -294,7 +308,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
294
308
  ## 📄 License
295
309
 
296
310
  The gem is available as open source under the terms of
297
- the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
311
+ the [MIT](https://github.com/galtzo-floss/sanitize_email/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
298
312
 
299
313
  ### © Copyright
300
314
 
@@ -303,13 +317,10 @@ See [LICENSE.md][📄license] for the official copyright notice.
303
317
  <details markdown="1">
304
318
  <summary>Copyright holders</summary>
305
319
 
306
- - Copyright (c) 2008 Peter Boling
320
+ - Copyright (c) 2008-2010, 2012-2018, 2022, 2024, 2026 Peter H. Boling
307
321
  - Copyright (c) 2009 John Trupiano
308
- - Copyright (c) 2009-2010 pboling
309
- - Copyright (c) 2009 Peter H. Boling
310
322
  - Copyright (c) 2012 David Morton
311
323
  - Copyright (c) 2012 Harry Lascelles
312
- - Copyright (c) 2012-2018, 2022, 2024, 2026 Peter H. Boling
313
324
  - Copyright (c) 2013 Adrien Siami
314
325
  - Copyright (c) 2013 Chris Altman
315
326
  - Copyright (c) 2014 Scott Rocher
@@ -328,11 +339,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
328
339
  so if you value the work I am doing, I need your support.
329
340
  Please consider sponsoring me or the project.
330
341
 
331
- To join the community or get help 👇️ Join the Discord.
342
+ To join the community or get help, use the RubyForum or Discord.
332
343
 
344
+ [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
333
345
  [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
334
346
 
335
- To say "thanks!" ☝️ Join the Discord or 👇️ send money.
347
+ To say "thanks!" ☝️ Join the community or 👇️ send money.
336
348
 
337
349
  [![Sponsor galtzo-floss/sanitize_email on Open Source Collective][🖇osc-all-bottom-img]][🖇osc] 💌 [![Sponsor me on GitHub Sponsors][🖇sponsor-bottom-img]][🖇sponsor] 💌 [![Sponsor me on Liberapay][⛳liberapay-bottom-img]][⛳liberapay] 💌 [![Donate on PayPal][🖇paypal-bottom-img]][🖇paypal]
338
350
 
@@ -373,11 +385,14 @@ Thanks for RTFM. ☺️
373
385
  [✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
374
386
  [✉️ruby-friends-img]: https://img.shields.io/badge/daily.dev-%F0%9F%92%8E_Ruby_Friends-0A0A0A?style=for-the-badge&logo=dailydotdev&logoColor=white
375
387
  [✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
388
+ [✉️ruby-forum-top-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=flat&logo=discourse&label=Ruby%20Users%20Forum
389
+ [✉️ruby-forum-img]: https://img.shields.io/discourse/topics?server=https%3A%2F%2Fwww.rubyforum.org&style=for-the-badge&logo=discourse&label=Ruby%20Users%20Forum
390
+ [✉️ruby-forum]: https://www.rubyforum.org/tag/sanitize-email
376
391
 
377
392
  [✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
378
393
  [⛳️gem-namespace]: https://github.com/galtzo-floss/sanitize_email
379
394
  [⛳️namespace-img]: https://img.shields.io/badge/namespace-SanitizeEmail-3C2D2D.svg?style=square&logo=ruby&logoColor=white
380
- [⛳️gem-name]: https://bestgems.org/gems/sanitize_email
395
+ [⛳️gem-name]: https://clickgems.clickhouse.com/dashboard/sanitize_email
381
396
  [⛳️name-img]: https://img.shields.io/badge/name-sanitize__email-3C2D2D.svg?style=square&logo=rubygems&logoColor=red
382
397
  [⛳️tag-img]: https://img.shields.io/github/tag/galtzo-floss/sanitize_email.svg
383
398
  [⛳️tag]: https://github.com/galtzo-floss/sanitize_email/releases
@@ -418,7 +433,7 @@ Thanks for RTFM. ☺️
418
433
  [📜src-gl]: https://gitlab.com/galtzo-floss/sanitize_email
419
434
  [📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
420
435
  [📜src-cb]: https://codeberg.org/galtzo-floss/sanitize_email
421
- [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=Github&logoColor=green
436
+ [📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
422
437
  [📜src-gh]: https://github.com/galtzo-floss/sanitize_email
423
438
  [📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
424
439
  [📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
@@ -426,9 +441,9 @@ Thanks for RTFM. ☺️
426
441
  [📜gh-wiki]: https://github.com/galtzo-floss/sanitize_email/wiki
427
442
  [📜gl-wiki-img]: https://img.shields.io/badge/wiki-gitlab-943CD2.svg?style=for-the-badge&logo=gitlab&logoColor=white
428
443
  [📜gh-wiki-img]: https://img.shields.io/badge/wiki-github-943CD2.svg?style=for-the-badge&logo=github&logoColor=white
429
- [👽dl-rank]: https://bestgems.org/gems/sanitize_email
430
- [👽dl-ranki]: https://img.shields.io/gem/rd/sanitize_email.svg
431
- [👽version]: https://bestgems.org/gems/sanitize_email
444
+ [👽dl-rank]: https://clickgems.clickhouse.com/dashboard/sanitize_email
445
+ [👽dl-ranki]: https://img.shields.io/gem/dt/sanitize_email.svg
446
+ [👽version]: https://clickgems.clickhouse.com/dashboard/sanitize_email
432
447
  [👽versioni]: https://img.shields.io/gem/v/sanitize_email.svg
433
448
  [🏀qlty-mnt]: https://qlty.sh/gh/galtzo-floss/projects/sanitize_email
434
449
  [🏀qlty-mnti]: https://qlty.sh/gh/galtzo-floss/projects/sanitize_email/maintainability.svg
@@ -534,7 +549,7 @@ Thanks for RTFM. ☺️
534
549
  [🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
535
550
  [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
536
551
  [📄license]: LICENSE.md
537
- [📄license-ref]: MIT.md
552
+ [📄license-ref]: https://github.com/galtzo-floss/sanitize_email/blob/main/MIT.md
538
553
  [📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
539
554
  [📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
540
555
  [📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2008 - 2018, 2020, 2022, 2024 Peter H. Boling of RailsBling.com
4
- # Released under the MIT license
5
-
3
+ # Email header sanitization helpers.
6
4
  module SanitizeEmail
7
5
  # Determines whether to sanitize the headers of an email,
8
6
  # and does so when appropriate.
@@ -22,8 +22,8 @@ module SanitizeEmail
22
22
  @deprecate_in_silence = false
23
23
 
24
24
  # Define a deprecated alias for a method
25
- # @param [Symbol] name - name of method to define
26
- # @param [Symbol] replacement - name of method to (alias)
25
+ # @param name [Symbol] name of method to define
26
+ # @param replacement [Symbol] name of method to (alias)
27
27
  def deprecated_alias(name, replacement)
28
28
  # Create a wrapped version
29
29
  define_method(name) do |*args, &block|
@@ -33,8 +33,8 @@ module SanitizeEmail
33
33
  end
34
34
 
35
35
  # Deprecate a defined method
36
- # @param [Symbol] name - name of deprecated method
37
- # @param [Symbol] replacement - name of the desired replacement
36
+ # @param name [Symbol] name of deprecated method
37
+ # @param replacement [Symbol] name of the desired replacement
38
38
  def deprecated(name, replacement = nil)
39
39
  # Replace old method
40
40
  old_name = :"#{name}_without_deprecation"
@@ -17,7 +17,7 @@ module SanitizeEmail
17
17
 
18
18
  def string_matching(matcher, part, attribute)
19
19
  # Can we match a regex against it?
20
- raise UnexpectedMailType, "Cannot match #{matcher} for #{part}" unless attribute.respond_to?(:=~)
20
+ raise UnexpectedMailType, "Cannot match #{matcher} for #{part}" unless attribute.is_a?(String)
21
21
  attribute =~ if matcher.is_a?(Regexp)
22
22
  matcher
23
23
  else
@@ -1,8 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SanitizeEmail
4
+ # Version namespace for this gem.
4
5
  module Version
5
- VERSION = "2.0.13"
6
+ # Current gem version.
7
+ VERSION = "2.0.15"
6
8
  end
9
+ # Current gem version exposed at the traditional constant location.
7
10
  VERSION = Version::VERSION # Traditional Constant Location
8
11
  end
@@ -7,12 +7,12 @@
7
7
  require "version_gem"
8
8
 
9
9
  # This Library
10
- require_relative "sanitize_email/version"
11
10
  require_relative "sanitize_email/deprecation"
12
11
  require_relative "sanitize_email/config"
13
12
  require_relative "sanitize_email/mail_header_tools"
14
13
  require_relative "sanitize_email/overridden_addresses"
15
14
  require_relative "sanitize_email/bleach"
15
+ require_relative "sanitize_email/version"
16
16
 
17
17
  module SanitizeEmail
18
18
  FORCE_SANITIZE_MUTEX = Mutex.new
@@ -114,7 +114,6 @@ module SanitizeEmail
114
114
  # subject "subject"
115
115
  # end
116
116
  # end
117
- #
118
117
  def sanitary(config_options = {})
119
118
  raise MissingBlockParameter, "SanitizeEmail.sanitary must be called with a block" unless block_given?
120
119
  forcing =
@@ -145,7 +144,6 @@ module SanitizeEmail
145
144
  # subject "subject"
146
145
  # end
147
146
  # end
148
- #
149
147
  def unsanitary
150
148
  raise MissingBlockParameter, "SanitizeEmail.unsanitary must be called with a block" unless block_given?
151
149
  janitor(forcing: false) do
data.tar.gz.sig CHANGED
Binary file