validates_email_format_of 1.4.1 → 1.4.2

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/CHANGELOG.rdoc CHANGED
@@ -1,5 +1,9 @@
1
1
  = CHANGELOG
2
2
 
3
+ == Version 1.4.2
4
+
5
+ * See https://github.com/alexdunae/validates_email_format_of/compare/1.4.1...1.4.2
6
+
3
7
  == Version 1.4.1 (the George Anderson and 'history' edition)
4
8
  * don't allow domains with underscores
5
9
  * removed extra spaces in validation messages
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006-09 Alex Dunae
1
+ Copyright (c) 2006-10 Alex Dunae
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -6,13 +6,16 @@ Validate e-mail addresses against RFC 2822 and RFC 3696.
6
6
 
7
7
  Installing as a gem:
8
8
 
9
- gem sources -a http://gems.github.com
10
- gem install alexdunae-validates_email_format_of
9
+ gem install validates_email_format_of
11
10
 
12
- Installing as a Ruby on Rails plugin:
11
+ Installing as a Ruby on Rails 2 plugin:
13
12
 
14
13
  ./script/plugin install http://github.com/alexdunae/validates_email_format_of.git
15
14
 
15
+ Or in your Rails 3 Gemfile
16
+
17
+ gem 'validates_email_format_of', :git => 'git://github.com/alexdunae/validates_email_format_of.git'
18
+
16
19
 
17
20
  == Usage
18
21
 
@@ -61,12 +64,13 @@ The unit tests for this plugin use an in-memory sqlite3 database.
61
64
 
62
65
  == Resources
63
66
 
64
- * http://github.com/alexdunae/validates_email_format_of
65
- * http://code.dunae.ca/validates_email_format_of.html
67
+ * https://github.com/alexdunae/validates_email_format_of
66
68
 
67
69
  == Credits
68
70
 
69
- Written by Alex Dunae (dunae.ca), 2006-09.
71
+ Written by Alex Dunae (dunae.ca), 2006-10.
72
+
73
+ Many thanks to the plugin's recent contributors: https://github.com/alexdunae/validates_email_format_of/contributors
70
74
 
