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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +135 -1
- data/LICENSE.md +2 -5
- data/README.md +57 -42
- data/lib/sanitize_email/bleach.rb +1 -3
- data/lib/sanitize_email/deprecation.rb +4 -4
- data/lib/sanitize_email/test_helpers.rb +1 -1
- data/lib/sanitize_email/version.rb +4 -1
- data/lib/sanitize_email.rb +1 -3
- data.tar.gz.sig +0 -0
- metadata +51 -63
- metadata.gz.sig +0 -0
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -275
- data/FUNDING.md +0 -70
- data/MIT.md +0 -21
- data/RUBOCOP.md +0 -71
- data/SECURITY.md +0 -21
- data/certs/pboling.pem +0 -27
- /data/sig/{sanitize_email/version.rbs → sanitize_email.rbs} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 97cc655b2be2f3a1343e76f263151a1183117bbc5fd20a54022b319206626c29
|
|
4
|
+
data.tar.gz: c8992d9ae46a2387e2455bc019bb5ced276d9ae7984a284c7e1adb9c0166533f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
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
|
|
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] [![
|
|
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
|
|
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
|
|
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+,
|
|
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 |
|
|
67
|
+
| Gem | Source | Role | Total downloads |
|
|
68
68
|
|-----|--------|------|---------------------|
|
|
69
|
-
| [appraisal2](https://
|
|
70
|
-
| [appraisal2-rubocop](https://
|
|
71
|
-
| [kettle-dev](https://
|
|
72
|
-
| [kettle-jem](https://
|
|
73
|
-
| [kettle-soup-cover](https://
|
|
74
|
-
| [kettle-test](https://
|
|
75
|
-
| [rubocop-lts](https://
|
|
76
|
-
| [turbo_tests2](https://
|
|
69
|
+
| [appraisal2](https://clickgems.clickhouse.com/dashboard/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](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 | [](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 | [](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 | [](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 | [](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 | [](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 | [](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 | [](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 |
|
|
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 |
|
|
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
|
-
|
|
93
|
+
### Enterprise Support
|
|
95
94
|
|
|
96
|
-
|
|
95
|
+
[](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
|
-
|
|
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.
|
|
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://
|
|
261
|
-
<source media="(prefers-color-scheme: light)" srcset="https://
|
|
262
|
-
<img alt="Star History Chart" src="https://
|
|
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
|
|
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
|
|
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://
|
|
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=
|
|
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://
|
|
430
|
-
[👽dl-ranki]: https://img.shields.io/gem/
|
|
431
|
-
[👽version]: https://
|
|
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
|
-
#
|
|
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
|
|
26
|
-
# @param [Symbol]
|
|
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
|
|
37
|
-
# @param [Symbol]
|
|
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.
|
|
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
|
-
|
|
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
|
data/lib/sanitize_email.rb
CHANGED
|
@@ -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
|