validates_email_format_of 1.4.3 → 1.4.5

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.4
4
+
5
+ * https://github.com/alexdunae/validates_email_format_of/compare/1.4.3...1.4.4
6
+
3
7
  == Version 1.4.3
4
8
 
5
9
  * https://github.com/alexdunae/validates_email_format_of/compare/1.4.2...1.4.3
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2006-10 Alex Dunae
1
+ Copyright (c) 2006-11 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
@@ -55,6 +55,11 @@ e-mail address or an array of error messages for invalid addresses.
55
55
  proc or string should return or evaluate to a true or false value.
56
56
  :unless
57
57
  See :if option.
58
+ :local_length
59
+ Maximum number of characters allowed in the local part (default is 64)
60
+ :domain_length
61
+ Maximum number of characters allowed in the domain part (default is 255)
62
+
58
63
 
59
64
  == Testing
60
65
 
@@ -68,7 +73,7 @@ The unit tests for this plugin use an in-memory sqlite3 database.
68
73
 
69
74
  == Credits
70
75
 
71
- Written by Alex Dunae (dunae.ca), 2006-10.
76
+ Written by Alex Dunae (dunae.ca), 2006-11.
72
77
 
73
78
  Many thanks to the plugin's recent contributors: https://github.com/alexdunae/validates_email_format_of/contributors
74
79
 
@@ -3,8 +3,8 @@ module ValidatesEmailFormatOf
3
3
  require 'resolv'
4
4
 
5
5
  LocalPartSpecialChars = Regexp.escape('!#$%&\'*-/=?+-^_`{|}~')
6
- LocalPartUnquoted = '([[:alnum:]' + LocalPartSpecialChars + ']+[\.\+]+)*[[:alnum:]' + LocalPartSpecialChars + '+]+'
7
- LocalPartQuoted = '\"([[:alnum:]' + LocalPartSpecialChars + '\.\+]|\\\\[\x00-\xFF])*\"'
6
+ LocalPartUnquoted = '([[:alnum:]' + LocalPartSpecialChars + ']+[\.]+)*[[:alnum:]' + LocalPartSpecialChars + '+]+'
7
+ LocalPartQuoted = '\"([[:alnum:]' + LocalPartSpecialChars + '\.]|\\\\[\x00-\xFF])*\"'
8
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')
9
9
 
10
10
  def self.validate_email_domain(email)
@@ -23,11 +23,16 @@ module ValidatesEmailFormatOf
23
23
  # * <tt>check_mx</tt> - Check for MX records (default is false)
24
24
  # * <tt>mx_message</tt> - A custom error message when an MX record validation fails (default is: "is not routable.")
25
25
  # * <tt>with</tt> The regex to use for validating the format of the email address (default is ValidatesEmailFormatOf::Regex)</tt>
26
+ # * <tt>local_length</tt> Maximum number of characters allowed in the local part (default is 64)
27
+ # * <tt>domain_length</tt> Maximum number of characters allowed in the domain part (default is 255)
26
28
  def self.validate_email_format(email, options={})
27
29
  default_options = { :message => I18n.t(:invalid_email_address, :scope => [:activerecord, :errors, :messages], :default => 'does not appear to be a valid e-mail address'),
28
30
  :check_mx => false,
29
31
  :mx_message => I18n.t(:email_address_not_routable, :scope => [:activerecord, :errors, :messages], :default => 'is not routable'),
30
- :with => ValidatesEmailFormatOf::Regex }
32
+ :with => ValidatesEmailFormatOf::Regex ,
33
+ :domain_length => 255,
34
+ :local_length => 64
35
+ }
31
36
  options.merge!(default_options) {|key, old, new| old} # merge the default options into the specified options, retaining all specified options
32
37
 
33
38
  email.strip!
@@ -40,7 +45,7 @@ module ValidatesEmailFormatOf
40
45
  return [ options[:message] ]
41
46
  end
42
47
 
43
- unless email =~ options[:with] and not email =~ /\.\./ and domain.length <= 255 and local.length <= 64
48
+ unless email =~ options[:with] and not email =~ /\.\./ and domain.length <= options[:domain_length] and local.length <= options[:local_length]
44
49
  return [ options[:message] ]
45
50
  end
46
51
 
@@ -66,7 +66,9 @@ class ValidatesEmailFormatOfTest < TEST_CASE
66
66
  'invalid@example.c',
67
67
  'invali d@example.com',
68
68
  # unclosed quote
69
- "\"a-17180061943-10618354-1993365053",
69
+ "\"a-17180061943-10618354-1993365053",
70
+ # too many special chars used to cause the regexp to hang
71
+ "-+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++@foo",
70
72
  'invalidexample.com',
71
73
  # should not allow special chars after a period in the domain
72
74
  'local@sub.)domain.com',
@@ -110,6 +112,11 @@ class ValidatesEmailFormatOfTest < TEST_CASE
110
112
  save_fails(p, email)
111
113
  end
112
114
  end
115
+
116
+ def test_overriding_length_checks
117
+ assert_not_nil ValidatesEmailFormatOf::validate_email_format('valid@example.com', :local_length => 1)
118
+ assert_not_nil ValidatesEmailFormatOf::validate_email_format('valid@example.com', :domain_length => 1)
119
+ end
113
120
 
114
121
  def test_should_respect_validate_on_option
115
122
  p = create_person(:email => @valid_email)
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_email_format_of
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
5
4
  prerelease: false
6
5
  segments:
7
6
  - 1
8
7
  - 4
9
- - 3
10
- version: 1.4.3
8
+ - 5
9
+ version: 1.4.5
11
10
  platform: ruby
12
11
  authors:
13
12
  - Alex Dunae
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-12-12 00:00:00 -08:00
17
+ date: 2011-01-20 00:00:00 -08:00
19
18
  default_executable:
20
19
  dependencies: []
21
20
 
@@ -57,7 +56,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
57
56
  requirements:
58
57
  - - ">="
59
58
  - !ruby/object:Gem::Version
60
- hash: 3
61
59
  segments:
62
60
  - 0
63
61
  version: "0"
@@ -66,7 +64,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
66
64
  requirements:
67
65
  - - ">="
68
66
  - !ruby/object:Gem::Version
69
- hash: 3
70
67
  segments:
71
68
  - 0
72
69
  version: "0"