email_sanitizer 0.0.1
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.
- data/LICENSE +1 -0
- data/README.md +1 -0
- data/lib/email_sanitizer.rb +36 -0
- data/lib/email_sanitizer/interceptor.rb +7 -0
- data/spec/email_sanitizer_spec.rb +69 -0
- data/spec/interceptor_spec.rb +13 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/test_mailer.rb +5 -0
- metadata +87 -0
data/LICENSE
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
MIT
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
TODO
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module EmailSanitizer
|
2
|
+
class << self
|
3
|
+
attr_accessor :base_email
|
4
|
+
def base_email
|
5
|
+
@base_email ||= "default@example.com"
|
6
|
+
end
|
7
|
+
|
8
|
+
def base_local
|
9
|
+
base_email.split('@').first
|
10
|
+
end
|
11
|
+
|
12
|
+
def base_domain
|
13
|
+
base_email.split('@').last
|
14
|
+
end
|
15
|
+
|
16
|
+
def sanitize(email_addresses)
|
17
|
+
email_addresses = normalize_email_addresses(email_addresses)
|
18
|
+
email_addresses.inject([]) { |arry, address| arry << do_sanitize(address) }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def normalize_email_addresses(email_addresses)
|
24
|
+
return email_addresses.split(/[,;\s]+/) if email_addresses.class == String
|
25
|
+
email_addresses
|
26
|
+
end
|
27
|
+
|
28
|
+
def do_sanitize(email_address)
|
29
|
+
local, domain = email_address.split('@')
|
30
|
+
"#{base_local}+#{local}_at_#{domain}@#{base_domain}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
require 'email_sanitizer/interceptor'
|
36
|
+
Mail.register_interceptor(EmailSanitizer::Interceptor)
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "When required" do
|
4
|
+
it "should register itself through Mail.register_interceptor" do
|
5
|
+
require 'email_sanitizer'
|
6
|
+
Mail.class_variable_get(:@@delivery_interceptors).should include(EmailSanitizer::Interceptor)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'email_sanitizer'
|
11
|
+
|
12
|
+
describe EmailSanitizer do
|
13
|
+
|
14
|
+
describe "#base_email" do
|
15
|
+
it "should default to default@example.com" do
|
16
|
+
EmailSanitizer.base_email.should == "default@example.com"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should be changeable" do
|
20
|
+
EmailSanitizer.base_email = "test@example.com"
|
21
|
+
EmailSanitizer.base_email.should == "test@example.com"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#sanitize' do
|
26
|
+
it 'should modify a email with correct format' do
|
27
|
+
EmailSanitizer.base_email = 'default@example.com'
|
28
|
+
email = "foo@bar.com"
|
29
|
+
EmailSanitizer.sanitize(email).should == ['default+foo_at_bar.com@example.com']
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should be able to take a string of email addresses' do
|
33
|
+
EmailSanitizer.base_email = 'default@example.com'
|
34
|
+
[ "foo@bar.com, test@bar.com, abc@example.com", "foo@bar.com test@bar.com abc@example.com", "foo@bar.com; test@bar.com; abc@example.com"].each do |s|
|
35
|
+
EmailSanitizer.sanitize(s).should == ["default+foo_at_bar.com@example.com", "default+test_at_bar.com@example.com", "default+abc_at_example.com@example.com"]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should be able to take an array of email addresses" do
|
40
|
+
EmailSanitizer.base_email = 'default@example.com'
|
41
|
+
EmailSanitizer.sanitize(["foo@bar.com", "abc@example.com"]).should == ["default+foo_at_bar.com@example.com", 'default+abc_at_example.com@example.com']
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "usage" do
|
46
|
+
before(:each) do
|
47
|
+
ActionMailer::Base.delivery_method = :test
|
48
|
+
EmailSanitizer.base_email = "default@example.com"
|
49
|
+
@email = TestMailer.notification
|
50
|
+
@email.to.should == ["foo@bar.com"]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should work as advertised when calling .deliver!" do
|
54
|
+
@email.deliver
|
55
|
+
@email.to.should == ["default+foo_at_bar.com@example.com"]
|
56
|
+
end
|
57
|
+
|
58
|
+
# This will be fixed in Mail gem soon
|
59
|
+
# it "should work as advertised when calling through .delvier!" do
|
60
|
+
# @email.deliver!
|
61
|
+
# @email.to.should == ["default+foo_at_bar.com@example.com"]
|
62
|
+
# end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
end
|
69
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'email_sanitizer'
|
3
|
+
|
4
|
+
describe EmailSanitizer::Interceptor do
|
5
|
+
describe "#delivering_email" do
|
6
|
+
it "should sanitize 'to' field on email" do
|
7
|
+
email_address = "foo@bar.com"
|
8
|
+
email = Mail.new(:to => email_address)
|
9
|
+
EmailSanitizer::Interceptor.delivering_email(email)
|
10
|
+
email.to.should == EmailSanitizer.sanitize(email_address)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'awesome_print'
|
3
|
+
require 'action_mailer'
|
4
|
+
|
5
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
6
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
7
|
+
# Require this file using `require "spec_helper.rb"` to ensure that it is only
|
8
|
+
# loaded once.
|
9
|
+
#
|
10
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
13
|
+
config.run_all_when_everything_filtered = true
|
14
|
+
config.filter_run :focus
|
15
|
+
end
|
16
|
+
|
17
|
+
Dir[ File.dirname(__FILE__) + '/support/**/*.rb'].each { |file| require file }
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: email_sanitizer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Eric Zou
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-01-30 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec-rails
|
16
|
+
requirement: &70243766892720 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70243766892720
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: autotest
|
27
|
+
requirement: &70243766892200 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 4.4.6
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70243766892200
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: actionmailer
|
38
|
+
requirement: &70243766891740 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 3.0.0
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70243766891740
|
47
|
+
description: Email Sanitizer lets you avoid accidentally sending out emails to your
|
48
|
+
customers from staging, demo or other non-production environments
|
49
|
+
email: hello@ericzou.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- LICENSE
|
55
|
+
- README.md
|
56
|
+
- lib/email_sanitizer/interceptor.rb
|
57
|
+
- lib/email_sanitizer.rb
|
58
|
+
- spec/email_sanitizer_spec.rb
|
59
|
+
- spec/interceptor_spec.rb
|
60
|
+
- spec/spec_helper.rb
|
61
|
+
- spec/support/test_mailer.rb
|
62
|
+
homepage: https://github.com/ericzou/email_sanitizer
|
63
|
+
licenses: []
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 1.8.10
|
83
|
+
signing_key:
|
84
|
+
specification_version: 3
|
85
|
+
summary: Email Sanitizer lets you avoid accidentally sending out emails to your customers
|
86
|
+
from staging, demo or other non-production environments
|
87
|
+
test_files: []
|