71
75
  Thanks to Francis Hwang (http://fhwang.net/) at Diversion Media for creating the 1.1 update.
72
76
 
data/init.rb CHANGED
@@ -1 +1 @@
1
- require File.dirname(__FILE__) + '/rails/init'
1
+ require File.expand_path(File.dirname(__FILE__) + '/rails/init')
@@ -1,15 +1,16 @@
1
+ # encoding: utf-8
1
2
  module ValidatesEmailFormatOf
2
3
  require 'resolv'
3
4
 
4
5
  LocalPartSpecialChars = Regexp.escape('!#$%&\'*-/=?+-^_`{|}~')
5
6
  LocalPartUnquoted = '(([[:alnum:]' + LocalPartSpecialChars + ']+[\.\+]+))*[[:alnum:]' + LocalPartSpecialChars + '+]+'
6
7
  LocalPartQuoted = '\"(([[:alnum:]' + LocalPartSpecialChars + '\.\+]*|(\\\\[\x00-\xFF]))*)\"'
7
- Regex = Regexp.new('^((' + LocalPartUnquoted + ')|(' + LocalPartQuoted + ')+)@(((\w+\-+[^_])|(\w+\.[^_]))*([a-z0-9-]{1,63})\.[a-z]{2,6}$)', Regexp::EXTENDED | Regexp::IGNORECASE)
8
+ Regex = Regexp.new('\A((' + LocalPartUnquoted + ')|(' + LocalPartQuoted + ')+)@(((\w+\-+[^_])|(\w+\.[a-z0-9-]*))*([a-z0-9-]{1,63})\.[a-z]{2,6}(?:\.[a-z]{2,6})?\Z)', Regexp::EXTENDED | Regexp::IGNORECASE, 'n')
8
9
 
9
10
  def self.validate_email_domain(email)
10
11
  domain = email.match(/\@(.+)/)[1]
11
12
  Resolv::DNS.open do |dns|
12
- @mx = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
13
+ @mx = dns.getresources(domain, Resolv::DNS::Resource::IN::MX) + dns.getresources(domain, Resolv::DNS::Resource::IN::A)
13
14
  end
14
15
  @mx.size > 0 ? true : false
15
16
  end
@@ -23,12 +24,14 @@ module ValidatesEmailFormatOf
23
24
  # * <tt>mx_message</tt> - A custom error message when an MX record validation fails (default is: "is not routable.")
24
25
  # * <tt>with</tt> The regex to use for validating the format of the email address (default is ValidatesEmailFormatOf::Regex)</tt>
25
26
  def self.validate_email_format(email, options={})
26
- default_options = { :message => 'does not appear to be a valid e-mail address',
27
+ default_options = { :message => I18n.t(:invalid_email_address, :scope => [:activerecord, :errors, :messages], :default => 'does not appear to be a valid e-mail address'),
27
28
  :check_mx => false,
28
- :mx_message => 'is not routable.',
29
+ :mx_message => I18n.t(:email_address_not_routable, :scope => [:activerecord, :errors, :messages], :default => 'is not routable'),
29
30
  :with => ValidatesEmailFormatOf::Regex }
30
31
  options.merge!(default_options) {|key, old, new| old} # merge the default options into the specified options, retaining all specified options
31
-
32
+
33
+ email.strip!
34
+
32
35
  # local part max is 64 chars, domain part max is 255 chars
33
36
  # TODO: should this decode escaped entities before counting?
34
37
  begin
@@ -85,4 +88,4 @@ module ActiveRecord
85
88
  end
86
89
  end
87
90
  end
88
- end
91
+ end
data/test/database.yml ADDED
@@ -0,0 +1,3 @@
1
+ plugin_test:
2
+ adapter: sqlite3
3
+ database: ":memory:"
data/test/test_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  $:.unshift(File.dirname(__FILE__) + '/../lib')
2
- RAILS_ROOT = File.dirname(__FILE__)
3
2
 
4
3
  require 'rubygems'
5
4
  require 'test/unit'
@@ -7,7 +6,6 @@ require 'active_record'
7
6
  require 'active_record/fixtures'
8
7
  require "#{File.dirname(__FILE__)}/../init"
9
8
 
10
-
11
9
  config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
12
10
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
13
11
  ActiveRecord::Base.establish_connection(config[ENV['DB'] || 'plugin_test'])
@@ -22,7 +20,7 @@ else
22
20
  end
23
21
 
24
22
  TEST_CASE.fixture_path = File.dirname(__FILE__) + "/fixtures/"
25
- $LOAD_PATH.unshift(TEST_CASE.fixture_path)
23
+ $:.unshift(TEST_CASE.fixture_path)
26
24
 
27
25
  class TEST_CASE #:nodoc:
28
26
  def create_fixtures(*table_names)
@@ -1,7 +1,7 @@
1
- require File.dirname(__FILE__) + '/test_helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper')
2
2
 
3
3
  class ValidatesEmailFormatOfTest < TEST_CASE
4
- fixtures :people, :peoplemx
4
+ fixtures :people
5
5
 
6
6
  def setup
7
7
  @valid_email = 'valid@example.com'
@@ -31,6 +31,10 @@ class ValidatesEmailFormatOfTest < TEST_CASE
31
31
  'valid@example.mobi',
32
32
  'valid@example.info',
33
33
  'valid-@example.com',
34
+ # allow single character domain parts
35
+ 'valid@mail.x.example.com',
36
+ 'valid@x.com',
37
+ 'valid@example.w-dash.sch.uk',
34
38
  # from RFC 3696, page 6
35
39
  'customer/department=shipping@example.com',
36
40
  '$A12345@example.com',
@@ -62,6 +66,11 @@ class ValidatesEmailFormatOfTest < TEST_CASE
62
66
  'invalid@example.c',
63
67
  'invali d@example.com',
64
68
  'invalidexample.com',
69
+ # should not allow special chars after a period in the domain
70
+ 'local@sub.)domain.com',
71
+ 'local@sub.#domain.com',
72
+ # one at a time
73
+ "foo@example.com\nexample@gmail.com",
65
74
  'invalid@example.'].each do |email|
66
75
  p = create_person(:email => email)
67
76
  save_fails(p, email)
@@ -112,7 +121,11 @@ class ValidatesEmailFormatOfTest < TEST_CASE
112
121
  def test_should_allow_custom_error_message
113
122
  p = create_person(:email => @invalid_email)
114
123
  save_fails(p)
115
- assert_equal 'fails with custom message', p.errors.on(:email)
124
+ if ActiveRecord::VERSION::MAJOR >= 3
125
+ assert_equal 'fails with custom message', p.errors[:email].first
126
+ else
127
+ assert_equal 'fails with custom message', p.errors.on(:email)
128
+ end
116
129
  end
117
130
 
118
131
  def test_should_allow_nil
