Skip to content

Commit

Permalink
Move EmailValidator under Spree namespace
Browse files Browse the repository at this point in the history
Change all usages of

    validates :email, email: true

to

    validates :email, 'spree/email' => true
  • Loading branch information
tvdeyen committed Mar 15, 2018
1 parent 64bb34a commit 6d8fd3c
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
2 changes: 1 addition & 1 deletion core/app/models/spree/order.rb
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ def states
before_create :link_by_email

validates :email, presence: true, if: :require_email
validates :email, email: true, allow_blank: true
validates :email, 'spree/email' => true, allow_blank: true
validates :guest_token, presence: { allow_nil: true }
validates :number, presence: true, uniqueness: { allow_blank: true }
validates :store_id, presence: true
Expand Down
29 changes: 25 additions & 4 deletions core/lib/spree/core/validators/email.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,30 @@
# frozen_string_literal: true

class EmailValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
unless value =~ /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/
record.errors.add(attribute, :invalid, { value: value }.merge!(options))
module Spree
# == An ActiveModel Email Validator
#
# === Usage
#
# require 'spree/core/validators/email'
#
# class Person < ApplicationRecord
# validates :email_address, 'spree/email' => true
# end
#
class EmailValidator < ActiveModel::EachValidator
EMAIL_REGEXP = /\A([^@\.]|[^@\.]([^@\s]*)[^@\.])@([^@\s]+\.)+[^@\s]+\z/

def validate_each(record, attribute, value)
unless value =~ EMAIL_REGEXP
record.errors.add(attribute, :invalid, { value: value }.merge!(options))
end
end
end
end

# @private
EmailValidator = ActiveSupport::Deprecation::DeprecatedConstantProxy.new(
'EmailValidator',
'Spree::EmailValidator',
message: "EmailValidator is deprecated! Use Spree::EmailValidator instead.\nChange `validates :email, email: true` to `validates :email, 'spree/email' => true`\n"
)
4 changes: 2 additions & 2 deletions core/spec/lib/spree/core/validators/email_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
require 'rails_helper'
require 'spree/core/validators/email'

RSpec.describe EmailValidator do
RSpec.describe Spree::EmailValidator do
class Tester
include ActiveModel::Validations
attr_accessor :email_address
validates :email_address, email: true
validates :email_address, 'spree/email' => true
end

let(:valid_emails) {
Expand Down

0 comments on commit 6d8fd3c

Please sign in to comment.