donncha-validates_as_email 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG ADDED
@@ -0,0 +1,33 @@
1
+ 0.6.0 - Jul 24th 2009
2
+ * Added :restrict_domain option to exclude single-part domains, e.g: user@example
3
+ * Added workaround for 'ActiveRecord::Base::Validations (NameError)' bug when running tests
4
+
5
+ 0.6.0 - Jul 24th 2009
6
+ * Compatibility with Ruby 1.9
7
+ * Support for I18n
8
+
9
+ 0.5.1 - Aug 15th 2008
10
+ * Repackaged original plugin by Ximon Eighteen for GitHub
11
+ * Gem'ified plugin
12
+
13
+ 0.1.4 - May 26th 2006
14
+ * Thijs van der Vossen fixed a plugin load issue in the test suite and
15
+ provided another test to illustrate that test@example is considered
16
+ valid by RFC822, something most people wouldn't realise.
17
+
18
+ 0.1.3 - May 9th 2006
19
+ * Thijs van der Vossen contributed some test cases.
20
+
21
+ 0.1.2 - April 24th 2006
22
+ * Dan Kubb and Tim Fletcher have updated the RFC822 regular expression
23
+ on Tims website so I've put the latest version into this plugin. The
24
+ changes prevent matching of email addresses containing line breaks.
25
+
26
+ 0.1.1 - April 23rd 2006
27
+ * Huge code cleanup & simplification by Dan Kubb.
28
+ * Credit Tim Fletcher with the Ruby version of the RFC822 regular
29
+ expression.
30
+
31
+ 0.1.0 - April 4th 2006
32
+ * First release, advertised on the Rails plugins page:
33
+ http://wiki.rubyonrails.org/rails/pages/Plugins
data/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ Licensing terms follow:
2
+
3
+ This software is placed under the Creative Commons Attribution-Share Alike 3.0 Unported License
4
+
5
+ http://creativecommons.org/licenses/by-sa/3.0/
data/README ADDED
@@ -0,0 +1,54 @@
1
+ ValidatesAsEmail
2
+ ================
3
+
4
+ This gem/plugin is a re-packaged and gem'ified version of the original plugin with credit as follows:
5
+
6
+ Donncha Redmond <dredmond@e-xact.com>
7
+ Michal Zima <xhire@mujmalysvet.cz>
8
+ Ximon Eighteen <ximon.eighteen@int.greenpeace.org>
9
+ Dan Kubb <dan.kubb@autopilotmarketing.com>
10
+ Thijs van der Vossen <thijs@fngtps.com>
11
+
12
+ This Ruby on Rails plugin implements an ActiveRecord validation helper called
13
+ validates_as_email. The helper acts as if validates_format_of was used with a
14
+ regular expression that defines an RFC822 email address conformance test.
15
+
16
+ The plugin implements the regular expression here:
17
+
18
+ http://tfletcher.com/lib/rfc822.rb
19
+
20
+ Which is an implementation in Ruby of a regular expression published by Cal
21
+ Henderson for PHP here:
22
+
23
+ http://www.iamcal.com/publish/articles/php/parsing_email
24
+
25
+ Installation:
26
+ =============
27
+ gem sources -a http://gems.github.com
28
+
29
+ Install the gem(s):
30
+ sudo gem install donncha-validates_as_email
31
+
32
+ Add to environment.rb initializer block:
33
+ config.gem 'donncha-validates_as_email', :lib => 'validates_as_email', :source => 'http://gems.github.com'
34
+
35
+ Usage:
36
+ ======
37
+ In your model file do something like:
38
+
39
+ class MyClass < ActiveRecord::Base
40
+ validates_as_email :email, :message => 'Invalid Email Address', :allow_nil => true
41
+ end
42
+
43
+ class MyOtherClass < ActiveRecord::Base
44
+ # will not accept addresses with a single part domain, e.g user@example
45
+ validates_as_email :email, :message => 'Invalid Email Address', :allow_nil => true, :restrict_domain => true
46
+ end
47
+
48
+ Tests:
49
+ ======
50
+ Some tests have been added.
51
+
52
+ License:
53
+ ========
54
+ See the LICENSE file.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the validates_as_email plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.pattern = 'test/**/*_test.rb'
12
+ t.verbose = true
13
+ end
14
+
15
+ desc 'Generate documentation for the validates_as_email plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_dir = 'rdoc'
18
+ rdoc.title = 'ValidatesAsEmail'
19
+ rdoc.options << '--line-numbers' << '--inline-source'
20
+ rdoc.rdoc_files.include('README')
21
+ rdoc.rdoc_files.include('lib/**/*.rb')
22
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'validates_as_email'
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+
3
+ #
4
+ # RFC822 Email Address Regex
5
+ # --------------------------
6
+ #
7
+ # Originally written by Cal Henderson
8
+ # c.f. http://iamcal.com/publish/articles/php/parsing_email/
9
+ #
10
+ # Translated to Ruby by Tim Fletcher, with changes suggested by Dan Kubb.
11
+ #
12
+ # Licensed under a Creative Commons Attribution-ShareAlike 2.5 License
13
+ # http://creativecommons.org/licenses/by-sa/2.5/
14
+ #
15
+ module RFC822
16
+ module Patterns
17
+ def self.compile(string)
18
+ Regexp.new string, nil, 'n'
19
+ end
20
+
21
+ QTEXT = compile "[^\\x0d\\x22\\x5c\\x80-\\xff]"
22
+ DTEXT = compile "[^\\x0d\\x5b-\\x5d\\x80-\\xff]"
23
+
24
+ ATOM_CORE = compile "[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+"
25
+ ATOM_EDGE = compile "[^\\x00-\\x20\\x22\\x28\\x29\\x2c-\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]"
26
+ ATOM = compile "(?:#{ATOM_EDGE}{1,2}|#{ATOM_EDGE}#{ATOM_CORE}#{ATOM_EDGE})"
27
+
28
+ QPAIR = compile "\\x5c[\\x00-\\x7f]"
29
+ QSTRING = compile "\\x22(?:#{QTEXT}|#{QPAIR})*\\x22"
30
+
31
+ WORD = compile "(?:#{ATOM}|#{QSTRING})"
32
+
33
+ DOMAIN_PT = compile "(?:[a-zA-Z0-9][\-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z0-9]+)"
34
+
35
+ DOMAIN = compile "#{DOMAIN_PT}(?:\\x2e#{DOMAIN_PT})*"
36
+ LOCAL_PT = compile "#{WORD}(?:\\x2e#{WORD})*"
37
+
38
+ ADDRESS = compile "#{LOCAL_PT}\\x40#{DOMAIN}"
39
+ NON_LOCAL_ADDRESS = compile "#{LOCAL_PT}\\x40#{DOMAIN_PT}(\\x2e#{DOMAIN_PT})+"
40
+ end
41
+ EmailAddress = /\A#{Patterns::ADDRESS}\z/
42
+ NonLocalEmailAddress = /\A#{Patterns::NON_LOCAL_ADDRESS}\z/
43
+ end
44
+
45
+ # Validation helper for ActiveRecord derived objects that cleanly and simply
46
+ # allows the model to check if the given string is a syntactically valid email
47
+ # address (by using the RFC822 module above).
48
+ #
49
+ # Original code by Ximon Eighteen <ximon.eightee@int.greenpeace.org> which was
50
+ # heavily based on code I can no longer find on the net, my apologies to the
51
+ # author!
52
+ #
53
+ # Huge credit goes to Dan Kubb <dan.kubb@autopilotmarketing.com> for
54
+ # submitting a patch to massively simplify this code and thereby instruct me
55
+ # in the ways of Rails too! I reflowed the patch a little to keep the line
56
+ # length to a maximum of 78 characters, an old habit.
57
+
58
+ module ActiveRecord
59
+ module Validations
60
+ module ClassMethods
61
+ def validates_as_email(*attr_names)
62
+ options = attr_names.pop if attr_names.last.is_a?(Hash)
63
+ restrict_domain = options.delete(:restrict_domain) if options
64
+ configuration = {
65
+ :message => (I18n.translate(:'activerecord.errors.messages.invalid_email', :raise => true) rescue 'is an invalid email'),
66
+ :with => restrict_domain ? RFC822::NonLocalEmailAddress : RFC822::EmailAddress,
67
+ :allow_nil => false }
68
+ configuration.update(options) if options
69
+
70
+ validates_format_of attr_names, configuration
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,72 @@
1
+ require 'test/unit'
2
+
3
+ begin
4
+ require File.dirname(__FILE__) + '/../../../../config/boot'
5
+ require 'active_record'
6
+ require 'validates_as_email'
7
+ rescue LoadError
8
+ require 'rubygems'
9
+ require 'active_record'
10
+ # BUG: https://rails.lighthouseapp.com/projects/8994/tickets/2577-when-using-activerecordassociations-outside-of-rails-a-nameerror-is-thrown
11
+ ActiveRecord::ActiveRecordError
12
+ require File.dirname(__FILE__) + '/../lib/validates_as_email'
13
+ end
14
+
15
+ class TestRecord < ActiveRecord::Base
16
+ def self.columns; []; end
17
+ attr_accessor :email
18
+ validates_as_email :email
19
+ end
20
+ class LocalTestRecord < ActiveRecord::Base
21
+ def self.columns; []; end
22
+ attr_accessor :email
23
+ validates_as_email :email, :restrict_domain => true
24
+ end
25
+
26
+ class ValidatesAsEmailTest < Test::Unit::TestCase
27
+ def test_illegal_rfc822_email_address
28
+ addresses = [
29
+ 'Max@Job 3:14',
30
+ 'Job@Book of Job',
31
+ 'J. P. \'s-Gravezande, a.k.a. The Hacker!@example.com',
32
+ ]
33
+ addresses.each do |address|
34
+ assert !TestRecord.new(:email => address).valid?, "#{address} should be illegal."
35
+ end
36
+ end
37
+
38
+ def test_legal_rfc822_email_address
39
+ addresses = [
40
+ 'test@example',
41
+ 'test@example.com',
42
+ 'test@example.co.uk',
43
+ '"J. P. \'s-Gravezande, a.k.a. The Hacker!"@example.com',
44
+ 'me@[187.223.45.119]',
45
+ 'someone@123.com',
46
+ ]
47
+ addresses.each do |address|
48
+ assert TestRecord.new(:email => address).valid?, "#{address} should be legal."
49
+ end
50
+ end
51
+
52
+ # insist on a domain of at least two parts, and no IP addresses
53
+ def test_restricted_domains
54
+ addresses = [
55
+ 'test@example.com',
56
+ 'test@example.co.uk',
57
+ '"J. P. \'s-Gravezande, a.k.a. The Hacker!"@example.com',
58
+ 'someone@123.com',
59
+ ]
60
+ addresses.each do |address|
61
+ assert LocalTestRecord.new(:email => address).valid?, "#{address} should be legal."
62
+ end
63
+
64
+ addresses = [
65
+ 'test@example',
66
+ 'me@[187.223.45.119]',
67
+ ]
68
+ addresses.each do |address|
69
+ assert !LocalTestRecord.new(:email => address).valid?, "non-traditional domain #{address} should not be legal."
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: donncha-validates_as_email
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 6
8
+ - 1
9
+ version: 0.6.1
10
+ platform: ruby
11
+ authors:
12
+ - Michal Zima
13
+ - Ximon Eighteen
14
+ - Dan Kubb
15
+ - Thijs van der Vossen
16
+ - Donncha Redmond
17
+ autorequire:
18
+ bindir: bin
19
+ cert_chain: []
20
+
21
+ date: 2010-03-08 00:00:00 +11:00
22
+ default_executable:
23
+ dependencies: []
24
+
25
+ description: Rails gem/plugin that implements an ActiveRecord validation helper called validates_as_email which validates email address (RFC822)
26
+ email: dredmond@e-xact.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
33
+ files:
34
+ - CHANGELOG
35
+ - LICENSE
36
+ - README
37
+ - Rakefile
38
+ - init.rb
39
+ - lib/validates_as_email.rb
40
+ - test/validates_as_email_test.rb
41
+ has_rdoc: true
42
+ homepage: http://github.com/donncha/validates_as_email
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ segments:
62
+ - 0
63
+ version: "0"
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 1.3.6
68
+ signing_key:
69
+ specification_version: 3
70
+ summary: Rails gem/plugin to validate format of email addresses (RFC822)
71
+ test_files:
72
+ - test/validates_as_email_test.rb