@@ -120,14 +133,21 @@ class ValidatesEmailFormatOfTest < TEST_CASE
120
133
  save_passes(p)
121
134
  end
122
135
 
136
+ # TODO: find a future-proof way to check DNS records
123
137
  def test_check_mx
124
138
  pmx = MxRecord.new(:email => 'test@dunae.ca')
125
139
  save_passes(pmx)
126
140
 
127
- pmx = MxRecord.new(:email => 'test@example.com')
141
+ pmx = MxRecord.new(:email => 'test@somethingthathasntbeenregistered.com')
128
142
  save_fails(pmx)
129
143
  end
130
144
 
145
+ # TODO: find a future-proof way to check DNS records
146
+ def test_check_mx_fallback_to_a
147
+ pmx = MxRecord.new(:email => 'test@code.dunae.ca')
148
+ save_passes(pmx)
149
+ end
150
+
131
151
  protected
132
152
  def create_person(params)
133
153
  Person.new(params)
@@ -136,12 +156,20 @@ class ValidatesEmailFormatOfTest < TEST_CASE
136
156
  def save_passes(p, email = '')
137
157
  assert p.valid?, " validating #{email}"
138
158
  assert p.save
139
- assert_nil p.errors.on(:email)
159
+ if ActiveRecord::VERSION::MAJOR >= 3
160
+ assert p.errors[:email].empty?
161
+ else
162
+ assert_nil p.errors.on(:email)
163
+ end
140
164
  end
141
165
 
142
166
  def save_fails(p, email = '')
143
167
  assert !p.valid?, " validating #{email}"
144
168
  assert !p.save
145
- assert p.errors.on(:email)
169
+ if ActiveRecord::VERSION::MAJOR >= 3
170
+ assert_equal 1, p.errors[:email].size
171
+ else
172
+ assert p.errors.on(:email)
173
+ end
146
174
  end
147
175
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_email_format_of
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 4
8
+ - 2
9
+ version: 1.4.2
5
10
  platform: ruby
6
11
  authors:
7
12
  - Alex Dunae
@@ -9,7 +14,7 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-11-26 00:00:00 +01:00
17
+ date: 2010-11-16 00:00:00 -08:00
13
18
  default_executable:
14
19
  dependencies: []
15
20
 
@@ -24,15 +29,20 @@ extra_rdoc_files:
24
29
  - CHANGELOG.rdoc
25
30
  - MIT-LICENSE
26
31
  files:
32
+ - MIT-LICENSE
27
33
  - init.rb
28
34
  - rakefile.rb
29
- - lib/validates_email_format_of.rb
30
- - rails/init.rb
31
- - README.rdoc
32
35
  - CHANGELOG.rdoc
33
- - MIT-LICENSE
36
+ - README.rdoc
37
+ - lib/validates_email_format_of.rb
38
+ - test/fixtures/person.rb
39
+ - test/schema.rb
40
+ - test/test_helper.rb
41
+ - test/validates_email_format_of_test.rb
42
+ - test/database.yml
43
+ - test/fixtures/people.yml
34
44
  has_rdoc: true
35
- homepage: http://code.dunae.ca/validates_email_format_of.html
45
+ homepage: https://github.com/alexdunae/validates_email_format_of
36
46
  licenses: []
37
47
 
38
48
  post_install_message:
@@ -42,27 +52,32 @@ rdoc_options:
42
52
  require_paths:
43
53
  - lib
44
54
  required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
45
56
  requirements:
46
57
  - - ">="
47
58
  - !ruby/object:Gem::Version
59
+ segments:
60
+ - 0
48
61
  version: "0"
49
- version:
50
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
51
64
  requirements:
52
65
  - - ">="
53
66
  - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
54
69
  version: "0"
55
- version:
56
70
  requirements: []
57
71
 
58
72
  rubyforge_project:
59
- rubygems_version: 1.3.5
73
+ rubygems_version: 1.3.7
60
74
  signing_key:
61
75
  specification_version: 3
62
76
  summary: Validate e-mail addresses against RFC 2822 and RFC 3696.
63
77
  test_files:
64
- - test/validates_email_format_of_test.rb
65
- - test/test_helper.rb
66
- - test/schema.rb
67
78
  - test/fixtures/person.rb
79
+ - test/schema.rb
80
+ - test/test_helper.rb
81
+ - test/validates_email_format_of_test.rb
82
+ - test/database.yml
68
83
  - test/fixtures/people.yml
data/rails/init.rb DELETED
@@ -1 +0,0 @@
1
- require 'validates_email_format_of'