sanitize_email 2.0.12 → 2.0.14
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 +130 -1
- data/LICENSE.md +1 -1
- data/README.md +54 -36
- data/lib/sanitize_email/bleach.rb +1 -3
- data/lib/sanitize_email/config.rb +2 -2
- data/lib/sanitize_email/deprecation.rb +4 -4
- data/lib/sanitize_email/mail_header_tools.rb +2 -2
- data/lib/sanitize_email/overridden_addresses.rb +7 -8
- data/lib/sanitize_email/test_helpers.rb +1 -1
- data/lib/sanitize_email/version.rb +4 -1
- data/lib/sanitize_email.rb +3 -5
- data.tar.gz.sig +0 -0
- metadata +60 -46
- metadata.gz.sig +0 -0
- data/CITATION.cff +0 -20
- data/CODE_OF_CONDUCT.md +0 -134
- data/CONTRIBUTING.md +0 -272
- data/FUNDING.md +0 -74
- 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: a7c1513706ef8c25c5376a39267da18091ce45963253472d8cc406caf6cd71ca
|
|
4
|
+
data.tar.gz: 7457f74e949bf2edf5820a7dbbe80fac5641ede488c883423c4ccb4503046e14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2259f6c3680f9a0ec80a1ec45e687901415050c4e5757b930d7c00772ec44532ee81e56ccf84a68ffbd2665a28892afed3de5a887b6f40c9efcda69b27577ba0
|
|
7
|
+
data.tar.gz: b0f2df9d12456f3c736445fe10ac28783e1871128d378848c54d7d33201346a3379f222c34e0c5ba3e30b766b9c45c854835a2522d1affde20ba0f23a67e537f
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/CHANGELOG.md
CHANGED
|
@@ -30,6 +30,131 @@ Please file a bug if you notice a violation of semantic versioning.
|
|
|
30
30
|
|
|
31
31
|
### Security
|
|
32
32
|
|
|
33
|
+
## [2.0.14] - 2026-07-31
|
|
34
|
+
|
|
35
|
+
- TAG: [v2.0.14][2.0.14t]
|
|
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-20260716-001 - Shim gemspec manifests now include
|
|
43
|
+
`LICENSE.md` instead of nonexistent `LICENSE.txt`.
|
|
44
|
+
- kettle-jem-template-20260716-002 - Generated gemspec manifests now ship fewer
|
|
45
|
+
repository-only files by default to reduce downstream distro packaging churn.
|
|
46
|
+
- kettle-jem-template-20260720-001 - Generated READMEs can now render
|
|
47
|
+
template-managed corporate sponsor logos from project or family config.
|
|
48
|
+
- kettle-jem-template-20260720-002 - Generated development Gemfiles now use the
|
|
49
|
+
released `tree_sitter_language_pack` gem 1.13.3 or newer by default.
|
|
50
|
+
- kettle-jem-template-20260720-003 - Generated StructuredMerge Git diff driver
|
|
51
|
+
config now uses the installed `smorg-rb` Ruby driver name.
|
|
52
|
+
- kettle-jem-template-20260720-004 - Generated multi-engine workflow files now
|
|
53
|
+
omit JRuby and TruffleRuby jobs when project config declares MRI-only engines.
|
|
54
|
+
- kettle-jem-template-20260720-005 - Generated README Support & Community rows
|
|
55
|
+
now include a RubyForum help badge.
|
|
56
|
+
- kettle-jem-template-20260725-001 - Generated JRuby and TruffleRuby workflow
|
|
57
|
+
files now run when pull request head branches start with `feature/release`,
|
|
58
|
+
so release CI monitoring does not report intentionally skipped engine
|
|
59
|
+
workflows as failures.
|
|
60
|
+
|
|
61
|
+
- kettle-jem-template-20260725-002 - Generated gemspec templates now include
|
|
62
|
+
`anonymous_loader` as a development dependency, and version specs use it to
|
|
63
|
+
execute generated `version.rb` files for coverage without redefining package
|
|
64
|
+
constants. Managed version specs are removed when `version_gem` is disabled
|
|
65
|
+
or incompatible with the project's runtime Ruby floor.
|
|
66
|
+
|
|
67
|
+
- kettle-jem-template-20260728-001 - Generated Ruby workflows now use clearer
|
|
68
|
+
setup-ruby-flash planning and can prepare appraisal-only jobs without
|
|
69
|
+
installing the main Gemfile bundle.
|
|
70
|
+
|
|
71
|
+
### Fixed
|
|
72
|
+
|
|
73
|
+
- Root development bundle now includes the Rails test harness fragment, so
|
|
74
|
+
`bundle exec kettle-test` can load the suite outside appraisal-specific
|
|
75
|
+
Gemfiles.
|
|
76
|
+
- Added coverage for legacy test helper, matcher, and Rails integration shim
|
|
77
|
+
surfaces so release coverage thresholds pass.
|
|
78
|
+
|
|
79
|
+
- Root release bundles now include the default Rails test support, and
|
|
80
|
+
Rails-dependent specs load `rails_helper` explicitly for parallel workers.
|
|
81
|
+
|
|
82
|
+
- kettle-jem-template-20260726-002 - Generated version files now document their
|
|
83
|
+
version namespace and constants, reducing warning-only YARD lint output.
|
|
84
|
+
|
|
85
|
+
- kettle-jem-template-20260726-003 - Coverage upload steps now treat Coveralls,
|
|
86
|
+
QLTY, and Codecov as optional, so provider outages do not fail CI when local
|
|
87
|
+
coverage thresholds still pass.
|
|
88
|
+
- kettle-jem-template-20260728-002 - Generated RuboCop configs now ignore the
|
|
89
|
+
same `gemfiles/vendor/bundle` tree as `.gitignore`, so vendored dependency
|
|
90
|
+
installs are not reported as project lint debt.
|
|
91
|
+
- kettle-jem-template-20260728-003 - Generated dep-heads workflows now run
|
|
92
|
+
TruffleRuby jobs with current RubyGems and Bundler, avoiding setup failures
|
|
93
|
+
before the test suite starts.
|
|
94
|
+
|
|
95
|
+
- kettle-jem-template-20260728-004 - Generated dep-heads workflows now use the
|
|
96
|
+
setup-ruby Bundler install path for direct appraisal Gemfiles, avoiding rv
|
|
97
|
+
lockfile parser failures on Git and path dependencies.
|
|
98
|
+
|
|
99
|
+
- kettle-jem-template-20260728-005 - VersionGem bootstrap now creates the
|
|
100
|
+
missing canonical version spec when a project only has shim namespace version
|
|
101
|
+
specs.
|
|
102
|
+
|
|
103
|
+
- kettle-jem-template-20260729-001 - Generated JRuby 9.4 workflows now use the
|
|
104
|
+
legacy manual bundle install path, avoiding setup-time Bundler full-index
|
|
105
|
+
failures against `gem.coop`.
|
|
106
|
+
|
|
107
|
+
- kettle-jem-template-20260729-002 - VersionGem bootstrap now preserves
|
|
108
|
+
and templates dedicated `version_gem.rb` entrypoints even when the gemspec
|
|
109
|
+
dependency is intentionally omitted, and generated anonymous-loader specs
|
|
110
|
+
cover both `version.rb` and `version_gem.rb`.
|
|
111
|
+
|
|
112
|
+
- kettle-jem-template-20260729-003 - Old-Ruby gems below the VersionGem runtime
|
|
113
|
+
floor now get managed minimal `version.rb` files and anonymous-loader version
|
|
114
|
+
specs without adding `version_gem`.
|
|
115
|
+
- kettle-jem-template-20260730-001 - Gemspec package file enumeration now runs
|
|
116
|
+
relative to the gemspec directory, so packaged template assets are included
|
|
117
|
+
even when the gemspec is loaded from another working directory.
|
|
118
|
+
|
|
119
|
+
- Legacy test helpers now reject unsupported match values consistently on Ruby
|
|
120
|
+
2.5, where plain objects still respond to `=~`.
|
|
121
|
+
|
|
122
|
+
### Added
|
|
123
|
+
|
|
124
|
+
- Documentation linting now has its generated `yard-lint` dependency and severity config available in the local bundle.
|
|
125
|
+
|
|
126
|
+
- kettle-jem-template-20260726-001 - Projects now include YARD lint
|
|
127
|
+
configuration and documentation dependencies so documentation issues fail
|
|
128
|
+
before generated docs are refreshed.
|
|
129
|
+
|
|
130
|
+
- kettle-jem-template-20260727-001 - Spec harness documentation now lists the
|
|
131
|
+
RSpec helpers provided by `kettle-test`.
|
|
132
|
+
|
|
133
|
+
- kettle-jem-template-20260729-005 - Gemspec metadata now publishes this
|
|
134
|
+
project's RubyForum tag as `mailing_list_uri`, and support docs link to the
|
|
135
|
+
tagged RubyForum community alongside Discord.
|
|
136
|
+
|
|
137
|
+
## [2.0.13] - 2026-07-02
|
|
138
|
+
|
|
139
|
+
- TAG: [v2.0.13][2.0.13t]
|
|
140
|
+
- COVERAGE: 83.12% -- 320/385 lines in 13 files
|
|
141
|
+
- BRANCH COVERAGE: 76.07% -- 89/117 branches in 13 files
|
|
142
|
+
- 51.14% documented
|
|
143
|
+
|
|
144
|
+
### Added
|
|
145
|
+
|
|
146
|
+
- Added support for JRuby 10.1 and TruffleRuby 34.0.
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
|
|
150
|
+
- Retemplated project metadata and CI/development automation with `kettle-jem` v7.0.0.
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
|
|
154
|
+
- Root development bundle now includes the default Rails 7.2 test stack so
|
|
155
|
+
`bundle exec kettle-test` can load `rails_helper` and Combustion.
|
|
156
|
+
- Package configured license files in gem release file lists.
|
|
157
|
+
|
|
33
158
|
## [2.0.12] - 2026-06-14
|
|
34
159
|
|
|
35
160
|
- TAG: [v2.0.12][2.0.12t]
|
|
@@ -461,7 +586,11 @@ Old version?
|
|
|
461
586
|
* Fixed require paths
|
|
462
587
|
* added about.yml and this CHANGELOG
|
|
463
588
|
|
|
464
|
-
[Unreleased]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.
|
|
589
|
+
[Unreleased]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.14...HEAD
|
|
590
|
+
[2.0.14]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.13...v2.0.14
|
|
591
|
+
[2.0.14t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.14
|
|
592
|
+
[2.0.13]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.12...v2.0.13
|
|
593
|
+
[2.0.13t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.13
|
|
465
594
|
[2.0.12]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.11...v2.0.12
|
|
466
595
|
[2.0.12t]: https://github.com/galtzo-floss/sanitize_email/releases/tag/v2.0.12
|
|
467
596
|
[2.0.11]: https://github.com/galtzo-floss/sanitize_email/compare/v2.0.10...v2.0.11
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -2,17 +2,17 @@
|
|
|
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] [![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]
|
|
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
|
|
|
11
11
|
`if ci_badges.map(&:color).all? { it == "green"}` 👇️ send money so I can do more of this. FLOSS maintenance is now my full-time job.
|
|
12
12
|
|
|
13
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
13
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
14
14
|
|
|
15
|
-
<details>
|
|
15
|
+
<details markdown="1">
|
|
16
16
|
<summary>👣 How will this project approach the September 2025 hostile takeover of RubyGems? 🚑️</summary>
|
|
17
17
|
|
|
18
18
|
I've summarized my thoughts in [this blog post](https://dev.to/galtzo/hostile-takeover-of-rubygems-my-thoughts-5hlo).
|
|
@@ -36,13 +36,13 @@ It's particularly helpful when you want to prevent the delivery of email (e.g. i
|
|
|
36
36
|
|
|
37
37
|
| Tokens to Remember | [![Gem name][⛳️name-img]][⛳️gem-name] [![Gem namespace][⛳️namespace-img]][⛳️gem-namespace] |
|
|
38
38
|
|-------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
39
|
-
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
40
|
-
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
|
|
41
|
-
| Works with MRI Ruby 4 | [![Ruby
|
|
39
|
+
| Works with JRuby | [![JRuby 9.2 Compat][💎jruby-9.2i]][🚎jruby-9.2-wf] [![JRuby 9.3 Compat][💎jruby-9.3i]][🚎jruby-9.3-wf] <br/> [![JRuby 9.4 Compat][💎jruby-9.4i]][🚎jruby-9.4-wf] [![JRuby 10.0 Compat][💎jruby-10.0i]][🚎jruby-10.0-wf] [![JRuby current Compat][💎jruby-c-i]][🚎10-j-wf] [![JRuby HEAD Compat][💎jruby-headi]][🚎3-hd-wf]|
|
|
40
|
+
| Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby 33.0 Compat][💎truby-33.0i]][🚎truby-33.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf] [![Truffle Ruby HEAD Compat][💎truby-headi]][🚎3-hd-wf]|
|
|
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] |
|
|
@@ -57,26 +57,39 @@ 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
|
|
58
58
|
not practical for the current toolchain.
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
<a href="https://github.com/kettle-dev"><img alt="kettle-dev Logo by Aboling0, CC BY-SA 4.0" src="https://logos.galtzo.com/assets/images/kettle-dev/avatar-128px.svg" width="14%" align="right"/></a>
|
|
61
|
+
|
|
62
|
+
The _amazing_ test matrix is powered by the kettle-dev stack.
|
|
63
|
+
|
|
64
|
+
<details markdown="1">
|
|
65
|
+
<summary>How kettle-dev manages complexity in tests</summary>
|
|
66
|
+
|
|
67
|
+
| Gem | Source | Role | Daily download rank |
|
|
68
|
+
|-----|--------|------|---------------------|
|
|
69
|
+
| [appraisal2](https://bestgems.org/gems/appraisal2) | [GitHub](https://github.com/appraisal-rb/appraisal2) | multi-dependency Appraisal matrix generation | [](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 | [](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 | [](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 | [](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 | [](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 | [](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 | [](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 | [](https://bestgems.org/gems/turbo_tests2) |
|
|
77
|
+
|
|
78
|
+
</details>
|
|
63
79
|
|
|
64
80
|
### Federated DVCS
|
|
65
81
|
|
|
66
82
|
<details markdown="1">
|
|
67
83
|
<summary>Find this repo on federated forges (Coming soon!)</summary>
|
|
68
84
|
|
|
69
|
-
| Federated [DVCS][💎d-in-dvcs] Repository | Status | Issues | PRs | Wiki | CI |
|
|
70
|
-
|
|
71
|
-
| 🧪 [galtzo-floss/sanitize_email on GitLab][📜src-gl] | The Truth | [💚][🤝gl-issues] | [💚][🤝gl-pulls] | [💚][📜gl-wiki] | 🐭 Tiny Matrix |
|
|
72
|
-
| 🧊 [galtzo-floss/sanitize_email on CodeBerg][📜src-cb] | An Ethical Mirror ([Donate][🤝cb-donate]) | [💚][🤝cb-issues] | [💚][🤝cb-pulls] | ➖ | ⭕️ No Matrix |
|
|
73
|
-
| 🐙 [galtzo-floss/sanitize_email on GitHub][📜src-gh] | Another Mirror | [💚][🤝gh-issues] | [💚][🤝gh-pulls] | [💚][📜gh-wiki] | 💯 Full Matrix |
|
|
74
|
-
| 🎮️ [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 |
|
|
75
90
|
|
|
76
91
|
</details>
|
|
77
92
|
|
|
78
|
-
[gh-discussions]: https://github.com/galtzo-floss/sanitize_email/discussions
|
|
79
|
-
|
|
80
93
|
### Enterprise Support [](https://tidelift.com/subscription/pkg/rubygems-sanitize_email?utm_source=rubygems-sanitize_email&utm_medium=referral&utm_campaign=readme)
|
|
81
94
|
|
|
82
95
|
Available as part of the Tidelift Subscription.
|
|
@@ -94,6 +107,7 @@ The maintainers of this and thousands of other packages are working with Tidelif
|
|
|
94
107
|
|
|
95
108
|
Alternatively:
|
|
96
109
|
|
|
110
|
+
- [![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
97
111
|
- [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
98
112
|
- [![Get help from me on Upwork][👨🏼🏫expsup-upwork-img]][👨🏼🏫expsup-upwork]
|
|
99
113
|
- [![Get help from me on Codementor][👨🏼🏫expsup-codementor-img]][👨🏼🏫expsup-codementor]
|
|
@@ -178,7 +192,7 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
|
|
|
178
192
|
No sponsors yet. Be the first!
|
|
179
193
|
<!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
|
|
180
194
|
|
|
181
|
-
[kettle-readme-backers]: https://github.com/galtzo-floss/sanitize_email/blob/main/
|
|
195
|
+
[kettle-readme-backers]: https://github.com/galtzo-floss/sanitize_email/blob/main/bin/kettle-readme-backers
|
|
182
196
|
|
|
183
197
|
### Another way to support open-source
|
|
184
198
|
|
|
@@ -190,7 +204,7 @@ I’m developing a new library, [floss_funding][🖇floss-funding-gem], designed
|
|
|
190
204
|
|
|
191
205
|
**[Floss-Funding.dev][🖇floss-funding.dev]: 👉️ No network calls. 👉️ No tracking. 👉️ No oversight. 👉️ Minimal crypto hashing. 💡 Easily disabled nags**
|
|
192
206
|
|
|
193
|
-
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate
|
|
207
|
+
[![OpenCollective Backers][🖇osc-backers-i]][🖇osc-backers] [![OpenCollective Sponsors][🖇osc-sponsors-i]][🖇osc-sponsors] [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor] [![Liberapay Goal Progress][⛳liberapay-img]][⛳liberapay] [![Donate on PayPal][🖇paypal-img]][🖇paypal] [![Buy me a coffee][🖇buyme-small-img]][🖇buyme] [![Donate to my FLOSS efforts at ko-fi.com][🖇kofi-img]][🖇kofi]
|
|
194
208
|
|
|
195
209
|
## 🔐 Security
|
|
196
210
|
|
|
@@ -236,7 +250,7 @@ Made with [contributors-img][🖐contrib-rocks].
|
|
|
236
250
|
|
|
237
251
|
Also see GitLab Contributors: [https://gitlab.com/galtzo-floss/sanitize_email/-/graphs/main][🚎contributors-gl]
|
|
238
252
|
|
|
239
|
-
<details>
|
|
253
|
+
<details markdown="1">
|
|
240
254
|
<summary>⭐️ Star History</summary>
|
|
241
255
|
|
|
242
256
|
<a href="https://star-history.com/galtzo-floss/sanitize_email&Date">
|
|
@@ -278,7 +292,7 @@ See [CHANGELOG.md][📌changelog] for a list of releases.
|
|
|
278
292
|
## 📄 License
|
|
279
293
|
|
|
280
294
|
The gem is available as open source under the terms of
|
|
281
|
-
the [MIT](MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
295
|
+
the [MIT](https://github.com/galtzo-floss/sanitize_email/blob/main/MIT.md) [![License: MIT][📄license-img]][📄license-ref].
|
|
282
296
|
|
|
283
297
|
### © Copyright
|
|
284
298
|
|
|
@@ -312,11 +326,12 @@ I'm hoping to be able to pay for my kids' health insurance this month,
|
|
|
312
326
|
so if you value the work I am doing, I need your support.
|
|
313
327
|
Please consider sponsoring me or the project.
|
|
314
328
|
|
|
315
|
-
To join the community or get help
|
|
329
|
+
To join the community or get help, use the RubyForum or Discord.
|
|
316
330
|
|
|
331
|
+
[![Ruby Users Forum][✉️ruby-forum-img]][✉️ruby-forum]
|
|
317
332
|
[![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite]
|
|
318
333
|
|
|
319
|
-
To say "thanks!" ☝️ Join the
|
|
334
|
+
To say "thanks!" ☝️ Join the community or 👇️ send money.
|
|
320
335
|
|
|
321
336
|
[![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]
|
|
322
337
|
|
|
@@ -343,12 +358,8 @@ Thanks for RTFM. ☺️
|
|
|
343
358
|
[🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
|
|
344
359
|
[🖇sponsor-bottom-img]: https://img.shields.io/badge/Sponsor_Me!-pboling-blue?style=for-the-badge&logo=github
|
|
345
360
|
[🖇sponsor]: https://github.com/sponsors/pboling
|
|
346
|
-
[🖇polar-img]: https://img.shields.io/badge/polar-donate-a51611.svg?style=flat
|
|
347
|
-
[🖇polar]: https://polar.sh/pboling
|
|
348
361
|
[🖇kofi-img]: https://img.shields.io/badge/ko--fi-%E2%9C%93-a51611.svg?style=flat
|
|
349
362
|
[🖇kofi]: https://ko-fi.com/pboling
|
|
350
|
-
[🖇patreon-img]: https://img.shields.io/badge/patreon-donate-a51611.svg?style=flat
|
|
351
|
-
[🖇patreon]: https://patreon.com/galtzo
|
|
352
363
|
[🖇buyme-small-img]: https://img.shields.io/badge/buy_me_a_coffee-%E2%9C%93-a51611.svg?style=flat
|
|
353
364
|
[🖇buyme-img]: https://img.buymeacoffee.com/button-api/?text=Buy%20me%20a%20latte&emoji=&slug=pboling&button_colour=FFDD00&font_colour=000000&font_family=Cookie&outline_colour=000000&coffee_colour=ffffff
|
|
354
365
|
[🖇buyme]: https://www.buymeacoffee.com/pboling
|
|
@@ -361,6 +372,9 @@ Thanks for RTFM. ☺️
|
|
|
361
372
|
[✉️discord-invite-img-ftb]: https://img.shields.io/discord/1373797679469170758?style=for-the-badge&logo=discord
|
|
362
373
|
[✉️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
|
|
363
374
|
[✉️ruby-friends]: https://app.daily.dev/squads/rubyfriends
|
|
375
|
+
[✉️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
|
|
376
|
+
[✉️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
|
|
377
|
+
[✉️ruby-forum]: https://www.rubyforum.org/tag/sanitize-email
|
|
364
378
|
|
|
365
379
|
[✇bundle-group-pattern]: https://gist.github.com/pboling/4564780
|
|
366
380
|
[⛳️gem-namespace]: https://github.com/galtzo-floss/sanitize_email
|
|
@@ -406,7 +420,7 @@ Thanks for RTFM. ☺️
|
|
|
406
420
|
[📜src-gl]: https://gitlab.com/galtzo-floss/sanitize_email
|
|
407
421
|
[📜src-cb-img]: https://img.shields.io/badge/CodeBerg-4893CC?style=for-the-badge&logo=CodeBerg&logoColor=blue
|
|
408
422
|
[📜src-cb]: https://codeberg.org/galtzo-floss/sanitize_email
|
|
409
|
-
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=
|
|
423
|
+
[📜src-gh-img]: https://img.shields.io/badge/GitHub-238636?style=for-the-badge&logo=GitHub&logoColor=green
|
|
410
424
|
[📜src-gh]: https://github.com/galtzo-floss/sanitize_email
|
|
411
425
|
[📜docs-cr-rd-img]: https://img.shields.io/badge/RubyDoc-Current_Release-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
412
426
|
[📜docs-head-rd-img]: https://img.shields.io/badge/YARD_on_Galtzo.com-HEAD-943CD2?style=for-the-badge&logo=readthedocs&logoColor=white
|
|
@@ -438,11 +452,13 @@ Thanks for RTFM. ☺️
|
|
|
438
452
|
[🚎jruby-9.2-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/jruby-9.2.yml
|
|
439
453
|
[🚎jruby-9.3-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/jruby-9.3.yml
|
|
440
454
|
[🚎jruby-9.4-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/jruby-9.4.yml
|
|
455
|
+
[🚎jruby-10.0-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/jruby-10.0.yml
|
|
441
456
|
[🚎truby-22.3-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-22.3.yml
|
|
442
457
|
[🚎truby-23.0-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-23.0.yml
|
|
443
458
|
[🚎truby-23.1-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-23.1.yml
|
|
444
459
|
[🚎truby-24.2-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-24.2.yml
|
|
445
460
|
[🚎truby-25.0-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-25.0.yml
|
|
461
|
+
[🚎truby-33.0-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/truffleruby-33.0.yml
|
|
446
462
|
[🚎2-cov-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/coverage.yml
|
|
447
463
|
[🚎2-cov-wfi]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/coverage.yml/badge.svg
|
|
448
464
|
[🚎3-hd-wf]: https://github.com/galtzo-floss/sanitize_email/actions/workflows/heads.yml
|
|
@@ -473,7 +489,6 @@ Thanks for RTFM. ☺️
|
|
|
473
489
|
[💎ruby-3.2i]: https://img.shields.io/badge/Ruby-3.2-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
474
490
|
[💎ruby-3.3i]: https://img.shields.io/badge/Ruby-3.3-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
475
491
|
[💎ruby-3.4i]: https://img.shields.io/badge/Ruby-3.4-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
476
|
-
[💎ruby-4.0i]: https://img.shields.io/badge/Ruby-4.0-CC342D?style=for-the-badge&logo=ruby&logoColor=white
|
|
477
492
|
[💎ruby-c-i]: https://img.shields.io/badge/Ruby-current-CC342D?style=for-the-badge&logo=ruby&logoColor=green
|
|
478
493
|
[💎ruby-headi]: https://img.shields.io/badge/Ruby-HEAD-CC342D?style=for-the-badge&logo=ruby&logoColor=blue
|
|
479
494
|
[💎truby-22.3i]: https://img.shields.io/badge/Truffle_Ruby-22.3-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
@@ -481,10 +496,13 @@ Thanks for RTFM. ☺️
|
|
|
481
496
|
[💎truby-23.1i]: https://img.shields.io/badge/Truffle_Ruby-23.1-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
482
497
|
[💎truby-24.2i]: https://img.shields.io/badge/Truffle_Ruby-24.2-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
483
498
|
[💎truby-25.0i]: https://img.shields.io/badge/Truffle_Ruby-25.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
499
|
+
[💎truby-33.0i]: https://img.shields.io/badge/Truffle_Ruby-33.0-34BCB1?style=for-the-badge&logo=ruby&logoColor=pink
|
|
484
500
|
[💎truby-c-i]: https://img.shields.io/badge/Truffle_Ruby-current-34BCB1?style=for-the-badge&logo=ruby&logoColor=green
|
|
501
|
+
[💎truby-headi]: https://img.shields.io/badge/Truffle_Ruby-HEAD-34BCB1?style=for-the-badge&logo=ruby&logoColor=blue
|
|
485
502
|
[💎jruby-9.2i]: https://img.shields.io/badge/JRuby-9.2-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
486
503
|
[💎jruby-9.3i]: https://img.shields.io/badge/JRuby-9.3-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
487
504
|
[💎jruby-9.4i]: https://img.shields.io/badge/JRuby-9.4-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
505
|
+
[💎jruby-10.0i]: https://img.shields.io/badge/JRuby-10.0-FBE742?style=for-the-badge&logo=ruby&logoColor=red
|
|
488
506
|
[💎jruby-c-i]: https://img.shields.io/badge/JRuby-current-FBE742?style=for-the-badge&logo=ruby&logoColor=green
|
|
489
507
|
[💎jruby-headi]: https://img.shields.io/badge/JRuby-HEAD-FBE742?style=for-the-badge&logo=ruby&logoColor=blue
|
|
490
508
|
[🤝gh-issues]: https://github.com/galtzo-floss/sanitize_email/issues
|
|
@@ -513,12 +531,12 @@ Thanks for RTFM. ☺️
|
|
|
513
531
|
[📌gitmoji]: https://gitmoji.dev
|
|
514
532
|
[📌gitmoji-img]: https://img.shields.io/badge/gitmoji_commits-%20%F0%9F%98%9C%20%F0%9F%98%8D-34495e.svg?style=flat-square
|
|
515
533
|
[🧮kloc]: https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
|
516
|
-
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.
|
|
534
|
+
[🧮kloc-img]: https://img.shields.io/badge/KLOC-0.385-FFDD67.svg?style=for-the-badge&logo=YouTube&logoColor=blue
|
|
517
535
|
[🔐security]: https://github.com/galtzo-floss/sanitize_email/blob/main/SECURITY.md
|
|
518
536
|
[🔐security-img]: https://img.shields.io/badge/security-policy-259D6C.svg?style=flat
|
|
519
537
|
[📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
|
|
520
538
|
[📄license]: LICENSE.md
|
|
521
|
-
[📄license-ref]: MIT.md
|
|
539
|
+
[📄license-ref]: https://github.com/galtzo-floss/sanitize_email/blob/main/MIT.md
|
|
522
540
|
[📄license-img]: https://img.shields.io/badge/License-MIT-259D6C.svg
|
|
523
541
|
[📄license-compat]: https://www.apache.org/legal/resolved.html#category-a
|
|
524
542
|
[📄license-compat-img]: https://img.shields.io/badge/Apache_Compatible:_Category_A-%E2%9C%93-259D6C.svg?style=flat&logo=Apache
|
|
@@ -541,7 +559,7 @@ Thanks for RTFM. ☺️
|
|
|
541
559
|
| Package | sanitize_email |
|
|
542
560
|
| Description | Email Condom for your Ruby Server.<br>In Rails, Sinatra, et al, or simply the mail gem: Aids in development, testing, qa, and production troubleshooting of email issues without worrying that emails will get sent to actual live addresses. |
|
|
543
561
|
| Homepage | https://github.com/galtzo-floss/sanitize_email |
|
|
544
|
-
| Source | https://github.com/galtzo-floss/sanitize_email
|
|
562
|
+
| Source | https://github.com/galtzo-floss/sanitize_email |
|
|
545
563
|
| License | `MIT` |
|
|
546
|
-
| Funding | https://github.com/sponsors/pboling, https://
|
|
564
|
+
| Funding | https://github.com/sponsors/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/galtzo-floss, https://thanks.dev/gh/pboling, https://tidelift.com/funding/github/rubygems/sanitize_email, https://www.buymeacoffee.com/pboling |
|
|
547
565
|
<!-- kettle-jem:metadata:end -->
|
|
@@ -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.
|
|
@@ -55,7 +55,7 @@ module SanitizeEmail
|
|
|
55
55
|
# while nil ignores this setting and checks activation_proc
|
|
56
56
|
engage: nil,
|
|
57
57
|
|
|
58
|
-
activation_proc: proc { false }
|
|
58
|
+
activation_proc: proc { false }
|
|
59
59
|
}.freeze
|
|
60
60
|
|
|
61
61
|
INIT_KEYS = [:sanitized_to, :sanitized_cc, :sanitized_bcc, :good_list, :bad_list].freeze
|
|
@@ -100,7 +100,7 @@ module SanitizeEmail
|
|
|
100
100
|
return if force_sanitize.nil?
|
|
101
101
|
|
|
102
102
|
deprecation_warning_message(
|
|
103
|
-
<<-DEPRECATION
|
|
103
|
+
<<-DEPRECATION
|
|
104
104
|
SanitizeEmail::Config.config[:force_sanitize] is deprecated.
|
|
105
105
|
Please use SanitizeEmail.force_sanitize or SanitizeEmail.sanitary instead.
|
|
106
106
|
Refer to https://github.com/galtzo-floss/sanitize_email/wiki for examples.
|
|
@@ -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"
|
|
@@ -50,7 +50,7 @@ module SanitizeEmail
|
|
|
50
50
|
{
|
|
51
51
|
# can be an arrays, so casting it as arrays
|
|
52
52
|
"X-Sanitize-Email-To" => to_decoded,
|
|
53
|
-
"X-Sanitize-Email-Cc" => cc_decoded
|
|
53
|
+
"X-Sanitize-Email-Cc" => cc_decoded
|
|
54
54
|
# Don't write out the BCC, as those addresses should not be visible
|
|
55
55
|
# in message headers for obvious reasons
|
|
56
56
|
}.each do |header_key, header_value|
|
|
@@ -58,7 +58,7 @@ module SanitizeEmail
|
|
|
58
58
|
SanitizeEmail::MailHeaderTools.update_header(
|
|
59
59
|
header_key,
|
|
60
60
|
header_value,
|
|
61
|
-
message
|
|
61
|
+
message
|
|
62
62
|
)
|
|
63
63
|
end
|
|
64
64
|
end
|
|
@@ -99,7 +99,7 @@ module SanitizeEmail
|
|
|
99
99
|
end,
|
|
100
100
|
bcc: actual_personalization[:bcc]&.map do |bcc|
|
|
101
101
|
bcc.merge(email: override_email(:bcc, bcc[:email]).join(","))
|
|
102
|
-
end
|
|
102
|
+
end
|
|
103
103
|
)
|
|
104
104
|
end
|
|
105
105
|
end
|
|
@@ -133,20 +133,19 @@ module SanitizeEmail
|
|
|
133
133
|
# then just return the default sanitized recipients
|
|
134
134
|
return sanitized_addresses unless SanitizeEmail.use_actual_email_as_sanitized_user_name
|
|
135
135
|
|
|
136
|
-
|
|
136
|
+
inject_user_names(real_addresses, sanitized_addresses)
|
|
137
137
|
# puts "real_addresses 2: #{real_addresses}"
|
|
138
138
|
# puts "override_email 6: #{type} - #{with_user_names}"
|
|
139
139
|
# Otherwise inject the email as the "user name"
|
|
140
|
-
with_user_names
|
|
141
140
|
end
|
|
142
141
|
|
|
143
142
|
def address_list_filter(list_type, address)
|
|
144
143
|
# TODO: How does this handle email addresses with user names like "Foo Example <foo@example.org>"
|
|
145
144
|
has_address = send(list_type).include?(address)
|
|
146
145
|
case list_type
|
|
147
|
-
when :good_list
|
|
146
|
+
when :good_list
|
|
148
147
|
has_address ? address : nil
|
|
149
|
-
when :bad_list
|
|
148
|
+
when :bad_list
|
|
150
149
|
has_address ? nil : address
|
|
151
150
|
else
|
|
152
151
|
raise ArgumentError, "address_list_filter got unknown list_type: #{list_type}"
|
|
@@ -175,11 +174,11 @@ module SanitizeEmail
|
|
|
175
174
|
|
|
176
175
|
def sanitize_addresses(type)
|
|
177
176
|
case type
|
|
178
|
-
when :to
|
|
177
|
+
when :to
|
|
179
178
|
Array(sanitized_to)
|
|
180
|
-
when :cc
|
|
179
|
+
when :cc
|
|
181
180
|
Array(sanitized_cc)
|
|
182
|
-
when :bcc
|
|
181
|
+
when :bcc
|
|
183
182
|
Array(sanitized_bcc)
|
|
184
183
|
else
|
|
185
184
|
raise UnknownOverride, "unknown email override"
|
|
@@ -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.14"
|
|
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
|
@@ -24,7 +24,7 @@ module SanitizeEmail
|
|
|
24
24
|
# This gem must be loaded **after** Rails in order for the Engine/Railtie to register itself automatically.
|
|
25
25
|
# Otherwise, you'd have to manually require what you need from below.
|
|
26
26
|
# Allow non-rails implementations to use this gem
|
|
27
|
-
# :
|
|
27
|
+
# simplecov:disable
|
|
28
28
|
if defined?(::Rails::VERSION)
|
|
29
29
|
if defined?(::Rails::Engine)
|
|
30
30
|
if ::Rails::VERSION::MAJOR >= 6
|
|
@@ -53,7 +53,7 @@ module SanitizeEmail
|
|
|
53
53
|
warn "SanitizeEmail was unable to detect a compatible Mail class to register an interceptor on."
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
|
-
# :
|
|
56
|
+
# simplecov:enable
|
|
57
57
|
|
|
58
58
|
class << self
|
|
59
59
|
extend SanitizeEmail::Deprecation
|
|
@@ -80,7 +80,7 @@ module SanitizeEmail
|
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
def respond_to_missing?(method_name, include_private = false)
|
|
83
|
-
method_name
|
|
83
|
+
method_name || super
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
# NOTE: Deprecated method
|
|
@@ -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
|