diff options
| -rw-r--r-- | test/unit/email_test.rb | 18 | ||||
| -rw-r--r-- | users/app/models/email.rb | 20 | ||||
| -rw-r--r-- | users/app/models/local_email.rb | 20 | ||||
| -rw-r--r-- | users/test/unit/email_test.rb | 19 | ||||
| -rw-r--r-- | users/test/unit/local_email_test.rb | 11 | 
5 files changed, 75 insertions, 13 deletions
| diff --git a/test/unit/email_test.rb b/test/unit/email_test.rb new file mode 100644 index 0000000..e858bd5 --- /dev/null +++ b/test/unit/email_test.rb @@ -0,0 +1,18 @@ +require 'test_helper' + +class EmailTest < ActiveSupport::TestCase + +  test "valid format" do +    email = Email.new(email_string) +    assert email.valid? +  end + +  test "validates format" do +    email = Email.new("email") +    assert !email.valid? +  end + +  def email_string +    @email_string ||= Faker::Internet.email +  end +end diff --git a/users/app/models/email.rb b/users/app/models/email.rb index 90fc645..1bcff1c 100644 --- a/users/app/models/email.rb +++ b/users/app/models/email.rb @@ -1,13 +1,11 @@  class Email < String -=begin -  included do -    validates :email, -      :format => { -        :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/, -        :message => "needs to be a valid email address" -      } -  end -=end +  include ActiveModel::Validations + +  validates :email, +    :format => { +      :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/, +      :message => "needs to be a valid email address" +    }    def to_partial_path      "emails/email" @@ -17,4 +15,8 @@ class Email < String      to_s    end +  def email +    self +  end +  end diff --git a/users/app/models/local_email.rb b/users/app/models/local_email.rb index d919102..e71d494 100644 --- a/users/app/models/local_email.rb +++ b/users/app/models/local_email.rb @@ -6,6 +6,18 @@ class LocalEmail < Email    validate :differs_from_login  =end +  def self.domain +    APP_CONFIG[:domain] +  end + +  validates :email, +    :format => { +      :with => /@#{domain}\Z/i, +      :message => "needs to end in @#{domain}" +    } + + +    def initialize(s)      super      append_domain_if_needed @@ -16,7 +28,11 @@ class LocalEmail < Email    end    def handle -    gsub(/@#{APP_CONFIG[:domain]}/i, '') +    gsub(/@#{domain}/i, '') +  end + +  def domain +    LocalEmail.domain    end    protected @@ -46,7 +62,7 @@ class LocalEmail < Email    def append_domain_if_needed      unless self.index('@') -      self << "@#{APP_CONFIG[:domain]}" +      self << '@' + domain      end    end diff --git a/users/test/unit/email_test.rb b/users/test/unit/email_test.rb new file mode 100644 index 0000000..7cfbc84 --- /dev/null +++ b/users/test/unit/email_test.rb @@ -0,0 +1,19 @@ +require 'test_helper' + +class EmailTest < ActiveSupport::TestCase + +  test "valid format" do +    email = Email.new(email_string) +    assert email.valid? +  end + +  test "validates format" do +    email = Email.new("email") +    assert !email.valid? +    assert_equal ["needs to be a valid email address"], email.errors[:email] +  end + +  def email_string +    @email_string ||= Faker::Internet.email +  end +end diff --git a/users/test/unit/local_email_test.rb b/users/test/unit/local_email_test.rb index 9031a98..b25f46f 100644 --- a/users/test/unit/local_email_test.rb +++ b/users/test/unit/local_email_test.rb @@ -5,6 +5,7 @@ class LocalEmailTest < ActiveSupport::TestCase    test "appends domain" do      local = LocalEmail.new(handle)      assert_equal LocalEmail.new(email), local +    assert local.valid?    end    test "returns handle" do @@ -17,11 +18,17 @@ class LocalEmailTest < ActiveSupport::TestCase      assert_equal email, "#{local}"    end +  test "validates domain" do +    local = LocalEmail.new(Faker::Internet.email) +    assert !local.valid? +    assert_equal ["needs to end in @#{LocalEmail.domain}"], local.errors[:email] +  end +    def handle -    "asdf" +    @handle ||= Faker::Internet.user_name    end    def email -    "asdf@" + APP_CONFIG[:domain] +    handle + "@" + APP_CONFIG[:domain]    end  end | 
